feat(系统设置): 首页图片资源

This commit is contained in:
WangXu10 2023-08-08 18:40:54 +08:00 committed by 刘瑞斌
parent 36a93d3681
commit 581ad85559
10 changed files with 383 additions and 12 deletions

View File

@ -0,0 +1,47 @@
package io.metersphere.system.controller;
import io.metersphere.system.service.BaseDisplayService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@Tag(name = "首页图片")
@RestController
@RequestMapping(value = "/base-display")
public class BaseDisplayController {
@Resource
private BaseDisplayService displayService;
@Operation(summary = "获取icon图片")
@GetMapping("/get/icon")
public ResponseEntity<byte[]> getIcon() throws IOException {
return displayService.getFile("icon");
}
@Operation(summary = "获取loginImage图片")
@GetMapping("/get/login-image")
public ResponseEntity<byte[]> getLoginImage() throws IOException {
return displayService.getFile("loginImage");
}
@Operation(summary = "获取loginLogo图片")
@GetMapping("/get/login-logo")
public ResponseEntity<byte[]> getLoginLogo() throws IOException {
return displayService.getFile("loginLogo");
}
@Operation(summary = "获取logoPlatform图片")
@GetMapping("/get/logo-platform")
public ResponseEntity<byte[]> getLogoPlatform() throws IOException {
return displayService.getFile("logoPlatform");
}
}

View File

@ -0,0 +1,71 @@
package io.metersphere.system.service;
import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.file.FileRequest;
import io.metersphere.sdk.file.MinioRepository;
import io.metersphere.sdk.log.constants.OperationLogModule;
import io.metersphere.system.domain.SystemParameter;
import io.metersphere.system.mapper.SystemParameterMapper;
import jakarta.annotation.Resource;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
@Service
@Transactional(rollbackFor = Exception.class)
public class BaseDisplayService {
@Resource
private MinioRepository repository;
@Resource
private SystemParameterMapper systemParameterMapper;
public ResponseEntity<byte[]> getFile(String fileName) throws IOException {
byte[] bytes = null;
SystemParameter systemParameter = systemParameterMapper.selectByPrimaryKey("ui." + fileName);
if (systemParameter != null) {
FileRequest request = new FileRequest();
request.setFileName(systemParameter.getParamValue());
request.setProjectId("system");
request.setResourceId(OperationLogModule.SYSTEM_PARAMETER_SETTING);
try {
bytes = repository.getFile(request);
} catch (Exception e) {
throw new MSException("get file error");
}
}
MediaType contentType = MediaType.parseMediaType("application/octet-stream");
if (bytes == null) {
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
switch (fileName) {
case "icon":
bytes = IOUtils.toByteArray(resolver.getResource("/static/favicon.ico").getInputStream());
break;
case "logoPlatform":
bytes = IOUtils.toByteArray(resolver.getResource("/static/svg/MS-full-logo.svg").getInputStream());
contentType = MediaType.valueOf("image/svg+xml");
break;
case "loginImage":
bytes = IOUtils.toByteArray(resolver.getResource("/static/images/login-banner.jpg").getInputStream());
break;
default:
bytes = IOUtils.toByteArray(resolver.getResource("/static/svg/login-logo.svg").getInputStream());
contentType = MediaType.valueOf("image/svg+xml");
break;
}
}
return ResponseEntity.ok()
.contentType(contentType)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"")
.body(bytes);
}
}

View File

