SessionManager and UI Fix

This commit is contained in:
MaxKey 2022-05-22 19:52:29 +08:00
parent f22e71c1ef
commit 853f45a315
52 changed files with 1168 additions and 1456 deletions

View File

@ -275,9 +275,6 @@ subprojects {
implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}"
//spring-session
implementation group: 'org.springframework.session', name: 'spring-session-core', version: "${springSessionVersion}"
implementation group: 'org.springframework.session', name: 'spring-session-data-redis', version: "${springSessionVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}"

View File

@ -240,9 +240,6 @@ subprojects {
implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}"
//spring-session
implementation group: 'org.springframework.session', name: 'spring-session-core', version: "${springSessionVersion}"
implementation group: 'org.springframework.session', name: 'spring-session-data-redis', version: "${springSessionVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}"

View File

@ -240,9 +240,6 @@ subprojects {
implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}"
//spring-session
implementation group: 'org.springframework.session', name: 'spring-session-core', version: "${springSessionVersion}"
implementation group: 'org.springframework.session', name: 'spring-session-data-redis', version: "${springSessionVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}"

View File

@ -275,9 +275,6 @@ subprojects {
implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-commons', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: "${springDataVersion}"
implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}" implementation group: 'org.springframework.data', name: 'spring-data-redis', version: "${springDataVersion}"
//spring-session
implementation group: 'org.springframework.session', name: 'spring-session-core', version: "${springSessionVersion}"
implementation group: 'org.springframework.session', name: 'spring-session-data-redis', version: "${springSessionVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-core', version: "${springplugincoreVersion}"
//implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}" //implementation group: 'org.springframework.plugin', name: 'spring-plugin-metadata', version: "${springpluginmetadataVersion}"

View File

@ -63,8 +63,8 @@ tomcatVersion =9.0.62
tomcatembedloggingjuliVersion =8.5.2 tomcatembedloggingjuliVersion =8.5.2
#spring #spring
springVersion =5.3.20 springVersion =5.3.20
springBootVersion =2.6.7 springBootVersion =2.6.8
springSecurityVersion =5.6.4 springSecurityVersion =5.6.5
springDataVersion =2.6.4 springDataVersion =2.6.4
springSessionVersion =2.6.3 springSessionVersion =2.6.3
springkafkaVersion =2.8.2 springkafkaVersion =2.8.2
@ -95,8 +95,8 @@ knife4jVersion =3.0.3
#database #database
postgresqlVersion =42.3.3 postgresqlVersion =42.3.3
mysqlconnectorjavaVersion =8.0.26 mysqlconnectorjavaVersion =8.0.26
druidVersion =1.2.8 druidVersion =1.2.9
druidspringbootstarterVersion =1.2.8 druidspringbootstarterVersion =1.2.9
jedisVersion =3.8.0 jedisVersion =3.8.0
ehcacheVersion =3.9.6 ehcacheVersion =3.9.6
caffeineVersion =2.9.2 caffeineVersion =2.9.2

View File

@ -17,8 +17,7 @@
package org.maxkey.authn.session; package org.maxkey.authn.session;
import java.time.Duration; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -43,6 +42,7 @@ public class InMemorySessionManager implements SessionManager{
public InMemorySessionManager(int validitySeconds) { public InMemorySessionManager(int validitySeconds) {
super(); super();
this.validitySeconds = validitySeconds;
sessionStore = sessionStore =
Caffeine.newBuilder() Caffeine.newBuilder()
.expireAfterWrite(validitySeconds, TimeUnit.SECONDS) .expireAfterWrite(validitySeconds, TimeUnit.SECONDS)
@ -53,6 +53,7 @@ public class InMemorySessionManager implements SessionManager{
@Override @Override
public void create(String sessionId, Session session) { public void create(String sessionId, Session session) {
session.setExpiredTime(session.getLastAccessTime().plusSeconds(validitySeconds));
sessionStore.put(sessionId, session); sessionStore.put(sessionId, session);
} }
@ -70,10 +71,15 @@ public class InMemorySessionManager implements SessionManager{
} }
@Override @Override
public Session refresh(String sessionId,LocalTime refreshTime) { public Session refresh(String sessionId,LocalDateTime refreshTime) {
Session session = get(sessionId); Session session = get(sessionId);
if(session != null) {
_logger.debug("refresh session Id {} at refreshTime {}",sessionId,refreshTime);
session.setLastAccessTime(refreshTime); session.setLastAccessTime(refreshTime);
//invalidate sessionId then renew one
sessionStore.invalidate(sessionId);
create(sessionId , session); create(sessionId , session);
}
return session; return session;
} }
@ -81,18 +87,21 @@ public class InMemorySessionManager implements SessionManager{
public Session refresh(String sessionId) { public Session refresh(String sessionId) {
Session session = get(sessionId); Session session = get(sessionId);
LocalTime currentTime = LocalTime.now(); if(session != null) {
Duration duration = Duration.between(currentTime, session.getLastAccessTime()); LocalDateTime currentTime = LocalDateTime.now();
_logger.debug("refresh session Id {} at time {}",sessionId,currentTime);
_logger.trace("Session duration " + duration.getSeconds());
if(duration.getSeconds() > Session.MAX_EXPIRY_DURATION) {
session.setLastAccessTime(currentTime); session.setLastAccessTime(currentTime);
return refresh(sessionId,currentTime); //invalidate sessionId then renew one
sessionStore.invalidate(sessionId);
create(sessionId , session);
} }
return session; return session;
} }
public int getValiditySeconds() {
return validitySeconds;
}
@Override @Override
public List<HistoryLogin> querySessions() { public List<HistoryLogin> querySessions() {
// TODO Auto-generated method stub // TODO Auto-generated method stub

View File

@ -17,8 +17,7 @@
package org.maxkey.authn.session; package org.maxkey.authn.session;
import java.time.Duration; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List; import java.util.List;
import org.maxkey.entity.HistoryLogin; import org.maxkey.entity.HistoryLogin;
@ -65,6 +64,7 @@ public class RedisSessionManager implements SessionManager {
@Override @Override
public void create(String sessionId, Session session) { public void create(String sessionId, Session session) {
session.setExpiredTime(session.getLastAccessTime().plusSeconds(validitySeconds));
RedisConnection conn = connectionFactory.getConnection(); RedisConnection conn = connectionFactory.getConnection();
conn.setexObject( getKey(sessionId), validitySeconds, session); conn.setexObject( getKey(sessionId), validitySeconds, session);
conn.close(); conn.close();
@ -97,25 +97,24 @@ public class RedisSessionManager implements SessionManager {
} }
@Override @Override
public Session refresh(String sessionId,LocalTime refreshTime) { public Session refresh(String sessionId,LocalDateTime refreshTime) {
Session session = get(sessionId); Session session = get(sessionId);
if(session != null) {
_logger.debug("refresh session Id {} at {}",sessionId,refreshTime);
session.setLastAccessTime(refreshTime); session.setLastAccessTime(refreshTime);
create(sessionId , session); create(sessionId , session);
}
return session; return session;
} }
@Override @Override
public Session refresh(String sessionId) { public Session refresh(String sessionId) {
Session session = get(sessionId); Session session = get(sessionId);
if(session != null) {
LocalTime currentTime = LocalTime.now(); LocalDateTime currentTime = LocalDateTime.now();
Duration duration = Duration.between(currentTime, session.getLastAccessTime()); _logger.debug("refresh session Id {} at time {}",sessionId,currentTime);
_logger.trace("Session duration " + duration.getSeconds());
if(duration.getSeconds() > Session.MAX_EXPIRY_DURATION) {
session.setLastAccessTime(currentTime); session.setLastAccessTime(currentTime);
return refresh(sessionId,currentTime); create(sessionId , session);
} }
return session; return session;
} }

View File

@ -18,7 +18,7 @@
package org.maxkey.authn.session; package org.maxkey.authn.session;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
import org.maxkey.entity.apps.Apps; import org.maxkey.entity.apps.Apps;
@ -34,9 +34,11 @@ public class Session implements Serializable{
public String id; public String id;
public LocalTime startTimestamp; public LocalDateTime startTimestamp;
public LocalTime lastAccessTime; public LocalDateTime lastAccessTime;
public LocalDateTime expiredTime;
public Authentication authentication; public Authentication authentication;
@ -45,23 +47,23 @@ public class Session implements Serializable{
public Session() { public Session() {
super(); super();
this.id = WebContext.genId();; this.id = WebContext.genId();;
this.startTimestamp = LocalTime.now(); this.startTimestamp = LocalDateTime.now();
this.lastAccessTime = LocalTime.now(); this.lastAccessTime = LocalDateTime.now();
} }
public Session(String sessionId) { public Session(String sessionId) {
super(); super();
this.id = sessionId; this.id = sessionId;
this.startTimestamp = LocalTime.now(); this.startTimestamp = LocalDateTime.now();
this.lastAccessTime = LocalTime.now(); this.lastAccessTime = LocalDateTime.now();
} }
public Session(String sessionId,Authentication authentication) { public Session(String sessionId,Authentication authentication) {
super(); super();
this.id = sessionId; this.id = sessionId;
this.authentication = authentication; this.authentication = authentication;
this.startTimestamp = LocalTime.now(); this.startTimestamp = LocalDateTime.now();
this.lastAccessTime = LocalTime.now(); this.lastAccessTime = LocalDateTime.now();
} }
public String getId() { public String getId() {
@ -77,22 +79,30 @@ public class Session implements Serializable{
} }
public LocalTime getStartTimestamp() { public LocalDateTime getStartTimestamp() {
return startTimestamp; return startTimestamp;
} }
public void setStartTimestamp(LocalTime startTimestamp) { public void setStartTimestamp(LocalDateTime startTimestamp) {
this.startTimestamp = startTimestamp; this.startTimestamp = startTimestamp;
} }
public LocalTime getLastAccessTime() { public LocalDateTime getLastAccessTime() {
return lastAccessTime; return lastAccessTime;
} }
public void setLastAccessTime(LocalTime lastAccessTime) { public void setLastAccessTime(LocalDateTime lastAccessTime) {
this.lastAccessTime = lastAccessTime; this.lastAccessTime = lastAccessTime;
} }
public LocalDateTime getExpiredTime() {
return expiredTime;
}
public void setExpiredTime(LocalDateTime expiredTime) {
this.expiredTime = expiredTime;
}
public Authentication getAuthentication() { public Authentication getAuthentication() {
return authentication; return authentication;
} }

View File

@ -17,7 +17,7 @@
package org.maxkey.authn.session; package org.maxkey.authn.session;
import java.time.LocalTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import org.maxkey.entity.HistoryLogin; import org.maxkey.entity.HistoryLogin;
@ -30,11 +30,13 @@ public interface SessionManager {
public Session get(String sessionId); public Session get(String sessionId);
public Session refresh(String sessionId ,LocalTime refreshTime); public Session refresh(String sessionId ,LocalDateTime refreshTime);
public Session refresh(String sessionId); public Session refresh(String sessionId);
public List<HistoryLogin> querySessions(); public List<HistoryLogin> querySessions();
public int getValiditySeconds();
public void terminate(String sessionId,String userId,String username); public void terminate(String sessionId,String userId,String username);
} }

View File

@ -20,7 +20,7 @@ package org.maxkey.authn.session;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Types; import java.sql.Types;
import java.time.LocalTime; import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -34,6 +34,14 @@ import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
/**
* SessionManager
* Level 1 in memory,store in Caffeine
* Level 2 in Redis
* user session status in database
* @author shimh
*
*/
public class SessionManagerFactory implements SessionManager{ public class SessionManagerFactory implements SessionManager{
private static final Logger _logger = private static final Logger _logger =
LoggerFactory.getLogger(SessionManagerFactory.class); LoggerFactory.getLogger(SessionManagerFactory.class);
@ -55,10 +63,13 @@ public class SessionManagerFactory implements SessionManager{
private boolean isRedis = false; private boolean isRedis = false;
private int validitySeconds ;
public SessionManagerFactory(int persistence, public SessionManagerFactory(int persistence,
JdbcTemplate jdbcTemplate, JdbcTemplate jdbcTemplate,
RedisConnectionFactory redisConnFactory, RedisConnectionFactory redisConnFactory,
int validitySeconds) { int validitySeconds) {
this.validitySeconds = validitySeconds;
this.jdbcTemplate = jdbcTemplate; this.jdbcTemplate = jdbcTemplate;
this.inMemorySessionManager = this.inMemorySessionManager =
new InMemorySessionManager(validitySeconds); new InMemorySessionManager(validitySeconds);
@ -94,11 +105,12 @@ public class SessionManagerFactory implements SessionManager{
return session; return session;
} }
public Session refresh(String sessionId, LocalTime refreshTime) { public Session refresh(String sessionId, LocalDateTime refreshTime) {
Session session = null; Session session = null;
if(isRedis) { if(isRedis) {
session = redisSessionManager.refresh(sessionId,refreshTime); session = redisSessionManager.refresh(sessionId,refreshTime);
//renew one //renew one
inMemorySessionManager.remove(sessionId);
inMemorySessionManager.create(sessionId, session); inMemorySessionManager.create(sessionId, session);
}else { }else {
session = inMemorySessionManager.refresh(sessionId,refreshTime); session = inMemorySessionManager.refresh(sessionId,refreshTime);
@ -111,6 +123,7 @@ public class SessionManagerFactory implements SessionManager{
if(isRedis) { if(isRedis) {
session = redisSessionManager.refresh(sessionId); session = redisSessionManager.refresh(sessionId);
//renew one //renew one
inMemorySessionManager.remove(sessionId);
inMemorySessionManager.create(sessionId, session); inMemorySessionManager.create(sessionId, session);
}else { }else {
session = inMemorySessionManager.refresh(sessionId); session = inMemorySessionManager.refresh(sessionId);
@ -142,12 +155,16 @@ public class SessionManagerFactory implements SessionManager{
public void terminate(String sessionId, String userId, String username) { public void terminate(String sessionId, String userId, String username) {
String lastLogoffTime = DateUtils.formatDateTime(new Date()); String lastLogoffTime = DateUtils.formatDateTime(new Date());
_logger.trace("{} user {} terminate Ticket {} ." ,lastLogoffTime,username, sessionId); _logger.trace("{} user {} terminate session {} ." ,lastLogoffTime,username, sessionId);
this.profileLastLogoffTime(userId, lastLogoffTime); this.profileLastLogoffTime(userId, lastLogoffTime);
this.sessionLogoff(sessionId, lastLogoffTime); this.sessionLogoff(sessionId, lastLogoffTime);
this.remove(sessionId); this.remove(sessionId);
} }
public int getValiditySeconds() {
return validitySeconds;
}
private final class OnlineTicketRowMapper implements RowMapper<HistoryLogin> { private final class OnlineTicketRowMapper implements RowMapper<HistoryLogin> {
@Override @Override
public HistoryLogin mapRow(ResultSet rs, int rowNum) public HistoryLogin mapRow(ResultSet rs, int rowNum)

View File

@ -35,8 +35,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
@Controller @Controller
@RequestMapping(value = "/auth") @RequestMapping(value = "/auth")
public class LoginRefreshPoint { public class LoginTokenRefreshPoint {
private static final Logger _logger = LoggerFactory.getLogger(LoginRefreshPoint.class); private static final Logger _logger = LoggerFactory.getLogger(LoginTokenRefreshPoint.class);
@Autowired @Autowired
AuthTokenService authTokenService; AuthTokenService authTokenService;

View File

@ -1,18 +0,0 @@
/*
* Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.maxkey.authn.web;

View File

@ -202,7 +202,7 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
RedisConnectionFactory redisConnFactory, RedisConnectionFactory redisConnFactory,
@Value("${maxkey.session.timeout:1800}") int timeout @Value("${maxkey.session.timeout:1800}") int timeout
) { ) {
_logger.trace("session timeout " + timeout); _logger.debug("session timeout " + timeout);
SessionManager sessionManager = SessionManager sessionManager =
new SessionManagerFactory( new SessionManagerFactory(
persistence, jdbcTemplate, redisConnFactory,timeout); persistence, jdbcTemplate, redisConnFactory,timeout);

View File

@ -49,9 +49,14 @@ public class GroupPrivileges extends Apps implements Serializable{
String id; String id;
@Column @Column
private String groupId; private String groupId;
private String groupName;
@Column @Column
private String appId; private String appId;
private String appName;
@Column @Column
private String instId; private String instId;
@ -130,6 +135,26 @@ public class GroupPrivileges extends Apps implements Serializable{
} }
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
@Override @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();

View File

@ -128,7 +128,7 @@ public class PasswordPolicyValidator {
DateTime badPasswordTime = DateTime.parse(badPasswordTimeString, DateTime badPasswordTime = DateTime.parse(badPasswordTimeString,
DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")); DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
Duration duration = new Duration(badPasswordTime, currentdateTime); Duration duration = new Duration(badPasswordTime, currentdateTime);
int intDuration = Integer.parseInt(duration.getStandardHours() + ""); int intDuration = Integer.parseInt(duration.getStandardMinutes() + "");
_logger.debug("bad Password duration {} , " + _logger.debug("bad Password duration {} , " +
"password policy Duration {} , "+ "password policy Duration {} , "+
"validate result {}" , "validate result {}" ,

View File

@ -1,48 +1,48 @@
#password #password
PasswordPolicy.HISTORY_VIOLATION=\u5bc6\u7801\u5339\u914d\u4e86{0}\u5386\u53f2\u5bc6\u7801. PasswordPolicy.HISTORY_VIOLATION=\u5BC6\u7801\u5339\u914D\u4E86{0}\u5386\u53F2\u5BC6\u7801.
PasswordPolicy.ILLEGAL_WORD=\u5bc6\u7801\u5305\u542b\u5728\u5bc6\u7801\u5b57\u5178{0}. PasswordPolicy.ILLEGAL_WORD=\u5BC6\u7801\u5305\u542B\u5728\u5BC6\u7801\u5B57\u5178{0}.
PasswordPolicy.ILLEGAL_WORD_REVERSED=\u5bc6\u7801\u5305\u542b\u5728\u5bc6\u7801\u5b57\u5178\u5012\u5e8f{0}. PasswordPolicy.ILLEGAL_WORD_REVERSED=\u5BC6\u7801\u5305\u542B\u5728\u5BC6\u7801\u5B57\u5178\u5012\u5E8F{0}.
PasswordPolicy.ILLEGAL_DIGEST_WORD=\u5bc6\u7801\u5305\u542b\u5728\u5b57\u5178\u4e2d. PasswordPolicy.ILLEGAL_DIGEST_WORD=\u5BC6\u7801\u5305\u542B\u5728\u5B57\u5178\u4E2D.
PasswordPolicy.ILLEGAL_DIGEST_WORD_REVERSED=\u5bc6\u7801\u5305\u542b\u5728\u5b57\u5178\u5012\u5e8f\u4e2d. PasswordPolicy.ILLEGAL_DIGEST_WORD_REVERSED=\u5BC6\u7801\u5305\u542B\u5728\u5B57\u5178\u5012\u5E8F\u4E2D.
PasswordPolicy.ILLEGAL_MATCH=\u5bc6\u7801\u5339\u914d\u975e\u6cd5\u89c4\u5219{0}. PasswordPolicy.ILLEGAL_MATCH=\u5BC6\u7801\u5339\u914D\u975E\u6CD5\u89C4\u5219{0}.
PasswordPolicy.ALLOWED_MATCH=\u5bc6\u7801\u5fc5\u987b\u5339\u914d\u89c4\u5219{0}. PasswordPolicy.ALLOWED_MATCH=\u5BC6\u7801\u5FC5\u987B\u5339\u914D\u89C4\u5219{0}.
PasswordPolicy.ILLEGAL_CHAR=\u5bc6\u7801{1}\u5305\u542b\u975e\u6cd5\u5b57\u7b26{0}. PasswordPolicy.ILLEGAL_CHAR=\u5BC6\u7801{1}\u5305\u542B\u975E\u6CD5\u5B57\u7B26{0}.
PasswordPolicy.ALLOWED_CHAR=\u5bc6\u7801{1}\u975e\u6cd5\u5b57\u7b26{0}. PasswordPolicy.ALLOWED_CHAR=\u5BC6\u7801{1}\u975E\u6CD5\u5B57\u7B26{0}.
PasswordPolicy.ILLEGAL_QWERTY_SEQUENCE=\u5bc6\u7801\u5305\u542b\u952e\u76d8\u5e8f\u5217{0}. PasswordPolicy.ILLEGAL_QWERTY_SEQUENCE=\u5BC6\u7801\u5305\u542B\u952E\u76D8\u5E8F\u5217{0}.
PasswordPolicy.ILLEGAL_ALPHABETICAL_SEQUENCE=\u5bc6\u7801\u5305\u542b\u5b57\u7b26\u5e8f\u5217{0}. PasswordPolicy.ILLEGAL_ALPHABETICAL_SEQUENCE=\u5BC6\u7801\u5305\u542B\u5B57\u7B26\u5E8F\u5217{0}.
PasswordPolicy.ILLEGAL_NUMERICAL_SEQUENCE=\u5bc6\u7801\u5305\u542b\u6570\u5b57\u5e8f\u5217{0}. PasswordPolicy.ILLEGAL_NUMERICAL_SEQUENCE=\u5BC6\u7801\u5305\u542B\u6570\u5B57\u5E8F\u5217{0}.
PasswordPolicy.ILLEGAL_USERNAME=\u5bc6\u7801\u4e0d\u80fd\u5305\u542b\u767b\u5f55\u540d{0}. PasswordPolicy.ILLEGAL_USERNAME=\u5BC6\u7801\u4E0D\u80FD\u5305\u542B\u767B\u5F55\u540D{0}.
PasswordPolicy.ILLEGAL_USERNAME_REVERSED=\u5bc6\u7801{1} \u5305\u542b\u767b\u5f55\u540d{0}\u5012\u5e8f. PasswordPolicy.ILLEGAL_USERNAME_REVERSED=\u5BC6\u7801{1} \u5305\u542B\u767B\u5F55\u540D{0}\u5012\u5E8F.
PasswordPolicy.ILLEGAL_WHITESPACE=\u5bc6\u7801{1}\u5305\u542b\u7a7a\u683c. PasswordPolicy.ILLEGAL_WHITESPACE=\u5BC6\u7801{1}\u5305\u542B\u7A7A\u683C.
PasswordPolicy.ILLEGAL_NUMBER_RANGE=\u5bc6\u7801{1}\u6570\u5b57 {0}. PasswordPolicy.ILLEGAL_NUMBER_RANGE=\u5BC6\u7801{1}\u6570\u5B57 {0}.
PasswordPolicy.ILLEGAL_REPEATED_CHARS=\u5bc6\u7801{2}\u5e8f\u5217{0}\u6216\u8005\u591a\u4e2a\u5b57\u7b26, \u4f46{1}\u5141\u8bb8:{3}\u6b21. PasswordPolicy.ILLEGAL_REPEATED_CHARS=\u5BC6\u7801{2}\u5E8F\u5217{0}\u6216\u8005\u591A\u4E2A\u5B57\u7B26, \u4F46{1}\u5141\u8BB8:{3}\u6B21.
PasswordPolicy.INSUFFICIENT_UPPERCASE=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u5927\u5199\u5b57\u6bcd. PasswordPolicy.INSUFFICIENT_UPPERCASE=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u5927\u5199\u5B57\u6BCD.
PasswordPolicy.INSUFFICIENT_LOWERCASE=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u5c0f\u5199\u5b57\u6bcd. PasswordPolicy.INSUFFICIENT_LOWERCASE=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u5C0F\u5199\u5B57\u6BCD.
PasswordPolicy.INSUFFICIENT_ALPHABETICAL=\u5bc6\u7801\u5305\u542b\u5b57\u7b26\u5e8f\u5217{0}. PasswordPolicy.INSUFFICIENT_ALPHABETICAL=\u5BC6\u7801\u5305\u542B\u5B57\u7B26\u5E8F\u5217{0}.
PasswordPolicy.INSUFFICIENT_DIGIT=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u6570\u5b57\u5b57\u6bcd. PasswordPolicy.INSUFFICIENT_DIGIT=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u6570\u5B57\u5B57\u6BCD.
PasswordPolicy.INSUFFICIENT_SPECIAL=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u7279\u6b8a\u5b57\u7b26. PasswordPolicy.INSUFFICIENT_SPECIAL=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u7279\u6B8A\u5B57\u7B26.
PasswordPolicy.INSUFFICIENT_CHARACTERISTICS=\u5bc6\u7801\u5339\u914d {0} of{2}\u5b57\u7b26\u89c4\u5219, \u4f46{1} \u5fc5\u987b. PasswordPolicy.INSUFFICIENT_CHARACTERISTICS=\u5BC6\u7801\u5339\u914D {0} of{2}\u5B57\u7B26\u89C4\u5219, \u4F46{1} \u5FC5\u987B.
PasswordPolicy.INSUFFICIENT_COMPLEXITY=\u5bc6\u7801\u9047\u5230{1}\u590d\u6742\u89c4\u5219, \u4f46{2}\u5fc5\u987b. PasswordPolicy.INSUFFICIENT_COMPLEXITY=\u5BC6\u7801\u9047\u5230{1}\u590D\u6742\u89C4\u5219, \u4F46{2}\u5FC5\u987B.
PasswordPolicy.INSUFFICIENT_COMPLEXITY_RULES=\u6ca1\u6709\u914d\u7f6e\u5bc6\u7801\u957f\u5ea6\u89c4\u5219 {0}. PasswordPolicy.INSUFFICIENT_COMPLEXITY_RULES=\u6CA1\u6709\u914D\u7F6E\u5BC6\u7801\u957F\u5EA6\u89C4\u5219 {0}.
PasswordPolicy.SOURCE_VIOLATION=\u5bc6\u7801\u4e0d\u80fd\u5305\u542b{0}\u5bc6\u7801. PasswordPolicy.SOURCE_VIOLATION=\u5BC6\u7801\u4E0D\u80FD\u5305\u542B{0}\u5BC6\u7801.
PasswordPolicy.TOO_LONG=\u5bc6\u7801\u6700\u591a{1}\u4f4d\u5b57\u7b26. PasswordPolicy.TOO_LONG=\u5BC6\u7801\u6700\u591A{1}\u4F4D\u5B57\u7B26.
PasswordPolicy.TOO_SHORT=\u5bc6\u7801\u81f3\u5c11{0}\u4f4d\u5b57\u7b26. PasswordPolicy.TOO_SHORT=\u5BC6\u7801\u81F3\u5C11{0}\u4F4D\u5B57\u7B26.
PasswordPolicy.TOO_MANY_OCCURRENCES=\u5bc6\u7801\u5305\u542b{0}\u51fa\u73b0{1}, \u6700\u591a{2} \u6b21. PasswordPolicy.TOO_MANY_OCCURRENCES=\u5BC6\u7801\u5305\u542B{0}\u51FA\u73B0{1}, \u6700\u591A{2} \u6B21.
PasswordPolicy.OLD_PASSWORD_NOT_MATCH=\u539f\u5bc6\u7801\u4e0d\u5339\u914d. PasswordPolicy.OLD_PASSWORD_NOT_MATCH=\u539F\u5BC6\u7801\u4E0D\u5339\u914D.
PasswordPolicy.CONFIRMPASSWORD_NOT_MATCH=\u65b0\u5bc6\u7801\u4e0e\u786e\u8ba4\u5bc6\u7801\u4e0d\u4e00\u81f4. PasswordPolicy.CONFIRMPASSWORD_NOT_MATCH=\u65B0\u5BC6\u7801\u4E0E\u786E\u8BA4\u5BC6\u7801\u4E0D\u4E00\u81F4.
PasswordPolicy.OLD_PASSWORD_MATCH=\u65b0\u5bc6\u7801\u4e0d\u80fd\u4e0e\u65e7\u5bc6\u7801\u4e00\u81f4. PasswordPolicy.OLD_PASSWORD_MATCH=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u4E00\u81F4.
#\u7528\u6237\u767b\u5f55\u9519\u8bef\u63d0\u9192 #\u7528\u6237\u767B\u5F55\u9519\u8BEF\u63D0\u9192
login.error.attempts=\u767B\u5F55\u9519\u8BEF\u8fbe\u6700\u5927\u9650\u5236{0}\u6b21,\u8bf7{1}\u5C0F\u65F6\u540e\u91CD\u8BD5. login.error.attempts=\u767B\u5F55\u9519\u8BEF\u8FBE\u6700\u5927\u9650\u5236{0}\u6B21,\u8BF7{1}\u5206\u949F\u540E\u91CD\u8BD5.
login.error.locked=\u7528\u6237\u88ab\u9501\u5b9a. login.error.locked=\u7528\u6237\u88AB\u9501\u5B9A.
login.error.inactive=\u7528\u6237\u975e\u6d3b\u52a8\u72b6\u6001. login.error.inactive=\u7528\u6237\u975E\u6D3B\u52A8\u72B6\u6001.
login.error.password=\u7528\u6237\u540D\u6216\u5bc6\u7801\u65e0\u6548. login.error.password=\u7528\u6237\u540D\u6216\u5BC6\u7801\u65E0\u6548.
login.error.password.attempts=\u767B\u5F55\u5931\u8D25{0}\u6B21, \u5931\u8D25{1}\u6B21\u5C06\u9501\u5B9A{2}\u5C0F\u65F6. login.error.password.attempts=\u767B\u5F55\u5931\u8D25{0}\u6B21, \u5931\u8D25{1}\u6B21\u5C06\u9501\u5B9A{2}\u5206\u949F.
login.error.username=\u7528\u6237\u540D\u6216\u5bc6\u7801\u65e0\u6548. login.error.username=\u7528\u6237\u540D\u6216\u5BC6\u7801\u65E0\u6548.
login.error.username.null=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a. login.error.username.null=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A.
login.error.email.null=\u767b\u5f55\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a. login.error.email.null=\u767B\u5F55\u90AE\u7BB1\u4E0D\u80FD\u4E3A\u7A7A.
login.error.password.null=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a. login.error.password.null=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A.
login.error.captcha=\u9a8c\u8bc1\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u767B\u5F55. login.error.captcha=\u9A8C\u8BC1\u7801\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55.
login.error.authtype=\u767b\u5f55\u8ba4\u8bc1\u7c7b\u578b\u9519\u8bef. login.error.authtype=\u767B\u5F55\u8BA4\u8BC1\u7C7B\u578B\u9519\u8BEF.
login.error.session=\u767b\u5f55\u4f1a\u8bdd\u5931\u6548\uff0c\u8bf7\u91cd\u65b0\u767b\u9646. login.error.session=\u767B\u5F55\u4F1A\u8BDD\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u9646.
login.error.social=\u793e\u4ea4\u8d26\u53f7\u6388\u6743\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5. login.error.social=\u793E\u4EA4\u8D26\u53F7\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5.

View File

@ -33,11 +33,11 @@ PasswordPolicy.CONFIRMPASSWORD_NOT_MATCH=new password not match confirm password
PasswordPolicy.OLD_PASSWORD_MATCH=new password match old password. PasswordPolicy.OLD_PASSWORD_MATCH=new password match old password.
#for user login #for user login
login.error.attempts=login attempts the maximum {0} times, please login {1} hours later. login.error.attempts=login attempts the maximum {0} times, please login {1} minutes later.
login.error.locked=The user is locked. login.error.locked=The user is locked.
login.error.inactive=User inactive state. login.error.inactive=User inactive state.
login.error.password=Invalid username or password. login.error.password=Invalid username or password.
login.error.password.attempts=login fail {0} times, fail {1} times will lock {2} hours. login.error.password.attempts=login fail {0} times, fail {1} times will lock {2} minutes.
login.error.username=Invalid username or password. login.error.username=Invalid username or password.
login.error.username.null=username cannot be empty. login.error.username.null=username cannot be empty.
login.error.email.null=email cannot be empty. login.error.email.null=email cannot be empty.

View File

@ -1,48 +1,48 @@
#password #password
PasswordPolicy.HISTORY_VIOLATION=\u5bc6\u7801\u5339\u914d\u4e86{0}\u5386\u53f2\u5bc6\u7801. PasswordPolicy.HISTORY_VIOLATION=\u5BC6\u7801\u5339\u914D\u4E86{0}\u5386\u53F2\u5BC6\u7801.
PasswordPolicy.ILLEGAL_WORD=\u5bc6\u7801\u5305\u542b\u5728\u5bc6\u7801\u5b57\u5178{0}. PasswordPolicy.ILLEGAL_WORD=\u5BC6\u7801\u5305\u542B\u5728\u5BC6\u7801\u5B57\u5178{0}.
PasswordPolicy.ILLEGAL_WORD_REVERSED=\u5bc6\u7801\u5305\u542b\u5728\u5bc6\u7801\u5b57\u5178\u5012\u5e8f{0}. PasswordPolicy.ILLEGAL_WORD_REVERSED=\u5BC6\u7801\u5305\u542B\u5728\u5BC6\u7801\u5B57\u5178\u5012\u5E8F{0}.
PasswordPolicy.ILLEGAL_DIGEST_WORD=\u5bc6\u7801\u5305\u542b\u5728\u5b57\u5178\u4e2d. PasswordPolicy.ILLEGAL_DIGEST_WORD=\u5BC6\u7801\u5305\u542B\u5728\u5B57\u5178\u4E2D.
PasswordPolicy.ILLEGAL_DIGEST_WORD_REVERSED=\u5bc6\u7801\u5305\u542b\u5728\u5b57\u5178\u5012\u5e8f\u4e2d. PasswordPolicy.ILLEGAL_DIGEST_WORD_REVERSED=\u5BC6\u7801\u5305\u542B\u5728\u5B57\u5178\u5012\u5E8F\u4E2D.
PasswordPolicy.ILLEGAL_MATCH=\u5bc6\u7801\u5339\u914d\u975e\u6cd5\u89c4\u5219{0}. PasswordPolicy.ILLEGAL_MATCH=\u5BC6\u7801\u5339\u914D\u975E\u6CD5\u89C4\u5219{0}.
PasswordPolicy.ALLOWED_MATCH=\u5bc6\u7801\u5fc5\u987b\u5339\u914d\u89c4\u5219{0}. PasswordPolicy.ALLOWED_MATCH=\u5BC6\u7801\u5FC5\u987B\u5339\u914D\u89C4\u5219{0}.
PasswordPolicy.ILLEGAL_CHAR=\u5bc6\u7801{1}\u5305\u542b\u975e\u6cd5\u5b57\u7b26{0}. PasswordPolicy.ILLEGAL_CHAR=\u5BC6\u7801{1}\u5305\u542B\u975E\u6CD5\u5B57\u7B26{0}.
PasswordPolicy.ALLOWED_CHAR=\u5bc6\u7801{1}\u975e\u6cd5\u5b57\u7b26{0}. PasswordPolicy.ALLOWED_CHAR=\u5BC6\u7801{1}\u975E\u6CD5\u5B57\u7B26{0}.
PasswordPolicy.ILLEGAL_QWERTY_SEQUENCE=\u5bc6\u7801\u5305\u542b\u952e\u76d8\u5e8f\u5217{0}. PasswordPolicy.ILLEGAL_QWERTY_SEQUENCE=\u5BC6\u7801\u5305\u542B\u952E\u76D8\u5E8F\u5217{0}.
PasswordPolicy.ILLEGAL_ALPHABETICAL_SEQUENCE=\u5bc6\u7801\u5305\u542b\u5b57\u7b26\u5e8f\u5217{0}. PasswordPolicy.ILLEGAL_ALPHABETICAL_SEQUENCE=\u5BC6\u7801\u5305\u542B\u5B57\u7B26\u5E8F\u5217{0}.
PasswordPolicy.ILLEGAL_NUMERICAL_SEQUENCE=\u5bc6\u7801\u5305\u542b\u6570\u5b57\u5e8f\u5217{0}. PasswordPolicy.ILLEGAL_NUMERICAL_SEQUENCE=\u5BC6\u7801\u5305\u542B\u6570\u5B57\u5E8F\u5217{0}.
PasswordPolicy.ILLEGAL_USERNAME=\u5bc6\u7801\u4e0d\u80fd\u5305\u542b\u767b\u5f55\u540d{0}. PasswordPolicy.ILLEGAL_USERNAME=\u5BC6\u7801\u4E0D\u80FD\u5305\u542B\u767B\u5F55\u540D{0}.
PasswordPolicy.ILLEGAL_USERNAME_REVERSED=\u5bc6\u7801{1} \u5305\u542b\u767b\u5f55\u540d{0}\u5012\u5e8f. PasswordPolicy.ILLEGAL_USERNAME_REVERSED=\u5BC6\u7801{1} \u5305\u542B\u767B\u5F55\u540D{0}\u5012\u5E8F.
PasswordPolicy.ILLEGAL_WHITESPACE=\u5bc6\u7801{1}\u5305\u542b\u7a7a\u683c. PasswordPolicy.ILLEGAL_WHITESPACE=\u5BC6\u7801{1}\u5305\u542B\u7A7A\u683C.
PasswordPolicy.ILLEGAL_NUMBER_RANGE=\u5bc6\u7801{1}\u6570\u5b57 {0}. PasswordPolicy.ILLEGAL_NUMBER_RANGE=\u5BC6\u7801{1}\u6570\u5B57 {0}.
PasswordPolicy.ILLEGAL_REPEATED_CHARS=\u5bc6\u7801{2}\u5e8f\u5217{0}\u6216\u8005\u591a\u4e2a\u5b57\u7b26, \u4f46{1}\u5141\u8bb8:{3}\u6b21. PasswordPolicy.ILLEGAL_REPEATED_CHARS=\u5BC6\u7801{2}\u5E8F\u5217{0}\u6216\u8005\u591A\u4E2A\u5B57\u7B26, \u4F46{1}\u5141\u8BB8:{3}\u6B21.
PasswordPolicy.INSUFFICIENT_UPPERCASE=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u5927\u5199\u5b57\u6bcd. PasswordPolicy.INSUFFICIENT_UPPERCASE=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u5927\u5199\u5B57\u6BCD.
PasswordPolicy.INSUFFICIENT_LOWERCASE=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u5c0f\u5199\u5b57\u6bcd. PasswordPolicy.INSUFFICIENT_LOWERCASE=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u5C0F\u5199\u5B57\u6BCD.
PasswordPolicy.INSUFFICIENT_ALPHABETICAL=\u5bc6\u7801\u5305\u542b\u5b57\u7b26\u5e8f\u5217{0}. PasswordPolicy.INSUFFICIENT_ALPHABETICAL=\u5BC6\u7801\u5305\u542B\u5B57\u7B26\u5E8F\u5217{0}.
PasswordPolicy.INSUFFICIENT_DIGIT=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u6570\u5b57\u5b57\u6bcd. PasswordPolicy.INSUFFICIENT_DIGIT=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u6570\u5B57\u5B57\u6BCD.
PasswordPolicy.INSUFFICIENT_SPECIAL=\u5bc6\u7801\u81f3\u5c11\u5305\u542b{0}\u4f4d\u7279\u6b8a\u5b57\u7b26. PasswordPolicy.INSUFFICIENT_SPECIAL=\u5BC6\u7801\u81F3\u5C11\u5305\u542B{0}\u4F4D\u7279\u6B8A\u5B57\u7B26.
PasswordPolicy.INSUFFICIENT_CHARACTERISTICS=\u5bc6\u7801\u5339\u914d {0} of{2}\u5b57\u7b26\u89c4\u5219, \u4f46{1} \u5fc5\u987b. PasswordPolicy.INSUFFICIENT_CHARACTERISTICS=\u5BC6\u7801\u5339\u914D {0} of{2}\u5B57\u7B26\u89C4\u5219, \u4F46{1} \u5FC5\u987B.
PasswordPolicy.INSUFFICIENT_COMPLEXITY=\u5bc6\u7801\u9047\u5230{1}\u590d\u6742\u89c4\u5219, \u4f46{2}\u5fc5\u987b. PasswordPolicy.INSUFFICIENT_COMPLEXITY=\u5BC6\u7801\u9047\u5230{1}\u590D\u6742\u89C4\u5219, \u4F46{2}\u5FC5\u987B.
PasswordPolicy.INSUFFICIENT_COMPLEXITY_RULES=\u6ca1\u6709\u914d\u7f6e\u5bc6\u7801\u957f\u5ea6\u89c4\u5219 {0}. PasswordPolicy.INSUFFICIENT_COMPLEXITY_RULES=\u6CA1\u6709\u914D\u7F6E\u5BC6\u7801\u957F\u5EA6\u89C4\u5219 {0}.
PasswordPolicy.SOURCE_VIOLATION=\u5bc6\u7801\u4e0d\u80fd\u5305\u542b{0}\u5bc6\u7801. PasswordPolicy.SOURCE_VIOLATION=\u5BC6\u7801\u4E0D\u80FD\u5305\u542B{0}\u5BC6\u7801.
PasswordPolicy.TOO_LONG=\u5bc6\u7801\u6700\u591a{1}\u4f4d\u5b57\u7b26. PasswordPolicy.TOO_LONG=\u5BC6\u7801\u6700\u591A{1}\u4F4D\u5B57\u7B26.
PasswordPolicy.TOO_SHORT=\u5bc6\u7801\u81f3\u5c11{0}\u4f4d\u5b57\u7b26. PasswordPolicy.TOO_SHORT=\u5BC6\u7801\u81F3\u5C11{0}\u4F4D\u5B57\u7B26.
PasswordPolicy.TOO_MANY_OCCURRENCES=\u5bc6\u7801\u5305\u542b{0}\u51fa\u73b0{1}, \u6700\u591a{2} \u6b21. PasswordPolicy.TOO_MANY_OCCURRENCES=\u5BC6\u7801\u5305\u542B{0}\u51FA\u73B0{1}, \u6700\u591A{2} \u6B21.
PasswordPolicy.OLD_PASSWORD_NOT_MATCH=\u539f\u5bc6\u7801\u4e0d\u5339\u914d. PasswordPolicy.OLD_PASSWORD_NOT_MATCH=\u539F\u5BC6\u7801\u4E0D\u5339\u914D.
PasswordPolicy.CONFIRMPASSWORD_NOT_MATCH=\u65b0\u5bc6\u7801\u4e0e\u786e\u8ba4\u5bc6\u7801\u4e0d\u4e00\u81f4. PasswordPolicy.CONFIRMPASSWORD_NOT_MATCH=\u65B0\u5BC6\u7801\u4E0E\u786E\u8BA4\u5BC6\u7801\u4E0D\u4E00\u81F4.
PasswordPolicy.OLD_PASSWORD_MATCH=\u65b0\u5bc6\u7801\u4e0d\u80fd\u4e0e\u65e7\u5bc6\u7801\u4e00\u81f4. PasswordPolicy.OLD_PASSWORD_MATCH=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u4E00\u81F4.
#\u7528\u6237\u767b\u5f55\u9519\u8bef\u63d0\u9192 #\u7528\u6237\u767B\u5F55\u9519\u8BEF\u63D0\u9192
login.error.attempts=\u767B\u5F55\u9519\u8BEF\u8fbe\u6700\u5927\u9650\u5236{0}\u6b21,\u8bf7{1}\u5C0F\u65F6\u540e\u91CD\u8BD5. login.error.attempts=\u767B\u5F55\u9519\u8BEF\u8FBE\u6700\u5927\u9650\u5236{0}\u6B21,\u8BF7{1}\u5206\u949F\u540E\u91CD\u8BD5.
login.error.locked=\u7528\u6237\u88ab\u9501\u5b9a. login.error.locked=\u7528\u6237\u88AB\u9501\u5B9A.
login.error.inactive=\u7528\u6237\u975e\u6d3b\u52a8\u72b6\u6001. login.error.inactive=\u7528\u6237\u975E\u6D3B\u52A8\u72B6\u6001.
login.error.password=\u7528\u6237\u540D\u6216\u5bc6\u7801\u65e0\u6548. login.error.password=\u7528\u6237\u540D\u6216\u5BC6\u7801\u65E0\u6548.
login.error.password.attempts=\u767B\u5F55\u5931\u8D25{0}\u6B21, \u5931\u8D25{1}\u6B21\u5C06\u9501\u5B9A{2}\u5C0F\u65F6. login.error.password.attempts=\u767B\u5F55\u5931\u8D25{0}\u6B21, \u5931\u8D25{1}\u6B21\u5C06\u9501\u5B9A{2}\u5206\u949F.
login.error.username=\u7528\u6237\u540D\u6216\u5bc6\u7801\u65e0\u6548. login.error.username=\u7528\u6237\u540D\u6216\u5BC6\u7801\u65E0\u6548.
login.error.username.null=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a. login.error.username.null=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A.
login.error.email.null=\u767b\u5f55\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a. login.error.email.null=\u767B\u5F55\u90AE\u7BB1\u4E0D\u80FD\u4E3A\u7A7A.
login.error.password.null=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a. login.error.password.null=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A.
login.error.captcha=\u9a8c\u8bc1\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u767B\u5F55. login.error.captcha=\u9A8C\u8BC1\u7801\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55.
login.error.authtype=\u767b\u5f55\u8ba4\u8bc1\u7c7b\u578b\u9519\u8bef. login.error.authtype=\u767B\u5F55\u8BA4\u8BC1\u7C7B\u578B\u9519\u8BEF.
login.error.session=\u767b\u5f55\u4f1a\u8bdd\u5931\u6548\uff0c\u8bf7\u91cd\u65b0\u767b\u9646. login.error.session=\u767B\u5F55\u4F1A\u8BDD\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u9646.
login.error.social=\u793e\u4ea4\u8d26\u53f7\u6388\u6743\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5. login.error.social=\u793E\u4EA4\u8D26\u53F7\u6388\u6743\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5.

View File

@ -143,6 +143,7 @@ public class AccountsService extends JpaBaseService<Accounts>{
account.setRelatedUsername(generateAccount(user,strategy)); account.setRelatedUsername(generateAccount(user,strategy));
account.setRelatedPassword(PasswordReciprocal.getInstance().encode(userInfoService.randomPassword())); account.setRelatedPassword(PasswordReciprocal.getInstance().encode(userInfoService.randomPassword()));
account.setInstId(strategy.getInstId());
account.setCreateType("automatic"); account.setCreateType("automatic");
account.setStatus(ConstsStatus.ACTIVE); account.setStatus(ConstsStatus.ACTIVE);
account.setStrategyId(strategy.getId()); account.setStrategyId(strategy.getId());

View File

@ -22,8 +22,10 @@
select select
gp.id, gp.id,
gp.groupid, gp.groupid,
g.name groupname,
gp.appid, gp.appid,
apps.name, apps.name,
apps.name appname,
apps.icon, apps.icon,
apps.loginurl, apps.loginurl,
apps.protocol, apps.protocol,
@ -33,12 +35,18 @@
apps.vendorurl apps.vendorurl
from from
mxk_apps apps, mxk_apps apps,
mxk_group_privileges gp mxk_group_privileges gp,
mxk_groups g
where where
apps.instid = #{instId} apps.instid = #{instId}
and gp.instid = #{instId} and gp.instid = #{instId}
and g.instid = #{instId}
and gp.appid = apps.id and gp.appid = apps.id
and gp.groupid = g.id
<if test="groupId != null and groupId != ''">
and gp.groupid = #{groupId} and gp.groupid = #{groupId}
and g.id = #{groupId}
</if>
<include refid="where_statement"/> <include refid="where_statement"/>
</select> </select>

View File

@ -37,15 +37,40 @@
<!-- DAY HOUR COUNT 当天每小时 --> <!-- DAY HOUR COUNT 当天每小时 -->
<select id="analysisDayHour" parameterType="java.util.HashMap" resultType="Map"> <select id="analysisDayHour" parameterType="java.util.HashMap" resultType="Map">
select select h.reportstring reportstring, ifnull(c.reportcount, 0) reportcount from (
count(id) reportcount, select 0 reportstring union all
hour(logintime) reportstring select 1 reportstring union all
select 2 reportstring union all
select 3 reportstring union all
select 4 reportstring union all
select 5 reportstring union all
select 6 reportstring union all
select 7 reportstring union all
select 8 reportstring union all
select 9 reportstring union all
select 10 reportstring union all
select 11 reportstring union all
select 12 reportstring union all
select 13 reportstring union all
select 14 reportstring union all
select 15 reportstring union all
select 16 reportstring union all
select 17 reportstring union all
select 18 reportstring union all
select 19 reportstring union all
select 20 reportstring union all
select 21 reportstring union all
select 22 reportstring union all
select 23 reportstring
) h left join(
select count(id) reportcount, hour(logintime) reportstring
from mxk_history_login from mxk_history_login
where instid = #{instId} where instid = #{instId} and date(logintime) =curdate()
and date(logintime) =curdate()
group by reportstring group by reportstring
order by reportstring )c on h.reportstring=c.reportstring
order by h.reportstring
</select> </select>
<!-- 30 DAY COUNT 最近30天每天访问量--> <!-- 30 DAY COUNT 最近30天每天访问量-->
<select id="analysisMonth" parameterType="java.util.HashMap" resultType="Map"> <select id="analysisMonth" parameterType="java.util.HashMap" resultType="Map">
select select

View File

@ -6,47 +6,32 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="username">{{ 'mxk.users.username' | i18n }}</nz-form-label> <nz-form-label nzFor="username">{{ 'mxk.users.username' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
nz-input placeholder="" id="username" />
[(ngModel)]="query.params.username"
[ngModelOptions]="{ standalone: true }"
name="username"
placeholder=""
id="username"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button> <button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button>
</div> </div>
</div> </div>
</form> </form>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzBordered (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
@ -58,18 +43,17 @@
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled" <td nzAlign="left"> {{ data.username }}</td>
(nzCheckedChange)="onTableItemChecked(data.id, $event)" <td nzAlign="left"> {{ data.displayName }}</td>
></td> <td nzAlign="left"> {{ data.employeeNumber }}</td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="left"> {{ data.department }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="left"> {{ data.jobTitle }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' |
<td nzAlign="center"> {{ data.department }}</td> i18n) }}</td>
<td nzAlign="center"> {{ data.jobTitle }}</td> <td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill"
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> style="color: green"></i></td>
<td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"></i></td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -8,18 +8,12 @@
<nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-input-group nzSearch [nzAddOnAfter]="suffixButton"> <nz-input-group nzSearch [nzAddOnAfter]="suffixButton">
<input <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
nz-input readonly placeholder="" id="name" />
[(ngModel)]="query.params.name"
[ngModelOptions]="{ standalone: true }"
name="name"
readonly
placeholder=""
id="name"
/>
</nz-input-group> </nz-input-group>
<ng-template #suffixButton> <ng-template #suffixButton>
<button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n }}</button> <button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n
}}</button>
</ng-template> </ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
@ -28,23 +22,18 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
nz-input placeholder="" id="username" />
[(ngModel)]="query.params.username"
[ngModelOptions]="{ standalone: true }"
name="username"
placeholder=""
id="username"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -59,62 +48,42 @@
</div> </div>
<div nz-col nzMd="24" nzSm="24"> <div nz-col nzMd="24" nzSm="24">
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber"
nzBordered [nzLoading]="this.query.tableLoading" (nzQueryParams)="onQueryParamsChange($event)">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled" <td nzAlign="left"> {{ data.groupName }}</td>
(nzCheckedChange)="onTableItemChecked(data.id, $event)" <td nzAlign="left"> {{ data.username }}</td>
></td> <td nzAlign="left"> {{ data.employeeNumber }}</td>
<td nzAlign="center"> {{ data.groupName }}</td> <td nzAlign="left"> {{ data.displayName }}</td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="left"> {{ data.department }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="left"> {{ data.jobTitle }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' |
<td nzAlign="center"> {{ data.department }}</td> i18n) }}</td>
<td nzAlign="center"> {{ data.jobTitle }}</td> <td nzAlign="left" nzBreakWord="false">
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> <div nz-col>
<td nzAlign="left" nzBreakWord="false" <button *ngIf="data.dynamic == '0'" nz-button type="button" (click)="onDelete($event, data.id)"
><div nz-col> [nzType]="'primary'" nzDanger>{{ 'mxk.text.delete' | i18n }}</button>
<button </div>
*ngIf="data.dynamic == '0'" </td>
nz-button
type="button"
(click)="onDelete($event, data.id)"
[nzType]="'primary'"
nzDanger
>{{ 'mxk.text.delete' | i18n }}</button
></div
></td
>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -7,17 +7,19 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -29,58 +31,43 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
[nzScroll]="{ x: '100%', y: '100%' }"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.groups.dynamic' | i18n }}</th> <th nzAlign="center">{{ 'mxk.groups.dynamic' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="left" nzBreakWord="false">{{ data.name }}</td> <td nzAlign="left" nzBreakWord="false">{{ data.name }}</td>
<td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"></i></td> <td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill"
style="color: green"></i></td>
<td nzAlign="left">{{ data.description }}</td> <td nzAlign="left">{{ data.description }}</td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="left" nzBreakWord="false">
><div nz-col> <div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -6,37 +6,28 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button> <button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button>
</div> </div>
</div> </div>
</form> </form>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzBordered (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
@ -47,16 +38,14 @@
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"></i></td> <td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill"
style="color: green"></i></td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -8,18 +8,12 @@
<nz-form-label nzFor="groupName">{{ 'mxk.groups.name' | i18n }}</nz-form-label> <nz-form-label nzFor="groupName">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-input-group nzSearch [nzAddOnAfter]="suffixButton"> <nz-input-group nzSearch [nzAddOnAfter]="suffixButton">
<input <input nz-input [(ngModel)]="query.params.groupName" [ngModelOptions]="{ standalone: true }"
nz-input name="groupName" readonly placeholder="" id="groupName" />
[(ngModel)]="query.params.groupName"
[ngModelOptions]="{ standalone: true }"
name="groupName"
readonly
placeholder=""
id="groupName"
/>
</nz-input-group> </nz-input-group>
<ng-template #suffixButton> <ng-template #suffixButton>
<button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n }}</button> <button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n
}}</button>
</ng-template> </ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
@ -28,16 +22,18 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.apps.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.apps.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -52,51 +48,68 @@
</div> </div>
<div nz-col nzMd="24" nzSm="24"> <div nz-col nzMd="24" nzSm="24">
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber"
nzBordered [nzLoading]="this.query.tableLoading" (nzQueryParams)="onQueryParamsChange($event)">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.apps.icon' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.icon' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.apps.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.apps.protocol' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.protocol' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.apps.category' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.category' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled" <td nzAlign="left"> {{ data.groupName }}</td>
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="center"><img height="30" border="0px" src="{{ data.iconBase64 }}" /></td> <td nzAlign="center"><img height="30" border="0px" src="{{ data.iconBase64 }}" /></td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"> {{ data.protocol }}</td> <td nzAlign="left"> {{ data.protocol }}</td>
<td nzAlign="left">{{ data.category }}</td> <td nzAlign="left">
<td nzAlign="left" nzBreakWord="false" <div *ngIf="data.category == 'none'">{{ 'mxk.apps.category.none' | i18n }}</div>
><div nz-col> <div *ngIf="data.category == '1011'">{{ 'mxk.apps.category.1011' | i18n }}</div>
<div *ngIf="data.category == '1012'">{{ 'mxk.apps.category.1012' | i18n }}</div>
<div *ngIf="data.category == '1013'">{{ 'mxk.apps.category.1013' | i18n }}</div>
<div *ngIf="data.category == '1014'">{{ 'mxk.apps.category.1014' | i18n }}</div>
<div *ngIf="data.category == '1015'">{{ 'mxk.apps.category.1015' | i18n }}</div>
<div *ngIf="data.category == '1016'">{{ 'mxk.apps.category.1016' | i18n }}</div>
<div *ngIf="data.category == '1017'">{{ 'mxk.apps.category.1017' | i18n }}</div>
<div *ngIf="data.category == '1111'">{{ 'mxk.apps.category.1111' | i18n }}</div>
<div *ngIf="data.category == '1112'">{{ 'mxk.apps.category.1112' | i18n }}</div>
<div *ngIf="data.category == '1113'">{{ 'mxk.apps.category.1113' | i18n }}</div>
<div *ngIf="data.category == '1114'">{{ 'mxk.apps.category.1114' | i18n }}</div>
<div *ngIf="data.category == '1211'">{{ 'mxk.apps.category.1211' | i18n }}</div>
<div *ngIf="data.category == '1212'">{{ 'mxk.apps.category.1212' | i18n }}</div>
<div *ngIf="data.category == '1213'">{{ 'mxk.apps.category.1213' | i18n }}</div>
<div *ngIf="data.category == '1214'">{{ 'mxk.apps.category.1214' | i18n }}</div>
<div *ngIf="data.category == '1215'">{{ 'mxk.apps.category.1215' | i18n }}</div>
<div *ngIf="data.category == '1311'">{{ 'mxk.apps.category.1311' | i18n }}</div>
<div *ngIf="data.category == '1411'">{{ 'mxk.apps.category.1411' | i18n }}</div>
<div *ngIf="data.category == '1511'">{{ 'mxk.apps.category.1511' | i18n }}</div>
<div *ngIf="data.category == '1512'">{{ 'mxk.apps.category.1512' | i18n }}</div>
<div *ngIf="data.category == '1611'">{{ 'mxk.apps.category.1611' | i18n }}</div>
<div *ngIf="data.category == '1711'">{{ 'mxk.apps.category.1711' | i18n }}</div>
<div *ngIf="data.category == '1712'">{{ 'mxk.apps.category.1712' | i18n }}</div>
<div *ngIf="data.category == '1811'">{{ 'mxk.apps.category.1811' | i18n }}</div>
<div *ngIf="data.category == '1812'">{{ 'mxk.apps.category.1812' | i18n }}</div>
<div *ngIf="data.category == '1911'">{{ 'mxk.apps.category.1911' | i18n }}</div>
<div *ngIf="data.category == '1912'">{{ 'mxk.apps.category.1912' | i18n }}</div>
</td>
<td nzAlign="left" nzBreakWord="false">
<div nz-col>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -5,39 +5,35 @@
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }"> <div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }">
<div nz-col nzMd="8" nzSm="24"> <div nz-col nzMd="8" nzSm="24">
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.accounts.username' | i18n }}</nz-form-label> <nz-form-label nzFor="appName">{{ 'mxk.accounts.appName' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <nz-input-group nzSearch [nzAddOnAfter]="suffixButton">
<input nz-input [(ngModel)]="query.params.appName" [ngModelOptions]="{ standalone: true }" name="appName"
readonly placeholder="" id="appName" />
</nz-input-group>
<ng-template #suffixButton>
<button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n
}}</button>
</ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col nzMd="8" nzSm="24"> <div nz-col nzMd="8" nzSm="24">
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="appName">{{ 'mxk.accounts.appName' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.accounts.username' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-input-group nzSearch [nzAddOnAfter]="suffixButton"> <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
<input placeholder="" id="username" />
nz-input
[(ngModel)]="query.params.appName"
[ngModelOptions]="{ standalone: true }"
name="appName"
readonly
placeholder=""
id="appName"
/>
</nz-input-group>
<ng-template #suffixButton>
<button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n }}</button>
</ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm">{{ 'mxk.text.reset' | i18n }}</button> <button nz-button type="reset" (click)="onReset()" class="mx-sm">{{ 'mxk.text.reset' | i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -49,42 +45,27 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.accounts.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accounts.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.accounts.displayName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accounts.displayName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.accounts.appName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accounts.appName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.accounts.relatedUsername' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accounts.relatedUsername' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
@ -92,17 +73,19 @@
<td nzAlign="left" nzBreakWord="false">{{ data.displayName }}</td> <td nzAlign="left" nzBreakWord="false">{{ data.displayName }}</td>
<td nzAlign="left" nzBreakWord="false">{{ data.appName }}</td> <td nzAlign="left" nzBreakWord="false">{{ data.appName }}</td>
<td nzAlign="left" nzBreakWord="false">{{ data.relatedUsername }}</td> <td nzAlign="left" nzBreakWord="false">{{ data.relatedUsername }}</td>
<td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"></i></td> <td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill"
<td nzAlign="left" nzBreakWord="false" style="color: green"></i></td>
><div nz-col> <td nzAlign="left" nzBreakWord="false">
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -36,7 +36,7 @@ import { AccountEditerComponent } from './account-editer/account-editer.componen
export class AccountsComponent implements OnInit { export class AccountsComponent implements OnInit {
query: { query: {
params: { params: {
name: String; username: String;
displayName: String; displayName: String;
employeeNumber: String; employeeNumber: String;
appName: String; appName: String;
@ -60,7 +60,7 @@ export class AccountsComponent implements OnInit {
checked: boolean; checked: boolean;
} = { } = {
params: { params: {
name: '', username: '',
displayName: '', displayName: '',
employeeNumber: '', employeeNumber: '',
appName: '', appName: '',

View File

@ -7,7 +7,8 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.apps.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.apps.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
@ -16,6 +17,7 @@
<nz-form-label nzFor="protocol">{{ 'mxk.apps.protocol' | i18n }}</nz-form-label> <nz-form-label nzFor="protocol">{{ 'mxk.apps.protocol' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-select [(ngModel)]="query.params.protocol" [ngModelOptions]="{ standalone: true }"> <nz-select [(ngModel)]="query.params.protocol" [ngModelOptions]="{ standalone: true }">
<nz-option nzValue="" nzLabel="ALL"></nz-option>
<nz-option nzValue="OAuth_v2.0" nzLabel="OAuth v2.0"></nz-option> <nz-option nzValue="OAuth_v2.0" nzLabel="OAuth v2.0"></nz-option>
<nz-option nzValue="OAuth_v2.1" nzLabel="OAuth v2.1"></nz-option> <nz-option nzValue="OAuth_v2.1" nzLabel="OAuth v2.1"></nz-option>
<nz-option nzValue="OpenID_Connect_v1.0" nzLabel="OpenID Connect v1.0"></nz-option> <nz-option nzValue="OpenID_Connect_v1.0" nzLabel="OpenID Connect v1.0"></nz-option>
@ -32,12 +34,13 @@
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm">
<nz-form-item> <nz-form-item>
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
></nz-form-item </nz-form-item>
>
</div> </div>
</div> </div>
</form> </form>
@ -65,60 +68,77 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.apps.icon' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.icon' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.apps.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.apps.protocol' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.protocol' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.apps.category' | i18n }}</th> <th nzAlign="center">{{ 'mxk.apps.category' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
><a>{{ 'mxk.text.action' | i18n }}</a></th <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"><img height="30" border="0px" src="{{ data.iconBase64 }}" /></td> <td nzAlign="center"><img height="30" border="0px" src="{{ data.iconBase64 }}" /></td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"> {{ data.protocol }}</td> <td nzAlign="left"> {{ data.protocol }}</td>
<td nzAlign="left">{{ data.category }}</td> <td nzAlign="left">
<td nzAlign="left" nzBreakWord="false" <div *ngIf="data.category == 'none'">{{ 'mxk.apps.category.none' | i18n }}</div>
><div nz-col> <div *ngIf="data.category == '1011'">{{ 'mxk.apps.category.1011' | i18n }}</div>
<button nz-button type="button" (click)="onEdit($event, data.id, data.protocol)" [nzType]="'primary'" style="float: left">{{ <div *ngIf="data.category == '1012'">{{ 'mxk.apps.category.1012' | i18n }}</div>
<div *ngIf="data.category == '1013'">{{ 'mxk.apps.category.1013' | i18n }}</div>
<div *ngIf="data.category == '1014'">{{ 'mxk.apps.category.1014' | i18n }}</div>
<div *ngIf="data.category == '1015'">{{ 'mxk.apps.category.1015' | i18n }}</div>
<div *ngIf="data.category == '1016'">{{ 'mxk.apps.category.1016' | i18n }}</div>
<div *ngIf="data.category == '1017'">{{ 'mxk.apps.category.1017' | i18n }}</div>
<div *ngIf="data.category == '1111'">{{ 'mxk.apps.category.1111' | i18n }}</div>
<div *ngIf="data.category == '1112'">{{ 'mxk.apps.category.1112' | i18n }}</div>
<div *ngIf="data.category == '1113'">{{ 'mxk.apps.category.1113' | i18n }}</div>
<div *ngIf="data.category == '1114'">{{ 'mxk.apps.category.1114' | i18n }}</div>
<div *ngIf="data.category == '1211'">{{ 'mxk.apps.category.1211' | i18n }}</div>
<div *ngIf="data.category == '1212'">{{ 'mxk.apps.category.1212' | i18n }}</div>
<div *ngIf="data.category == '1213'">{{ 'mxk.apps.category.1213' | i18n }}</div>
<div *ngIf="data.category == '1214'">{{ 'mxk.apps.category.1214' | i18n }}</div>
<div *ngIf="data.category == '1215'">{{ 'mxk.apps.category.1215' | i18n }}</div>
<div *ngIf="data.category == '1311'">{{ 'mxk.apps.category.1311' | i18n }}</div>
<div *ngIf="data.category == '1411'">{{ 'mxk.apps.category.1411' | i18n }}</div>
<div *ngIf="data.category == '1511'">{{ 'mxk.apps.category.1511' | i18n }}</div>
<div *ngIf="data.category == '1512'">{{ 'mxk.apps.category.1512' | i18n }}</div>
<div *ngIf="data.category == '1611'">{{ 'mxk.apps.category.1611' | i18n }}</div>
<div *ngIf="data.category == '1711'">{{ 'mxk.apps.category.1711' | i18n }}</div>
<div *ngIf="data.category == '1712'">{{ 'mxk.apps.category.1712' | i18n }}</div>
<div *ngIf="data.category == '1811'">{{ 'mxk.apps.category.1811' | i18n }}</div>
<div *ngIf="data.category == '1812'">{{ 'mxk.apps.category.1812' | i18n }}</div>
<div *ngIf="data.category == '1911'">{{ 'mxk.apps.category.1911' | i18n }}</div>
<div *ngIf="data.category == '1912'">{{ 'mxk.apps.category.1912' | i18n }}</div>
</td>
<td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill"
style="color: green"></i></td>
<td nzAlign="left" nzBreakWord="false">
<div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id, data.protocol)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -6,37 +6,28 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.apps.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.apps.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button> <button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button>
</div> </div>
</div> </div>
</form> </form>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzBordered (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
@ -49,19 +40,45 @@
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"><img height="30" border="0px" src="{{ data.iconBase64 }}" /></td> <td nzAlign="left"><img height="30" border="0px" src="{{ data.iconBase64 }}" /></td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"> {{ data.protocol }}</td> <td nzAlign="left"> {{ data.protocol }}</td>
<td nzAlign="left">{{ data.category }}</td> <td nzAlign="left">
<div *ngIf="data.category == 'none'">{{ 'mxk.apps.category.none' | i18n }}</div>
<div *ngIf="data.category == '1011'">{{ 'mxk.apps.category.1011' | i18n }}</div>
<div *ngIf="data.category == '1012'">{{ 'mxk.apps.category.1012' | i18n }}</div>
<div *ngIf="data.category == '1013'">{{ 'mxk.apps.category.1013' | i18n }}</div>
<div *ngIf="data.category == '1014'">{{ 'mxk.apps.category.1014' | i18n }}</div>
<div *ngIf="data.category == '1015'">{{ 'mxk.apps.category.1015' | i18n }}</div>
<div *ngIf="data.category == '1016'">{{ 'mxk.apps.category.1016' | i18n }}</div>
<div *ngIf="data.category == '1017'">{{ 'mxk.apps.category.1017' | i18n }}</div>
<div *ngIf="data.category == '1111'">{{ 'mxk.apps.category.1111' | i18n }}</div>
<div *ngIf="data.category == '1112'">{{ 'mxk.apps.category.1112' | i18n }}</div>
<div *ngIf="data.category == '1113'">{{ 'mxk.apps.category.1113' | i18n }}</div>
<div *ngIf="data.category == '1114'">{{ 'mxk.apps.category.1114' | i18n }}</div>
<div *ngIf="data.category == '1211'">{{ 'mxk.apps.category.1211' | i18n }}</div>
<div *ngIf="data.category == '1212'">{{ 'mxk.apps.category.1212' | i18n }}</div>
<div *ngIf="data.category == '1213'">{{ 'mxk.apps.category.1213' | i18n }}</div>
<div *ngIf="data.category == '1214'">{{ 'mxk.apps.category.1214' | i18n }}</div>
<div *ngIf="data.category == '1215'">{{ 'mxk.apps.category.1215' | i18n }}</div>
<div *ngIf="data.category == '1311'">{{ 'mxk.apps.category.1311' | i18n }}</div>
<div *ngIf="data.category == '1411'">{{ 'mxk.apps.category.1411' | i18n }}</div>
<div *ngIf="data.category == '1511'">{{ 'mxk.apps.category.1511' | i18n }}</div>
<div *ngIf="data.category == '1512'">{{ 'mxk.apps.category.1512' | i18n }}</div>
<div *ngIf="data.category == '1611'">{{ 'mxk.apps.category.1611' | i18n }}</div>
<div *ngIf="data.category == '1711'">{{ 'mxk.apps.category.1711' | i18n }}</div>
<div *ngIf="data.category == '1712'">{{ 'mxk.apps.category.1712' | i18n }}</div>
<div *ngIf="data.category == '1811'">{{ 'mxk.apps.category.1811' | i18n }}</div>
<div *ngIf="data.category == '1812'">{{ 'mxk.apps.category.1812' | i18n }}</div>
<div *ngIf="data.category == '1911'">{{ 'mxk.apps.category.1911' | i18n }}</div>
<div *ngIf="data.category == '1912'">{{ 'mxk.apps.category.1912' | i18n }}</div>
</td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -7,17 +7,19 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.accountsstrategy.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.accountsstrategy.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -29,61 +31,48 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.accountsstrategy.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accountsstrategy.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.accountsstrategy.appIcon' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accountsstrategy.appIcon' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.accountsstrategy.appName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accountsstrategy.appName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.accountsstrategy.createType' | i18n }}</th> <th nzAlign="center">{{ 'mxk.accountsstrategy.createType' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"><img height="30" border="0px" src="{{ data.appIconBase64 }}" /></td> <td nzAlign="center"><img height="30" border="0px" src="{{ data.appIconBase64 }}" /></td>
<td nzAlign="center"> {{ data.appName }}</td> <td nzAlign="left"> {{ data.appName }}</td>
<td nzAlign="left">{{ data.createType == 'manual' ? ('mxk.text.manual' | i18n) : ('mxk.text.manual' | i18n) }}</td> <td nzAlign="center">{{ data.createType == 'manual' ? ('mxk.text.manual' | i18n) : ('mxk.text.manual' | i18n) }}
<td nzAlign="left">{{ data.status == '1' ? ('mxk.text.status.active' | i18n) : ('mxk.text.inactive' | i18n) }}</td> </td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill"
><div nz-col> style="color: green"></i></td>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <td nzAlign="left" nzBreakWord="false">
<div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -7,17 +7,19 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.adapters.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.adapters.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -29,59 +31,44 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.adapters.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.adapters.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.adapters.protocol' | i18n }}</th> <th nzAlign="center">{{ 'mxk.adapters.protocol' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="left" nzBreakWord="false">{{ data.name }}</td> <td nzAlign="left" nzBreakWord="false">{{ data.name }}</td>
<td nzAlign="center"> {{ data.protocol }}</td> <td nzAlign="left"> {{ data.protocol }}</td>
<td nzAlign="center"> {{ data.sortIndex }}</td> <td nzAlign="center"> {{ data.sortIndex }}</td>
<td nzAlign="left">{{ data.description }}</td> <td nzAlign="left">{{ data.description }}</td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="left" nzBreakWord="false">
><div nz-col> <div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -4,11 +4,13 @@
<nz-form-item style="display: none"> <nz-form-item style="display: none">
<nz-form-label [nzMd]="6" nzRequired nzFor="id">{{ 'mxk.text.id' | i18n }}</nz-form-label> <nz-form-label [nzMd]="6" nzRequired nzFor="id">{{ 'mxk.text.id' | i18n }}</nz-form-label>
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!"> <nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!">
<input [(ngModel)]="form.model.id" [disabled]="true" [ngModelOptions]="{ standalone: true }" nz-input name="id" id="id" /> <input [(ngModel)]="form.model.id" [disabled]="true" [ngModelOptions]="{ standalone: true }" nz-input name="id"
id="id" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="product">{{ 'mxk.ldapcontext.product' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="product">{{ 'mxk.ldapcontext.product' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not valid product !"> <nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not valid product !">
<nz-select [(ngModel)]="form.model.product" [ngModelOptions]="{ standalone: true }"> <nz-select [(ngModel)]="form.model.product" [ngModelOptions]="{ standalone: true }">
<nz-option nzValue="ActiveDirectory" nzLabel="ActiveDirectory"></nz-option> <nz-option nzValue="ActiveDirectory" nzLabel="ActiveDirectory"></nz-option>
@ -20,87 +22,81 @@
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="status">{{ 'mxk.text.status' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="status">{{ 'mxk.text.status' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid status!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid status!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_status" [ngModelOptions]="{ standalone: true }" name="status"
[(ngModel)]="form.model.switch_status" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate"></nz-switch>
[ngModelOptions]="{ standalone: true }"
name="status"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="providerUrl">{{ 'mxk.ldapcontext.providerUrl' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="providerUrl">{{ 'mxk.ldapcontext.providerUrl' | i18n }}
<nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not valid providerUrl !"> </nz-form-label>
<input [(ngModel)]="form.model.providerUrl" [ngModelOptions]="{ standalone: true }" nz-input name="providerUrl" id="providerUrl" /> <nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48"
nzErrorTip="The input is not valid providerUrl !">
<input [(ngModel)]="form.model.providerUrl" [ngModelOptions]="{ standalone: true }" nz-input name="providerUrl"
id="providerUrl" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="accountMapping">{{ 'mxk.ldapcontext.accountMapping' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="accountMapping">{{ 'mxk.ldapcontext.accountMapping' | i18n
}}</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid accountMapping!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid accountMapping!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_accountMapping" [ngModelOptions]="{ standalone: true }"
[(ngModel)]="form.model.switch_accountMapping" name="accountMapping" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate">
[ngModelOptions]="{ standalone: true }" </nz-switch>
name="accountMapping"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="principal">{{ 'mxk.ldapcontext.principal' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="principal">{{ 'mxk.ldapcontext.principal' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid principal!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid principal!">
<input [(ngModel)]="form.model.principal" [ngModelOptions]="{ standalone: true }" nz-input name="principal" id="principal" /> <input [(ngModel)]="form.model.principal" [ngModelOptions]="{ standalone: true }" nz-input name="principal"
id="principal" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="credentials">{{ 'mxk.ldapcontext.credentials' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="credentials">{{ 'mxk.ldapcontext.credentials' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid upperCase!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid upperCase!">
<input <input [(ngModel)]="form.model.credentials" [ngModelOptions]="{ standalone: true }" nz-input type="password"
[(ngModel)]="form.model.credentials" name="credentials" id="credentials" />
[ngModelOptions]="{ standalone: true }"
nz-input
type="password"
name="credentials"
id="credentials"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.product == 'ActiveDirectory'">
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="filters">{{ 'mxk.ldapcontext.filters' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="basedn">{{ 'mxk.ldapcontext.basedn' | i18n }}
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid filters!"> </nz-form-label>
<input [(ngModel)]="form.model.filters" [ngModelOptions]="{ standalone: true }" nz-input name="filters" id="filters" />
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="basedn">{{ 'mxk.ldapcontext.basedn' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid basedn!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid basedn!">
<input [(ngModel)]="form.model.basedn" [ngModelOptions]="{ standalone: true }" nz-input name="basedn" id="basedn" /> <input [(ngModel)]="form.model.basedn" [ngModelOptions]="{ standalone: true }" nz-input name="basedn"
id="basedn" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item *ngIf="form.model.product == 'ActiveDirectory'">
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="filters">
{{ 'mxk.ldapcontext.filters' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid filters!">
<input [(ngModel)]="form.model.filters" [ngModelOptions]="{ standalone: true }" nz-input name="filters"
id="filters" />
</nz-form-control>
</nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="msadDomain">{{ 'mxk.ldapcontext.msadDomain' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="msadDomain">{{ 'mxk.ldapcontext.msadDomain' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid msadDomain!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid msadDomain!">
<input [(ngModel)]="form.model.msadDomain" [ngModelOptions]="{ standalone: true }" nz-input name="msadDomain" id="msadDomain" /> <input [(ngModel)]="form.model.msadDomain" [ngModelOptions]="{ standalone: true }" nz-input name="msadDomain"
id="msadDomain" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="sslSwitch">{{ 'mxk.ldapcontext.sslSwitch' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="sslSwitch">{{ 'mxk.ldapcontext.sslSwitch' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid qwerty!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid qwerty!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_sslSwitch" [ngModelOptions]="{ standalone: true }" name="sslSwitch"
[(ngModel)]="form.model.switch_sslSwitch" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate"></nz-switch>
[ngModelOptions]="{ standalone: true }"
name="sslSwitch"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
@ -108,19 +104,16 @@
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="trustStore">{{ 'mxk.ldapcontext.trustStore' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="trustStore">{{ 'mxk.ldapcontext.trustStore' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid trustStore!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid trustStore!">
<input [(ngModel)]="form.model.trustStore" [ngModelOptions]="{ standalone: true }" nz-input name="trustStore" id="trustStore" /> <input [(ngModel)]="form.model.trustStore" [ngModelOptions]="{ standalone: true }" nz-input name="trustStore"
id="trustStore" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="trustStorePassword">{{ 'mxk.ldapcontext.trustStorePassword' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="trustStorePassword">{{ 'mxk.ldapcontext.trustStorePassword' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid trustStorePassword!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid trustStorePassword!">
<input <input [(ngModel)]="form.model.trustStorePassword" [ngModelOptions]="{ standalone: true }" nz-input
[(ngModel)]="form.model.trustStorePassword" name="trustStorePassword" id="trustStorePassword" />
[ngModelOptions]="{ standalone: true }"
nz-input
name="trustStorePassword"
id="trustStorePassword"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item style="width: 100%"> <nz-form-item style="width: 100%">

View File

@ -4,237 +4,152 @@
<nz-form-item style="display: none"> <nz-form-item style="display: none">
<nz-form-label [nzMd]="6" nzRequired nzFor="id">id</nz-form-label> <nz-form-label [nzMd]="6" nzRequired nzFor="id">id</nz-form-label>
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!"> <nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!">
<input [(ngModel)]="form.model.id" [ngModelOptions]="{ standalone: true }" nz-input name="id" id="id" value="id" /> <input [(ngModel)]="form.model.id" [ngModelOptions]="{ standalone: true }" nz-input name="id" id="id"
value="id" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="minLength">{{ 'mxk.passwordpolicy.minLength' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="minLength">{{ 'mxk.passwordpolicy.minLength' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not validminLength!"> <nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not validminLength!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.minLength" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.minLength" [nzMax]="10" [nzStep]="1" name="minLength" id="minLength" value="0"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="minLength"
id="minLength"
value="0"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="maxLength">{{ 'mxk.passwordpolicy.maxLength' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="maxLength">{{ 'mxk.passwordpolicy.maxLength' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid maxLength!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid maxLength!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.maxLength" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.maxLength" [nzMax]="10" [nzStep]="1" name="maxLength" id="maxLength"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="maxLength"
id="maxLength"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="lowerCase">{{ 'mxk.passwordpolicy.lowerCase' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="lowerCase">{{ 'mxk.passwordpolicy.lowerCase' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid lowerCase!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid lowerCase!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.lowerCase" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.lowerCase" [nzMax]="10" [nzStep]="1" name="lowerCase" id="lowerCase"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="lowerCase"
id="lowerCase"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="upperCase">{{ 'mxk.passwordpolicy.upperCase' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="upperCase">{{ 'mxk.passwordpolicy.upperCase' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid upperCase!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid upperCase!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.upperCase" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.upperCase" [nzMax]="10" [nzStep]="1" name="upperCase" id="upperCase"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="upperCase"
id="upperCase"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="digits">{{ 'mxk.passwordpolicy.digits' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="digits">{{ 'mxk.passwordpolicy.digits' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid digits!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid digits!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.digits" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.digits" [nzMax]="10" [nzStep]="1" name="digits" id="digits"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="digits"
id="digits"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="specialChar">{{ 'mxk.passwordpolicy.specialChar' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="specialChar">{{ 'mxk.passwordpolicy.specialChar' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid specialChar!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid specialChar!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.specialChar" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.specialChar" [nzMax]="10" [nzStep]="1" name="specialChar" id="specialChar"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="specialChar"
id="specialChar"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="attempts">{{ 'mxk.passwordpolicy.attempts' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="attempts">{{ 'mxk.passwordpolicy.attempts' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid attempts!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid attempts!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.attempts" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.attempts" [nzMax]="10" [nzStep]="1" name="attempts" id="attempts"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="attempts"
id="attempts"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="duration">{{ 'mxk.passwordpolicy.duration' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="duration">{{ 'mxk.passwordpolicy.duration' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid duration!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid duration!">
<nz-input-group nzAddOnAfter="{{ 'mxk.text.hour' | i18n }}"> <nz-input-group nzAddOnAfter="{{ 'mxk.text.minute' | i18n }}">
<nz-input-number <nz-input-number [(ngModel)]="form.model.duration" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.duration" [nzMax]="720" [nzStep]="1" name="duration" id="duration"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="24"
[nzStep]="1"
name="duration"
id="duration"
></nz-input-number>
</nz-input-group> </nz-input-group>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="occurances">{{ 'mxk.passwordpolicy.occurances' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="occurances">{{ 'mxk.passwordpolicy.occurances' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid occurances!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid occurances!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.occurances" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.occurances" [nzMax]="10" [nzStep]="1" name="occurances" id="occurances"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="occurances"
id="occurances"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="expiration">{{ 'mxk.passwordpolicy.expiration' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="expiration">{{ 'mxk.passwordpolicy.expiration' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid expiration!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid expiration!">
<nz-input-group nzAddOnAfter="{{ 'mxk.text.day' | i18n }}"> <nz-input-group nzAddOnAfter="{{ 'mxk.text.day' | i18n }}">
<nz-input-number <nz-input-number [(ngModel)]="form.model.expiration" [ngModelOptions]="{ standalone: true }" [nzMin]="30"
[(ngModel)]="form.model.expiration" [nzMax]="365" [nzStep]="1" name="expiration" id="expiration"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="30"
[nzMax]="365"
[nzStep]="1"
name="expiration"
id="expiration"
></nz-input-number>
</nz-input-group> </nz-input-group>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="history">{{ 'mxk.passwordpolicy.history' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="history">{{ 'mxk.passwordpolicy.history' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid history!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid history!">
<nz-input-number <nz-input-number [(ngModel)]="form.model.history" [ngModelOptions]="{ standalone: true }" [nzMin]="0"
[(ngModel)]="form.model.history" [nzMax]="10" [nzStep]="1" name="history" id="history"></nz-input-number>
[ngModelOptions]="{ standalone: true }"
[nzMin]="0"
[nzMax]="10"
[nzStep]="1"
name="history"
id="history"
></nz-input-number>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="username">{{ 'mxk.passwordpolicy.username' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="username">{{ 'mxk.passwordpolicy.username' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid username!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid username!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_username" [ngModelOptions]="{ standalone: true }" name="username"
[(ngModel)]="form.model.switch_username" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate"></nz-switch>
[ngModelOptions]="{ standalone: true }"
name="username"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="dictionary">{{ 'mxk.passwordpolicy.dictionary' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="dictionary">{{ 'mxk.passwordpolicy.dictionary' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid dictionary!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid dictionary!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_dictionary" [ngModelOptions]="{ standalone: true }" name="dictionary"
[(ngModel)]="form.model.switch_dictionary" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate"></nz-switch>
[ngModelOptions]="{ standalone: true }"
name="dictionary"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="alphabetical">{{ 'mxk.passwordpolicy.alphabetical' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="alphabetical">{{ 'mxk.passwordpolicy.alphabetical' | i18n
}}</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid alphabetical!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid alphabetical!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_alphabetical" [ngModelOptions]="{ standalone: true }"
[(ngModel)]="form.model.switch_alphabetical" name="alphabetical" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate">
[ngModelOptions]="{ standalone: true }" </nz-switch>
name="alphabetical"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="numerical">{{ 'mxk.passwordpolicy.numerical' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="numerical">{{ 'mxk.passwordpolicy.numerical' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid numerical!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid numerical!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_numerical" [ngModelOptions]="{ standalone: true }" name="numerical"
[(ngModel)]="form.model.switch_numerical" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate"></nz-switch>
[ngModelOptions]="{ standalone: true }"
name="numerical"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="qwerty">{{ 'mxk.passwordpolicy.qwerty' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="qwerty">{{ 'mxk.passwordpolicy.qwerty' | i18n }}
</nz-form-label>
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid qwerty!"> <nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid qwerty!">
<nz-switch <nz-switch [(ngModel)]="form.model.switch_qwerty" [ngModelOptions]="{ standalone: true }" name="qwerty"
[(ngModel)]="form.model.switch_qwerty" [nzCheckedChildren]="checkedTemplate" [nzUnCheckedChildren]="unCheckedTemplate"></nz-switch>
[ngModelOptions]="{ standalone: true }"
name="qwerty"
[nzCheckedChildren]="checkedTemplate"
[nzUnCheckedChildren]="unCheckedTemplate"
></nz-switch>
<ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template> <ng-template #checkedTemplate><i nz-icon nzType="check"></i></ng-template>
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>

View File

@ -7,24 +7,19 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.socialsproviders.providerName' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.socialsproviders.providerName' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input <input nz-input [(ngModel)]="query.params.providerName" [ngModelOptions]="{ standalone: true }"
nz-input name="providerName" placeholder="" id="providerName" />
[(ngModel)]="query.params.providerName"
[ngModelOptions]="{ standalone: true }"
name="providerName"
placeholder=""
id="providerName"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -36,61 +31,47 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.socialsproviders.icon' | i18n }}</th> <th nzAlign="center">{{ 'mxk.socialsproviders.icon' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.socialsproviders.provider' | i18n }}</th> <th nzAlign="center">{{ 'mxk.socialsproviders.provider' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.socialsproviders.providerName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.socialsproviders.providerName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="left" nzBreakWord="false"><img src="{{ data.icon }}" /></td> <td nzAlign="center" nzBreakWord="false"><img src="{{ data.icon }}" /></td>
<td nzAlign="center"> {{ data.provider }}</td> <td nzAlign="left"> {{ data.provider }}</td>
<td nzAlign="center"> {{ data.providerName }}</td> <td nzAlign="left"> {{ data.providerName }}</td>
<td nzAlign="center"> {{ data.sortIndex }}</td> <td nzAlign="center"> {{ data.sortIndex }}</td>
<td nzAlign="left">{{ data.description }}</td> <td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill"
<td nzAlign="left" nzBreakWord="false" style="color: green"></i></td>
><div nz-col> <td nzAlign="left" nzBreakWord="false">
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -7,17 +7,19 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.synchronizers.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.synchronizers.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -29,61 +31,48 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.synchronizers.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.synchronizers.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.synchronizers.scheduler' | i18n }}</th> <th nzAlign="center">{{ 'mxk.synchronizers.scheduler' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"> {{ data.scheduler }}</td> <td nzAlign="left"> {{ data.scheduler }}</td>
<td nzAlign="left">{{ data.description }}</td> <td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill"
<td nzAlign="left" nzBreakWord="false" style="color: green"></i></td>
><div nz-col> <td nzAlign="left" nzBreakWord="false">
<button nz-button type="button" (click)="onSynchr($event, data.id)" [nzType]="'primary'" style="float: left">{{ <div nz-col>
<button nz-button type="button" (click)="onSynchr($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.synchr' | i18n 'mxk.text.synchr' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -17,16 +17,8 @@
<p class="text-nowrap mb0">{{ 'mxk.home.onlineUsers' | i18n }}</p> <p class="text-nowrap mb0">{{ 'mxk.home.onlineUsers' | i18n }}</p>
</div> </div>
<div nz-col nzSpan="12"> <div nz-col nzSpan="12">
<g2-mini-bar <g2-mini-bar *ngIf="simulateData" height="35" color="#fff" borderWidth="3" [padding]="[5, 30]"
*ngIf="simulateData" [data]="simulateData" tooltipType="mini" (ready)="fixDark($event)"></g2-mini-bar>
height="35"
color="#fff"
borderWidth="3"
[padding]="[5, 30]"
[data]="simulateData"
tooltipType="mini"
(ready)="fixDark($event)"
></g2-mini-bar>
</div> </div>
</div> </div>
</div> </div>
@ -37,16 +29,8 @@
<p class="text-nowrap mb0">{{ 'mxk.home.dayCount' | i18n }}</p> <p class="text-nowrap mb0">{{ 'mxk.home.dayCount' | i18n }}</p>
</div> </div>
<div nz-col nzSpan="12"> <div nz-col nzSpan="12">
<g2-mini-bar <g2-mini-bar *ngIf="simulateData" height="35" color="#fff" borderWidth="3" [padding]="[5, 30]"
*ngIf="simulateData" [data]="simulateData" tooltipType="mini" (ready)="fixDark($event)"></g2-mini-bar>
height="35"
color="#fff"
borderWidth="3"
[padding]="[5, 30]"
[data]="simulateData"
tooltipType="mini"
(ready)="fixDark($event)"
></g2-mini-bar>
</div> </div>
</div> </div>
</div> </div>
@ -57,16 +41,8 @@
<p class="text-nowrap mb0">{{ 'mxk.home.newUsers' | i18n }}</p> <p class="text-nowrap mb0">{{ 'mxk.home.newUsers' | i18n }}</p>
</div> </div>
<div nz-col nzSpan="12"> <div nz-col nzSpan="12">
<g2-mini-bar <g2-mini-bar *ngIf="simulateData" height="35" color="#fff" borderWidth="3" [padding]="[5, 30]"
*ngIf="simulateData" [data]="simulateData" tooltipType="mini" (ready)="fixDark($event)"></g2-mini-bar>
height="35"
color="#fff"
borderWidth="3"
[padding]="[5, 30]"
[data]="simulateData"
tooltipType="mini"
(ready)="fixDark($event)"
></g2-mini-bar>
</div> </div>
</div> </div>
</div> </div>
@ -77,16 +53,8 @@
<p class="text-nowrap mb0">{{ 'mxk.home.activeUsers' | i18n }}</p> <p class="text-nowrap mb0">{{ 'mxk.home.activeUsers' | i18n }}</p>
</div> </div>
<div nz-col nzSpan="12"> <div nz-col nzSpan="12">
<g2-mini-bar <g2-mini-bar *ngIf="simulateData" height="35" color="#fff" borderWidth="3" [padding]="[5, 30]"
*ngIf="simulateData" [data]="simulateData" tooltipType="mini" (ready)="fixDark($event)"></g2-mini-bar>
height="35"
color="#fff"
borderWidth="3"
[padding]="[5, 30]"
[data]="simulateData"
tooltipType="mini"
(ready)="fixDark($event)"
></g2-mini-bar>
</div> </div>
</div> </div>
</div> </div>
@ -97,7 +65,8 @@
<ng-template #dayAccessTitle> <ng-template #dayAccessTitle>
{{ 'mxk.home.dayAccessCount' | i18n }} {{ 'mxk.home.dayAccessCount' | i18n }}
</ng-template> </ng-template>
<g2-bar *ngIf="dayData" height="275" [data]="dayData" color="#fa8c16"></g2-bar> <!--<g2-bar *ngIf="dayData" height="275" [data]="dayData" color="#fa8c16"></g2-bar>-->
<g2-bar *ngIf="dayData" height="275" [data]="dayData"></g2-bar>
</nz-card> </nz-card>
</div> </div>
<div nz-col nzXs="24" nzMd="24"> <div nz-col nzXs="24" nzMd="24">

View File

@ -7,16 +7,18 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.organizations.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.organizations.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -29,16 +31,9 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<div nz-col nzMd="8" nzSm="24"> <div nz-col nzMd="6" nzSm="24" class="grid-border">
<nz-tree <nz-tree nzShowLine="false" [nzCheckable]="treeNodes.checkable" nzBlockNode [nzData]="treeNodes.nodes"
nzShowLine="false" (nzClick)="activeNode($event)" (nzDblClick)="openFolder($event)" [nzTreeTemplate]="nzTreeTemplate"></nz-tree>
[nzCheckable]="treeNodes.checkable"
nzBlockNode
[nzData]="treeNodes.nodes"
(nzClick)="activeNode($event)"
(nzDblClick)="openFolder($event)"
[nzTreeTemplate]="nzTreeTemplate"
></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin"> <ng-template #nzTreeTemplate let-node let-origin="origin">
<span class="custom-node"> <span class="custom-node">
<span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)"> <span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)">
@ -58,55 +53,44 @@
</ul> </ul>
</nz-dropdown-menu> </nz-dropdown-menu>
</div> </div>
<div nz-col nzMd="16" nzSm="24"> <div nz-col nzMd="18" nzSm="24" class="grid-border">
<nz-table <nz-table #dynamicTable nzBordered nzShowSizeChanger [nzData]="query.results.rows" [nzFrontPagination]="false"
#dynamicTable [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber"
nzBordered [nzLoading]="this.query.tableLoading" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center">{{ 'mxk.organizations.code' | i18n }}</th> <th nzAlign="center">{{ 'mxk.organizations.code' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.organizations.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.organizations.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
><a>{{ 'mxk.text.action' | i18n }}</a></th <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left"> <td nzAlign="left">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"> {{ data.sortIndex }}</td> <td nzAlign="center"> {{ data.sortIndex }}</td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill"
><div nz-col> style="color: green"></i></td>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <td nzAlign="left" nzBreakWord="false">
'mxk.text.edit' | i18n <div nz-col>
}}</button> <button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">
{{ 'mxk.text.edit' | i18n }}
</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -3,41 +3,37 @@
<nz-card [nzBordered]="false"> <nz-card [nzBordered]="false">
<form nz-form [nzLayout]="'inline'" (ngSubmit)="onSearch()" class="search__form"> <form nz-form [nzLayout]="'inline'" (ngSubmit)="onSearch()" class="search__form">
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }"> <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="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
<nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col nzMd="10" nzSm="24"> <div nz-col nzMd="10" nzSm="24">
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.resources.appName' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.resources.appName' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-input-group nzSearch [nzAddOnAfter]="suffixButton"> <nz-input-group nzSearch [nzAddOnAfter]="suffixButton">
<input <input nz-input [(ngModel)]="query.params.appName" [ngModelOptions]="{ standalone: true }" name="appName"
nz-input readonly placeholder="" id="appName" />
[(ngModel)]="query.params.appName"
[ngModelOptions]="{ standalone: true }"
name="appName"
readonly
placeholder=""
id="appName"
/>
</nz-input-group> </nz-input-group>
<ng-template #suffixButton> <ng-template #suffixButton>
<button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n }}</button> <button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n
}}</button>
</ng-template> </ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col nzMd="8" nzSm="24">
<nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
<nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 6" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 6" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -47,59 +43,10 @@
<button nz-button type="button" [nzType]="'primary'" (click)="onSave($event)">{{ 'mxk.text.save' | i18n }}</button> <button nz-button type="button" [nzType]="'primary'" (click)="onSave($event)">{{ 'mxk.text.save' | i18n }}</button>
</div> </div>
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }"> <div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }">
<div nz-col [nzSpan]="12"> <div nz-col [nzSpan]="10" class="grid-border">
<nz-table <nz-tree #nzTreeComponent nzShowLine="false" [nzCheckable]="treeNodes.checkable"
#dynamicTable [nzCheckedKeys]="treeNodes.checkedKeys" nzBlockNode [nzData]="treeNodes.nodes" (nzDblClick)="openFolder($event)"
nzTableLayout="auto" [nzTreeTemplate]="nzTreeTemplate"></nz-tree>
nzSize="small"
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
>
<thead>
<tr>
<!--<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th>
-->
<th nzAlign="center"></th>
<th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.roles.dynamic' | i18n }}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of query.results.rows">
<td
[nzChecked]="query.tableCheckedId.has(data.id)"
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none">
<span>{{ data.id }}</span>
</td>
<td nzAlign="left" nzBreakWord="false">{{ data.name }}</td>
<td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"></i></td>
</tr>
</tbody>
</nz-table>
</div>
<div nz-col [nzSpan]="12">
<nz-tree
#nzTreeComponent
nzShowLine="false"
[nzCheckable]="treeNodes.checkable"
[nzCheckedKeys]="treeNodes.checkedKeys"
nzBlockNode
[nzData]="treeNodes.nodes"
(nzDblClick)="openFolder($event)"
[nzTreeTemplate]="nzTreeTemplate"
></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin"> <ng-template #nzTreeTemplate let-node let-origin="origin">
<span class="custom-node"> <span class="custom-node">
<span *ngIf="!node.isLeaf"> <span *ngIf="!node.isLeaf">
@ -113,5 +60,35 @@
</span> </span>
</ng-template> </ng-template>
</div> </div>
<div nz-col [nzSpan]="14" class="grid-border">
<nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger
[nzData]="query.results.rows" [nzFrontPagination]="false" [nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions" [nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)">
<thead>
<tr>
<!--<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th>
-->
<th nzAlign="center"></th>
<th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.roles.dynamic' | i18n }}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of query.results.rows">
<td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
<td nzAlign="left" style="display: none">
<span>{{ data.id }}</span>
</td>
<td nzAlign="left" nzBreakWord="false">{{ data.name }}</td>
<td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill"
style="color: green"></i></td>
</tr>
</tbody>
</nz-table>
</div>
</div> </div>
</nz-card> </nz-card>

View File

@ -8,18 +8,12 @@
<nz-form-label nzFor="name">{{ 'mxk.resources.appName' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.resources.appName' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-input-group nzSearch [nzAddOnAfter]="suffixButton"> <nz-input-group nzSearch [nzAddOnAfter]="suffixButton">
<input <input nz-input [(ngModel)]="query.params.appName" [ngModelOptions]="{ standalone: true }" name="appName"
nz-input readonly placeholder="" id="appName" />
[(ngModel)]="query.params.appName"
[ngModelOptions]="{ standalone: true }"
name="appName"
readonly
placeholder=""
id="appName"
/>
</nz-input-group> </nz-input-group>
<ng-template #suffixButton> <ng-template #suffixButton>
<button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n }}</button> <button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n
}}</button>
</ng-template> </ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
@ -28,16 +22,18 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.resources.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.resources.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -50,16 +46,9 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<div nz-col nzMd="8" nzSm="24"> <div nz-col nzMd="6" nzSm="24" class="grid-border">
<nz-tree <nz-tree nzShowLine="false" [nzCheckable]="treeNodes.checkable" nzBlockNode [nzData]="treeNodes.nodes"
nzShowLine="false" (nzClick)="activeNode($event)" (nzDblClick)="openFolder($event)" [nzTreeTemplate]="nzTreeTemplate"></nz-tree>
[nzCheckable]="treeNodes.checkable"
nzBlockNode
[nzData]="treeNodes.nodes"
(nzClick)="activeNode($event)"
(nzDblClick)="openFolder($event)"
[nzTreeTemplate]="nzTreeTemplate"
></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin"> <ng-template #nzTreeTemplate let-node let-origin="origin">
<span class="custom-node"> <span class="custom-node">
<span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)"> <span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)">
@ -79,57 +68,46 @@
</ul> </ul>
</nz-dropdown-menu> </nz-dropdown-menu>
</div> </div>
<div nz-col nzMd="16" nzSm="24"> <div nz-col nzMd="18" nzSm="24" class="grid-border">
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber"
nzBordered [nzLoading]="this.query.tableLoading" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center">{{ 'mxk.resources.appName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.resources.appName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.resources.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.resources.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.resources.resourceType' | i18n }}</th> <th nzAlign="center">{{ 'mxk.resources.resourceType' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.sortIndex' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
><a>{{ 'mxk.text.action' | i18n }}</a></th <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left"> <td nzAlign="left">
<span>{{ data.appName }}</span> <span>{{ data.appName }}</span>
</td> </td>
<td nzAlign="center"> {{ data.name }}</td> <td nzAlign="left"> {{ data.name }}</td>
<td nzAlign="center"> {{ data.resourceType }}</td> <td nzAlign="left"> {{ data.resourceType }}</td>
<td nzAlign="center"> {{ data.sortIndex }}</td> <td nzAlign="center"> {{ data.sortIndex }}</td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="center"> <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill"
><div nz-col> style="color: green"></i></td>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <td nzAlign="left" nzBreakWord="false">
<div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -6,47 +6,32 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="username">{{ 'mxk.users.username' | i18n }}</nz-form-label> <nz-form-label nzFor="username">{{ 'mxk.users.username' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
nz-input placeholder="" id="username" />
[(ngModel)]="query.params.username"
[ngModelOptions]="{ standalone: true }"
name="username"
placeholder=""
id="username"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button> <button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button>
</div> </div>
</div> </div>
</form> </form>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzBordered (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
@ -58,18 +43,17 @@
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled" <td nzAlign="left"> {{ data.username }}</td>
(nzCheckedChange)="onTableItemChecked(data.id, $event)" <td nzAlign="left"> {{ data.displayName }}</td>
></td> <td nzAlign="left"> {{ data.employeeNumber }}</td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="left"> {{ data.department }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="left"> {{ data.jobTitle }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' |
<td nzAlign="center"> {{ data.department }}</td> i18n) }}</td>
<td nzAlign="center"> {{ data.jobTitle }}</td> <td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill"
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> style="color: green"></i></td>
<td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"></i></td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -8,18 +8,12 @@
<nz-form-label nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-input-group nzSearch [nzAddOnAfter]="suffixButton"> <nz-input-group nzSearch [nzAddOnAfter]="suffixButton">
<input <input nz-input [(ngModel)]="query.params.roleName" [ngModelOptions]="{ standalone: true }"
nz-input name="roleName" readonly placeholder="" id="roleName" />
[(ngModel)]="query.params.roleName"
[ngModelOptions]="{ standalone: true }"
name="roleName"
readonly
placeholder=""
id="roleName"
/>
</nz-input-group> </nz-input-group>
<ng-template #suffixButton> <ng-template #suffixButton>
<button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n }}</button> <button nz-button nzType="primary" (click)="onSelect($event)" nzSearch>{{ 'mxk.text.select' | i18n
}}</button>
</ng-template> </ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
@ -28,23 +22,18 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
nz-input placeholder="" id="username" />
[(ngModel)]="query.params.username"
[ngModelOptions]="{ standalone: true }"
name="username"
placeholder=""
id="username"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 4" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -59,62 +48,42 @@
</div> </div>
<div nz-col nzMd="24" nzSm="24"> <div nz-col nzMd="24" nzSm="24">
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber"
nzBordered [nzLoading]="this.query.tableLoading" (nzQueryParams)="onQueryParamsChange($event)">
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled" <td nzAlign="left"> {{ data.roleName }}</td>
(nzCheckedChange)="onTableItemChecked(data.id, $event)" <td nzAlign="left"> {{ data.username }}</td>
></td> <td nzAlign="left"> {{ data.employeeNumber }}</td>
<td nzAlign="center"> {{ data.roleName }}</td> <td nzAlign="left"> {{ data.displayName }}</td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="left"> {{ data.department }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="left"> {{ data.jobTitle }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' |
<td nzAlign="center"> {{ data.department }}</td> i18n) }}</td>
<td nzAlign="center"> {{ data.jobTitle }}</td> <td nzAlign="left" nzBreakWord="false">
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> <div nz-col>
<td nzAlign="left" nzBreakWord="false" <button *ngIf="data.dynamic == '0'" nz-button type="button" (click)="onDelete($event, data.id)"
><div nz-col> [nzType]="'primary'" nzDanger>{{ 'mxk.text.delete' | i18n }}</button>
<button </div>
*ngIf="data.dynamic == '0'" </td>
nz-button
type="button"
(click)="onDelete($event, data.id)"
[nzType]="'primary'"
nzDanger
>{{ 'mxk.text.delete' | i18n }}</button
></div
></td
>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -7,17 +7,19 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name" placeholder="" id="name" /> <input nz-input [(ngModel)]="query.params.name" [ngModelOptions]="{ standalone: true }" name="name"
placeholder="" id="name" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -29,58 +31,43 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
#dynamicTable [nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
nzTableLayout="auto" [nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzSize="small" (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
nzBordered
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
[nzScroll]="{ x: '100%', y: '100%' }"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">Id</th> <th nzAlign="center" style="display: none">Id</th>
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th> <th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.roles.dynamic' | i18n }}</th> <th nzAlign="center">{{ 'mxk.roles.dynamic' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th> <th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="left" nzBreakWord="false">{{ data.name }}</td> <td nzAlign="left" nzBreakWord="false">{{ data.name }}</td>
<td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"></i></td> <td nzAlign="center"> <i *ngIf="data.dynamic == 1" nz-icon nzType="check-circle" nzTheme="fill"
style="color: green"></i></td>
<td nzAlign="left">{{ data.description }}</td> <td nzAlign="left">{{ data.description }}</td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="left" nzBreakWord="false">
><div nz-col> <div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -7,23 +7,18 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
nz-input placeholder="" id="username" />
[(ngModel)]="query.params.username"
[ngModelOptions]="{ standalone: true }"
name="username"
placeholder=""
id="username"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button> <button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button>
</div> </div>
</div> </div>
@ -32,15 +27,8 @@
<nz-card [nzBordered]="false"> <nz-card [nzBordered]="false">
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }"> <div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }">
<div nz-col nzMd="6" nzSm="24"> <div nz-col nzMd="6" nzSm="24">
<nz-tree <nz-tree nzShowLine="false" [nzCheckable]="treeNodes.checkable" nzBlockNode [nzData]="treeNodes.nodes"
nzShowLine="false" (nzClick)="activeNode($event)" (nzDblClick)="openFolder($event)" [nzTreeTemplate]="nzTreeTemplate"></nz-tree>
[nzCheckable]="treeNodes.checkable"
nzBlockNode
[nzData]="treeNodes.nodes"
(nzClick)="activeNode($event)"
(nzDblClick)="openFolder($event)"
[nzTreeTemplate]="nzTreeTemplate"
></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin"> <ng-template #nzTreeTemplate let-node let-origin="origin">
<span class="custom-node"> <span class="custom-node">
<span *ngIf="!node.isLeaf"> <span *ngIf="!node.isLeaf">
@ -55,26 +43,15 @@
</ng-template> </ng-template>
</div> </div>
<div nz-col nzMd="18" nzSm="24"> <div nz-col nzMd="18" nzSm="24">
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered sizeChanger="true" nzShowSizeChanger
#dynamicTable [nzData]="query.results.rows" [nzFrontPagination]="false" [nzTotal]="query.results.records"
nzTableLayout="auto" [nzPageSizeOptions]="query.params.pageSizeOptions" [nzPageSize]="query.params.pageSize"
nzSize="small" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzBordered (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
sizeChanger="true"
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">{{ 'mxk.text.id' | i18n }}</th> <th nzAlign="center" style="display: none">{{ 'mxk.text.id' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
@ -82,27 +59,23 @@
<th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
><a>{{ 'mxk.text.action' | i18n }}</a></th
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="left"> {{ data.username }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="left"> {{ data.displayName }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="left"> {{ data.employeeNumber }}</td>
<td nzAlign="center"> {{ data.department }}</td> <td nzAlign="left"> {{ data.department }}</td>
<td nzAlign="center"> {{ data.jobTitle }}</td> <td nzAlign="left"> {{ data.jobTitle }}</td>
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' |
i18n) }}</td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -7,23 +7,18 @@
<nz-form-item> <nz-form-item>
<nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label> <nz-form-label nzFor="name">{{ 'mxk.users.username' | i18n }}</nz-form-label>
<nz-form-control> <nz-form-control>
<input <input nz-input [(ngModel)]="query.params.username" [ngModelOptions]="{ standalone: true }" name="username"
nz-input placeholder="" id="username" />
[(ngModel)]="query.params.username"
[ngModelOptions]="{ standalone: true }"
name="username"
placeholder=""
id="username"
/>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm"> <div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button> <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button> i18n }}</button>
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
i18n }}</button>
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none"> <button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button {{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
>
</div> </div>
</div> </div>
</form> </form>
@ -36,16 +31,9 @@
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button> }}</button>
</div> </div>
<div nz-col nzMd="6" nzSm="24"> <div nz-col nzMd="6" nzSm="24" class="grid-border">
<nz-tree <nz-tree nzShowLine="false" [nzCheckable]="treeNodes.checkable" nzBlockNode [nzData]="treeNodes.nodes"
nzShowLine="false" (nzClick)="activeNode($event)" (nzDblClick)="openFolder($event)" [nzTreeTemplate]="nzTreeTemplate"></nz-tree>
[nzCheckable]="treeNodes.checkable"
nzBlockNode
[nzData]="treeNodes.nodes"
(nzClick)="activeNode($event)"
(nzDblClick)="openFolder($event)"
[nzTreeTemplate]="nzTreeTemplate"
></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin"> <ng-template #nzTreeTemplate let-node let-origin="origin">
<span class="custom-node"> <span class="custom-node">
<span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)"> <span *ngIf="!node.isLeaf" (contextmenu)="contextMenu($event, menu)">
@ -65,27 +53,16 @@
</ul> </ul>
</nz-dropdown-menu> </nz-dropdown-menu>
</div> </div>
<div nz-col nzMd="18" nzSm="24"> <div nz-col nzMd="18" nzSm="24" class="grid-border">
<nz-table <nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered sizeChanger="true" nzShowSizeChanger
#dynamicTable [nzData]="query.results.rows" [nzFrontPagination]="false" [nzTotal]="query.results.records"
nzTableLayout="auto" [nzPageSizeOptions]="query.params.pageSizeOptions" [nzPageSize]="query.params.pageSize"
nzSize="small" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
nzBordered (nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
sizeChanger="true"
nzShowSizeChanger
[nzData]="query.results.rows"
[nzFrontPagination]="false"
[nzTotal]="query.results.records"
[nzPageSizeOptions]="query.params.pageSizeOptions"
[nzPageSize]="query.params.pageSize"
[nzPageIndex]="query.params.pageNumber"
[nzLoading]="this.query.tableLoading"
(nzQueryParams)="onQueryParamsChange($event)"
nzWidth="100%"
>
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate"
(nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center" style="display: none">{{ 'mxk.text.id' | i18n }}</th> <th nzAlign="center" style="display: none">{{ 'mxk.text.id' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
@ -93,37 +70,41 @@
<th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.department' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.jobTitle' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.gender' | i18n }}</th>
<th nzAlign="center" <th nzAlign="center">{{ 'mxk.text.status' | i18n }}</th>
><a>{{ 'mxk.text.action' | i18n }}</a></th <th nzAlign="center"><a>{{ 'mxk.text.action' | i18n }}</a></th>
>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let data of query.results.rows"> <tr *ngFor="let data of query.results.rows">
<td <td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
[nzChecked]="query.tableCheckedId.has(data.id)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
[nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td>
<td nzAlign="left" style="display: none"> <td nzAlign="left" style="display: none">
<span>{{ data.id }}</span> <span>{{ data.id }}</span>
</td> </td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="left"> {{ data.username }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="left"> {{ data.displayName }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="left"> {{ data.employeeNumber }}</td>
<td nzAlign="center"> {{ data.department }}</td> <td nzAlign="left"> {{ data.department }}</td>
<td nzAlign="center"> {{ data.jobTitle }}</td> <td nzAlign="left"> {{ data.jobTitle }}</td>
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' |
<td nzAlign="left" nzBreakWord="false" i18n) }}</td>
><div nz-col> <td nzAlign="center">
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'" style="float: left">{{ <i *ngIf="data.status == 1" nz-icon nzType="check-circle" nzTheme="fill" style="color: green"> </i>
<i *ngIf="data.status == 2" nz-icon nzType="stop" nzTheme="fill" style="color: gray"></i>
<i *ngIf="data.status == 5" nz-icon nzType="lock" nzTheme="fill" style="color: orange"></i>
<i *ngIf="data.status == 9" nz-icon nzType="close-circle" nzTheme="fill" style="color: red"></i>
</td>
<td nzAlign="left" nzBreakWord="false">
<div nz-col>
<button nz-button type="button" (click)="onEdit($event, data.id)" [nzType]="'primary'"
style="float: left">{{
'mxk.text.edit' | i18n 'mxk.text.edit' | i18n
}}</button> }}</button>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{
'mxk.text.delete' | i18n 'mxk.text.delete' | i18n
}}</button></div }}</button>
></td </div>
> </td>
</tr> </tr>
</tbody> </tbody>
</nz-table> </nz-table>

View File

@ -252,7 +252,7 @@
"sslSwitch": "SSL", "sslSwitch": "SSL",
"filters": "Filters", "filters": "Filters",
"basedn": "Base DN", "basedn": "Base DN",
"msadDomain": "Active Directory Domain", "msadDomain": "MSAD Domain",
"accountMapping": "Account Mapping", "accountMapping": "Account Mapping",
"trustStore": "TrustStore", "trustStore": "TrustStore",
"trustStorePassword": "TrustStore Password" "trustStorePassword": "TrustStore Password"
@ -267,7 +267,7 @@
"isdefault":"Is Default" "isdefault":"Is Default"
}, },
"accountsstrategy" :{ "accountsstrategy" :{
"name":"Strategy", "name":"Strategy Name",
"appIcon":"App Icon", "appIcon":"App Icon",
"appId":"App Id", "appId":"App Id",
"appName":"App Name", "appName":"App Name",

View File

@ -57,11 +57,11 @@
}, },
"audit" : { "audit" : {
"": "日志审计", "": "日志审计",
"logins": "登录日志", "logins": "系统登录日志",
"loginapps": "应用登录日志", "loginapps": "应用登录日志",
"synchronizer": "同步器日志", "synchronizer": "同步器日志",
"connector": "连接器日志", "connector": "连接器日志",
"operate": "管理日志" "operate": "系统管理日志"
} }
}, },
"home":{ "home":{
@ -211,7 +211,7 @@
"accounts":{ "accounts":{
"userId":"用户编号", "userId":"用户编号",
"username":"登录账号", "username":"登录账号",
"displayName":"用户名", "displayName":"名",
"appName":"应用名称", "appName":"应用名称",
"appId":"应用编号", "appId":"应用编号",
"relatedUsername":"应用账号", "relatedUsername":"应用账号",
@ -253,7 +253,7 @@
"sslSwitch": "SSL", "sslSwitch": "SSL",
"filters": "过滤器", "filters": "过滤器",
"basedn": "基本DN", "basedn": "基本DN",
"msadDomain": "Active Directory域", "msadDomain": "AD域",
"accountMapping": "账号映射", "accountMapping": "账号映射",
"trustStore": "证书", "trustStore": "证书",
"trustStorePassword": "证书密钥" "trustStorePassword": "证书密钥"
@ -269,7 +269,7 @@
}, },
"accountsstrategy" :{ "accountsstrategy" :{
"id":"策略编码", "id":"策略编码",
"name":"策略", "name":"策略名称",
"appIcon":"应用图标", "appIcon":"应用图标",
"appId":"应用编码", "appId":"应用编码",
"appName":"应用名称", "appName":"应用名称",
@ -568,7 +568,7 @@
"login.id":"编号", "login.id":"编号",
"login.sessionId":"会话", "login.sessionId":"会话",
"login.username":"登录名", "login.username":"登录名",
"login.displayName":"用户名称", "login.displayName":"姓名",
"login.provider":"提供商", "login.provider":"提供商",
"login.message":"状态", "login.message":"状态",
"login.loginType":"登录方式", "login.loginType":"登录方式",
@ -586,7 +586,7 @@
"loginapps.sessionId":"会话", "loginapps.sessionId":"会话",
"loginapps.userId":"用户编号", "loginapps.userId":"用户编号",
"loginapps.username":"登录名", "loginapps.username":"登录名",
"loginapps.displayName":"用户名", "loginapps.displayName":"名",
"loginapps.appId":"应用编号", "loginapps.appId":"应用编号",
"loginapps.appName":"应用名称", "loginapps.appName":"应用名称",
"loginapps.loginTime":"登录时间", "loginapps.loginTime":"登录时间",

View File

@ -14,7 +14,6 @@
* limitations under the License. * limitations under the License.
*/ */
/* /*
* Automatically generated by 'ng g ng-alain:plugin icon' * Automatically generated by 'ng g ng-alain:plugin icon'
* @see https://ng-alain.com/cli/plugin#icon * @see https://ng-alain.com/cli/plugin#icon
@ -50,6 +49,7 @@ import {
LaptopOutline, LaptopOutline,
LikeOutline, LikeOutline,
LockOutline, LockOutline,
LockFill,
LogoutOutline, LogoutOutline,
MailOutline, MailOutline,
MenuFoldOutline, MenuFoldOutline,
@ -65,6 +65,7 @@ import {
ShoppingCartOutline, ShoppingCartOutline,
SoundOutline, SoundOutline,
StarOutline, StarOutline,
StopFill,
TaobaoCircleOutline, TaobaoCircleOutline,
TaobaoOutline, TaobaoOutline,
TeamOutline, TeamOutline,
@ -137,6 +138,7 @@ export const ICONS_AUTO = [
LaptopOutline, LaptopOutline,
LikeOutline, LikeOutline,
LockOutline, LockOutline,
LockFill,
LogoutOutline, LogoutOutline,
MailOutline, MailOutline,
MenuFoldOutline, MenuFoldOutline,
@ -156,6 +158,7 @@ export const ICONS_AUTO = [
ShoppingCartOutline, ShoppingCartOutline,
SoundOutline, SoundOutline,
StarOutline, StarOutline,
StopFill,
TaobaoCircleOutline, TaobaoCircleOutline,
TaobaoOutline, TaobaoOutline,
TeamOutline, TeamOutline,

View File

@ -59,3 +59,7 @@
/** background-color: aliceblue */ /** background-color: aliceblue */
} }
.grid-border{
border: 1px solid #f0f0f0;
}

View File

@ -46,7 +46,7 @@ public class MaxKeyMgtListenerConfig implements InitializingBean {
SessionListenerAdapter.class, SessionListenerAdapter.class,
scheduler, scheduler,
new ListenerParameter().add("sessionManager",sessionManager).build(), new ListenerParameter().add("sessionManager",sessionManager).build(),
"0 0/10 * * * ?",//10 minutes "0 0/1 * * * ?",//10 minutes
SessionListenerAdapter.class.getSimpleName() SessionListenerAdapter.class.getSimpleName()
); );
_logger.debug("Session ListenerAdapter inited ."); _logger.debug("Session ListenerAdapter inited .");

View File

@ -16,9 +16,12 @@
package org.maxkey.listener; package org.maxkey.listener;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import org.maxkey.authn.session.Session;
import org.maxkey.authn.session.SessionManager; import org.maxkey.authn.session.SessionManager;
import org.maxkey.entity.HistoryLogin; import org.maxkey.entity.HistoryLogin;
import org.maxkey.util.DateUtils;
import org.quartz.Job; import org.quartz.Job;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
@ -41,14 +44,32 @@ public class SessionListenerAdapter extends ListenerAdapter implements Job , S
jobStatus = JOBSTATUS.RUNNING; jobStatus = JOBSTATUS.RUNNING;
try { try {
if(sessionManager != null) { if(sessionManager != null) {
for (HistoryLogin onlineSession : sessionManager.querySessions()) { int sessionCount = 0;
if(sessionManager.get(onlineSession.getSessionId()) == null) { for (HistoryLogin login : sessionManager.querySessions()) {
Session session = sessionManager.get(login.getSessionId());
if(session == null) {
_logger.debug("user {} session {} Login at {} and TimeOut at {} ." ,
login.getUsername(),
login.getId(),
login.getLoginTime(),
DateUtils.formatDateTime(new Date())
);
sessionManager.terminate( sessionManager.terminate(
onlineSession.getSessionId(), login.getSessionId(),
onlineSession.getUserId(), login.getUserId(),
onlineSession.getUsername()); login.getUsername());
}else {
_logger.debug("user {} session {} Login at {} , Last Access at {} will Expired at {}." ,
login.getUsername(),
login.getId(),
session.getStartTimestamp(),
session.getLastAccessTime(),
session.getExpiredTime()
);
sessionCount ++ ;
} }
} }
_logger.debug("current session count {} ." ,sessionCount);
} }
_logger.debug("finished " ); _logger.debug("finished " );
jobStatus = JOBSTATUS.FINISHED; jobStatus = JOBSTATUS.FINISHED;

View File

@ -40,11 +40,11 @@ maxkey.server.persistence =0
#identity none, Kafka ,RocketMQ #identity none, Kafka ,RocketMQ
maxkey.server.message.queue =${SERVER_MESSAGE_QUEUE:none} maxkey.server.message.queue =${SERVER_MESSAGE_QUEUE:none}
maxkey.session.timeout =${SERVER_SESSION_TIMEOUT:1800} maxkey.session.timeout =${SERVER_SESSION_TIMEOUT:600}
maxkey.auth.jwt.issuer =${maxkey.server.uri} maxkey.auth.jwt.issuer =${maxkey.server.uri}
#default 900
maxkey.auth.jwt.expires =900 maxkey.auth.jwt.expires =300
maxkey.auth.jwt.secret =7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg maxkey.auth.jwt.secret =7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg
maxkey.auth.jwt.refresh.secret =7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg maxkey.auth.jwt.refresh.secret =7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg
############################################################################ ############################################################################