Переглянути джерело

运营中心功能代码提交/客户反馈接口对接

zhuth 7 роки тому
батько
коміт
9deb98a467
27 змінених файлів з 725 додано та 80 видалено
  1. 18 0
      frontend/operation-web/app/model/cuservice/Feedback.js
  2. 14 0
      frontend/operation-web/app/model/statistical/CompanyInfo.js
  3. 10 0
      frontend/operation-web/app/model/statistical/LoginLog.js
  4. 17 0
      frontend/operation-web/app/model/statistical/PersonInfo.js
  5. 16 0
      frontend/operation-web/app/util/BaseUtil.js
  6. 41 0
      frontend/operation-web/app/view/core/List.js
  7. 1 1
      frontend/operation-web/app/view/core/tab/Controller.js
  8. 27 0
      frontend/operation-web/app/view/core/window/Controller.js
  9. 12 0
      frontend/operation-web/app/view/core/window/Window.js
  10. 69 0
      frontend/operation-web/app/view/cuservice/Feedback.js
  11. 25 0
      frontend/operation-web/app/view/cuservice/Models.js
  12. 11 7
      frontend/operation-web/app/view/main/Navigation.js
  13. 27 0
      frontend/operation-web/app/view/statistical/AccessLog.js
  14. 36 0
      frontend/operation-web/app/view/statistical/CompanyAnalysis.js
  15. 57 0
      frontend/operation-web/app/view/statistical/CompanyInfo.js
  16. 41 0
      frontend/operation-web/app/view/statistical/LoginLog.js
  17. 63 0
      frontend/operation-web/app/view/statistical/Models.js
  18. 24 0
      frontend/operation-web/app/view/statistical/MonthInfo.js
  19. 64 0
      frontend/operation-web/app/view/statistical/PersonInfo.js
  20. 37 0
      frontend/operation-web/app/view/tools/ClearCache.js
  21. 43 0
      frontend/operation-web/app/view/tools/ResetAccount.js
  22. 38 18
      frontend/operation-web/resources/json/navigation.json
  23. 1 0
      frontend/saas-web/app/view/main/MainController.js
  24. 1 0
      frontend/saas-web/app/view/money/report/OtherIODetail.js
  25. 8 5
      frontend/saas-web/app/view/sys/feedback/FormPanel.js
  26. 0 47
      frontend/saas-web/app/view/sys/feedback/FormPanel.scss
  27. 24 2
      frontend/saas-web/app/view/sys/feedback/FormPanelController.js

+ 18 - 0
frontend/operation-web/app/model/cuservice/Feedback.js

@@ -0,0 +1,18 @@
+Ext.define('saas.model.cuservice.Feedback', {
+    extend: 'saas.model.Base',
+    fields: [
+        { name: 'cf_id', type: 'int' },
+        { name: 'cf_creator', type: 'string' },
+        { name: 'cf_creatime', type: 'date' },
+        { name: 'cf_creatorid', type: 'int' },
+        { name: 'cf_content', type: 'string' },
+        { name: 'cf_status', type: 'string' },
+        { name: 'cf_companyid', type: 'int' },
+        { name: 'cf_company', type: 'string' },
+        { name: 'cf_remark', type: 'string' },
+        { name: 'cr_mobile', type: 'string' },
+        { name: 'cr_name', type: 'string' },
+        { name: 'cr_qq', type: 'string' },
+        { name: 'cr_wechat', type: 'string' },
+    ]
+});

+ 14 - 0
frontend/operation-web/app/model/statistical/CompanyInfo.js

@@ -0,0 +1,14 @@
+Ext.define('saas.model.statistical.CompanyInfo', {
+    extend: 'saas.model.Base',
+    fields: [
+        { name: 'name', type: 'string' },
+        { name: 'business_code', type: 'string' },
+        { name: 'address', type: 'string' },
+        { name: 'tel', type: 'string' },
+        { name: 'fax', type: 'string' }, // 传真
+        { name: 'realname', type: 'string' },
+        { name: 'mobile', type: 'string' },
+        { name: 'uu', type: 'int' },
+        { name: 'create_time', type: 'date' },
+    ]
+});