@ -0,0 +1,128 @@
package io.metersphere.system.controller;
import io.metersphere.sdk.base.BaseTest;
import io.metersphere.sdk.constants.SessionConstants;
import io.metersphere.sdk.file.FileRequest;
import io.metersphere.sdk.file.MinioRepository;
import io.metersphere.sdk.log.constants.OperationLogModule;
import jakarta.annotation.Resource;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlConfig;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
@SpringBootTest
@AutoConfigureMockMvc
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BaseDisplayControllerTests extends BaseTest {
public static final String DISPLAY_ICON = "/base-display/get/icon";
public static final String DISPLAY_LOGINIMAGE = "/base-display/get/login-image";
public static final String DISPLAY_LOGINLOGO = "/base-display/get/login-logo";
public static final String DISPLAY_LOGOPLATFORM = "/base-display/get/logo-platform";
//默认图片
@Resource
private MinioRepository repository;
@Test
@Order(1)
public void getIconDefault() throws Exception {
this.requestGet(DISPLAY_ICON);
}
@Test
@Order(2)
public void getLoginImageDefault() throws Exception {
this.requestGet(DISPLAY_LOGINIMAGE);
}
@Test
@Order(3)
public void getLoginLogoDefault() throws Exception {
this.requestGet(DISPLAY_LOGINLOGO);
}
@Test
@Order(4)
public void getLogoPlatformDefault() throws Exception {
this.requestGet(DISPLAY_LOGOPLATFORM);
}
//文件先放入minio
@Test
@Order(6)
public void saveFile() throws Exception {
saveImages("/file/favicon.ico","favicon","favicon.ico","ui.icon:favicon.ico");
saveImages("/file/login-banner.jpg","login-banner","login-banner.jpg","ui.loginImage:login-banner.jpg");
saveImages("/file/login-logo.svg","login-logo","login-logo.svg","ui.loginLogo:login-logo.svg");
saveImages("/file/MS-full-logo.svg","MS-full-logo","MS-full-logo.svg","ui.logoPlatform:MS-full-logo.svg");
}
private void saveImages(String url, String name, String originalFileName, String fileName) throws Exception{
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
byte[] bytes = IOUtils.toByteArray(resolver.getResource(url).getInputStream());
MockMultipartFile mockFile = new MockMultipartFile(name, originalFileName, "application/octet-stream", bytes);
FileRequest request = new FileRequest();
request.setFileName(fileName);
request.setProjectId("system");
request.setResourceId(OperationLogModule.SYSTEM_PARAMETER_SETTING);
repository.saveFile(mockFile, request);
}
//取minio中的图片
@Test
@Order(5)
@Sql(scripts = {"/dml/init_display_test.sql"},
config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED),
executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
public void getIconError() throws Exception {
this.requestGet(DISPLAY_ICON);
}
//取minio中的图片
@Test
@Order(7)
public void getIcon() throws Exception {
this.requestGet(DISPLAY_ICON);
}
@Test
@Order(7)
public void getLoginImage() throws Exception {
this.requestGet(DISPLAY_LOGINIMAGE);
}
@Test
@Order(7)
public void getLoginLogo() throws Exception {
this.requestGet(DISPLAY_LOGINLOGO);
}
@Test
@Order(8)
public void getLogoPlatform() throws Exception {
this.requestGet(DISPLAY_LOGOPLATFORM);
}
private MvcResult requestGet(String url) throws Exception {
return mockMvc.perform(MockMvcRequestBuilders.get(url)
.header(SessionConstants.HEADER_TOKEN, sessionId)
.header(SessionConstants.CSRF_TOKEN, csrfToken))
.andDo(print()).andReturn();
}
}

View File

@ -0,0 +1,9 @@
-- 模拟数据
INSERT INTO system_parameter(`param_key`, `param_value`, `type`) VALUES ('ui.icon', 'ui.icon:favicon.ico', 'file');
INSERT INTO system_parameter(`param_key`, `param_value`, `type`) VALUES ('ui.logoPlatform', 'ui.logoPlatform:MS-full-logo.svg', 'file');
INSERT INTO system_parameter(`param_key`, `param_value`, `type`) VALUES ('ui.loginImage', 'ui.loginImage:login-banner.jpg', 'file');
INSERT INTO system_parameter(`param_key`, `param_value`, `type`) VALUES ('ui.loginLogo', 'ui.loginLogo:login-logo.svg', 'file');

View File

@ -11,3 +11,10 @@ replace into user(id, name, email, password, create_time, update_time, language,
last_project_id, create_user, update_user)
VALUES ('admin2', 'test2', 'admin2@metersphere.io', MD5('admin2@metersphere.io'),
UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, NULL, NUll, '', 'LOCAL', NULL, 'admin', 'admin');
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId1', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目1', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId2', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目2', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId3', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目3', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId4', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目4', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId5', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目5', '系统默认创建的项目', 'test', 'test', unix_timestamp() * 1000, unix_timestamp() * 1000);

View File

