Commit 2c87ebc4 authored by eddie.woo's avatar eddie.woo

add 科目对应

parent a90a6a34
......@@ -167,8 +167,57 @@
</dependency>
</dependencies>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>src/main/resources/conf_profile_dev.properties</filter>
</filters>
</build>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>staging</id>
<build>
<filters>
<filter>src/main/resources/conf_profile_staging.properties</filter>
</filters>
</build>
<properties>
<env>staging</env>
</properties>
</profile>
<profile>
<id>pub</id>
<build>
<filters>
<filter>src/main/resources/conf_profile_pub.properties</filter>
</filters>
</build>
<properties>
<env>pub</env>
</properties>
</profile>
</profiles>
<build>
<finalName>atms-web</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering><!-- replace variable attribute or not -->
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
......
......@@ -22,7 +22,7 @@
<!-- Base settings for all environments -->
<value>classpath:conf_base.properties</value>
<!-- Settings for selected environment -->
<value>classpath:conf_profile_${atms_env_id:local}.properties
<value>classpath:conf.properties
</value>
</list>
</property>
......
api.url=${api.url}
cookie.maxAgeSeconds=${cookie.maxAgeSeconds}
\ No newline at end of file
api.url=http://192.168.1.102:8180/atms-api
api.url=http://localhost:8180/
cookie.maxAgeSeconds=3600
api.url=http://192.168.1.102:10001/atms-api
api.url=http://192.168.1.102:8180/atms-api
cookie.maxAgeSeconds=3600
......@@ -22,9 +22,19 @@ grunt.initConfig({
dest: '<%= pkg.bundleDest %>/basicData.js'
},
basicDataLess: {
options: { process },
options: { process },
files: {
'<%= pkg.bundleDest %>/less/basicData.less': ['app/admin/basicData/**/*.less']
}
},
systemConfigurationJs: {
src: ['app/admin/systemConfiguration/**/*.js'],
dest: '<%= pkg.bundleDest %>/systemConfiguration.js'
},
systemConfigurationLess: {
options: { process },
files: {
'<%= pkg.bundleDest %>/less/basicData.less': ['app/admin/basicData/**/*.less']
'<%= pkg.bundleDest %>/less/systemConfiguration.less': ['app/admin/systemConfiguration/**/*.less']
}
},
basicDataCss: {
......
<div class="enterprise-subject-corresponding">
<div class="left-container">
<div class="auto-mapping-div">
<br />
<button class="btn btn-primary " ng-click="autoMap()">{{'EnterpriceAccountMapping' | translate}}</button>
</div>
<div style="width:100%;">
<div id="etsGrid" class="subject-list-grid" ui-grid-auto-resize ui-grid="gridOptionsSubjectList" ui-grid-selection style="height:590px;"></div>
</div>
</div>
<div class="right-container">
<script type="text/ng-template" id="tree_node_template">
<div ng-click="toggle(this)" ng-dblclick="mapStdAccount(stdAccount.code,stdAccount.name)" ui-tree-handle>
<div ng-if="stdAccount.subStdAccounts && stdAccount.subStdAccounts.length > 0" class="expander">
<span ng-class="{hidden: collapsed}"><i class="fa fa-minus" aria-hidden="true"></i></span>
<span ng-class="{hidden: !collapsed}"><i class="fa fa-plus" aria-hidden="true"></i></span>
</div>
<div class="tree-menu-item" ng-bind-template="{{stdAccount.code + '-' + (stdAccount.direction == 1 ? '借':'贷') + '-' + stdAccount.name}}"></div>
</div>
<ul ui-tree-nodes="" ng-model="stdAccount.subStdAccounts" ng-if="!collapsed">
<li ng-repeat="stdAccount in stdAccount.subStdAccounts" collapsed="true;" ui-tree-node ng-include="'tree_node_template'" class="sub-level">
</li>
</ul>
</script>
<div class="std-tree-container">
<div class="standard-subject-title">标准科目表(双击即可对应)</div>
<div class="standard-subject-tree-container">
<div ui-tree data-drag-enabled="false">
<ul ui-tree-nodes="" ng-model="stdAccountsCategories">
<li ng-repeat="stdAccountsCategory in stdAccountsCategories" collapsed="true;" ui-tree-node class="first-level">
<div ng-click="toggle(this)" ui-tree-handle>
<div ng-if="stdAccountsCategory.stdAccounts && stdAccountsCategory.stdAccounts.length > 0" class="expander">
<span ng-class="{hidden: collapsed}"><i class="fa fa-minus" aria-hidden="true"></i></span>
<span ng-class="{hidden: !collapsed}"><i class="fa fa-plus" aria-hidden="true"></i></span>
</div>
<div class="tree-menu-item" ng-bind-template="{{stdAccountsCategory.category}}"></div>
</div>
<ul ui-tree-nodes="" ng-model="stdAccountsCategory.stdAccounts" ng-if="!collapsed">
<li ng-repeat="stdAccount in stdAccountsCategory.stdAccounts" collapsed="true;" ui-tree-node ng-include="'tree_node_template'" class="sub-level">
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="modal fade" id="enterpriseAccountDetailPopup" tabindex="-1" role="dialog" aria-labelledby="myModal" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="width:650px;height:200px;" role="document">
<div class="modal-content">
<div class="modal-header">
<span class="close" data-dismiss="modal" aria-hidden="true">×</span>
<div class="modal-title">{{ editModel.title }}</div>
</div>
<div class="modal-body">
<form class="form-horizontal" id="showStandardAccountForm">
<div class="form-group">
<label for="code" class="col-sm-2 control-label">{{'AccountCode' | translate}}:</label>
<div class="col-sm-4">
<input class="form-control" id="code" name="code" disabled ng-model="editModel.code" placeholder="" required>
</div>
<label for="selectAcctProp" class="col-sm-2 control-label">{{'StandardAccountAccountTypes' | translate}}:</label>
<div class="col-sm-4">
<input class="form-control" style="width: 40%;" id="selectAcctProp" name="selectAcctProp" disabled ng-model="selectAcctProp.name" placeholder="" required>
</div>
</div>
<div class="form-group">
<label for="name" class="col-sm-2 control-label">{{'AccountName' | translate}}:</label>
<div class="col-sm-4">
<input class="form-control" id="name" name="name" disabled ng-model="editModel.name" placeholder="" required>
</div>
<label for="selectDirection" class="col-sm-2 control-label">{{'StandardAccountDirection' | translate}}:</label>
<div class="col-sm-4">
<input class="form-control" style="width: 40%;" id="selectDirection" name="selectDirection" disabled ng-model="selectDirection.name" placeholder="" required>
</div>
</div>
<div class="form-group">
<label for="selectStandardAccount" class="col-sm-2 control-label">{{'StandardAccount' | translate}}:</label>
<div class="col-sm-4">
<input class="form-control" id="name" name="name" disabled ng-model="editModel.standardAccount" placeholder="" required>
</div>
</div>
</form>
<div class="list">
<div class="row">
<div class="link-modal-tab tab" ng-class="{active:isShowLinkModal}" ng-click="showLinkModal()" translate="LinkModel"></div><div ng-class="{active:isShowLinkReport}" class="link-report-tab tab" ng-click="showLinkReport()" translate="LinkReport"></div><div class="empty-tab">空tab</div>
</div>
<div class="box">
<div ng-if="isShowLinkModal" class="tab-content">关联模型内容</div>
<div ng-if="isShowLinkReport" class="tab-content">
<div id="reportDataList">
<div id="report-data-grid" ui-grid="reportGridOptions" ui-grid-resize-columns ui-grid-selection style="height:140px;"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
systemConfigurationModule.directive('enterpriseSubjectCorresponding', ['$log',
function ($log) {
'use strict';
$log.debug('enterpriseSubjectCorresponding.ctor()...');
return {
restrict: 'E',
templateUrl: '/app/systemConfiguration/subjectCorresponding/enterpriseSubjectCorresponding/enterprise-subject-corresponding.html' + '?_=' + Math.random(),
scope: {
state: '='
},
controller: 'EnterpriseSubjectCorrespondingController',
link: function (scope, element) {
}
};
}
]);
\ No newline at end of file
.enterprise-subject-corresponding {
.left-container {
width: 76.8%;
margin: 0 20px 0 10px;
border: 1px solid #E4E4E4;
border-top: 0;
.map-status-flag {
color: #fe8400;
font-size: 18px;
vertical-align: middle;
}
.auto-mapping-div {
background-color: white;
padding: 10px 0 10px 20px;
}
.subject-list-grid {
background-color: #FFF;
border: 1px solid #FFF;
border-radius: 5px;
height: 595px;
.ui-grid-header-cell {
color: #000;
background-color: #FFF;
border: none;
}
.ui-grid-row {
line-height: 55px;
&:nth-child(odd) {
.ui-grid-cell {
border-right-width: 0;
background-color: #fdfdfd;
}
}
&:nth-child(even) {
.ui-grid-cell {
border-right-width: 0;
background-color: #f3f3f3;
}
}
&:last-child {
.ui-grid-cell {
border-bottom-width: 1px;
}
}
&.ui-grid-row-selected > [ui-grid-row] > .ui-grid-cell {
background-color: #fed5a9 !important;
}
}
.ui-grid-cell-contents {
padding: 12px 0 12px 12px;
.ui-grid-selection-row-header-buttons {
margin: 5px 0 0 5px;
}
}
i {
font-size: 20px;
color: #ED6E3C;
vertical-align: middle;
}
}
}
.right-container {
height: 670px;
width: 19%;
border: 1px solid #E4E4E4;
float: right;
position: absolute;
right: 0;
top: 123px;
background-color: #FFF;
border-radius: 5px;
.std-tree-container {
width: 100%;
.angular-ui-tree-nodes {
padding-left: 0px;
.angular-ui-tree-nodes {
padding-left: 0px;
}
}
.angular-ui-tree-handle {
padding: 0 0 0 20px;
margin-bottom: 0px;
width: 100%;
&:hover {
background-color: #f8f8f7;
}
}
.standard-subject-title {
height: 54px;
line-height: 54px;
text-align: center;
border-bottom: 1px solid #D4D4D4;
background-color: #F2F2F2;
}
.standard-subject-tree-container {
max-height: 614px;
overflow-y: auto;
overflow-x: hidden;
.tree-menu-item {
height: 44px;
font-size: 14px;
line-height: 44px;
padding: 0px 10px;
}
.first-level {
border: 1px solid #d4d4d4;
&:first-child {
border-top: none;
}
&:not(:last-child ) {
border-bottom: none;
}
}
.sub-level {
border-top: 1px solid #d4d4d4;
}
}
}
}
#enterpriseAccountDetailPopup {
.list {
padding-left: 8px;
.row {
margin-left: 0;
}
.tab {
display: inline-block;
background-color: #F2F2F2;
color: black;
width: 120px;
padding: 7px;
text-align: center;
}
.active {
background-color: #EB8C00;
color: white;
}
.empty-tab {
width: 370px;
height: 30px;
border-bottom: 1px solid #d7d7d7;
display: inline-block;
padding: 3px;
color: white;
}
.box {
border-left: 1px solid #D7D7D7;
border-right: 1px solid #D7D7D7;
border-bottom: 1px solid #D7D7D7;
height: 160px;
padding: 10px;
}
}
#showStandardAccountForm {
.control-label {
font-weight: normal;
}
}
#reportDataList {
.ui-grid-top-panel {
overflow: initial;
background-color: white;
background: none;
}
.ui-grid-header-cell-row {
background-color: #fff;
color: #000;
}
.ui-grid-header-cell-label {
font-weight: normal;
}
.header-center {
text-align: center;
}
// 设置偶数行的颜色
.ui-grid-row:nth-child(even) .ui-grid-cell {
background-color: white;
}
// 设置奇数行背景颜色
.ui-grid-row:nth-child(odd) .ui-grid-cell {
background-color: white;
}
.ui-grid-cell-contents {
padding: 0 5px;
line-height: 28px;
font-size: 13px;
font-weight: normal;
height: 28px;
}
.cell-icon {
&:extend(.ui-grid-cell-contents span);
font-size: 13px;
}
.ui-grid-cell-contents span {
vertical-align: middle;
}
.ui-grid-icon-minus-squared, .ui-grid-icon-plus-squared {
color: #DF6B02;
}
.ui-grid-cell {
cursor: pointer;
border-bottom: 1px solid #d4d4d4;
}
}
}
}
systemConfigurationModule
.controller('StandardSubjectCorrespondingController', ['$scope', '$log', 'uiGridConstants', 'SweetAlert', '$translate', 'stdAccountService', 'enterpriceAccountService', '$interval',
function ($scope, $log, uiGridConstants, SweetAlert, $translate, stdAccountService, enterpriceAccountService, $interval) {
'use strict';
var InitStdSubjectLinkEtsSubject = function () {
stdAccountService.getStdAccountLinkEtsAccount().success(function (data) {
data.forEach(function (row) {
row.directionStr = _.find($scope.directionList, function (num) {
return num.id === row.direction
}).name;
row.subjectTypeStr = _.find($scope.acctPropList, function (num) {
return num.id === row.acctProp
}).name;
});
$scope.gridOptionsStdSubjectList.data = data;
});
};
(function initialize() {
$log.debug('StandardSubjectCorrespondingController.ctor()...');
$scope.stdSubjectList = [];
$scope.directionList = [
{ id: 1, name: $translate.instant('StandardAccountDebit') },
{ id: -1, name: $translate.instant('StandardAccountCredit') },
];
$scope.acctPropList = [
{ id: 1, name: $translate.instant('StandardAccountAcctPropAsset') },
{ id: 2, name: $translate.instant('StandardAccountAcctPropDebt') },
{ id: 3, name: $translate.instant('StandardAccountAcctPropCommon') },
{ id: 4, name: $translate.instant('StandardAccountAcctPropInterest') },
{ id: 5, name: $translate.instant('StandardAccountAcctPropCost') },
{ id: 6, name: $translate.instant('StandardAccountAcctPropProfitAndLoss') },
];
$scope.gridOptionsStdSubjectList = {
rowHeight: 55,
selectionRowHeaderWidth: 55,
enableSorting: false,
enableColumnMenus: false,
enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,
enableRowSelection: true,
enableRowHeaderSelection: false,
columnDefs: [
{
field: 'code', name: $translate.instant('StdSubjectCodeCol'), width: '20%', headerCellClass: '',
cellTemplate: '<div class="text-align-left-padding"><span>{{row.entity.code}}<span></div>'
},
{
field: 'name', name: $translate.instant('StdSubjectNameCol'), width: '25%', headerCellClass: '',
cellTemplate: '<div class="text-align-left-padding"><span>{{row.entity.name}}</span></div>'
},
{
field: 'directionStr', name: $translate.instant('SubjectDirectionCol'), width: '15%', headerCellClass: '',
cellTemplate: '<div class="text-align-left-padding"><span>{{row.entity.directionStr}}</span></div>'
},
{
field: 'subjectTypeStr', name: $translate.instant('SubjectTypeCol'), width: '15%', headerCellClass: '',
cellTemplate: '<div class="text-align-left-padding"><span>{{row.entity.subjectTypeStr}}</span></div>'
},
{
field: 'etsCode', name: $translate.instant('EtsSubjectNameCol'), width: '25%', headerCellClass: 'text-align-center',
cellTemplate: '<div class="text-align-center"><span><i class="material-icons map-status-flag" ng-if="row.entity.etsCode === null">flag</i>{{row.entity.etsCode === null ? "未对应" : (row.entity.etsCode + "-" + row.entity.etsName)}}</span></div>'
}
],
onRegisterApi: function (gridApi) {
$scope.gridApi = gridApi;
// call resize every 500 ms for 5 s after modal finishes opening - usually only necessary on a bootstrap modal
$interval(function () {
$scope.gridApi.core.handleWindowResize();
}, 500, 60 * 60 * 8);
}
};
InitStdSubjectLinkEtsSubject();
})();
}
]);
\ No newline at end of file
<div class="standard-subject-corresponding">
<div id="stdGrid" class="subject-list-grid" ui-grid-auto-resize ui-grid="gridOptionsStdSubjectList" ui-grid-selection style="height:670px;"></div>
</div>
\ No newline at end of file
systemConfigurationModule.directive('standardSubjectCorresponding', ['$log',
function ($log) {
'use strict';
$log.debug('standardSubjectCorresponding.ctor()...');
return {
restrict: 'E',
templateUrl: '/app/systemConfiguration/subjectCorresponding/standardSubjectCorresponding/standard-subject-corresponding.html' + '?_=' + Math.random(),
scope: {
state: '='
},
controller: 'StandardSubjectCorrespondingController',
link: function (scope, element) {
}
};
}
]);
\ No newline at end of file
systemConfigurationModule.directive('subjectCorresponding', ['$log',
function ($log) {
'use strict';
$log.debug('subjectCorresponding.ctor()...');
return {
restrict: 'E',
templateUrl: '/app/admin/systemConfiguration/subjectCorresponding/subject-corresponding.html' + '?_=' + Math.random(),
replace: true,
scope: {},
controller: 'SubjectCorrespondingController',
link: function (scope, element) {
Split(['#left-container', '#right-container'], {
//An array of initial sizes of the elements, specified as percentage values. Example: Setting the initial sizes to 25% and 75%.
sizes: [78, 22],
//An array of minimum sizes of the elements, specified as pixel values. Example: Setting the minimum sizes to 100px and 300px, respectively.
minSize: [750, 250],
onDragEnd: function () {
//$timeout(function () {
// $rootScope.$broadcast(enums.vatEvent.layoutChanged, {});
//}, 700);
}
});
$(".multi-org-container").on("click", function (e) {
e.stopPropagation();
});
var ClearSelectedTreeNode = function () {
ClearSelectedTreeNodeRecursion(scope.OrgMultiData);
scope.selectedCopyOrgIDList = [];
scope.checkedSet = {};
};
//递归清除选中的节点
var ClearSelectedTreeNodeRecursion = function (tree) {
tree.forEach(function (o) {
o.selected = false;
if (o.children) {
ClearSelectedTreeNodeRecursion(o.children);
}
});
};
//显示复制对应关系下的组织机构多选列表
scope.displayMultiOrg = function () {
//ClearSelectedTreeNode();
scope.gridInstance.unselectAll();
if ($('.multi-org-container').is(":hidden")) {
$(".multi-org-container").show();
} else {
$(".multi-org-container").hide();
}
$(document).one("click", function () {
$(".multi-org-container").hide();
});
event.stopPropagation();
};
scope.closeMultiOrg = function () {
$(".multi-org-container").hide();
};
var previousOrgID, previousEspID;
//企业科目列表和标准科目列表切换
scope.SwitchAccount = function (flag) {
$('.subject-corresponding-container').toggle();
$('.std-subject-container').toggle();
var currentOrgID = scope.enterpriseAccountSetSelect && scope.enterpriseAccountSetSelect.id || '';
var currentEspID = scope.selectedOrgID;
if (flag == 'detail') {
if (previousEspID === currentEspID && currentOrgID === previousOrgID) {
return;
}
scope.InitStdSubjectLinkEtsSubject();
previousOrgID = currentOrgID;
previousEspID = currentEspID;
}
};
$(".filter-select").on("click", function (e) {
e.stopPropagation();
});
scope.showFilter = function () {
if ($('.filter-select').is(":hidden")) {
$(".filter-select").show();
} else {
$(".filter-select").hide();
}
$(document).one("click", function () {
$(".filter-select").hide();
});
event.stopPropagation();
};
}
};
}
]);
\ No newline at end of file
systemConfigurationModule
.controller('SubjectCorrespondingInfrastructureController', ['$scope', '$log',
function ($scope, $log) {
'use strict';
(function initialize() {
$log.debug('SubjectCorrespondingInfrastructureController.ctor()...');
})();
}
]);
\ No newline at end of file
<div class="subject-corresponding-infrastructure">
<div class="page-nav-header">
{{'SubjectCorresponding' | translate}}
</div>
<div class="panel">
<div class="row menu">
<div class="tab" ui-sref-active="active"><a ui-sref=".enterpriseSubjectCorresponding"><span>企业科目</span></a></div>
<div class="tab" ui-sref-active="active"><a ui-sref=".standardSubjectCorresponding"><span>标准科目</span></a></div>
</div>
<div class="subject-corresponding-content">
<div ui-view="enterpriseSubjectCorresponding" ng-show="state.includes('subjectCorresponding.enterpriseSubjectCorresponding')"></div>
<div ui-view="standardSubjectCorresponding" ng-show="state.includes('subjectCorresponding.standardSubjectCorresponding')"></div>
</div>
</div>
</div>
\ No newline at end of file
systemConfigurationModule.directive('subjectCorrespondingInfrastructure', ['$log',
function ($log) {
'use strict';
$log.debug('subjectCorrespondingInfrastructure.ctor()...');
return {
restrict: 'E',
templateUrl: '/app/systemConfiguration/subjectCorresponding/subjectCorrespondingInfrastructure/subject-corresponding-infrastructure.html' + '?_=' + Math.random(),
scope: {
state: '='
},
controller: 'SubjectCorrespondingInfrastructureController',
link: function (scope, element) {
}
};
}
]);
\ No newline at end of file
@bgcolor-white: #FFF;
@bgcolor-common: #F2F2F2;
@border-color: #E4E4E4;
.page-font() {
font-family: 'Microsoft YaHei';
font-weight: 400;
font-style: normal;
}
.subject-corresponding-infrastructure {
.page-nav-header {
padding: 25px 0 0 40px;
height: 70px;
background-color: @bgcolor-white;
border-bottom: 1px solid @border-color;
color: #0D0D0D;
font-size: 16px;
.page-font;
}
.text-align-center {
text-align: center;
}
.text-align-left {
text-align: left;
}
.text-align-left-padding {
text-align: left;
padding-left: 30px;
}
.panel {
margin-bottom: 0;
.row {
margin-left: 12px;
margin-right: 0;
border-bottom: 1px solid #ddd;
}
.menu {
.tab {
height: 52px;
min-width: 180px;
width: 19%;
text-align: center;
display: inline-block;
vertical-align: middle;
margin: 0 -2px;
border: 0;
line-height: 52px;
font-size: 15px;
text-decoration: none;
a {
text-decoration: none;
display: inline-block;
height: 52px;
width: 188px;
&:hover,
&:active,
&:focus,
&:visited {
text-decoration: none;
}
}
&.active {
line-height: 52px;
color: #dc6900 !important;
box-shadow: inset 0 -3px 0 0 #dc6900;
min-width: 188px;
font-size: 15px;
text-decoration: none;
}
&:hover,
&:active,
&:focus,
&:visited {
line-height: 52px;
color: #dc6900 !important;
box-shadow: inset 0 -3px 0 0 #dc6900;
min-width: 188px;
font-size: 15px;
}
}
}
}
}
......@@ -4,7 +4,7 @@
var app = angular.module('adminApp', ['ui.tree', 'ui.bootstrap', 'ui.bootstrap.tpls', 'ui.event', 'pascalprecht.translate', 'ngMessages', 'ui.utils',
'ngRoute', 'ngCookies', 'ngSanitize', 'ct.ui.router.extras', 'chieffancypants.loadingBar', 'ngDraggable', 'ngFileUpload', 'LocalStorageModule', 'exceptionless',
'app.config', 'app.common', 'app.webservices', 'app.framework', 'app.infrastructure', 'app.basicData', 'app.adminHomePage', 'app.noPermissionPage', 'pasvaz.bindonce', 'vs-repeat', 'ivh.treeview', 'angular-cache',
'app.cache', 'angularBootstrapNavTree', 'ngAnimate', 'cgNotify', 'angularInlineEdit'
'app.systemConfiguration', 'app.cache', 'angularBootstrapNavTree', 'ngAnimate', 'cgNotify', 'angularInlineEdit'
])
//run blocks are executed after the injector is created and are the first
//methods that are executed in any Angular app.
......
This diff is collapsed.
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