+ 10 - 0
frontend/operation-web/app/model/statistical/LoginLog.js

@@ -0,0 +1,10 @@
+Ext.define('saas.model.statistical.LoginLog', {
+    extend: 'saas.model.Base',
+    fields: [
+        { name: 'account_id', type: 'int' },
+        { name: 'login_num', type: 'int' },
+        { name: 'username', type: 'string' },
+        { name: 'lastesttime', type: 'date' },
+        { name: 'mobile', type: 'string' },
+    ]
+});

+ 17 - 0
frontend/operation-web/app/model/statistical/PersonInfo.js

@@ -0,0 +1,17 @@
+Ext.define('saas.model.statistical.PersonInfo', {
+    extend: 'saas.model.Base',
+    fields: [
+        { name: 'id', type: 'int' },
+        { name: 'username', type: 'string' },
+        { name: 'realname', type: 'string' },
+        { name: 'email', type: 'string' },
+        { name: 'mobile', type: 'string' },
+        { name: 'type', type: 'int' },
+        { name: 'enabled', type: 'boolean' },
+        { name: 'createTime', type: 'date' },
+        { name: 'creatorId', type: 'int' },
+        { name: 'updateTime', type: 'date' },
+        { name: 'updaterId', type: 'int' },
+        { name: 'uu', type: 'int' },
+    ]
+});

+ 16 - 0
frontend/operation-web/app/util/BaseUtil.js

@@ -29,6 +29,22 @@ Ext.define('saas.util.BaseUtil', {
             }
         },
 
+        openWin: function(xtype, title, id, config) {
+            var mainTab = Ext.getCmp('main-tab-panel');
+            var win = mainTab.query('[winId="' + id + '"]')[0];
+            if (!win) {
+                win = Ext.create('saas.view.core.window.Window', {
+                    tabId: id,
+                    title: title,
+                    viewType: xtype,
+                    viewConfig: config
+                });
+            } else {
+                win.viewConfig = config;
+            }
+            win.show();
+        },
+
         /**
          * 重设tab标题
          */

+ 41 - 0
frontend/operation-web/app/view/core/List.js

@@ -0,0 +1,41 @@
+/**
+ * 用户访问日志
+ */
+Ext.define('saas.view.core.List', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'corelist',
+
+    cls: 'x-core-list x-infocardlist',
+
+    border: 1,
+
+    plugins: [{
+        ptype: 'menuclipboard'
+    }],
+
+    columns: [],
+    store: Ext.create('Ext.data.Store', {
+        fields: [],
+        data: [],
+    }),
+
+    bbar: {
+        items: [{
+            xtype: 'button',
+            tooltip: '刷新',
+            ui: 'header',
+            cls: 'refresh',
+            iconCls: 'x-fa fa-refresh',
+            listeners: {
+                click: function() {
+                    this.up('grid').store.reload();
+                }
+            }
+        }]
+    },
+
+    refresh: function() {
+        this.store.reload();
+    },
+
+});

+ 1 - 1
frontend/operation-web/app/view/core/tab/Controller.js

@@ -78,6 +78,6 @@ Ext.define('saas.view.core.tab.Controller', {
 
     onTabDeactivate: function(component) {
         var tabView = component.down('container');
-        tabView.fireEvent('onTabDeactivate', tabView);
+        tabView && tabView.fireEvent('onTabDeactivate', tabView);
     }
 });

+ 27 - 0
frontend/operation-web/app/view/core/window/Controller.js

@@ -0,0 +1,27 @@
+Ext.define('saas.view.core.window.Controller', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.core-win-controller',
+
+    init: function() {
+        try {
+            var me = this,
+            win = me.getView(),
+            viewType = win.viewType,
+            viewConfig = win.viewConfig;
+    
+            var view = {
+                xtype: viewType
+            };
+            Ext.apply(view, viewConfig);
+    
+            win.add(view);
+        }catch(e) {
+            console.error(e);
+        }
+    },
+
+    closeWin: function() {
+        var win = this.getView();
+        win.close();
+    }
+});

+ 12 - 0
frontend/operation-web/app/view/core/window/Window.js

@@ -0,0 +1,12 @@
+Ext.define('saas.view.core.window.Window', {
+    extend: 'Ext.window.Window',
+    xtype: 'core-win',
+    controller: 'core-win-controller',
+
+    cls: 'x-core-win',
+    layout: 'fit',
+    closable: true,
+    
+    listeners: {
+    }
+});

+ 69 - 0
frontend/operation-web/app/view/cuservice/Feedback.js

@@ -0,0 +1,69 @@
+/**
+ * 在线反馈
+ */
+Ext.define('saas.view.cuservice.Feedback', {
+    extend: 'saas.view.core.List',
+    xtype: 'cuservice-feedback',
+
+    viewModel: 'cuservice',
+
+    cls: 'x-infocardlist',
+
+    id: 'feedback',
+
+    border: 1,
+
+    columns: [{
+        text: 'id',
+        dataIndex: 'cf_id',
+        hidden: true
+    }, {
+        text: '反馈人',
+        dataIndex: 'cf_name',
+        width: 120
+    }, {
+        text: '反馈时间',
+        dataIndex: 'cf_creatime',
+        width: 180,
+        renderer: function(v, m, r) {
+            return Ext.Date.format(new Date(v), 'Y-m-d h:i:s');
+        }
+    }, {
+        text: '反馈内容',
+        width: 250,
+        dataIndex: 'cf_content'
+    }, {
+        text: '状态',
+        dataIndex: 'cf_status',
+        width: 80
+    }, {
+        text: '企业id',
+        dataIndex: 'cf_companyid',
+        hidden: true
+    }, {
+        text: '企业名',
+        dataIndex: 'cf_company',
+        width: 120
+    }, {
+        text: '联系电话',
+        dataIndex: 'cf_mobile',
+        width: 120
+    }, {
+        text: 'QQ',
+        dataIndex: 'cf_qq',
+        width: 120
+    }, {
+        text: '微信',
+        dataIndex: 'cf_wechat',
+        width: 120
+    }, {
+        text: '备注',
+        dataIndex: 'cf_remark',
+        width: 250
+    }],
+
+    bind: {
+        store: '{feedback}'
+    }
+
+});

+ 25 - 0
frontend/operation-web/app/view/cuservice/Models.js

@@ -0,0 +1,25 @@
+Ext.define('saas.view.cuservice.Models', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.cuservice',
+
+    stores: {
+        feedback: {
+            model: 'saas.model.cuservice.Feedback',
+            autoLoad: true,
+            proxy: {
+                type: 'ajax',
+                // url: 'http://10.1.80.33:9040/customerFeedBack/list',
+                url: '/api/operation/customerFeedBack/list',
+                timeout: 8000,
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data.list',
+                    totalProperty: 'data.total',
+                }
+            }
+        }
+    }
+});

+ 11 - 7
frontend/operation-web/app/view/main/Navigation.js

@@ -76,7 +76,7 @@ Ext.define('saas.view.main.Navigation', {
         if (!menu) {
             var view = new Ext.DataView({
                 store: Ext.create('Ext.data.Store', {
-                    fields: ['id', 'text', 'addType', 'viewType'],
+                    fields: ['id', 'text', 'addType', 'viewType', 'ctype'],
                     data: menuItems
                 }),
                 tpl: new Ext.XTemplate('<div class="x-navitem-menu">',
@@ -89,7 +89,7 @@ Ext.define('saas.view.main.Navigation', {
                         '<div class="menu-content">',
                             '<tpl for="items">',
                             '<div class="menuitem">',
-                                '<div class="item-text" data-config="{config}" data-id="{id}" data-text="{text}" data-type="query" data-viewType="{viewType}">',
+                                '<div class="item-text" data-config="{config}" data-id="{id}" data-text="{text}" data-type="query" data-viewType="{viewType}" data-ctype="{ctype}">',
                                     '{text}',
                                 '</div>',
                                 '<tpl if="{addType}">',
@@ -152,13 +152,15 @@ Ext.define('saas.view.main.Navigation', {
                                     type = dataset.type,
                                     text = dataset.text,
                                     config = dataset.config,
-                                    id = dataset.id;
+                                    id = dataset.id,
+                                    componentType = dataset.ctype || 'Tab';
 
                                     var tabTitle = text,
                                     tabId = 'maintab-' + type + '-' + id;
-
+                                    
                                     menu.navItem.classList.remove(menu.navView.overItemCls);
-                                    saas.util.BaseUtil.openTab(viewType, tabTitle, tabId,config);
+                                    // saas.util.BaseUtil.openTab(viewType, tabTitle, tabId,config);
+                                    saas.util.BaseUtil['open' + componentType](viewType, tabTitle, tabId,config);
                                     menu.hide();
                                 });
                             });
@@ -169,13 +171,15 @@ Ext.define('saas.view.main.Navigation', {
                                     viewType = dataset.viewtype,
                                     type = dataset.type,
                                     text = dataset.text,
-                                    id = dataset.id;
+                                    id = dataset.id,
+                                    componentType = dataset.ctype || 'Tab';
 
                                     var tabTitle ='新增' + text,
                                     tabId = viewType + '-add';
 
                                     menu.navItem.classList.remove(menu.navView.overItemCls);
-                                    saas.util.BaseUtil.openTab(viewType, tabTitle, tabId);
+                                    // saas.util.BaseUtil.openTab(viewType, tabTitle, tabId);
+                                    saas.util.BaseUtil['open' + componentType](viewType, tabTitle, tabId);
                                     menu.hide();
                                 });
                             });

+ 27 - 0
frontend/operation-web/app/view/statistical/AccessLog.js

@@ -0,0 +1,27 @@
+/**
+ * 用户访问日志
+ */
+Ext.define('saas.view.statistical.AccessLog', {
+    extend: 'saas.view.core.List',
+    xtype: 'statistical-accesslog',
+
+    columns: [{
+        text: '用户名',
+        dataIndex: 'name'
+    }, {
+        text: '联系电话',
+        dataIndex: 'phone'
+    }, {
+        text: '最后访问时间',
+        dataIndex: 'lastTime'
+    }, {
+        text: '近三月访问次数',
+        dataIndex: 'count'
+    }],
+
+    store: Ext.create('Ext.data.Store', {
+        fields: ['name', 'phone', 'lastTime', 'count'],
+        data: [],
+    })
+
+});

+ 36 - 0
frontend/operation-web/app/view/statistical/CompanyAnalysis.js

@@ -0,0 +1,36 @@
+/**
+ * 企业分析
+ */
+Ext.define('saas.view.statistical.CompanyAnalysis', {
+    extend: 'saas.view.core.List',
+    xtype: 'statistical-companyanalysis',
+
+    columns: [{
+        text: '企业名称',
+        dataIndex: 'name'
+    }, {
+        text: '企业地址',
+        dataIndex: 'address'
+    }, {
+        text: '管理员',
+        dataIndex: 'administrator'
+    }, {
+        text: '注册时间',
+        dataIndex: 'registeTime'
+    }, {
+        text: '最近操作时间',
+        dataIndex: 'lastTime'
+    }, {
+        text: '目前阶段',
+        dataIndex: 'step'
+    }, {
+        text: '使用状态',
+        dataIndex: 'status'
+    }],
+
+    store: Ext.create('Ext.data.Store', {
+        fields: ['name', 'address', 'administrator', 'registeTime', 'lastTime', 'step', 'status'],
+        data: [],
+    })
+
+});

+ 57 - 0
frontend/operation-web/app/view/statistical/CompanyInfo.js

@@ -0,0 +1,57 @@
+/**
+ * 企业注册数据
+ */
+Ext.define('saas.view.statistical.CompanyInfo', {
+    extend: 'saas.view.core.List',
+    xtype: 'statistical-companyinfo',
+
+    viewModel: 'statistical',
+
+    id: 'companyinfo',
+    columns: [{
+        text: '注册时间',
+        dataIndex: 'create_time',
+        width: 180,
+        xtype: 'datecolumn',
+        renderer: function(v, m, r) {
+            return Ext.Date.format(new Date(v), 'Y-m-d h:i:s');
+        }
+    }, {
+        text: '企业编号',
+        width: 200,
+        dataIndex: 'business_code'
+    }, {
+        text: '企业名称',
+        width: 200,
+        dataIndex: 'name'
+    }, {
+        text: 'UU号',
+        width: 120,
+        dataIndex: 'uu'
+    }, {
+        text: '企业地址',
+        width: 250,
+        dataIndex: 'address'
+    }, {
+        text: '电话',
+        width: 120,
+        dataIndex: 'tel'
+    }, {
+        text: '传真',
+        width: 150,
+        dataIndex: 'fax'
+    }, {
+        text: '管理员',
+        width: 100,
+        dataIndex: 'realname'
+    }, {
+        text: '联系方式',
+        width: 150,
+        dataIndex: 'mobile'
+    }],
+
+    bind: {
+        store: '{companyinfo}'
+    }
+
+});

+ 41 - 0
frontend/operation-web/app/view/statistical/LoginLog.js

@@ -0,0 +1,41 @@
+/**
+ * 登录日志
+ */
+Ext.define('saas.view.statistical.LoginLog', {
+    extend: 'saas.view.core.List',
+    xtype: 'statistical-loginlog',
+
+    viewModel: 'statistical',
+
+    id: 'loginlog',
+
+    columns: [{
+        text: 'id',
+        dataIndex: 'account_id',
+        hidden: true
+    }, {
+        text: '用户名',
+        dataIndex: 'username',
+        width: 120
+    }, {
+        text: '手机号',
+        dataIndex: 'mobile',
+        width: 120
+    }, {
+        text: '近三月登录次数',
+        dataIndex: 'login_num'
+    }, {
+        text: '最后登录时间',
+        dataIndex: 'lastesttime',
+        width: 180,
+        xtype: 'datecolumn',
+        renderer: function(v, m, r) {
+            return Ext.Date.format(new Date(v), 'Y-m-d h:i:s');
+        }
+    }],
+
+    bind: {
+        store: '{loginlog}'
+    }
+
+});

+ 63 - 0
frontend/operation-web/app/view/statistical/Models.js

@@ -0,0 +1,63 @@
+Ext.define('saas.view.statistical.Models', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.statistical',
+
+    stores: {
+        personinfo: {
+            model: 'saas.model.statistical.PersonInfo',
+            autoLoad: true,
+            proxy: {
+                type: 'ajax',
+                // url: 'http://10.1.80.33:9040/data/getAccount',
+                url: '/api/operation/data/getAccount',
+                timeout: 8000,
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data.list',
+                    totalProperty: 'data.total',
+                }
+            }
+        },
+
+        companyinfo: {
+            model: 'saas.model.statistical.CompanyInfo',
+            autoLoad: true,
+            proxy: {
+                type: 'ajax',
+                // url: 'http://10.1.80.33:9040/data/getCompany',
+                url: '/api/operation/data/getCompany',
+                timeout: 8000,
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data.list',
+                    totalProperty: 'data.total',
+                }
+            }
+        },
+
+        loginlog: {
+            model: 'saas.model.statistical.LoginLog',
+            autoLoad: true,
+            proxy: {
+                type: 'ajax',
+                // url: 'http://10.1.80.33:9040/data/getLogin',
+                url: '/api/operation/data/getLogin',
+                timeout: 8000,
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data.list',
+                    totalProperty: 'data.total',
+                },
+            }
+        },
+    }
+});

+ 24 - 0
frontend/operation-web/app/view/statistical/MonthInfo.js

@@ -0,0 +1,24 @@
+/**
+ * 月注册分析
+ */
+Ext.define('saas.view.statistical.MonthInfo', {
+    extend: 'saas.view.core.List',
+    xtype: 'statistical-monthinfo',
+
+    columns: [{
+        text: '姓名',
+        dataIndex: 'name'
+    }, {
+        text: '手机号',
+        dataIndex: 'phone'
+    }, {
+        text: '注册时间',
+        dataIndex: 'registeTime'
+    }],
+
+    store: Ext.create('Ext.data.Store', {
+        fields: ['name', 'phone', 'registeTime'],
+        data: [],
+    })
+
+});

+ 64 - 0
frontend/operation-web/app/view/statistical/PersonInfo.js

@@ -0,0 +1,64 @@
+/**
+ * 个人注册数据
+ */
+Ext.define('saas.view.statistical.PersonInfo', {
+    extend: 'saas.view.core.List',
+    xtype: 'statistical-personinfo',
+
+    viewModel: 'statistical',
+
+    id: 'personinfo',
+
+    columns: [{
+        text: 'id',
+        dataIndex: 'id',
+        hidden: true
+    }, {
+        text: '账号',
+        dataIndex: 'username',
+        width: 120
+    }, {
+        text: '姓名',
+        dataIndex: 'realname',
+        width: 120
+    }, {
+        text: '邮箱',
+        dataIndex: 'email',
+        width: 180
+    }, {
+        text: '手机号',
+        dataIndex: 'mobile',
+        width: 120
+    }, {
+        text: '类型',
+        dataIndex: 'type',
+        width: 140,
+        renderer: function(v, m, r) {
+            return v == 1 ? '<span style="font-weight: bold;">管理员</span>' : '普通用户';
+        }
+    }, {
+        text: '状态',
+        dataIndex: 'enabled',
+        width: 80,
+        renderer: function(v, m, r) {
+            return v == true ? '<span style="color: #81CB31;">正常</span>' : '<span style="color: #DD6550;">禁用</span>';
+        }
+    }, {
+        text: '注册时间',
+        xtype: 'datecolumn',
+        dataIndex: 'createTime',
+        width: 180,
+        renderer: function(v, m, r) {
+            return Ext.Date.format(new Date(v), 'Y-m-d h:i:s'); 
+        }
+    }, {
+        text: 'UU号',
+        dataIndex: 'uu',
+        width: 120
+    }],
+
+    bind: {
+        store: '{personinfo}'
+    }
+
+});

+ 37 - 0
frontend/operation-web/app/view/tools/ClearCache.js

@@ -0,0 +1,37 @@
+Ext.define('saas.view.tools.ClearCache', {
+    extend: 'Ext.form.Panel',
+    xtype: 'tools-clearcache',
+
+    layout: 'column',
+    width: 350,
+    bodyPadding: 10,
+
+    items: [{
+        xtype: 'displayfield',
+        value: '确定执行清除缓存操作吗?',
+        columnWidth: 1
+    }],
+
+    buttonAlign: 'center',
+    buttons: [{
+        text: '确定',
+        handler: function() {
+            var win = this.up('core-win');
+            win.setLoading(true);
+            saas.util.BaseUtil.request({
+                url: '/api/account/account/cache/clearAll',
+            }).then(function(res) {
+                saas.util.BaseUtil.showSuccessToast('清除缓存成功');
+                win.setLoading(false);
+                win.close();
+            }).catch(function(e) {
+                saas.util.BaseUtil.showErrorToast('清除缓存失败: ' + e.message);
+                win.setLoading(false);
+                win.close();
+            });
+        }
+    }, {
+        text: '取消',
+        handler: 'closeWin'
+    }]
+})

+ 43 - 0
frontend/operation-web/app/view/tools/ResetAccount.js

@@ -0,0 +1,43 @@
+Ext.define('saas.view.tools.ResetAccount', {
+    extend: 'Ext.form.Panel',
+    xtype: 'tools-resetaccount',
+
+    layout: 'column',
+    width: 350,
+    bodyPadding: 10,
+
+    items: [{
+        xtype: 'textfield',
+        name: 'userName',
+        emptyText: '输入账号',
+        columnWidth: 1,
+        allowBlank: false
+    }],
+
+    buttonAlign: 'center',
+    buttons: [{
+        text: '确定',
+        formBind: true,
+        handler: function() {
+            var win = this.up('core-win'),
+            form = this.up('tools-resetaccount'),
+            userName = form.getValues().userName;
+
+            win.setLoading(true);
+            saas.util.BaseUtil.request({
+                url: '/api/oper_auth/clearAuthorizeCount?username=' + userName,
+            }).then(function(res) {
+                saas.util.BaseUtil.showSuccessToast('账号[' + userName + ']已重置');
+                win.setLoading(false);
+                win.close();
+            }).catch(function(e) {
+                saas.util.BaseUtil.showErrorToast('账号[' + userName + ']重置失败: ' + e.message);
+                win.setLoading(false);
+                win.close();
+            });
+        }
+    }, {
+        text: '取消',
+        handler: 'closeWin'
+    }]
+})

+ 38 - 18
frontend/operation-web/resources/json/navigation.json

@@ -1,31 +1,51 @@
 [{
-    "text": "企业",
+    "text": "统计分析",
     "iconCls": "x-sa sa-accountCenter",
     "items": [{
-        "text": "查询",
+        "text": "注册统计",
         "items": [{
-            "id": "company",
-            "text": "企业信息",
-            "viewType": "account-company-querypanel"
+            "id": "1",
+            "text": "企业注册数据",
+            "viewType": "statistical-companyinfo"
         }, {
-            "id": "account",
-            "text": "用户信息",
-            "viewType": "account-account-querypanel"
+            "id": "2",
+            "text": "个人注册数据",
+            "viewType": "statistical-personinfo"
         }]
     }, {
-        "text": "报表",
+        "text": "行为统计",
         "items": [{
-            "id": "report-company",
-            "text": "企业活跃度一览表",
-            "viewType": "operation-report-company"
-        },{
-            "id": "report-account",
-            "text": "用户活跃度一览表",
-            "viewType": "operation-report-account"
+            "id": "4",
+            "text": "用户访问日志",
+            "viewType": "statistical-loginlog"
         }]
     }]
 }, {
-    "text": "设置",
+    "text": "客户服务",
+    "iconCls": "x-sa sa-info",
+    "items": [{
+        "text": "客户反馈",
+        "items": [{
+            "id": "6",
+            "text": "在线反馈",
+            "viewType": "cuservice-feedback"
+        }]
+    }]
+}, {
+    "text": "研发助手",
     "iconCls": "x-sa sa-setting",
-    "items": []
+    "items": [{
+        "text": "工具",
+        "items": [{
+            "id": "9",
+            "text":"清除系统缓存",
+            "ctype": "Win",
+            "viewType": "tools-clearcache"
+        }, {
+            "id": "10",
+            "text": "冻结账号恢复",
+            "ctype": "Win",
+            "viewType": "tools-resetaccount"
+        }]
+    }]
 }]

+ 1 - 0
frontend/saas-web/app/view/main/MainController.js

@@ -101,6 +101,7 @@ Ext.define('saas.view.main.MainController', {
                 draggable: false,
                 resizable: false,
                 id:"feedbackWin",
+                cls: 'x-window-dbfind',
                 height: 343,
                 width: 756,
                 title: '意见反馈',

+ 1 - 0
frontend/saas-web/app/view/money/report/OtherIODetail.js

@@ -65,6 +65,7 @@ Ext.define('saas.view.money.report.OtherIODetail', {
 
     reportColumns: [{
         text: '日期',
+        xtype: 'datecolumn',
         dataIndex: 'bl_date',
         width: 110
     }, {

+ 8 - 5
frontend/saas-web/app/view/sys/feedback/FormPanel.js

@@ -29,29 +29,31 @@ Ext.define('saas.view.sys.feedback.FormPanel', {
             bind: '{account.id}'
         }, {
             xtype : "textfield", 
-            name : "fb_name", 
+            name : "name", 
             fieldLabel : "姓名",
             readOnly:true,
             bind: '{account.realname}'
         }, {
             xtype : "textfield", 
-            name : "fb_mobile", 
+            name : "mobile", 
             fieldLabel : "手机号",
             // regex:/^1(3|4|5|7|8|9)\d{9}$/,
             // regexText:'请输入正确的手机号码',
             bind: '{account.mobile}'
         }, {
             xtype : "textfield", 
-            name : "fb_QQ", 
+            name : "qq", 
             fieldLabel : "QQ"
         }, {
             xtype : "textfield", 
-            name : "fb_wechat", 
+            name : "wechat", 
             fieldLabel : "微信"
         }, {
             xtype : "textareafield", 
-            name : "fb_msg", 
+            name : "content", 
             fieldLabel : "反馈内容",
+            allowBlank: false,
+            cls: 'x-grid-necessary',
             columnWidth: 1,
             height: 63,
             maxHeight: 63
@@ -60,6 +62,7 @@ Ext.define('saas.view.sys.feedback.FormPanel', {
         me.buttons = [{
             text: '提交',
             margin: '0 20 0 20',
+            formBind: true,
             handler:'onSubmit'
         },{
             text: '关闭',

+ 0 - 47
frontend/saas-web/app/view/sys/feedback/FormPanel.scss

@@ -1,47 +0,0 @@
-#feedbackWin {
-    border: none;
-    border-radius: 4px;
-
-    .x-window-header {
-        padding: 30px 45px 20px 45px;
-        background: #fff;
-        border: none;
-
-        .x-window-header-title-default {
-            .x-title-text {
-                color: #34BAF6;
-                font-size: 16px;
-                font-weight: 500;
-                letter-spacing: 1.8px;
-                padding-left: 10px;
-
-                &:before {
-                    content: ' ';
-                    position: absolute;
-                    width: 5px;
-                    height: 16px;
-                    background: #34baf6;
-                    left: 0;
-                    top: 2px;
-                    border-radius: 4px;
-                }
-            }
-        }
-
-        .x-tool-default {
-            
-            .x-tool-close {
-                color:  #34BAF6;
-            }
-        }
-    }
-
-    .x-window-bodyWrap {
-        
-        .x-toolbar-footer {
-            padding: 0;
-            top: 210px !important;
-            background: #fff;
-        }
-    }
-}

+ 24 - 2
frontend/saas-web/app/view/sys/feedback/FormPanelController.js

@@ -7,8 +7,30 @@ Ext.define('saas.view.sys.feedback.FormPanelController', {
         });
     },
     onSubmit:function(){
-        saas.util.BaseUtil.showSuccessToast('提交成功!');
-        Ext.destroy(Ext.getCmp("feedbackWin"));
+        let form = this.getView(),
+        values = form.getValues(),
+        name = values.name,
+        content = values.content,
+        qq = values.qq,
+        wechat = values.wechat,
+        mobile = values.mobile;
+
+        saas.util.BaseUtil.request({
+            url: '/api/operation/customerFeedBack/save',
+            params: JSON.stringify({
+                cf_content: content,
+                cf_name: name,
+                cf_qq: qq,
+                cf_wechat: wechat,
+                cf_mobile: mobile
+            }),
+            method: 'POST'
+        }).then(function(res) {
+            saas.util.BaseUtil.showSuccessToast('提交成功!');
+            Ext.destroy(Ext.getCmp("feedbackWin"));
+        }).catch(function(e) {
+            saas.util.BaseUtil.showErrorToast('提交失败: ' + e.message);
+        });
     },
     onClose:function(){
         Ext.destroy(Ext.getCmp("feedbackWin"));