npm i janusjs
node_modules projects cluster.config.js cluster.js daemon.js server.js
node server
projects/crm/config.json
protected static admin css extended locale modules news controller model view config.json config.json
Ext.define('Crm.modules.news.controller.News', { extend: 'Core.controller.Controller', launcher: { text: 'News', // iconCls:'fa fa-newspaper-o' // , Font Awesome } });
Ext.define('Crm.modules.news.view.NewsList', { extend: 'Core.grid.GridWindow', sortManually: true, // filterbar: true, // /* */ buildColumns: function() { return [{ text: 'Title', flex: 1, sortable: true, dataIndex: 'name', filter: true },{ text: 'Date start', flex: 1, sortable: true, xtype: 'datecolumn', dataIndex: 'date_start', filter: true },{ text: 'Date finish', flex: 1, sortable: true, xtype: 'datecolumn', dataIndex: 'date_end', filter: true }] } })
Ext.define('Crm.modules.news.view.NewsForm', { extend: 'Core.form.DetailForm' ,titleIndex: 'name' // , ,layout: 'border' ,border: false ,bodyBorder: false ,height: 450 ,width: 750 ,buildItems: function() { return [{ xtype: 'panel', region: 'north', border: false, bodyBorder: false, layout: 'anchor', bodyStyle: 'padding: 5px;', items: [{ name: 'name', anchor: '100%', xtype: 'textfield', fieldLabel: 'Title' },{ xtype: 'fieldcontainer', layout: 'hbox', anchor: '100%', items: [{ xtype: 'datefield', fieldLabel: 'Date start', name: 'date_start', flex: 1, margin: '0 10 0 0' },{ xtype: 'datefield', fieldLabel: 'Date finish', name: 'date_end', flex: 1 }] },{ xtype: 'textarea', anchor: '100%', height: 60, name: 'stext', emptyText: 'Announce' }] }, this.fullText() ] } ,fullText: function() { return Ext.create('Desktop.modules.pages.view.HtmlEditor', { hideLabel: true, region: 'center', name: 'text' }) } })
Ext.define('Crm.modules.news.model.NewsModel', { extend: "Core.data.DataModel" ,collection: 'news' // / ,removeAction: 'remove' // /* */ ,fields: [{ name: '_id', // type: 'ObjectID', // visible: true // },{ name: 'name', type: 'string', filterable: true, // editable: true, // visible: true },{ name: 'date_start', type: 'date', filterable: true, editable: true, visible: true },{ name: 'date_end', type: 'date', filterable: true, editable: true, visible: true },{ name: 'stext', type: 'string', filterable: false, editable: true, visible: true },{ name: 'text', type: 'string', filterable: false, editable: true, visible: true }] })
Ext.define('Crm.modules.news.view.NewsList', { … // Tbar ,buildTbar: function() { // // var items = this.callParent(); // items.splice(2,0, { text: 'Publish selected', action: 'publish' }) return items; } … })
Ext.define('Crm.modules.news.controller.News', { extend: 'Core.controller.Controller' ,addControls: function(win) { var me = this me.control(win,{ "[action=publish]": {click: function() {me.publish(win)}} }) me.callParent(arguments) } ,publish: function(win) { var grid = win.down('grid') // ,selected = grid.getSelectionModel().selected // ,ids = []; if(selected && selected.items) { selected.items.forEach(function(item) { ids.push(item.data._id) }) if(ids.length) { // // this.model.publish(ids, function() { grid.getStore().reload(); }) } } } })
Ext.define('Crm.modules.news.model.NewsModel', { extend: "Core.data.DataModel" ,collection: 'news' ,removeAction: 'remove' ,fields: [ ....... ] ,publish: function(ids, cb) { // this.runOnServer('publish', {ids: ids}, cb) } // // $, // $ (. 6 ) ,$publish: function(data, cb) { var me = this ,date_start = new Date() // ,date_end = new Date(date_start.getTime() + 86400000 * 7) // + 7 ,ids = data.ids || null; if(!ids) { cb({ok: false}) return; } // // ObjectId ids.each(function(id) { return me.src.db.fieldTypes.ObjectID.getValueToSave(null, id) }, true) // // me.dbCollection - me.dbCollection.update({ _id:{$in: ids} }, { $set: { date_start: date_start, date_end: date_end } }, { multi: true }, function() { cb({ok: true}) }) } })
Ext.define('Crm.modules.news.model.NewsModel', { extend: "Core.data.DataModel" ,collection: 'news' // scope:server ,removeAction: 'remove' // scope:server ,fields: [{ name: '_id', type: 'ObjectID', // scope:server visible: true },{ name: 'name', type: 'string', // scope:server filterable: true, editable: true, visible: true },{ name: 'date_start', type: 'date', // scope:server filterable: true, editable: true, visible: true },{ name: 'date_end', type: 'date', // scope:server filterable: true, editable: true, visible: true },{ name: 'stext', type: 'string', // scope:server filterable: false, editable: true, visible: true },{ name: 'text', type: 'string', // scope:server filterable: false, editable: true, visible: true }] /* scope:client */ ,publish: function(ids, cb) { this.runOnServer('publish', {ids: ids}, cb) } /* scope:server */ ,$publish: function(data, cb) { var me = this ,date_start = new Date() // ,date_end = new Date(date_start.getTime() + 86400000 * 7) // + 7 ,ids = data.ids || null; if(!ids) { cb({ok: false}) return; } ids.each(function(id) { return me.src.db.fieldTypes.ObjectID.getValueToSave(null, id) }, true) me.dbCollection.update({ _id:{$in: ids} }, { $set: { date_start: date_start, date_end: date_end } }, { multi: true }, function() { cb({ok: true}) }) } })
static admin modules comments controller Comments.js model CommentsModel.js view CommentsList.js CommentsForm.js
Ext.define('Crm.modules.comments.controller.Comments', { extend: 'Core.controller.Controller', launcher: { text: 'Comments', // iconCls:'fa fa-comment-o' // } });
Ext.define('Crm.modules.comments.view.CommentsList', { extend: 'Core.grid.GridWindow', // buildColumns: function() { return [{ text: 'Comment', flex: 1, sortable: true, dataIndex: 'text', filter: true }] } })
Ext.define('Crm.modules.comments.view.CommentsForm', { extend: 'Core.form.DetailForm' ,titleIndex: 'text' // , ,buildItems: function() { return [ // { fieldLabel: 'Comment text', name: 'text', xtype: 'textarea', anchor: '100%', height: 150 }, // // { name: 'pid', hidden: true }] } })
Ext.define('Crm.modules.comments.model.CommentsModel', { extend: "Core.data.DataModel" ,collection: 'comments' // scope:server ,removeAction: 'remove' // scope:server ,fields: [{ name: '_id', type: 'ObjectID', // scope:server visible: true },{ name: 'pid', type: 'ObjectID', // scope:server visible: true, filterable: true, editable: true },{ name: 'text', type: 'string', // scope:server filterable: true, editable: true, visible: true }] })
Ext.define('Crm.modules.news.view.NewsForm', { extend: 'Core.form.DetailForm' ,titleIndex: 'name' // , ,layout: 'border' ,border: false ,bodyBorder: false ,height: 450 ,width: 750 // tabpanel ,buildItems: function() { return [{ xtype: 'tabpanel', region: 'center', items: [ this.buildMainFormTab(), this.buildCommentsTab() ] }] } // ,buildMainFormTab: function() { return { xtype: 'panel', title: '', layout: 'border', items: this.buildMainFormTabItems() } } // ,buildMainFormTabItems: function() { return [{ xtype: 'panel', region: 'north', border: false, bodyBorder: false, layout: 'anchor', bodyStyle: 'padding: 5px;', items: [{ name: 'name', anchor: '100%', xtype: 'textfield', fieldLabel: 'Title' },{ xtype: 'fieldcontainer', layout: 'hbox', anchor: '100%', items: [{ xtype: 'datefield', fieldLabel: 'Date start', name: 'date_start', flex: 1, margin: '0 10 0 0' },{ xtype: 'datefield', fieldLabel: 'Date finish', name: 'date_end', flex: 1 }] },{ xtype: 'textarea', anchor: '100%', height: 60, name: 'stext', emptyText: 'Announce' }] }, this.fullText() ] } ,fullText: function() { return Ext.create('Desktop.modules.pages.view.HtmlEditor', { hideLabel: true, region: 'center', name: 'text' }) } ,buildCommentsTab: function() { return { xtype: 'panel', title: 'Comments', layout: 'fit', // , , // childModule: { // controller: 'Crm.modules.comments.controller.Comments', // (_id ) outKey: '_id', // (pid ) inKey: 'pid' } } } })
<!DOCTYPE HTML> <html> <head> <title>{[values.metatitle? values.metatitle:values.name]}</title> </head> <body> <tpl if="blocks && blocks[1]"> <tpl for="blocks[1]">{.}</tpl> </tpl> </body> </html>
<tpl for="list"> <h4> <a href="/news/{_id}">{name}</a> <i class="date">: {[Ext.Date.format(new Date(values.date_start),'dmY')]}</i> </h4> <p>{stext}</p> </tpl>
<h4> {name} <i class="date">: {[Ext.Date.format(new Date(values.date_start),'dmY')]}</i> </h4> {text} <a href="./"> </a>
Ext.define('Crm.site.news.controller.News',{ extend: "Core.Controller" ,show: function(params, cb) { // url , if(params.pageData.page) this.showOne(params, cb) else // , this.showList(params, cb) } ,showOne: function(params, cb) { var me = this; Ext.create('Crm.modules.news.model.NewsModel', { scope: me }).getData({ filters: [{property: '_id', value: params.pageData.page}] }, function(data) { me.tplApply('.one', data.list[0] || {}, cb) }); } ,showList: function(params, cb) { var me = this; Ext.create('Crm.modules.news.model.NewsModel', { scope: me }).getData({ filters: [] }, function(data) { me.tplApply('.list', data, cb) }); } });
localhost:8008/news/
Source: https://habr.com/ru/post/269791/
All Articles