@ -1,20 +1,20 @@
# 插入测试数据
INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId1', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目1', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId2', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目2', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId3', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目3', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId4', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目4', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId5', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目5', '系统默认创建的项目', 'test', 'test', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId1', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目1', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId2', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目2', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId3', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目3', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId4', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目4', '系统默认创建的项目', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000);
replace INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time) VALUES ('projectId5', null, (SELECT id FROM organization WHERE name LIKE '默认组织'), '默认项目5', '系统默认创建的项目', 'test', 'test', unix_timestamp() * 1000, unix_timestamp() * 1000);
insert into user(id, name, email, password, create_time, update_time, language, last_organization_id, phone, source,
replace into user(id, name, email, password, create_time, update_time, language, last_organization_id, phone, source,
last_project_id, create_user, update_user)
VALUES ('admin1', 'test1', 'admin1@metersphere.io', MD5('admin1@metersphere.io'),
UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, NULL, NUll, '', 'LOCAL', 'projectId1', 'admin', 'admin');
insert into user(id, name, email, password, create_time, update_time, language, last_organization_id, phone, source,
replace into user(id, name, email, password, create_time, update_time, language, last_organization_id, phone, source,
last_project_id, create_user, update_user)
VALUES ('admin2', 'test2', 'admin2@metersphere.io', MD5('admin2@metersphere.io'),
UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, NULL, NUll, '', 'LOCAL', NULL, 'admin', 'admin');
INSERT INTO user_role_relation VALUES ('c3bb9b4f-46d8-4952-9681-8889974487w','admin1','project_admin','projectId1','1684747668375','1684747668375');
INSERT INTO user_role_relation VALUES ('c3bb9b4f-46d8-4952-9681-8889974487q','admin2','project_admin','projectId1','1684747668321','1684747668336');
replace INTO user_role_relation VALUES ('c3bb9b4f-46d8-4952-9681-8889974487w','admin1','project_admin','projectId1','1684747668375','1684747668375');
replace INTO user_role_relation VALUES ('c3bb9b4f-46d8-4952-9681-8889974487q','admin2','project_admin','projectId1','1684747668321','1684747668336');

View File

@ -0,0 +1,24 @@
<svg width="193" height="40" viewBox="0 0 193 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M62.3111 31.1105L61.1382 19.3784L57.8421 31.1105H54.0036L50.7837 19.3784L49.5689 31.1105L44.2632 31.0657L46.8526 13.7484H53.6121L55.9296 21.9887L58.2694 13.7484H64.8706L67.5048 31.112H62.3111V31.1105Z" fill="#783887"/>
<path d="M80.3396 23.8429V26.0363H73.3574L73.3439 26.4353C73.3439 27.272 73.6771 27.7546 74.1896 27.9354C74.5886 28.049 75.0413 28.1043 75.5463 28.1043H75.8511C77.2078 28.1043 79.1906 27.798 80.6145 27.5051H80.6369L80.0632 30.6025C80.0632 30.6399 79.3968 30.9237 78.1013 31.1344C77.287 31.2256 76.3532 31.2704 75.2983 31.2704C72.5849 31.2704 70.8337 30.3545 70.0418 28.5241C69.7475 27.801 69.4771 27.0464 69.4771 26.256V23.2946C69.4771 21.1236 70.514 19.6772 72.3369 18.9615C73.1437 18.6985 74.0058 18.5656 74.9263 18.5656C77.4813 18.5656 79.1383 19.3978 79.9003 21.0638C80.1932 21.7167 80.3396 22.6446 80.3396 23.8429ZM76.6819 23.2662C76.6819 22.407 76.4249 21.8333 76.0558 21.6749C75.7764 21.4866 75.3461 21.4582 74.9472 21.4582C73.9296 21.4582 73.4216 21.9364 73.4216 22.8941L73.3589 23.4709H76.6834V23.2662H76.6819Z" fill="#783887"/>
<path d="M103.87 23.8429V26.0363H96.8877L96.8742 26.4353C96.8742 27.272 97.2074 27.7546 97.7199 27.9354C98.1188 28.049 98.5716 28.1043 99.0766 28.1043H99.3814C100.738 28.1043 102.721 27.798 104.145 27.5051H104.167L103.593 30.6025C103.593 30.6399 102.927 30.9237 101.632 31.1344C100.817 31.2256 99.8834 31.2704 98.8286 31.2704C96.1152 31.2704 94.364 30.3545 93.5721 28.5241C93.2778 27.801 93.0073 27.0464 93.0073 26.256V23.2946C93.0073 21.1236 94.0443 19.6772 95.8671 18.9615C96.674 18.6985 97.5361 18.5656 98.4565 18.5656C101.012 18.5656 102.669 19.3978 103.431 21.0638C103.723 21.7167 103.87 22.6446 103.87 23.8429ZM100.212 23.2662C100.212 22.407 99.9552 21.8333 99.5861 21.6749C99.3067 21.4866 98.8764 21.4582 98.4774 21.4582C97.4599 21.4582 96.9519 21.9364 96.9519 22.8941L96.8891 23.4709H100.214V23.2662H100.212Z" fill="#783887"/>
<path d="M168.813 23.8429V26.0363H161.831L161.817 26.4353C161.817 27.272 162.15 27.7546 162.663 27.9354C163.062 28.049 163.515 28.1043 164.02 28.1043H164.324C165.681 28.1043 167.664 27.798 169.088 27.5051H169.11L168.536 30.6025C168.536 30.6399 167.87 30.9237 166.575 31.1344C165.76 31.2256 164.826 31.2704 163.772 31.2704C161.058 31.2704 159.307 30.3545 158.515 28.5241C158.221 27.801 157.95 27.0464 157.95 26.256V23.2946C157.95 21.1236 158.986 19.6772 160.81 18.9615C161.617 18.6985 162.479 18.5656 163.4 18.5656C165.955 18.5656 167.612 19.3978 168.374 21.0638C168.666 21.7167 168.813 22.6446 168.813 23.8429ZM165.155 23.2662C165.155 22.407 164.898 21.8333 164.529 21.6749C164.25 21.4866 163.819 21.4582 163.42 21.4582C162.403 21.4582 161.895 21.9364 161.895 22.8941L161.832 23.4709H165.157V23.2662H165.155Z" fill="#783887"/>
<path d="M192.345 23.8429V26.0363H185.363L185.35 26.4353C185.35 27.272 185.683 27.7546 186.195 27.9354C186.594 28.049 187.047 28.1043 187.552 28.1043H187.857C189.214 28.1043 191.196 27.798 192.62 27.5051H192.643L192.069 30.6025C192.069 30.6399 191.403 30.9237 190.107 31.1344C189.293 31.2256 188.359 31.2704 187.304 31.2704C184.591 31.2704 182.839 30.3545 182.048 28.5241C181.753 27.801 181.483 27.0464 181.483 26.256V23.2946C181.483 21.1236 182.52 19.6772 184.343 18.9615C185.149 18.6985 186.012 18.5656 186.932 18.5656C189.487 18.5656 191.144 19.3978 191.906 21.0638C192.197 21.7167 192.345 22.6446 192.345 23.8429ZM188.688 23.2662C188.688 22.407 188.431 21.8333 188.062 21.6749C187.782 21.4866 187.352 21.4582 186.953 21.4582C185.935 21.4582 185.427 21.9364 185.427 22.8941L185.365 23.4709H188.689V23.2662H188.688Z" fill="#783887"/>
<path d="M91.4874 31.1569H89.2402C88.8487 31.1569 88.5126 31.145 88.2347 31.1226C87.4891 31.0703 86.878 30.9298 86.4028 30.7042C85.8231 30.4263 85.3823 29.9989 85.0805 29.4267C84.7413 28.7782 84.5725 27.9116 84.5725 26.8268L84.5501 21.9439H82.6958V18.7673H84.5501V16.308L86.4058 16.2557L88.3482 16.0106V18.7673H91.2424L90.8464 21.9439H88.3482V26.6132C88.3482 26.7193 88.3512 26.8089 88.3602 26.8851C88.3751 27.0809 88.405 27.2437 88.4513 27.3707C88.5649 27.68 88.8054 27.8952 89.1745 28.0147C89.4614 28.1357 91.1752 28.1118 91.1752 28.1118L91.4874 31.1569Z" fill="#783887"/>
<path d="M114.991 18.7882L114.935 21.7377C114.609 21.7212 113.685 21.7242 112.719 21.9454C111.856 22.1426 110.959 22.546 110.447 22.7343V31.1105H106.671V18.6761H110.134C110.134 18.6761 110.051 19.3246 110.118 19.5801L111 19.2529C111.527 19.0721 112.096 18.9466 112.803 18.8569C113.871 18.721 114.514 18.7792 114.991 18.7882Z" fill="#783887"/>
<path d="M180.223 18.7882L180.167 21.7377C179.842 21.7212 178.917 21.7242 177.952 21.9454C177.088 22.1426 176.191 22.546 175.679 22.7343V31.1105H171.903V18.6761H175.367C175.367 18.6761 175.283 19.3246 175.35 19.5801L176.232 19.2529C176.759 19.0721 177.328 18.9466 178.035 18.8569C179.102 18.721 179.746 18.7792 180.223 18.7882Z" fill="#783887"/>
<path d="M122.347 31.6365C121.458 31.6365 120.483 31.5797 119.42 31.4676C119.014 31.4228 118.596 31.369 118.165 31.3092L116.502 31.1508L116.538 26.8716L119.145 27.2795C119.145 27.2795 120.17 27.4259 120.638 27.4722C121.195 27.5245 121.701 27.5514 122.153 27.5514C123.795 27.5514 124.746 27.1779 125.003 26.4323C125.146 26.123 125.139 25.8212 124.98 25.5283C124.822 25.2041 124.487 24.9262 123.975 24.6916C123.756 24.5945 123.482 24.4914 123.15 24.3868L122.177 24.0924C121.747 23.9864 121.363 23.8818 121.024 23.7757C120.586 23.6397 120.187 23.4963 119.825 23.3454C118.929 22.9688 118.231 22.531 117.734 22.0335C117.258 21.5285 116.954 20.9114 116.818 20.1792C116.719 19.6593 116.709 19.0676 116.783 18.4042C116.986 16.4902 117.804 15.1753 119.237 14.4596C119.772 14.1727 120.416 13.9665 121.17 13.838C121.464 13.7932 121.799 13.7558 122.176 13.7245L123.148 13.6572H123.804C124.55 13.6572 125.372 13.7021 126.268 13.7932L127.365 13.9172L128.639 14.0861L128.665 17.8409C128.175 17.7198 127.558 17.6108 126.811 17.5137C125.853 17.3777 124.986 17.3104 124.211 17.3104C122.492 17.3104 121.899 17.675 121.597 18.452C121.484 18.7762 121.476 19.1019 121.509 19.4202C121.55 19.7982 121.526 19.8983 122.289 20.2943C122.522 20.4004 122.817 20.5124 123.171 20.6335L125.409 21.2999C125.839 21.4358 126.223 21.5748 126.563 21.7182C127.384 22.0649 128.006 22.4638 128.427 22.9165C128.925 23.4141 129.245 24.0357 129.388 24.7812C129.485 25.3162 129.497 25.8974 129.422 26.5219C129.219 28.421 128.27 30.1259 126.837 30.8565C126.31 31.1434 125.666 31.3466 124.904 31.4676C124.61 31.5124 124.275 31.5498 123.898 31.5812L123.027 31.6379H122.347V31.6365Z" fill="#783887"/>
<path d="M131.877 18.7224H135.315L135.212 19.5368C135.559 19.356 135.898 19.2021 136.23 19.0736C136.636 18.9152 137.04 18.7986 137.44 18.7224C138.42 18.5192 139.366 18.5611 140.277 18.8465C140.865 19.0347 141.37 19.3664 141.792 19.8416C141.951 20.0149 142.094 20.2106 142.221 20.4288L142.368 20.6888C142.405 20.7635 142.442 20.8427 142.481 20.9263C142.64 21.3551 142.804 21.8407 142.873 22.3607C142.955 22.9479 143.034 23.695 143.034 24.6438V25.3475C143.034 27.1943 142.924 28.1909 142.568 28.8723C142.078 30.0258 140.9 30.6115 138.625 30.6832C138.319 30.6922 137.833 30.6847 137.328 30.6697L136.484 30.6473C136.171 30.6488 135.95 30.6324 135.701 30.6399V35.9949L131.88 36.2459V18.7224H131.877ZM135.698 27.4528C136.424 27.5888 136.839 27.5783 137.455 27.5425L138.091 27.4603C138.8 27.3019 139.101 26.8223 139.101 26.0603V23.683C139.101 23.3364 139.072 23.0809 139.01 22.9151C138.785 22.1471 138.159 21.8452 137.134 22.0111L136.715 22.0783L135.992 22.2815L135.698 22.3831V27.4528Z" fill="#783887"/>
<path d="M156.277 24.3779V31.1345H152.434V23.7907C152.434 23.329 152.165 22.6596 151.627 22.3443C151.243 22.1187 150.596 22.1576 150.384 22.1919C149.873 22.2741 149.3 22.5834 149.032 22.8299V31.1345H145.212V13.2733L149.032 13.2494V19.5622C149.5 19.4038 150 19.2066 150.535 19.1244C150.972 19.0572 151.433 18.981 151.802 18.981C153.996 18.981 155.161 19.6011 155.696 20.7471C155.989 21.1759 156.277 22.434 156.277 24.3779Z" fill="#783887"/>
<g clip-path="url(#clip0_690_192454)">
<path d="M17.3111 0.531247L34.1408 10.2484V29.6811L17.3111 39.3983L0.481388 29.6811V10.2484L17.3111 0.531247ZM17.3111 0L0.0206299 9.98195V29.9458L17.3111 39.9278L34.6016 29.9458V9.98195L17.3111 0Z" fill="#783887"/>
<path d="M2.73364 11.2302L17.3094 2.81445L31.8869 11.2302L17.3094 19.6459L2.73364 11.2302Z" fill="#783887"/>
<path d="M2.4585 11.7081V28.5396L17.0343 36.9553V20.1238L2.4585 11.7081ZM12.4576 30.7952L12.449 24.8655L10.3206 29.5402L8.48446 28.4639L7.49761 21.96L6.36463 27.2192L3.82874 25.7097L5.88324 18.1708L9.11542 20.0671L9.83578 24.6506L11.3436 21.3737L14.5001 23.2254L14.9419 32.2514L12.4576 30.7952Z" fill="#783887"/>
<path d="M17.5862 20.1238V36.9553L32.162 28.5396V11.7081L17.5862 20.1238ZM29.0742 25.8455C28.9899 26.975 28.4725 28.1665 27.6593 28.9161C27.3601 29.2015 26.9922 29.468 26.5555 29.7121C26.387 29.8066 26.1945 29.9046 25.9778 30.0095L25.4775 30.2433L25.0873 30.4015C24.5749 30.6078 24.011 30.8021 23.3972 30.9843C23.1617 31.0531 22.9193 31.1201 22.6717 31.1855L21.7107 31.4812L21.6574 29.0347L23.1669 28.6616C23.1669 28.6616 23.76 28.5069 24.0299 28.4244C24.3514 28.3247 24.6437 28.2232 24.905 28.1183C25.8523 27.7367 26.3939 27.3034 26.528 26.8186C26.6054 26.6088 26.595 26.4386 26.4988 26.308C26.4025 26.1601 26.203 26.0793 25.9039 26.0656C25.7767 26.0604 25.6151 26.0673 25.4225 26.0828L24.8569 26.1412C24.6076 26.1808 24.3841 26.21 24.1864 26.2289C23.9319 26.253 23.6998 26.265 23.4884 26.2616C22.9657 26.2547 22.5548 26.167 22.2608 26.0002C21.9789 25.8231 21.7915 25.5412 21.7003 25.1561C21.635 24.8827 21.6178 24.5475 21.6505 24.152C21.7347 23.0139 22.1834 22.0752 22.9967 21.3342C23.301 21.0471 23.6689 20.7789 24.1004 20.5313C24.2689 20.4367 24.4614 20.3387 24.6781 20.2339L25.2368 19.9691L25.6151 19.8161C26.0449 19.6425 26.5194 19.4774 27.0386 19.321L27.673 19.137L28.4106 18.9376L28.4896 21.0711C28.2043 21.1158 27.8466 21.1967 27.4151 21.3153C26.8615 21.4597 26.3595 21.623 25.9125 21.8035C24.9222 22.2024 24.5852 22.548 24.4253 23.0603C24.3652 23.2718 24.3669 23.4592 24.391 23.6328C24.4202 23.8391 24.4082 23.901 24.8552 23.9509C24.991 23.956 25.1629 23.9526 25.3692 23.9389L26.6707 23.7996C26.92 23.7772 27.1452 23.7669 27.3429 23.7704C27.8226 23.7772 28.1871 23.8598 28.4381 24.0197C28.7338 24.1881 28.9281 24.4684 29.0243 24.8586C29.0897 25.144 29.1069 25.4707 29.0742 25.8455Z" fill="#783887"/>
</g>
<defs>
<clipPath id="clip0_690_192454">
<rect width="34.6136" height="40" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="947.2 183.1 174 35" style="enable-background:new 947.2 183.1 174 35;" xml:space="preserve">
<style type="text/css">
.st0{fill:#783887;}
.st1{fill:#622870;}
.st2{fill:#8B489B;}
.st3{fill:#FFFFFF;}
</style>
<g>
<g id="XMLID_803_">
<path id="XMLID_829_" class="st0" d="M998.3,209.6l-1.1-11.2l-3.1,11.2h-3.6l-3-11.2l-1.1,11.2l-5,0l2.4-16.5h6.3l2.2,7.8l2.2-7.8
h6.2l2.5,16.5H998.3z"/>
<path id="XMLID_826_" class="st0" d="M1015.2,202.7v2.1h-6.5l0,0.4c0,0.8,0.3,1.3,0.8,1.4c0.4,0.1,0.8,0.2,1.3,0.2h0.3
c1.3,0,3.1-0.3,4.5-0.6h0l-0.5,2.9c0,0-0.6,0.3-1.8,0.5c-0.8,0.1-1.6,0.1-2.6,0.1c-2.6,0-4.2-0.9-4.9-2.6
c-0.3-0.7-0.5-1.4-0.5-2.2v-2.8c0-2.1,1-3.4,2.7-4.1c0.8-0.3,1.6-0.4,2.4-0.4c2.4,0,4,0.8,4.7,2.4
C1015.1,200.7,1015.2,201.6,1015.2,202.7z M1011.8,202.1c0-0.8-0.2-1.4-0.6-1.5c-0.3-0.2-0.7-0.2-1-0.2c-1,0-1.4,0.5-1.4,1.4
l-0.1,0.6h3.1V202.1z"/>
<path id="XMLID_823_" class="st0" d="M1037.3,202.7v2.1h-6.5l0,0.4c0,0.8,0.3,1.3,0.8,1.4c0.4,0.1,0.8,0.2,1.3,0.2h0.3
c1.3,0,3.1-0.3,4.5-0.6h0l-0.5,2.9c0,0-0.6,0.3-1.8,0.5c-0.8,0.1-1.6,0.1-2.6,0.1c-2.6,0-4.2-0.9-4.9-2.6
c-0.3-0.7-0.5-1.4-0.5-2.2v-2.8c0-2.1,1-3.4,2.7-4.1c0.8-0.3,1.6-0.4,2.4-0.4c2.4,0,4,0.8,4.7,2.4
C1037.2,200.7,1037.3,201.6,1037.3,202.7z M1033.9,202.1c0-0.8-0.2-1.4-0.6-1.5c-0.3-0.2-0.7-0.2-1-0.2c-1,0-1.4,0.5-1.4,1.4
l-0.1,0.6h3.1V202.1L1033.9,202.1z"/>
<path id="XMLID_820_" class="st0" d="M1098.2,202.7v2.1h-6.5l0,0.4c0,0.8,0.3,1.3,0.8,1.4c0.4,0.1,0.8,0.2,1.3,0.2h0.3
c1.3,0,3.1-0.3,4.5-0.6h0l-0.5,2.9c0,0-0.6,0.3-1.8,0.5c-0.8,0.1-1.6,0.1-2.6,0.1c-2.6,0-4.2-0.9-4.9-2.6
c-0.3-0.7-0.5-1.4-0.5-2.2v-2.8c0-2.1,1-3.4,2.7-4.1c0.8-0.3,1.6-0.4,2.4-0.4c2.4,0,4,0.8,4.7,2.4
C1098.1,200.7,1098.2,201.6,1098.2,202.7z M1094.8,202.1c0-0.8-0.2-1.4-0.6-1.5c-0.3-0.2-0.7-0.2-1-0.2c-1,0-1.4,0.5-1.4,1.4
l-0.1,0.6h3.1V202.1z"/>
<path id="XMLID_817_" class="st0" d="M1120.3,202.7v2.1h-6.5l0,0.4c0,0.8,0.3,1.3,0.8,1.4c0.4,0.1,0.8,0.2,1.3,0.2h0.3
c1.3,0,3.1-0.3,4.5-0.6h0l-0.5,2.9c0,0-0.6,0.3-1.8,0.5c-0.8,0.1-1.6,0.1-2.6,0.1c-2.6,0-4.2-0.9-4.9-2.6
c-0.3-0.7-0.5-1.4-0.5-2.2v-2.8c0-2.1,1-3.4,2.7-4.1c0.8-0.3,1.6-0.4,2.4-0.4c2.4,0,4,0.8,4.7,2.4
C1120.2,200.7,1120.3,201.6,1120.3,202.7z M1116.9,202.1c0-0.8-0.2-1.4-0.6-1.5c-0.3-0.2-0.7-0.2-1-0.2c-1,0-1.4,0.5-1.4,1.4
l-0.1,0.6h3.1V202.1z"/>
<path id="XMLID_815_" class="st0" d="M1025.7,209.6h-2.1c-0.4,0-0.7,0-0.9,0c-0.7-0.1-1.3-0.2-1.7-0.4c-0.5-0.3-1-0.7-1.2-1.2
c-0.3-0.6-0.5-1.4-0.5-2.5l0-4.6h-1.7v-3h1.7v-2.3l1.7,0l1.8-0.2v2.6h2.7l-0.4,3h-2.3v4.4c0,0.1,0,0.2,0,0.3c0,0.2,0,0.3,0.1,0.5
c0.1,0.3,0.3,0.5,0.7,0.6c0.3,0.1,1.9,0.1,1.9,0.1L1025.7,209.6z"/>
<path id="XMLID_813_" class="st0" d="M1047.7,197.9l-0.1,2.8c-0.3,0-1.2,0-2.1,0.2c-0.8,0.2-1.7,0.6-2.1,0.8v8h-3.5v-11.8h3.3
c0,0-0.1,0.6,0,0.9l0.8-0.3c0.5-0.2,1-0.3,1.7-0.4C1046.7,197.8,1047.3,197.9,1047.7,197.9z"/>
<path id="XMLID_811_" class="st0" d="M1108.9,197.9l-0.1,2.8c-0.3,0-1.2,0-2.1,0.2c-0.8,0.2-1.7,0.6-2.1,0.8v8h-3.5v-11.8h3.3
c0,0-0.1,0.6,0,0.9l0.8-0.3c0.5-0.2,1-0.3,1.7-0.4C1107.9,197.8,1108.5,197.9,1108.9,197.9z"/>
<path id="XMLID_809_" class="st0" d="M1054.6,210.1c-0.8,0-1.8-0.1-2.7-0.2c-0.4,0-0.8-0.1-1.2-0.2l-1.6-0.2l0-4.1l2.4,0.4
c0,0,1,0.1,1.4,0.2c0.5,0.1,1,0.1,1.4,0.1c1.5,0,2.4-0.4,2.7-1.1c0.1-0.3,0.1-0.6,0-0.9c-0.2-0.3-0.5-0.6-0.9-0.8
c-0.2-0.1-0.5-0.2-0.8-0.3l-0.9-0.3c-0.4-0.1-0.8-0.2-1.1-0.3c-0.4-0.1-0.8-0.3-1.1-0.4c-0.8-0.4-1.5-0.8-2-1.3
c-0.4-0.5-0.7-1.1-0.9-1.8c-0.1-0.5-0.1-1.1,0-1.7c0.2-1.8,1-3.1,2.3-3.8c0.5-0.3,1.1-0.5,1.8-0.6c0.3,0,0.6-0.1,0.9-0.1l0.9-0.1
h0.6c0.7,0,1.5,0,2.3,0.1l1,0.1l1.2,0.2l0,3.6c-0.5-0.1-1-0.2-1.7-0.3c-0.9-0.1-1.7-0.2-2.4-0.2c-1.6,0-2.2,0.3-2.5,1.1
c-0.1,0.3-0.1,0.6-0.1,0.9c0,0.4,0,0.5,0.7,0.8c0.2,0.1,0.5,0.2,0.8,0.3l2.1,0.6c0.4,0.1,0.8,0.3,1.1,0.4c0.8,0.3,1.4,0.7,1.8,1.1
c0.5,0.5,0.8,1.1,0.9,1.8c0.1,0.5,0.1,1.1,0,1.7c-0.2,1.8-1.1,3.4-2.4,4.1c-0.5,0.3-1.1,0.5-1.8,0.6c-0.3,0-0.6,0.1-0.9,0.1
l-0.8,0.1L1054.6,210.1L1054.6,210.1z"/>
<path id="XMLID_806_" class="st0" d="M1063.6,197.8h3.2l-0.1,0.8c0.3-0.2,0.6-0.3,1-0.4c0.4-0.2,0.8-0.3,1.1-0.3
c0.9-0.2,1.8-0.2,2.7,0.1c0.5,0.2,1,0.5,1.4,1c0.2,0.2,0.3,0.4,0.4,0.6l0.1,0.2c0,0.1,0.1,0.1,0.1,0.2c0.2,0.4,0.3,0.9,0.4,1.4
c0.1,0.6,0.2,1.3,0.2,2.2v0.7c0,1.8-0.1,2.7-0.4,3.4c-0.5,1.1-1.6,1.6-3.7,1.7c-0.3,0-0.7,0-1.2,0l-0.8,0c-0.3,0-0.5,0-0.7,0v5.1
l-3.6,0.2V197.8L1063.6,197.8z M1067.2,206.1c0.7,0.1,1.1,0.1,1.7,0.1l0.6-0.1c0.7-0.2,1-0.6,1-1.3v-2.3c0-0.3,0-0.6-0.1-0.7
c-0.2-0.7-0.8-1-1.8-0.9l-0.4,0.1l-0.7,0.2l-0.3,0.1L1067.2,206.1L1067.2,206.1z"/>
<path id="XMLID_804_" class="st0" d="M1086.5,203.2v6.4h-3.6v-7c0-0.4-0.3-1.1-0.8-1.4c-0.4-0.2-1-0.2-1.2-0.1
c-0.5,0.1-1,0.4-1.3,0.6v7.9h-3.6v-17l3.6,0v6c0.4-0.2,0.9-0.3,1.4-0.4c0.4-0.1,0.8-0.1,1.2-0.1c2.1,0,3.2,0.6,3.7,1.7
C1086.2,200.2,1086.5,201.4,1086.5,203.2z"/>
</g>
<g id="XMLID_799_">
<path id="XMLID_800_" class="st0" d="M961.7,184.4l13.7,8v16.1l-13.7,8l-13.7-8v-16.1L961.7,184.4 M961.7,183.9l-14.1,8.3v16.5
l14.1,8.3l14.1-8.3v-16.5L961.7,183.9L961.7,183.9z"/>
</g>
<g id="XMLID_796_">
<polygon id="XMLID_64_" class="st1" points="961.9,200.6 973.8,193.6 973.8,207.5 961.9,214.5 "/>
</g>
<polygon id="XMLID_795_" class="st2" points="949.8,193.2 961.7,186.3 973.6,193.2 961.7,200.2 "/>
<g id="XMLID_792_">
<polygon id="XMLID_65_" class="st0" points="949.6,207.5 949.6,193.6 961.5,200.6 961.5,214.5 "/>
</g>
<g id="XMLID_789_">
<path id="XMLID_790_" class="st3" d="M957.8,209.4v-4.9l-1.8,3.9l-1.5-0.9l-0.8-5.4l-0.9,4.3l-2.1-1.3l1.7-6.2l2.6,1.6l0.6,3.8
l1.2-2.7l2.6,1.5l0.4,7.5L957.8,209.4z"/>
</g>
<g id="XMLID_786_">
<path id="XMLID_787_" class="st3" d="M968,209.1c-0.4,0.2-0.9,0.3-1.4,0.5c-0.2,0.1-0.4,0.1-0.6,0.2l-0.8,0.2l0-2l1.2-0.3
c0,0,0.5-0.1,0.7-0.2c0.3-0.1,0.5-0.2,0.7-0.3c0.8-0.3,1.2-0.7,1.3-1.1c0.1-0.2,0.1-0.3,0-0.4c-0.1-0.1-0.2-0.2-0.5-0.2
c-0.1,0-0.2,0-0.4,0l-0.5,0c-0.2,0-0.4,0.1-0.5,0.1c-0.2,0-0.4,0-0.6,0c-0.4,0-0.8-0.1-1-0.2c-0.2-0.1-0.4-0.4-0.5-0.7
c-0.1-0.2-0.1-0.5,0-0.8c0.1-0.9,0.4-1.7,1.1-2.3c0.3-0.2,0.5-0.5,0.9-0.7c0.1-0.1,0.3-0.2,0.5-0.2l0.5-0.2l0.3-0.1
c0.4-0.1,0.7-0.3,1.2-0.4l0.5-0.2l0.6-0.2l0.1,1.8c-0.2,0-0.5,0.1-0.9,0.2c-0.4,0.1-0.9,0.3-1.2,0.4c-0.8,0.3-1.1,0.6-1.2,1
c0,0.2,0,0.3,0,0.5c0,0.2,0,0.2,0.4,0.3c0.1,0,0.3,0,0.4,0l1.1-0.1c0.2,0,0.4,0,0.5,0c0.4,0,0.7,0.1,0.9,0.2
c0.2,0.1,0.4,0.4,0.5,0.7c0.1,0.2,0.1,0.5,0,0.8c-0.1,0.9-0.5,1.9-1.1,2.5c-0.2,0.2-0.5,0.5-0.9,0.7c-0.1,0.1-0.3,0.2-0.5,0.2
l-0.4,0.2L968,209.1z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB