diff --git a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java index a905542..5f4986e 100644 --- a/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java +++ b/server/crm/src/main/java/com/pudonghot/ambition/crm/service/support/CustomerServiceSupport.java @@ -92,9 +92,11 @@ public class CustomerServiceSupport final String strYears = model.getYears(); final String strYtdSales = model.getYtdSales(); + String[] years = null; if (StringUtils.isNotBlank(strYears) && StringUtils.isNotBlank(strYtdSales)) { - final String[] years = strYears.split("\\s*,\\s*"); + years = strYears.split("\\s*,\\s*"); + final String[] sales = strYtdSales.split("\\s*,\\s*"); ytdSales = new ArrayList<>(years.length); int i = 0; @@ -105,6 +107,8 @@ public class CustomerServiceSupport ytdSales.add(ytdSale); } } + + viewModel.setAttr("years", years != null ? years : new String[0]); viewModel.setAttr("ytdSales", ytdSales != null ? ytdSales : Collections.emptyList()); List> recentIssues = customerIssueService.listViewModels( diff --git a/server/crm/src/main/resources/application.properties b/server/crm/src/main/resources/application.properties index d3f2a24..f0ea014 100644 --- a/server/crm/src/main/resources/application.properties +++ b/server/crm/src/main/resources/application.properties @@ -1,10 +1,10 @@ # Server -server.port=8088 +server.port=80 # MySQL datasource.host=127.0.0.1 -datasource.port=43306 +datasource.port=3306 datasource.database-name=ambition_crm datasource.username=root datasource.password=696@2^~)oZ@^#*Q diff --git a/server/crm/src/main/resources/log4j2.xml b/server/crm/src/main/resources/log4j2.xml index 79a1c7a..0d598da 100644 --- a/server/crm/src/main/resources/log4j2.xml +++ b/server/crm/src/main/resources/log4j2.xml @@ -1,13 +1,13 @@ - DEBUG - .logs + INFO + /data/program/logs/${project.artifactId} %-d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%t][%c{1}] %m%n - + - diff --git a/web/README.md b/web/README.md index 6a873a6..cfaae31 100644 --- a/web/README.md +++ b/web/README.md @@ -1,4 +1,4 @@ -# EChat-ota +# Ambition CRM This README outlines the details of collaborating on this Ember application. A short introduction of this app could easily go here. diff --git a/web/app/components/editable-cell.js b/web/app/components/editable-cell.js index c5eec5d..db07bef 100644 --- a/web/app/components/editable-cell.js +++ b/web/app/components/editable-cell.js @@ -43,7 +43,7 @@ export default BaseComponent.extend({ me.set('isUpdating', false); } else { - me.dialog.confirm('确认要更新吗?', () => { + me.dialog.confirm('Are you sure to update?', () => { service.update(model, true); me.set('isUpdating', false); }, diff --git a/web/app/components/form-footer-buttons.js b/web/app/components/form-footer-buttons.js index 3a33f78..c30b807 100644 --- a/web/app/components/form-footer-buttons.js +++ b/web/app/components/form-footer-buttons.js @@ -44,7 +44,7 @@ export default BaseComponent.extend({ save() { let me = this; if (!me.validate()) { - me.dialog.confirm('确认要提交吗?', () => { + me.dialog.confirm('Are you sure to submit?', () => { me.postData().then((m) => { Ember.Logger.info('Post Model Result: ', m); // write back @@ -82,7 +82,7 @@ export default BaseComponent.extend({ alertMessage() { let me = this; me.message.alert(me.get('successMsg') || - (me.isCreate() ? '创建成功' : '更新成功')); + (me.isCreate() ? 'Created successfully' : 'Updated successfully')); }, getModel() { return this.get('route.controller.model'); diff --git a/web/app/components/main-container.js b/web/app/components/main-container.js index 04bb492..ceb2c0b 100644 --- a/web/app/components/main-container.js +++ b/web/app/components/main-container.js @@ -3,6 +3,7 @@ import Ember from 'ember'; export default Ember.Component.extend({ elementId: 'main-container', classNames: ['main-container'], + sidebarCollapsed: false, didInsertElement() { let me = this; // Ember.$('body').removeClass().addClass('login-layout blur-login'); diff --git a/web/app/components/status-toggle-button.js b/web/app/components/status-toggle-button.js index eaf5acc..587d779 100644 --- a/web/app/components/status-toggle-button.js +++ b/web/app/components/status-toggle-button.js @@ -7,9 +7,12 @@ export default BaseComponent.extend({ role: 'button', rel: 'tooltip', href: 'javascript:;', + enabledText: 'Enable', + disabledText: 'Disable', enabled: Ember.computed.alias('model.enabled'), title: Ember.computed('enabled', function() { - return this.get('enabled') ? '禁用' : '启用'; + let me = this; + return this.get('enabled') ? me.get('disabledText') : me.get('enabledText'); }), iconSizeClass: 'bigger-120', didReceiveAttrs() { @@ -27,7 +30,7 @@ export default BaseComponent.extend({ }, click() { let me = this; - me.dialog.confirm('确认要' + me.get('title') + '状态么?', () => { + me.dialog.confirm('Are you sure to ' + me.get('title') + ' row?', () => { let model = me.get('model'); Ember.set(model, 'enabled', !me.get('enabled')); let params = me.get('params'); diff --git a/web/app/components/top-navbar.js b/web/app/components/top-navbar.js index f5692a6..93fc2e6 100644 --- a/web/app/components/top-navbar.js +++ b/web/app/components/top-navbar.js @@ -28,7 +28,7 @@ export default BaseComponent.extend({ me.ajax.doPost(false, 'auth/logout', () => { me.set('user', null); Ember.$.sessionStorage.set('user', null); - me.get('message').alert('注销成功'); + me.get('message').alert('Sign out successfully'); me.get('router').transitionTo('login'); }); } diff --git a/web/app/mixins/services/base-service.js b/web/app/mixins/services/base-service.js index bfd36ef..727eadb 100644 --- a/web/app/mixins/services/base-service.js +++ b/web/app/mixins/services/base-service.js @@ -36,7 +36,7 @@ export default Ember.Mixin.create({ Object.keys(m).forEach((prop) => { Ember.set(model, prop, m[prop]); }); - me.get('message').alert('更新成功'); + me.get('message').alert('Updated successfully'); }) } return p; diff --git a/web/app/router.js b/web/app/router.js index 88dd3e1..b7b0917 100644 --- a/web/app/router.js +++ b/web/app/router.js @@ -30,7 +30,9 @@ Router.map(function() { this.route('edit', {path: '/:id/edit'}, function() { this.route('customer-status-select', {path: '/customer-status-select/:page'}); }); - this.route('show', {path: '/:id/show'}); + this.route('show', {path: '/:id/show'}, function() { + this.route('customer-status-select', {path: '/customer-status-select/:page'}); + }); }); this.route('customer-ytd-sale', function() { diff --git a/web/app/routes/customer/list.js b/web/app/routes/customer/list.js index ce5433a..fa27ad6 100644 --- a/web/app/routes/customer/list.js +++ b/web/app/routes/customer/list.js @@ -4,7 +4,7 @@ import BaseListRoute from './../base-list'; const cols = ['showId', 'showName', 'showDateAdded', - 'showYear', + 'showYears', 'showYtdSale', 'showCountryCode', 'showState', @@ -39,16 +39,16 @@ const config = { me.set('lock', false); me.set('countOfShowing', cols.filter(col => { return me[col]; - }).length); + }).length + 1); })) }; cols.forEach((col) => { - config[col] = !['showYear', 'showCountryCode', 'showState', 'showCity'].includes(col); + config[col] = !['showCountryCode', 'showState', 'showCity'].includes(col); }); config.countOfShowing = cols.filter(col => { return config[col]; -}).length; +}).length + 1; const TableOptions = Ember.Object.extend(config); diff --git a/web/app/routes/customer/show.js b/web/app/routes/customer/show.js index b43bb8f..d8e6e86 100644 --- a/web/app/routes/customer/show.js +++ b/web/app/routes/customer/show.js @@ -3,8 +3,13 @@ import BaseEditRoute from '../base-edit'; export default BaseEditRoute.extend({ afterModel(model) { - this.set('breadcrumbs', + let me = this; + me.set('breadcrumbs', [{route: 'customer.list', params: 1, text: 'Customers'}, {text: 'Show Customer [' + model.id + ']'}]); + Ember.addObserver(model, 'status', function() { + Ember.Logger.info('Model Status Changed: ', model); + me.get('service').update(model, true); + }); } }); diff --git a/web/app/routes/login.js b/web/app/routes/login.js index 6c7d1ed..94ae7c3 100644 --- a/web/app/routes/login.js +++ b/web/app/routes/login.js @@ -15,7 +15,7 @@ export default Ember.Route.extend({ Ember.Logger.debug(`User ${user} Loggedin`); Ember.$.sessionStorage.set('user', user); me.set('ajax.user', user); - me.message.alert('登录成功'); + me.message.alert('Sign in successfully'); // Log the user in, then reattempt previous transition if it exists. let prevTransition = me.get('prevTransition'); if (prevTransition) { diff --git a/web/app/services/dialog.js b/web/app/services/dialog.js index af17de9..5707cd7 100644 --- a/web/app/services/dialog.js +++ b/web/app/services/dialog.js @@ -9,7 +9,7 @@ export default Ember.Service.extend({ message: msg, buttons: { danger: { - label: '关闭', + label: 'Close', className: 'btn-danger', callback: fnClose || Ember.$.noop } @@ -21,12 +21,12 @@ export default Ember.Service.extend({ message: msg, buttons: { success: { - label: '确定', + label: 'OK', className: 'btn-success', callback: fnYes }, danger: { - label: '取消', + label: 'Cancel', className: 'btn-danger', callback: fnNo || Ember.$.noop } diff --git a/web/app/templates/application.hbs b/web/app/templates/application.hbs index 94a4f74..5e57fe5 100644 --- a/web/app/templates/application.hbs +++ b/web/app/templates/application.hbs @@ -13,7 +13,7 @@ {{outlet}} {{else}} {{top-navbar}} - {{#main-container}} + {{#main-container sidebarCollapsed=true}} {{outlet}} {{/main-container}} {{/if}} \ No newline at end of file diff --git a/web/app/templates/components/form-input-modal-select.hbs b/web/app/templates/components/form-input-modal-select.hbs index 72eadc4..2262020 100644 --- a/web/app/templates/components/form-input-modal-select.hbs +++ b/web/app/templates/components/form-input-modal-select.hbs @@ -19,7 +19,7 @@ rel="tooltip" title=selectText}} - 选择 + Select {{/link-to}} diff --git a/web/app/templates/components/main-container.hbs b/web/app/templates/components/main-container.hbs index b291d3f..d7a18fc 100644 --- a/web/app/templates/components/main-container.hbs +++ b/web/app/templates/components/main-container.hbs @@ -1,5 +1,5 @@ -