Merge branch 'hotfix/1.9.1'
This commit is contained in:
commit
88dd85a575
162 changed files with 2646 additions and 5774 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -65,3 +65,5 @@ npm-debug.log
|
|||
#Sublime project files
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
sync-backend.ps1
|
||||
sync-frontend.ps1
|
||||
|
|
|
|||
|
|
@ -5,16 +5,12 @@
|
|||
<parent>
|
||||
<groupId>ru.micord.ervu.lkrp</groupId>
|
||||
<artifactId>ul</artifactId>
|
||||
<version>1.9.1</version>
|
||||
<version>1.9.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<groupId>ru.micord.ervu.lkrp.ul</groupId>
|
||||
<artifactId>backend</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-jwt</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
|
|
@ -33,23 +29,10 @@
|
|||
<artifactId>resources</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-jasper</groupId>
|
||||
<artifactId>reporting-jasper-fonts</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ocpsoft.prettytime</groupId>
|
||||
<artifactId>prettytime</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jooq</groupId>
|
||||
<artifactId>jooq</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.santuario</groupId>
|
||||
<artifactId>xmlsec</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
|
|
@ -139,6 +122,10 @@
|
|||
<artifactId>database-impl</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.annotation</groupId>
|
||||
<artifactId>javax.annotation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.jndi</groupId>
|
||||
<artifactId>jndi-beans</artifactId>
|
||||
|
|
@ -147,51 +134,10 @@
|
|||
<groupId>ru.cg.webbpm.modules.jndi</groupId>
|
||||
<artifactId>jndi-inject</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>javax.mail</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.database</groupId>
|
||||
<artifactId>database-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules</groupId>
|
||||
<artifactId>standard-annotations</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.core</groupId>
|
||||
<artifactId>metrics</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting</groupId>
|
||||
<artifactId>reporting-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting</groupId>
|
||||
<artifactId>reporting-runtime-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting</groupId>
|
||||
<artifactId>reporting-runtime-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-jasper</groupId>
|
||||
<artifactId>reporting-jasper-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-jasper</groupId>
|
||||
<artifactId>reporting-jasper-runtime-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-xdoc</groupId>
|
||||
<artifactId>reporting-xdoc-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.reporting.reporting-xdoc</groupId>
|
||||
<artifactId>reporting-xdoc-runtime-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.liquibase</groupId>
|
||||
<artifactId>liquibase-core</artifactId>
|
||||
|
|
@ -200,22 +146,6 @@
|
|||
<groupId>ru.cg.webbpm.modules</groupId>
|
||||
<artifactId>webkit-base</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xerces</groupId>
|
||||
<artifactId>xercesImpl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.micord.fias</groupId>
|
||||
<artifactId>client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tika</groupId>
|
||||
<artifactId>tika-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.javacrumbs.shedlock</groupId>
|
||||
<artifactId>shedlock-spring</artifactId>
|
||||
|
|
@ -244,6 +174,10 @@
|
|||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.lookfirst</groupId>
|
||||
<artifactId>sardine</artifactId>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
package ru.micord.ervu.kafka.controller;
|
||||
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import ervu.client.fileupload.WebDavClient;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
|
@ -22,6 +25,7 @@ import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
|
|||
*/
|
||||
@RestController
|
||||
public class ErvuKafkaController {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||
|
||||
@Autowired
|
||||
private ReplyingKafkaService replyingKafkaService;
|
||||
|
|
@ -56,7 +60,14 @@ public class ErvuKafkaController {
|
|||
objectMapper.writeValueAsString(data)
|
||||
);
|
||||
ExcerptResponse excerptResponse = objectMapper.readValue(kafkaResponse, ExcerptResponse.class);
|
||||
return webDavClient.webDavDownloadFile(excerptResponse.getFileUrl());
|
||||
if (!excerptResponse.getSuccess()) {
|
||||
throw new RuntimeException("Error with getting excerpt url " + excerptResponse.getMessage());
|
||||
}
|
||||
else if (excerptResponse.getData() == null || excerptResponse.getData().getFileUrl() == null
|
||||
|| excerptResponse.getData().getFileUrl().isEmpty()) {
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
return webDavClient.webDavDownloadFile(excerptResponse.getData().getFileUrl());
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package ru.micord.ervu.kafka.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
/**
|
||||
* @author Eduard Tihomirov
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class ExcerptData implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private String orgId;
|
||||
private String fileUrl;
|
||||
|
||||
public String getOrgId() {
|
||||
return orgId;
|
||||
}
|
||||
|
||||
public void setOrgId(String orgId) {
|
||||
this.orgId = orgId;
|
||||
}
|
||||
|
||||
public String getFileUrl() {
|
||||
return fileUrl;
|
||||
}
|
||||
|
||||
public void setFileUrl(String fileUrl) {
|
||||
this.fileUrl = fileUrl;
|
||||
}
|
||||
}
|
||||
|
|
@ -9,24 +9,31 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
|||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class ExcerptResponse implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private boolean success;
|
||||
private String message;
|
||||
private ExcerptData data;
|
||||
|
||||
private String orgId;
|
||||
|
||||
private String fileUrl;
|
||||
|
||||
public String getOrgId() {
|
||||
return orgId;
|
||||
public boolean getSuccess() {
|
||||
return success;
|
||||
}
|
||||
|
||||
public void setOrgId(String orgId) {
|
||||
this.orgId = orgId;
|
||||
public void setSuccess(boolean success) {
|
||||
this.success = success;
|
||||
}
|
||||
|
||||
public String getFileUrl() {
|
||||
return fileUrl;
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setFileUrl(String fileUrl) {
|
||||
this.fileUrl = fileUrl;
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public ExcerptData getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(ExcerptData data) {
|
||||
this.data = data;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
package ru.micord.ervu.property.grid;
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
public enum FilterType {
|
||||
TEXT,
|
||||
DATE,
|
||||
NUMBER,
|
||||
SET
|
||||
}
|
||||
|
|
@ -7,4 +7,5 @@ public class StaticColumn {
|
|||
|
||||
public String column;
|
||||
public String type;
|
||||
public FilterType filterType;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import org.springframework.security.web.AuthenticationEntryPoint;
|
|||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||
import org.springframework.security.web.authentication.logout.LogoutFilter;
|
||||
import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy;
|
||||
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
|
||||
import org.springframework.security.web.csrf.CsrfTokenRequestHandler;
|
||||
import org.springframework.security.web.csrf.XorCsrfTokenRequestAttributeHandler;
|
||||
|
|
@ -49,29 +50,22 @@ public class SecurityConfig {
|
|||
}
|
||||
|
||||
@Bean
|
||||
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
||||
httpConfigure(http);
|
||||
http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
|
||||
http.addFilterBefore(new RequestContextFilter(), LogoutFilter.class);
|
||||
http.addFilterAfter(filterChainExceptionHandler, RequestContextFilter.class);
|
||||
return http.build();
|
||||
}
|
||||
|
||||
protected void httpConfigure(HttpSecurity httpSecurity) throws Exception {
|
||||
CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
|
||||
tokenRepository.setCookiePath("/");
|
||||
public SecurityFilterChain filterChain(HttpSecurity http,
|
||||
CookieCsrfTokenRepository tokenRepository)
|
||||
throws Exception {
|
||||
XorCsrfTokenRequestAttributeHandler delegate = new XorCsrfTokenRequestAttributeHandler();
|
||||
delegate.setCsrfRequestAttributeName(null);
|
||||
// Use only the handle() method of XorCsrfTokenRequestAttributeHandler and the
|
||||
// default implementation of resolveCsrfTokenValue() from CsrfTokenRequestHandler
|
||||
CsrfTokenRequestHandler requestHandler = delegate::handle;
|
||||
httpSecurity.authorizeHttpRequests(
|
||||
http.authorizeHttpRequests(
|
||||
(authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers(PERMIT_ALL)
|
||||
.permitAll()
|
||||
.anyRequest()
|
||||
.authenticated())
|
||||
.csrf((csrf) -> csrf.csrfTokenRepository(tokenRepository)
|
||||
.csrfTokenRequestHandler(requestHandler))
|
||||
.csrfTokenRequestHandler(requestHandler)
|
||||
.sessionAuthenticationStrategy(new NullAuthenticatedSessionStrategy()))
|
||||
.logout((logout) -> logout.logoutUrl(ESIA_LOGOUT)
|
||||
.logoutSuccessHandler(new LogoutSuccessHandler(tokenRepository, esiaAuthService)))
|
||||
.exceptionHandling()
|
||||
|
|
@ -79,6 +73,19 @@ public class SecurityConfig {
|
|||
.and()
|
||||
.sessionManagement()
|
||||
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
|
||||
http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
|
||||
http.addFilterBefore(new RequestContextFilter(), LogoutFilter.class);
|
||||
http.addFilterAfter(filterChainExceptionHandler, RequestContextFilter.class);
|
||||
return http.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CookieCsrfTokenRepository cookieCsrfTokenRepository() {
|
||||
CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
|
||||
tokenRepository.setCookieName(TokenConstants.CSRF_TOKEN_NAME);
|
||||
tokenRepository.setHeaderName(TokenConstants.CSRF_HEADER_NAME);
|
||||
tokenRepository.setCookiePath("/");
|
||||
return tokenRepository;
|
||||
}
|
||||
|
||||
public AuthenticationEntryPoint entryPoint() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
package ru.micord.ervu.security;
|
||||
|
||||
public final class TokenConstants {
|
||||
public static String CSRF_TOKEN_NAME = "XSRF-TOKEN-LKRP-UL";
|
||||
public static String CSRF_HEADER_NAME = "X-XSRF-TOKEN-LKRP-UL";
|
||||
|
||||
private TokenConstants() {
|
||||
//must be empty
|
||||
}
|
||||
}
|
||||
|
|
@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import ervu.service.okopf.OkopfService;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import ru.micord.ervu.security.esia.token.TokensStore;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
@ -50,7 +51,6 @@ import ru.micord.ervu.security.webbpm.jwt.JwtAuthentication;
|
|||
import ru.micord.ervu.security.webbpm.jwt.helper.SecurityHelper;
|
||||
import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
|
||||
import ru.micord.ervu.security.webbpm.jwt.model.Token;
|
||||
import ru.micord.ervu.security.webbpm.jwt.util.SecurityUtil;
|
||||
|
||||
/**
|
||||
* @author Eduard Tihomirov
|
||||
|
|
@ -72,6 +72,8 @@ public class EsiaAuthService {
|
|||
private OkopfService okopfService;
|
||||
@Autowired
|
||||
private SecurityHelper securityHelper;
|
||||
@Autowired
|
||||
private AuthenticationManager authenticationManager;
|
||||
|
||||
@Value("${ervu.kafka.org.reply.topic}")
|
||||
private String requestReplyTopic;
|
||||
|
|
@ -211,16 +213,16 @@ public class EsiaAuthService {
|
|||
if (tokenResponse.getError() != null) {
|
||||
throw new RuntimeException(tokenResponse.getError_description());
|
||||
}
|
||||
String accessToken = tokenResponse.getAccess_token();
|
||||
String esiaAccessTokenStr = tokenResponse.getAccess_token();
|
||||
String esiaRefreshTokenStr = tokenResponse.getRefresh_token();
|
||||
|
||||
boolean hasRole = ulDataService.checkRole(accessToken);
|
||||
EsiaAccessToken esiaAccessToken = ulDataService.readToken(accessToken);
|
||||
boolean hasRole = ulDataService.checkRole(esiaAccessTokenStr);
|
||||
EsiaAccessToken esiaAccessToken = ulDataService.readToken(esiaAccessTokenStr);
|
||||
String prnOid = esiaAccessToken.getSbj_id();
|
||||
String refreshToken = tokenResponse.getRefresh_token();
|
||||
String ervuId = getErvuId(accessToken, prnOid);
|
||||
String ervuId = getErvuId(esiaAccessTokenStr, prnOid);
|
||||
Long expiresIn = tokenResponse.getExpires_in();
|
||||
TokensStore.addAccessToken(prnOid, accessToken, expiresIn);
|
||||
TokensStore.addRefreshToken(prnOid, refreshToken, expiresIn);
|
||||
TokensStore.addAccessToken(prnOid, esiaAccessTokenStr, expiresIn);
|
||||
TokensStore.addRefreshToken(prnOid, esiaRefreshTokenStr, expiresIn);
|
||||
Token token = jwtTokenService.createAccessToken(esiaAccessToken.getSbj_id(), expiresIn, ervuId, hasRole);
|
||||
int expiry = tokenResponse.getExpires_in().intValue();
|
||||
Cookie accessCookie = securityHelper.createAccessCookie(token.getValue(), expiry);
|
||||
|
|
@ -228,9 +230,10 @@ public class EsiaAuthService {
|
|||
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken =
|
||||
new UsernamePasswordAuthenticationToken(token.getUserAccountId(), null);
|
||||
SecurityContext context = SecurityContextHolder.createEmptyContext();
|
||||
JwtAuthentication authentication = new JwtAuthentication(usernamePasswordAuthenticationToken,
|
||||
JwtAuthentication jwtAuthentication = new JwtAuthentication(usernamePasswordAuthenticationToken,
|
||||
esiaAccessToken.getSbj_id(), token.getValue());
|
||||
context.setAuthentication(authentication);
|
||||
authenticationManager.authenticate(jwtAuthentication);
|
||||
context.setAuthentication(jwtAuthentication);
|
||||
SecurityContextHolder.setContext(context);
|
||||
Cookie authMarkerCookie = securityHelper.createAuthMarkerCookie("true", expiry);
|
||||
response.addCookie(authMarkerCookie);
|
||||
|
|
|
|||
|
|
@ -245,9 +245,11 @@ public class UlDataServiceImpl implements UlDataService {
|
|||
JsonNode elementsNode = rootNode.path("elements");
|
||||
StringBuilder names = new StringBuilder();
|
||||
for (JsonNode element : elementsNode) {
|
||||
if (element.path("itSystem").asText().equals(esiaConfig.getClientId())) {
|
||||
String name = element.path("name").asText();
|
||||
names.append(name).append("\n");
|
||||
}
|
||||
}
|
||||
return names.toString();
|
||||
}
|
||||
catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
package ru.micord.ervu.security.listener;
|
||||
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.security.authentication.event.AuthenticationSuccessEvent;
|
||||
import org.springframework.security.web.csrf.CsrfTokenRepository;
|
||||
import org.springframework.security.web.csrf.CsrfTokenRequestAttributeHandler;
|
||||
import org.springframework.security.web.csrf.CsrfTokenRequestHandler;
|
||||
import org.springframework.security.web.csrf.DeferredCsrfToken;
|
||||
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import static org.springframework.web.context.request.RequestAttributes.REFERENCE_REQUEST;
|
||||
|
||||
|
||||
@Component
|
||||
public class JwtUpdateListener implements ApplicationListener<AuthenticationSuccessEvent> {
|
||||
private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||
|
||||
private final CsrfTokenRepository tokenRepository;
|
||||
private final Set<AntPathRequestMatcher> csrfUpdateRequiredPathMatchers;
|
||||
|
||||
private CsrfTokenRequestHandler requestHandler = new CsrfTokenRequestAttributeHandler();
|
||||
|
||||
@Autowired
|
||||
public JwtUpdateListener(CsrfTokenRepository tokenRepository) {
|
||||
Assert.notNull(tokenRepository, "tokenRepository cannot be null");
|
||||
this.tokenRepository = tokenRepository;
|
||||
this.csrfUpdateRequiredPathMatchers = Arrays.stream(new String[] {"/esia/auth"})
|
||||
.map(AntPathRequestMatcher::new)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(AuthenticationSuccessEvent event) {
|
||||
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
||||
HttpServletRequest request = (HttpServletRequest) Objects.requireNonNull(requestAttributes)
|
||||
.resolveReference(
|
||||
REFERENCE_REQUEST);
|
||||
HttpServletResponse response = ((ServletRequestAttributes) requestAttributes).getResponse();
|
||||
|
||||
//if csrf cookie update is not required return
|
||||
if (this.csrfUpdateRequiredPathMatchers.stream()
|
||||
.noneMatch(matcher -> matcher.matches(request))) {
|
||||
return;
|
||||
}
|
||||
boolean containsToken = this.tokenRepository.loadToken(request) != null;
|
||||
|
||||
if (containsToken) {
|
||||
this.tokenRepository.saveToken(null, request, response);
|
||||
DeferredCsrfToken deferredCsrfToken = this.tokenRepository.loadDeferredToken(request,
|
||||
response
|
||||
);
|
||||
this.requestHandler.handle(request, response, deferredCsrfToken::get);
|
||||
this.logger.debug("Replaced CSRF Token");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
TZ=Europe/Moscow
|
||||
# App datasource
|
||||
DB_APP_USERNAME=ervu-lkrp-ul
|
||||
DB_APP_PASSWORD=ervu-lkrp-ul
|
||||
DB_APP_USERNAME=ervu_lkrp_ul
|
||||
DB_APP_PASSWORD=ervu_lkrp_ul
|
||||
DB_APP_HOST=10.10.31.119
|
||||
DB_APP_PORT=5432
|
||||
DB_APP_NAME=ervu-lkrp-ul
|
||||
DB_APP_NAME=ervu_lkrp_ul
|
||||
|
||||
FILE_WEBDAV_UPLOAD_URL=https://ervu-webdav.k8s.micord.ru
|
||||
FILE_WEBDAV_UPLOAD_USERNAME=test
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<parent>
|
||||
<groupId>ru.micord.ervu.lkrp</groupId>
|
||||
<artifactId>ul</artifactId>
|
||||
<version>1.9.1</version>
|
||||
<version>1.9.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<groupId>ru.micord.ervu.lkrp.ul</groupId>
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"port": 8000,
|
||||
"open": false,
|
||||
"files": [
|
||||
"./**/*.{html,htm,css,js}"
|
||||
],
|
||||
"server": {
|
||||
"baseDir": "./"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
6802
frontend/package-lock.json
generated
6802
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -2,7 +2,6 @@
|
|||
"name": "ervu_lkrp_ul",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"lite": "node ./node_modules/lite-server/bin/lite-server",
|
||||
"cleanup": "npm run cleanup-ngc && node ./node_modules/rimraf/bin ./build ./dist",
|
||||
"cleanup-ngc": "node ./node_modules/rimraf/bin ./src/ts/**/*.js ./src/ts/**/*.json ./src/ts/page.routing.ts",
|
||||
"cleanup-and-ngc": "npm run cleanup && npm run ngc",
|
||||
|
|
@ -26,8 +25,8 @@
|
|||
"@angular/platform-browser": "7.2.15",
|
||||
"@angular/platform-browser-dynamic": "7.2.15",
|
||||
"@angular/router": "7.2.15",
|
||||
"@ng-bootstrap/ng-bootstrap": "4.1.1",
|
||||
"@webbpm/base-package": "3.182.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "4.2.2-micord.1",
|
||||
"@webbpm/base-package": "3.185.0",
|
||||
"ag-grid-angular": "29.0.0-micord.4",
|
||||
"ag-grid-community": "29.0.0-micord.4",
|
||||
"angular-calendar": "0.28.28",
|
||||
|
|
@ -40,16 +39,16 @@
|
|||
"core-js": "2.4.1",
|
||||
"date-fns": "2.29.3",
|
||||
"downloadjs": "1.4.8",
|
||||
"eonasdan-bootstrap-datetimepicker": "4.17.47-micord.4",
|
||||
"eonasdan-bootstrap-datetimepicker": "4.17.47-micord.5",
|
||||
"esmarttokenjs": "2.2.1-cg",
|
||||
"font-awesome": "4.7.0",
|
||||
"google-libphonenumber": "3.0.9",
|
||||
"inputmask": "5.0.5-cg.2",
|
||||
"jquery": "3.3.1",
|
||||
"jquery": "3.7.1",
|
||||
"js-year-calendar": "1.0.0-cg.2",
|
||||
"jsgantt-improved": "2.0.10-cg",
|
||||
"moment": "2.17.1",
|
||||
"moment-timezone": "0.5.11",
|
||||
"moment": "2.30.1",
|
||||
"moment-timezone": "0.5.46",
|
||||
"ng2-file-upload": "1.3.0",
|
||||
"ngx-cookie": "3.0.1",
|
||||
"ngx-international-phone-number": "1.0.6",
|
||||
|
|
@ -58,11 +57,11 @@
|
|||
"reflect-metadata": "0.1.13",
|
||||
"rxjs": "6.4.0",
|
||||
"rxjs-compat": "6.4.0",
|
||||
"selectize": "0.12.4-cg.10",
|
||||
"selectize": "0.12.4-cg.11",
|
||||
"systemjs": "0.21.4",
|
||||
"systemjs-plugin-babel": "0.0.25",
|
||||
"tslib": "1.9.3",
|
||||
"zone.js": "0.8.29"
|
||||
"zone.js": "0.11.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-optimizer": "0.13.9",
|
||||
|
|
@ -70,33 +69,33 @@
|
|||
"@angular/cli": "7.3.9",
|
||||
"@angular/compiler-cli": "7.2.15",
|
||||
"@angular/platform-server": "7.2.15",
|
||||
"@babel/core": "7.9.6",
|
||||
"@babel/preset-env": "7.9.6",
|
||||
"@babel/core": "7.18.10",
|
||||
"@babel/preset-env": "7.18.10",
|
||||
"@types/bootstrap": "3.3.39",
|
||||
"@types/jquery": "2.0.49",
|
||||
"@types/eslint": "7.2.5",
|
||||
"@types/jquery": "3.5.5",
|
||||
"@types/node": "7.0.5",
|
||||
"@types/selectize": "0.12.33",
|
||||
"ajv": "8.8.2",
|
||||
"angular-router-loader": "0.8.5",
|
||||
"angular2-template-loader": "0.6.2",
|
||||
"babel-loader": "8.1.0",
|
||||
"babel-loader": "9.1.2",
|
||||
"codelyzer": "5.2.1",
|
||||
"copy-webpack-plugin": "5.0.3",
|
||||
"cross-env": "5.2.1",
|
||||
"css-loader": "2.1.0",
|
||||
"css-loader": "6.11.0",
|
||||
"del": "2.2.2",
|
||||
"file-loader": "3.0.1",
|
||||
"html-webpack-plugin": "4.5.2",
|
||||
"lite-server": "2.3.0",
|
||||
"mini-css-extract-plugin": "0.6.0",
|
||||
"mkdirp": "0.5.1",
|
||||
"raw-loader": "1.0.0",
|
||||
"style-loader": "0.23.1",
|
||||
"terser-webpack-plugin": "1.2.4",
|
||||
"file-loader": "6.2.0",
|
||||
"html-webpack-plugin": "5.6.0",
|
||||
"mini-css-extract-plugin": "2.9.1",
|
||||
"mkdirp": "3.0.1",
|
||||
"raw-loader": "4.0.2",
|
||||
"style-loader": "3.3.4",
|
||||
"terser-webpack-plugin": "5.3.10",
|
||||
"tslint": "5.13.1",
|
||||
"typescript": "3.2.4",
|
||||
"typescript-parser": "2.6.1-cg-fork",
|
||||
"webpack": "4.32.2",
|
||||
"webpack-bundle-analyzer": "3.3.2",
|
||||
"webpack-cli": "3.3.2"
|
||||
"typescript-parser": "2.6.1-cg.2",
|
||||
"webpack": "5.90.1",
|
||||
"webpack-cli": "5.0.2"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<parent>
|
||||
<groupId>ru.micord.ervu.lkrp</groupId>
|
||||
<artifactId>ul</artifactId>
|
||||
<version>1.9.1</version>
|
||||
<version>1.9.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<groupId>ru.micord.ervu.lkrp.ul</groupId>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"filter_cleanup_interval_hours": 720,
|
||||
"filter_cleanup_check_period_minutes": 30,
|
||||
"auth_method": "form",
|
||||
"enable.version.in.url": "false",
|
||||
"enable.version.in.url": "%enable.version.in.url%",
|
||||
"backend.context": "ul",
|
||||
"guard.confirm_exit": false,
|
||||
"message_service_error_timeout": "",
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
1.8.0-SNAPSHOT
|
||||
%project.version%
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
|
||||
.webbpm.ervu_lkrp_ul .title {
|
||||
font-size: var(--size-text-title);
|
||||
font-family: 'InterSB';
|
||||
font-family: 'InterB';
|
||||
padding-top: 0;
|
||||
padding-bottom: var(--indent-medium);
|
||||
}
|
||||
|
|
@ -279,6 +279,10 @@
|
|||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul .data-group .description {
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul .pin + .pin {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
|
@ -440,31 +444,39 @@
|
|||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-icon:is(.ag-icon-small-down, .ag-icon-filter)::before {
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-icon:is(.ag-icon-small-down)::before {
|
||||
content: "";
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-icon.ag-icon-small-down::before {
|
||||
background-image: url(../img/svg/arrow-left.svg);
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-icon.ag-icon-filter::before {
|
||||
background-image: url(../img/svg/filter.svg);
|
||||
top: -4px;
|
||||
left: -4px;
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-icon-menu {
|
||||
background: transparent url(../img/svg/filter.svg) center no-repeat;
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-header-cell-menu-button:not(.ag-header-menu-always-show) {
|
||||
opacity: unset;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter-select {
|
||||
font-size: var(--size-text-secondary);
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter-select .ag-picker-field-wrapper {
|
||||
font-family: 'InterSB';
|
||||
border: 0;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter-select .ag-picker-field-wrapper .ag-picker-field-display {
|
||||
margin: 0;
|
||||
}
|
||||
|
|
@ -472,6 +484,7 @@
|
|||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter-body {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter-body input {
|
||||
color: var(--color-light);
|
||||
font-size: var(--size-text-secondary);
|
||||
|
|
@ -479,6 +492,43 @@
|
|||
padding: 6px 12px !important;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-set-filter {
|
||||
min-width: 100px;
|
||||
padding: 10px 12px;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-set-filter-item + .ag-set-filter-item {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter .ag-filter-checkbox {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border: 2px solid var(--color-link);
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
margin-right: 12px;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter .ag-filter-checkbox:before {
|
||||
content: '';
|
||||
color: white;
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
left: 3px;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-filter .ag-filter-checkbox:checked:before {
|
||||
border-radius: 2px;
|
||||
background: var(--color-link) url(../img/svg/input-checked.svg);
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul ag-grid-angular .ag-header-row {
|
||||
font-family: 'InterSB';
|
||||
}
|
||||
|
|
@ -877,3 +927,13 @@
|
|||
.webbpm.ervu_lkrp_ul .dialog-link {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.webbpm.ervu_lkrp_ul #mydata .data-group:first-child .subtitle {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.webbpm.ervu_lkrp_ul #mydata .right-block field-set:first-child .fieldset {
|
||||
padding-top: 24px;
|
||||
}
|
||||
.webbpm.ervu_lkrp_ul #mydata .right-block field-set:first-child .fieldset::before {
|
||||
display: none;
|
||||
}
|
||||
3
frontend/src/resources/img/svg/input-checked.svg
Normal file
3
frontend/src/resources/img/svg/input-checked.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.56192 6.65976L5.83968 9.93751L11.4379 4.33928" stroke="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 179 B |
|
|
@ -1,12 +1,15 @@
|
|||
import {ColDef, ICellRendererFunc, SuppressKeyboardEventParams} from "ag-grid-community";
|
||||
import {
|
||||
ColDef,
|
||||
DateFilter,
|
||||
ICellRendererFunc,
|
||||
SuppressKeyboardEventParams
|
||||
} from "ag-grid-community";
|
||||
import {
|
||||
DateTimeUtil,
|
||||
DefaultTooltip,
|
||||
GridCellTooltipUtils,
|
||||
GridColumnComparatorUtils,
|
||||
GridColumnFilterUtils,
|
||||
GridColumnKeyboardUtils,
|
||||
GridSettingHeader,
|
||||
GridValueFormatterUtils,
|
||||
GridValueRendererUtils,
|
||||
PinnedType
|
||||
|
|
@ -14,6 +17,7 @@ import {
|
|||
import {Moment} from "moment";
|
||||
import * as moment from "moment-timezone";
|
||||
import {StaticGridColumn} from "../../../generated/ru/micord/ervu/property/grid/StaticGridColumn";
|
||||
import {CustomGridColumnFilterUtils} from "./filter/CustomGridColumnFilterUtils";
|
||||
|
||||
export class StaticColumnInitializer {
|
||||
|
||||
|
|
@ -50,12 +54,18 @@ export class StaticColumnInitializer {
|
|||
let type = column.field.type;
|
||||
|
||||
if (type != null) {
|
||||
if (gridRef.getRowModelType() == "clientSide") {
|
||||
columnDef.comparator = GridColumnComparatorUtils.columnComparator(type);
|
||||
}
|
||||
columnDef.valueFormatter = GridValueFormatterUtils.columnFormatter(type);
|
||||
columnDef.cellRenderer = gridRef.createRenderer(column);
|
||||
}
|
||||
|
||||
if (column.filter !== false) {
|
||||
columnDef.floatingFilter = gridRef.floatingFilter;
|
||||
columnDef.filter = GridColumnFilterUtils.columnFilter(type);
|
||||
columnDef.filter = CustomGridColumnFilterUtils.columnFilter(column.field.filterType);
|
||||
|
||||
if (columnDef.filter === 'agDateColumnFilter') {
|
||||
if (columnDef.filter === DateFilter) {
|
||||
columnDef.filterParams = {
|
||||
comparator: function (filterLocalDateAtMidnight, cellValue) {
|
||||
|
||||
|
|
@ -84,13 +94,6 @@ export class StaticColumnInitializer {
|
|||
}
|
||||
}
|
||||
|
||||
if (gridRef.getRowModelType() == "clientSide") {
|
||||
columnDef.comparator = GridColumnComparatorUtils.columnComparator(type);
|
||||
}
|
||||
columnDef.valueFormatter = GridValueFormatterUtils.columnFormatter(type);
|
||||
columnDef.cellRenderer = gridRef.createRenderer(column);
|
||||
}
|
||||
|
||||
columnDef.suppressKeyboardEvent = (params: SuppressKeyboardEventParams) => {
|
||||
return GridColumnKeyboardUtils.suppressHomeAndEndKeyboardEvent(params);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
import {FilterType} from "../../../../generated/ru/micord/ervu/property/grid/FilterType";
|
||||
import {DateFilter, NumberFilter, TextFilter} from "ag-grid-community";
|
||||
import {SetFilter} from "./SetFilter";
|
||||
|
||||
export class CustomGridColumnFilterUtils {
|
||||
|
||||
public static columnFilter(type: FilterType) {
|
||||
if (!type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case FilterType.NUMBER:
|
||||
return NumberFilter;
|
||||
case FilterType.DATE:
|
||||
return DateFilter;
|
||||
case FilterType.SET:
|
||||
return SetFilter;
|
||||
case FilterType.TEXT:
|
||||
default:
|
||||
return TextFilter;
|
||||
}
|
||||
}
|
||||
}
|
||||
111
frontend/src/ts/ervu/component/grid/filter/SetFilter.ts
Normal file
111
frontend/src/ts/ervu/component/grid/filter/SetFilter.ts
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
import {AgPromise, IDoesFilterPassParams, IFilterComp, IFilterParams} from "ag-grid-community";
|
||||
|
||||
export class SetFilter implements IFilterComp {
|
||||
|
||||
private OPTION_TEMPLATE = `<label class="ag-set-filter-item">
|
||||
<input type="checkbox" class="ag-filter-checkbox" checked/>
|
||||
<span class="ag-filter-value"></span>
|
||||
</label>`;
|
||||
|
||||
private eGui!: HTMLDivElement;
|
||||
private selectAll: HTMLInputElement;
|
||||
private checkboxes: HTMLInputElement[] = [];
|
||||
private values: any[] = [];
|
||||
private initialValues: any[];
|
||||
private filterActive: boolean;
|
||||
private filterChangedCallback!: (additionalEventAttributes?: any) => void;
|
||||
private filterParams!: IFilterParams;
|
||||
private valueType: string;
|
||||
|
||||
init(params: IFilterParams): void {
|
||||
this.eGui = document.createElement('div');
|
||||
this.eGui.className = 'ag-set-filter';
|
||||
let index = 0;
|
||||
this.selectAll = this.initCheckBox('selectAll', 'Все', index);
|
||||
this.checkboxes.push(this.selectAll);
|
||||
|
||||
params.api.getRenderedNodes()
|
||||
.map(node => node.data[params.colDef.field])
|
||||
.sort((n1, n2) => n1 > n2 ? 1 : n1 < n2 ? -1 : 0)
|
||||
.forEach(value => {
|
||||
if (this.values.includes(value)) {
|
||||
return;
|
||||
}
|
||||
index++;
|
||||
let id = `option-${index}`;
|
||||
let checkbox = this.initCheckBox(id, value, index);
|
||||
this.checkboxes.push(checkbox);
|
||||
this.values.push(value);
|
||||
});
|
||||
this.initialValues = this.values.slice();
|
||||
this.filterParams = params;
|
||||
this.filterActive = false;
|
||||
this.filterChangedCallback = params.filterChangedCallback;
|
||||
|
||||
if (this.values.length > 0) {
|
||||
this.valueType = typeof this.values[0];
|
||||
}
|
||||
};
|
||||
|
||||
private initCheckBox(id: string, value: string, index: number): HTMLInputElement {
|
||||
this.eGui.insertAdjacentHTML('beforeend', this.OPTION_TEMPLATE);
|
||||
this.eGui.querySelectorAll('.ag-filter-value')[index].innerHTML = value;
|
||||
let checkbox = this.eGui.querySelectorAll('.ag-filter-checkbox')[index] as HTMLInputElement;
|
||||
checkbox.setAttribute('id', id);
|
||||
checkbox.addEventListener('change', this.onCheckBoxChanged.bind(this));
|
||||
return checkbox;
|
||||
}
|
||||
|
||||
getGui(): HTMLDivElement {
|
||||
return this.eGui;
|
||||
};
|
||||
|
||||
onCheckBoxChanged(event: any) {
|
||||
let checked = event.target.checked;
|
||||
|
||||
if (event.target === this.selectAll) {
|
||||
this.checkboxes.forEach(checkbox => checkbox.checked = checked);
|
||||
this.values = checked ? this.initialValues.slice() : [];
|
||||
}
|
||||
else {
|
||||
let value = event.target.nextElementSibling.textContent;
|
||||
value = this.valueType === 'number' ? +value : value;
|
||||
|
||||
if (checked) {
|
||||
this.values.push(value);
|
||||
|
||||
if (this.values.length == this.initialValues.length) {
|
||||
this.selectAll.checked = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
let index = this.values.indexOf(value);
|
||||
this.values.splice(index, 1);
|
||||
this.selectAll.checked = false;
|
||||
}
|
||||
}
|
||||
this.filterActive = !this.selectAll.checked;
|
||||
this.filterChangedCallback();
|
||||
}
|
||||
|
||||
doesFilterPass(params: IDoesFilterPassParams): boolean {
|
||||
let { field } = this.filterParams.colDef;
|
||||
return this.values.includes(params.data[field]);
|
||||
}
|
||||
|
||||
getModel(): any {
|
||||
return this.isFilterActive() ? { value: this.values } : null;
|
||||
}
|
||||
|
||||
isFilterActive(): boolean {
|
||||
return this.filterActive;
|
||||
}
|
||||
|
||||
setModel(model: any): void | AgPromise<void> {
|
||||
this.values = model == null ? [] : model.value;
|
||||
}
|
||||
|
||||
destroy(): void {
|
||||
this.checkboxes.forEach(checkBox => checkBox.removeEventListener('change', this.onCheckBoxChanged.bind(this)));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
class EsiaErrorDetail {
|
||||
export class EsiaErrorDetail {
|
||||
private static errors: { [code: string]: string } = {
|
||||
'ESIA-007071': 'Запрос персональных данных по физическим лицам может быть выполнен только с указанием согласий',
|
||||
'ESIA-007055': 'Вход в систему осуществляется с неподтвержденной учетной записью',
|
||||
|
|
@ -6,7 +6,7 @@ class EsiaErrorDetail {
|
|||
'ESIA-007008': 'Сервис авторизации в настоящее время не может выполнить запрос из-за большой нагрузки или технических работ на сервере',
|
||||
};
|
||||
|
||||
static getDescription(code: string): string {
|
||||
public static getDescription(code: string): string {
|
||||
return this.errors[code] || 'Доступ запрещен. Обратитесь к системному администратору. Ошибка ' + code;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
export class TokenConstants {
|
||||
public static readonly CSRF_TOKEN_NAME = "XSRF-TOKEN";
|
||||
public static readonly CSRF_HEADER_NAME = "X-XSRF-TOKEN";
|
||||
public static readonly CSRF_TOKEN_NAME = "XSRF-TOKEN-LKRP-UL";
|
||||
public static readonly CSRF_HEADER_NAME = "X-XSRF-TOKEN-LKRP-UL";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
import {Injectable} from '@angular/core';
|
||||
import {HttpClient} from '@angular/common/http';
|
||||
import {Observable} from "rxjs";
|
||||
import {CookieService} from "ngx-cookie";
|
||||
import {tap} from "rxjs/operators";
|
||||
import {AppConfigService} from "@webbpm/base-package";
|
||||
|
||||
@Injectable({providedIn: 'root'})
|
||||
|
|
@ -14,7 +12,7 @@ export class AuthenticationService {
|
|||
}
|
||||
|
||||
checkAuthentication(): Promise<any>{
|
||||
return this.appConfigService.load().then(value => this.http.get<any>("version").toPromise())
|
||||
return this.appConfigService.load().then(() => this.http.get<any>("version").toPromise())
|
||||
}
|
||||
|
||||
logout(): Promise<any> {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import {Observable} from "rxjs";
|
|||
import {HttpClient, HttpParams} from "@angular/common/http";
|
||||
import {MessagesService} from "@webbpm/base-package";
|
||||
import {AuthenticationService} from "../authentication.service";
|
||||
import {EsiaErrorDetail} from "../EsiaErrorDetail";
|
||||
|
||||
@Injectable({providedIn:'root'})
|
||||
export abstract class AuthGuard implements CanActivate {
|
||||
|
|
|
|||
|
|
@ -1,26 +1,33 @@
|
|||
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';
|
||||
import {
|
||||
HttpEvent,
|
||||
HttpHandler,
|
||||
HttpInterceptor,
|
||||
HttpRequest,
|
||||
HttpXsrfTokenExtractor
|
||||
} from '@angular/common/http';
|
||||
import {Injectable} from '@angular/core';
|
||||
import {Observable} from 'rxjs';
|
||||
import {CookieService} from "ngx-cookie";
|
||||
import {TokenConstants} from "../../security/TokenConstants";
|
||||
|
||||
@Injectable()
|
||||
export class AbsoluteUrlCsrfInterceptor implements HttpInterceptor {
|
||||
|
||||
constructor(private cookieService: CookieService) {
|
||||
constructor(private extractor: HttpXsrfTokenExtractor) {
|
||||
}
|
||||
|
||||
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
|
||||
|
||||
let requestToForward = req;
|
||||
let token = this.cookieService.get(TokenConstants.CSRF_TOKEN_NAME) as string;
|
||||
|
||||
if (token != null) {
|
||||
let headers = {};
|
||||
if (req.method === 'GET' || req.method === 'HEAD') {
|
||||
return next.handle(req);
|
||||
}
|
||||
let token = this.extractor.getToken();
|
||||
let headerName = TokenConstants.CSRF_HEADER_NAME;
|
||||
|
||||
if (token != null && !req.headers.has(headerName)) {
|
||||
let headers = {};
|
||||
headers[headerName] = token;
|
||||
requestToForward = req.clone({setHeaders: headers});
|
||||
req = req.clone({setHeaders: headers});
|
||||
}
|
||||
return next.handle(requestToForward);
|
||||
return next.handle(req);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ const path = require('path');
|
|||
const webpack = require('webpack');
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
|
||||
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||
const TerserPlugin = require('terser-webpack-plugin');
|
||||
|
||||
|
|
@ -14,9 +13,9 @@ function _path(p) {
|
|||
module.exports = {
|
||||
mode: 'production',
|
||||
entry: {
|
||||
'polyfills': './build/scripts/polyfills.js',
|
||||
'vendor': './build/scripts/vendor.js',
|
||||
'main': './build/scripts/main.aot.js'
|
||||
polyfills: './build/scripts/polyfills.js',
|
||||
vendor: './build/scripts/vendor.js',
|
||||
main: './build/scripts/main.aot.js',
|
||||
},
|
||||
|
||||
context: process.cwd(),
|
||||
|
|
@ -24,26 +23,33 @@ module.exports = {
|
|||
output: {
|
||||
path: path.join(process.cwd(), './dist'),
|
||||
filename: '[name].[chunkhash].bundle.js',
|
||||
chunkFilename: '[id].[chunkhash].chunk.js'
|
||||
chunkFilename: '[id].[chunkhash].chunk.js',
|
||||
assetModuleFilename: 'src/resources/[base]',
|
||||
publicPath: 'auto'
|
||||
},
|
||||
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
use: {
|
||||
loader: 'babel-loader',
|
||||
include: [path.resolve(__dirname, "node_modules")],
|
||||
options: {
|
||||
presets: ['@babel/preset-env']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
use: {
|
||||
loader: 'angular-router-loader?aot=true'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.html$/,
|
||||
use: {
|
||||
loader: 'raw-loader'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.css$/,
|
||||
|
|
@ -56,12 +62,14 @@ module.exports = {
|
|||
// publicPath: '../'
|
||||
}
|
||||
},
|
||||
"css-loader"
|
||||
{
|
||||
loader: 'css-loader'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico|otf)$/,
|
||||
loader: 'file-loader?name=src/resources/[name].[hash].[ext]'
|
||||
type: 'asset/resource'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -69,7 +77,6 @@ module.exports = {
|
|||
optimization: {
|
||||
minimizer: [
|
||||
new TerserPlugin({
|
||||
cache: true,
|
||||
parallel: true,
|
||||
terserOptions: {
|
||||
// https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
|
||||
|
|
@ -83,7 +90,6 @@ module.exports = {
|
|||
},
|
||||
|
||||
plugins: [
|
||||
// new BundleAnalyzerPlugin(),
|
||||
new HtmlWebpackPlugin({
|
||||
template: 'index.webpack.html',
|
||||
filename: 'index.html',
|
||||
|
|
@ -100,8 +106,8 @@ module.exports = {
|
|||
{from: 'src/resources/landing', to: 'src/resources/landing'}
|
||||
]),
|
||||
new MiniCssExtractPlugin({
|
||||
filename: '[name].[hash].css',
|
||||
chunkFilename: '[id].[hash].css'
|
||||
filename: '[name].[fullhash].css',
|
||||
chunkFilename: '[id].[fullhash].css'
|
||||
}),
|
||||
new webpack.ProvidePlugin({
|
||||
$: "jquery",
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||
<artifactId>resources</artifactId>
|
||||
<version>3.182.0</version>
|
||||
<version>3.185.0</version>
|
||||
<organization>
|
||||
<name>Micord</name>
|
||||
</organization>
|
||||
|
|
@ -28,13 +28,13 @@
|
|||
<jooq.version>3.19.3</jooq.version>
|
||||
<jupiter.version>5.10.2</jupiter.version>
|
||||
<enforcer.manageVersions>true</enforcer.manageVersions>
|
||||
<webbpm-platform.version>3.182.0</webbpm-platform.version>
|
||||
<webbpm-platform.version>3.185.0</webbpm-platform.version>
|
||||
<h2.version>1.4.200</h2.version>
|
||||
<build.timestamp>1004163046</build.timestamp>
|
||||
<build.timestamp>1107112530</build.timestamp>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<junit.platform.version>1.10.0</junit.platform.version>
|
||||
<enforcer.manageExclusions>true</enforcer.manageExclusions>
|
||||
<revision>3.182.0</revision>
|
||||
<revision>3.185.0</revision>
|
||||
<metadata.ts.filename>typescript.metadata.json</metadata.ts.filename>
|
||||
<package.repository.url>https://repo.micord.ru</package.repository.url>
|
||||
<maven.build.timestamp.format>MMddHHmmss</maven.build.timestamp.format>
|
||||
|
|
@ -47,19 +47,19 @@
|
|||
<dependency>
|
||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||
<artifactId>converters</artifactId>
|
||||
<version>3.182.0</version>
|
||||
<version>3.185.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||
<artifactId>backend</artifactId>
|
||||
<version>3.182.0</version>
|
||||
<version>3.185.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||
<artifactId>frontend</artifactId>
|
||||
<version>3.182.0</version>
|
||||
<version>3.185.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
<ul>
|
||||
|
||||
<li>Образец внешней ссылки: <code>https://www.wildberries.ru/catalog/${sku}/detail.aspx</code></li>
|
||||
<li>Образец внутренней ссылки: <code>products/ru.cg.webbpm.packages.base:resources:jar:3.182.0</code></li>
|
||||
<li>Образец внутренней ссылки: <code>products/ru.cg.webbpm.packages.base:resources:jar:3.185.0</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
|||
|
|
@ -4,17 +4,17 @@
|
|||
<description>Base webbpm package</description>
|
||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||
<artifactId>resources</artifactId>
|
||||
<version>3.182.0</version>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<version>3.185.0</version>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
|
||||
<backendModule>
|
||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||
<artifactId>backend</artifactId>
|
||||
<version>3.182.0</version>
|
||||
<version>3.185.0</version>
|
||||
</backendModule>
|
||||
<frontendModule>
|
||||
<packageName>@webbpm/base-package</packageName>
|
||||
<version>3.182.0</version>
|
||||
<version>3.185.0</version>
|
||||
</frontendModule>
|
||||
</packageInfo>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_отмены.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_очистки_фильтра.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_удаления.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_загрузки.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_вызова_ошибки.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<documentation>component/buttons/Кнопка_выполнения_бизнес-процесса.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_выполнения_SQL.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_для_фильтрации.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_навигации.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_сохранения.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_выбора.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_подписи.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/Кнопка_запуска_бизнес-процесса.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/reporting/Кнопка_печати_из_графа_сущности.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/buttons/reporting/Кнопка_печати_отчета_из_формы.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Сворачиваемая_панель.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Диалог.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Контейнер_с_кнопками.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Группа_полей.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Набор_фильтров.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Форма.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Горизонтальный_контейнер.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Контейнер_вкладок.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Вкладка.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Вертикальный_контейнер.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/containers/Окно.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/editable-grids/EditableGrid.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/autocomplete</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/check-box</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/combo-box</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/date-time-picker</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/money-field</localization>
|
||||
<internal>true</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/number-field</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/one-to-many</localization>
|
||||
<internal>true</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/one-to-many</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/read-only</localization>
|
||||
<internal>true</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@
|
|||
<category>editable-grids</category>
|
||||
<internal>true</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>Статичный_выпадающий_список_колонки_таблицы.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/text-area</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/text-field</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
<localization>META-INF/components/localization/editable-grids/time-picker</localization>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/ФИАС.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Поле_ввода_с_подбором_значения.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Флаг.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Выпадающий_список.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Дата.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/EditableOneToMany.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Файл.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Файл.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/ManyToMany.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/ManyToManyField.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Денежное_поле.html</documentation>
|
||||
<internal>true</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Числовое_поле.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/OneToMany.html</documentation>
|
||||
<internal>true</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/OneToMany.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Переключатель.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/SignVerification.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Статичный_выпадающий_список.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Статичный_переключатель.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
<documentation>component/fields/Текст.html</documentation>
|
||||
<internal>false</internal>
|
||||
<versions>
|
||||
<studioVersion>3.182.0</studioVersion>
|
||||
<studioVersion>3.185.0</studioVersion>
|
||||
<packageVersions>
|
||||
<entry>
|
||||
<key>ru.cg.webbpm.packages.base.resources</key>
|
||||
<value>3.182.0</value>
|
||||
<value>3.185.0</value>
|
||||
</entry>
|
||||
</packageVersions>
|
||||
</versions>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue