Commit 3ce7ed2b authored by eddie.woo's avatar eddie.woo

modify

parent d0f6bbe2
......@@ -40,7 +40,7 @@ public class RevenueConfEnum {
* 账载收入类型
*/
public enum TaxBase {
Account(1, "账载"),
Account(1, "账载收入"),
Invoice(2, "开票收入"),
Manual(3, "手工录入"),
Period_Dr(4, "借方发生额"),
......
......@@ -9,11 +9,8 @@ import org.springframework.web.bind.annotation.*;
import pwc.taxtech.atms.dpo.OrgBasicDto;
import pwc.taxtech.atms.dpo.OrgInfoDto;
import pwc.taxtech.atms.dpo.OrganizationDto;
import pwc.taxtech.atms.dto.*;
import pwc.taxtech.atms.dto.organization.OrganizationExtraDto;
import pwc.taxtech.atms.dto.AreaOrganizationStatistics;
import pwc.taxtech.atms.dto.IndustryDto;
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.OrganizationValidateDto;
import pwc.taxtech.atms.dto.dimension.DimensionOrgDtoDashboard;
import pwc.taxtech.atms.dto.dimension.OrgDashboardParams;
import pwc.taxtech.atms.dto.navtree.DevTreeDto;
......@@ -289,4 +286,13 @@ public class OrganizationController {
}
}
@GetMapping("getMyOrgList")
public ApiResultDto getMyOrgList() {
try {
return ApiResultDto.success(organizationService.getMyOrgList());
} catch (Exception e) {
logger.error("getMyOrgList error.", e);
return ApiResultDto.fail();
}
}
}
package pwc.taxtech.atms.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import pwc.taxtech.atms.dpo.PagingResultDto;
import pwc.taxtech.atms.dto.revenuconf.RevenueConfParam;
import pwc.taxtech.atms.service.impl.RevenueConfService;
import javax.annotation.Resource;
@RestController
@RequestMapping(value = "api/v1/revenueConf")
public class RevenueConfController extends BaseController {
@Resource
private RevenueConfService revenueConfService;
@GetMapping
public PagingResultDto queryPage(@RequestBody RevenueConfParam param) {
return null;
}
}
package pwc.taxtech.atms.dto.revenuconf;
import pwc.taxtech.atms.dpo.PagingDto;
import pwc.taxtech.atms.vat.entity.RevenueConfig;
public class RevenueConfParam extends RevenueConfig {
private PagingDto pageInfo;
public PagingDto getPageInfo() {
return this.pageInfo;
}
public void setPageInfo(PagingDto pageInfo) {
this.pageInfo = pageInfo;
}
}
......@@ -60,6 +60,7 @@ import pwc.taxtech.atms.entity.OrganizationExample.Criteria;
import pwc.taxtech.atms.exception.ApplicationException;
import pwc.taxtech.atms.thirdparty.ExcelUtil;
import javax.annotation.Resource;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.*;
......@@ -171,6 +172,9 @@ public class OrganizationServiceImpl extends BaseService{
@Autowired
private BeanUtil beanUtil;
@Resource
private UserMapper userMapper;
private static final Logger logger = LoggerFactory.getLogger(ProjectServiceImpl.class);
public boolean isOrganizationStructureExists(String organizationStructureId) {
......@@ -3174,4 +3178,19 @@ public class OrganizationServiceImpl extends BaseService{
header.put("TaxRuleIntroduction","税制简介");
return header;
}
/**
* 获取当前用户可查看机构信息
*
* @return List<OrgSelectDto>
*/
public List<OrgSelectDto> getMyOrgList() {
String uid = authUserHelper.getCurrentUserId();
User user = userMapper.selectByPrimaryKey(uid);
if (user.getIsSuperAdmin()) {
return organizationMapper.getAllOrgSelectList();
} else {
return organizationMapper.getMyOrgSelectList(uid);
}
}
}
package pwc.taxtech.atms.service.impl;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import pwc.taxtech.atms.dto.revenuconf.RevenueConfParam;
import pwc.taxtech.atms.vat.dao.RevenueConfigMapper;
import javax.annotation.Resource;
@Service
public class RevenueConfService extends BaseService {
@Resource
private RevenueConfigMapper revenueConfigMapper;
public void queryPage(RevenueConfParam param) {
PageHelper.startPage(param.getPageInfo().getPageIndex(), param.getPageInfo().getPageSize());
}
}
......@@ -6,10 +6,7 @@ import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.session.RowBounds;
import pwc.taxtech.atms.MyMapper;
import pwc.taxtech.atms.dpo.DimensionValueOrgDto;
import pwc.taxtech.atms.dpo.OrgBasicDto;
import pwc.taxtech.atms.dpo.OrgGeneralInfoMiddleDto;
import pwc.taxtech.atms.dpo.OrganizationDto;
import pwc.taxtech.atms.dpo.*;
import pwc.taxtech.atms.entity.Organization;
import pwc.taxtech.atms.entity.OrganizationExample;
......@@ -134,4 +131,11 @@ public interface OrganizationMapper extends MyMapper {
@Param("areaId") String areaId, @Param("regionLevelType") Integer regionLevelType);
List<OrgGeneralInfoMiddleDto> selectJoinToOrgGeneralInfo();
@Select("select tb.id,tb.name from user_organization ta left join organization tb on ta.organization_id = tb.id " +
"where ta.user_id = #{uid}")
List<OrgSelectDto> getMyOrgSelectList(String uid);
@Select("select id, name from organization;")
List<OrgSelectDto> getAllOrgSelectList();
}
\ No newline at end of file
package pwc.taxtech.atms.dpo;
public class OrgSelectDto {
private String id;
private String name;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
......@@ -1270,6 +1270,24 @@ var dataImpModule = angular.module('app.dataImp', ['ui.grid', 'ui.router','ui.gr
sticky: true
});
$stateProvider.state({
name: 'dataImportConfigRevenueType',
url: "/dataImportConfig/revenueType",
dsr: true,
views: {
'importContent': {
controller: ['$scope', '$state','appTranslation',
function ($scope, $state, appTranslation) {
$scope.state = $state;
appTranslation.load([appTranslation.appPart]);
}],
template: '<vat-revenue-config></vat-revenue-config>'
}
},
resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.dataImp),
sticky: true
});
$stateProvider.state({
name: 'recordImportLog',
url: "/dataImportLog/dataImport",
......
......@@ -2080,5 +2080,23 @@
"DataImportLog": "数据导入记录",
"DataImportLogTitle": "数据导入记录",
"RevenueConfigTitle": "收入类型配置",
"RevenueAddBtn": "新增",
"RevenueDelBtn": "删除",
"RevenueColSerialNo": "序号",
"RevenueColName": "收入类型名称",
"RevenueColOrg": "适用公司",
"RevenueColAccountName": "账载收入",
"RevenueColTaxRate": "税率",
"RevenueColTaxBase": "计税收入",
"RevenueColType": "收入类型",
"RevenueColTaxType": "计税方法",
"RevenueColStatus": "状态",
"RevenueColEnable": "启用日期",
"RevenueColDisable": "终止日期",
"RevenueColEdit": "编辑",
"RevenueNoOrgData": "没有机构权限",
"RevenueGetOrgError": "获取机构信息失败",
"~MustBeEndOneApp": "我必须是最后一个!"
}
\ No newline at end of file
......@@ -160,7 +160,7 @@
paging: {
enabled: false
},
rowAlternationEnabled: false, //单双行颜色
rowAlternationEnabled: true, //单双行颜色
scrolling: {
mode: "infinite"
},
......
citModule.controller('VatRevenueConfigController', ['$scope', '$log', '$translate', '$timeout', 'SweetAlert', '$q',
'$interval','dxDataGridService','$http','apiConfig',
function ($scope, $log, $translate, $timeout, SweetAlert, $q, $interval,dxDataGridService,$http,apiConfig) {
'use strict';
//表格配置
$scope.revenueGridOptions = $.extend(true, {}, dxDataGridService.BASIC_GRID_OPTIONS, {
columns: [
{dataField: 'statusString', caption: $translate.instant('RevenueColSerialNo'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColName'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColOrg'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColAccountName'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColTaxRate'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColTaxBase'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColType'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColTaxType'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColStatus'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColEnable'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColDisable'), fixed: true, allowHeaderFiltering: true},
{dataField: 'statusString', caption: $translate.instant('RevenueColEdit'), fixed: true, allowHeaderFiltering: true},
],
dataSource: new DevExpress.data.CustomStore({
load: function (loadOptions) {
return [{"statusString":"test"},{"statusString":"test2"}];
}
}),
});
//刷新页面
$scope.refreshConfigGrid = function () {
SweetAlert.info('ajax');
};
//添加配置
$scope.addConfig = function () {
$($scope.revenueConfAddDiv).modal('show');
};
//删除配置
$scope.delConfig = function () {
SweetAlert.info('del');
};
//添加配置
$scope.saveConfig = function () {
SweetAlert.info('save');
};
//关闭配置框
$scope.cancelModal = function () {
$('#configForm')[0].reset();
};
//获取机构列表
function getMyOrgList() {
$http.get('/org/getMyOrgList',apiConfig.createVat())
.success(function (res) {
if (res && 0 === res.code) {
$scope.formParam.orgList = res.data;
}else {
SweetAlert.error($translate.instant('RevenueGetOrgError'));
}
})
}
(function initialize() {
//分页的设置
$scope.pagingOptions = {
pageIndex: 1, //当前页码
totalItems: 0, //总数据
pageSize: 20, //每页多少条数据
};
$scope.formParam = {
};
$scope.isAccount = false;
//机构下拉设置
$scope.selectOrgOptions = {
displayExpr: 'name',
valueExpr: 'id',
width: '95%',
bindingOptions: {
value: 'formParam.selectedOrg',
dataSource: 'formParam.orgList'
},
height: '30px',
placeholder: '',
showClearButton: true,
searchEnabled: true,
noDataText: $translate.instant('RevenueNoOrgData'),
showSelectionControls: true,
};
//税率下拉框
$scope.selectTaxRateOptions = {
displayExpr: 'key',
valueExpr: 'val',
dataSource: [
{'key': '0%', 'val': 0},
{'key': '1.5%', 'val': 0.015},
{'key': '3%', 'val': 0.03},
{'key': '5%', 'val': 0.05},
{'key': '6%', 'val': 0.06},
{'key': '10%', 'val': 0.1},
{'key': '16%', 'val': 0.16},
]
};
//计税基础下拉
$scope.selectTaxBaseOptions = {
displayExpr: 'key',
valueExpr: 'val',
dataSource: [
{'key': '账载收入', 'val': 1},
{'key': '开票收入', 'val': 2},
{'key': '手工录入', 'val': 3},
{'key': '借方发生额', 'val': 4},
{'key': '贷方发生额', 'val': 5},
]
};
//账载收入下拉
$scope.selectAccountTypeOptions = {
displayExpr: 'key',
valueExpr: 'val',
dataSource: [
{'key': '0值', 'val': 0},
{'key': '科目', 'val': 1},
{'key': '手工录入', 'val': 2},
]
};
$scope.selectRevenueTypeOptions = {
displayExpr: 'key',
valueExpr: 'val',
dataSource: [
{'key': '货物及加工修理修配劳务', 'val': 0},
{'key': '服务、不动产和无形资产', 'val': 1},
]
};
$scope.selectTaxTypeOptions = {
displayExpr: 'key',
valueExpr: 'val',
dataSource: [
{'key': '一般计税', 'val': 0},
{'key': '简易计税', 'val': 1},
{'key': '免抵退税', 'val': 2},
{'key': '免税', 'val': 3},
]
};
$scope.selectStatusOptions = {
displayExpr: 'key',
valueExpr: 'val',
dataSource: [
{'key': '启用', 'val': 0},
{'key': '停用', 'val': 1},
]
};
$scope.dateBoxStart = {
acceptCustomValue: false,
openOnFieldClick: true,
displayFormat: 'yyyy-MM',
bindingOptions: {
value: 'currentStartDate'
}
};
$scope.dateBoxEnd = {
acceptCustomValue: false,
openOnFieldClick: true,
displayFormat: 'yyyy-MM',
bindingOptions: {
value: 'currentEndDate'
}
};
$scope.revenueConfAddDiv = ".vat-revenue-config #revenueConfAddDiv";
function init() {
getMyOrgList();
}
init()
})();
}
]);
<div class="vat-revenue-config">
<!--标题-->
<div class="nav-wrapper">
<div class="nav-header" translate="RevenueConfigTitle"></div>
</div>
<div id="tab_total">
<form class="form-inline">
<div class="form-group"><div class="import-wrapper">
<button type="button" class="btn btn-primary" ng-click="addConfig()">{{'RevenueAddBtn' | translate }}</button>&nbsp;&nbsp;&nbsp;
<button type="button" class="btn btn-third" ng-click="delConfig()">{{'RevenueDelBtn' | translate }}</button>
</div></div>
</form>
<div class="dt-init-wrapper">
<div class="dx-viewport grid-container">
<div id="revenueGridContainer" dx-data-grid="revenueGridOptions"
style="margin-top: 0px;">
</div>
</div>
<div class="page-footer">
<ack-pagination page-options="pagingOptions"
refresh-table="refreshConfigGrid()"></ack-pagination>
</div>
</div>
</div>
<div class="modal fade" id="revenueConfAddDiv" tabindex="-1" role="dialog">
<div class="modal-dialog" style="width: 1200px;" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="modal-title">
<span translate="RevenueConfigTitle"></span>
</h3>
</div>
<div class="modal-body" id="modal-body">
<form class="form-horizontal" id="configForm">
<div class="form-group">
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColName' | translate}}:</label>
<div class="col-sm-4">
<input class="form-control" name="name" ng-model="formParam.name" maxlength="255">
</div>
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColOrg' | translate}}:</label>
<div class="col-sm-4">
<div dx-tag-box="selectOrgOptions"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColAccountName' | translate}}:</label>
<div class="col-sm-1">
<div dx-select-box="selectAccountTypeOptions" style="width: 90px;"></div>
</div>
<div class="col-sm-1"><input class="form-control" name="name" ng-model="formParam.segment3" ng-disabled="!isAccount" maxlength="255" placeholder="科目"></div>
<div class="col-sm-1"><input class="form-control" name="name" ng-model="formParam.segment5" ng-disabled="!isAccount" maxlength="255" placeholder="利润中心"></div>
<div class="col-sm-1"><input class="form-control" name="name" ng-model="formParam.segment6" ng-disabled="!isAccount" maxlength="255" placeholder="产品"></div>
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColTaxRate' | translate}}:</label>
<div class="col-sm-4">
<div dx-select-box="selectTaxRateOptions"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColTaxBase' | translate}}:</label>
<div class="col-sm-2">
<div dx-select-box="selectTaxBaseOptions"></div>
</div>
<div class="col-sm-2">
<input class="form-control" name="name" ng-model="formParam.taxBaseAccount" maxlength="255" placeholder="科目">
</div>
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColType' | translate}}:</label>
<div class="col-sm-4">
<div dx-select-box="selectRevenueTypeOptions"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColTaxType' | translate}}:</label>
<div class="col-sm-4">
<div dx-select-box="selectTaxTypeOptions"></div>
</div>
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColStatus' | translate}}:</label>
<div class="col-sm-4">
<div dx-select-box="selectStatusOptions"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColEnable' | translate}}:</label>
<div class="col-sm-4">
<div dx-date-box="dateBoxStart"></div>
</div>
<label class="col-sm-2 control-label"><span style="color: red">*</span>{{'RevenueColDisable' | translate}}:</label>
<div class="col-sm-4">
<div dx-date-box="dateBoxEnd"></div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" ng-click="saveConfig()">{{'Confirm' | translate }}</button>
<button type="button" class="btn btn-third" data-dismiss="modal" ng-click="cancelModal()">{{'Cancel' | translate }}</button>
</div>
</div>
</div>
</div>
</div>
citModule.directive('vatRevenueConfig', ['$log', 'browserService', '$translate', 'region', '$timeout',
function ($log, browserService, $translate, region, $timeout) {
$log.debug('vatPreviewProfitLoss.ctor()...');
return {
restrict: 'E',
templateUrl: '/app/dataImport/vat-revenue-config/vat-revenue-config.html' + '?_=' + Math.random(),
scope: {},
controller: 'VatRevenueConfigController',
link: function ($scope, element) {
$('.main-contents')[0].style.width = "260px";
$('.main-contents')[0].style.float = "left";
$('.main-contents')[0].style.styleFloat = "left";
$('.main-contents')[0].style.cssFloat = "left";
}
}
}
]);
\ No newline at end of file
@import "~/app-resources/less/theme.less";
.vat-revenue-config {
/*background-color: @color-white;*/
padding-left: 20px;
/*min-height: 800px;*/
height: 96%;
.nav-wrapper {
/*padding-bottom: 5px;
border-bottom: 1px solid #DBD8D3;*/
.nav-header {
height: 54px;
line-height: 54px;
font-family: "Microsoft YaHei Bold", "Microsoft YaHei Regular", "Microsoft YaHei";
font-weight: 700;
font-style: normal;
font-size: 15px;
color: #333;
display: inline-block;
}
.nav-tab {
span {
display: inline-block;
height: 34px;
line-height: 34px;
padding: 0 10px;
background-color: #B90808;
color: #FFF;
font-family: "Microsoft YaHei";
font-weight: 400;
font-style: normal;
font-size: 14px;
cursor: pointer;
}
.active {
background-color: #F91000;
}
}
.alert-warning {
background-color: #FDE2DE;
cursor: pointer;
}
.alert {
color: #CF2D1B;
font-weight: bold;
display: inline-block;
padding: 5px;
margin-left: 60px;
margin-bottom: 0px;
i {
font-size: 20px;
vertical-align: middle;
margin-right: 5px;
}
}
.operation-wrapper {
margin: 15px 25px 10px 10px;
span {
cursor: pointer;
}
}
}
.dropdown-common() {
display: inline-block;
.select-button {
background-color: #F5F5F5;
padding: 6px 0;
width: 100px;
}
.caret {
margin-top: 8px;
}
.dropdown-menu {
min-width: 100px;
li {
text-align: center;
min-height: 0px;
height: 30px;
line-height: 30px;
color: #000;
font-weight: normal;
&:hover {
background-color: #F91000;
color: #FFF;
}
}
}
}
#tab_total {
display: block;
height: calc(~'100% - 40px');
position: relative;
.import-wrapper {
span {
margin-left: 10px;
color: #333;
font-family: "Microsoft YaHei";
font-style: normal;
font-size: 14px;
font-weight: bold;
}
.period-picker {
width: 150px;
border: 1px solid #c7c5c0;
display: inline-block;
line-height: 20px;
margin-top: 7px;
}
.imp-subheader {
display: inline-block;
font-size: 15px;
height: 30px;
line-height: 30px;
vertical-align: middle;
border: none;
select {
appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
background: transparent;
}
}
.dropdown {
.dropdown-common();
}
input {
width: 50px;
outline: none;
border-radius: 3px;
border: 1px solid #3c3a36;
padding: 2px;
text-align: center;
}
> button:last-child {
float: right;
margin-right: 20px;
}
.btn-wrapper {
border-radius: 5px;
background-color: #e0301e;
color: #FFF;
display: inline-block;
float: right;
margin-right: 10px;
.btn-vat-primary {
min-width: 80px;
}
}
}
.dt-init-wrapper {
margin: 30px 0;
max-width: 99%;
height: calc(~'100% - 25px');
position: relative;
.dropdown {
.dropdown-common();
i {
color: #F85550;
}
}
.importPLStatusGridContainer {
height: calc(~'100% - 30px');
overflow: hidden;
position: absolute;
top: 0;
bottom: 136px; /* 130 + 6 */
left: 0;
right: 0;
background-color: #FFF;
}
}
.error-info-wrapper {
position: absolute;
height: 150px;
bottom: 0;
left: 0;
right: 0;
overflow: hidden;
background-color: #FFF;
margin-left: -40px;
}
#content-resizer {
width: 110%;
position: absolute;
height: 4px;
bottom: 150px;
left: 0;
right: 0;
background-color: red;
cursor: n-resize;
margin-left: -40px;
#topIcon {
cursor: pointer;
margin-top: -19px;
width: 38px;
margin-left: 46%;
z-index: 999;
bottom: -381px;
text-align: center;
display: block !important;
}
}
.dt-import-wrapper {
margin: 60px 0;
max-width: 99%;
overflow: auto;
height: calc(~"100% - 35px");
.dropdown {
.dropdown-common();
i {
color: #F85550;
}
}
}
}
.error-list-modal {
.modal-title {
color: #FF0000;
}
.modal-body {
max-height: 300px;
overflow-y: auto;
table {
border: 1px solid #CCC;
thead tr th {
height: 30px;
border: 1px solid #CCC;
}
tbody tr td {
height: 25px;
border: 1px solid #CCC;
}
}
}
.modal-footer {
text-align: center;
}
}
#tab_detail {
display: none;
}
/*覆写ack-pagination.less中:.page-size, .pagination 中的margin演示 */
.page-form-group{
float:right;
.page-size{
margin:0;
}
.pagination {
margin:0;
}
}
}
.tb-model-period-dropdow-popup {
width: 400px;
height: 500px;
position: fixed;
top: 25%;
left: 40%;
.modal-dialog {
width: 100%;
height: 90%;
margin: 20px auto;
.modal-content {
width: 100%;
.modal-body {
height: 90%;
}
}
}
}
#totalWrapper {
margin: 5px 10px 10px -10px;
width: 100%;
padding-left: 10px;
font-family: Microsoft YaHei;
font-size: 13px;
float:right;
.total_span{
color: #B4122A !important;
background-color:#ddd !important;
font-size: 12px !important;
font-weight:bold !important;
border-radius:10px !important;
padding-left: 8px !important;
padding-right: 8px !important;
}
.total-column{
width:15%;
float:left;
padding-left: 15px;
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment