diff --git a/src/controller/ext/collector/index.js b/src/controller/ext/collector/index.js deleted file mode 100644 index 82922395e7a01df95d614adb3b2a12308d42687c..0000000000000000000000000000000000000000 --- a/src/controller/ext/collector/index.js +++ /dev/null @@ -1,60 +0,0 @@ - -// +---------------------------------------------------------------------- -// | CmsWing [ 网站内容管理框架 ] -// +---------------------------------------------------------------------- -// | Copyright (c) 2015-2115 http://www.cmswing.com All rights reserved. -// +---------------------------------------------------------------------- -// | Author: arterli -// +---------------------------------------------------------------------- -/** - * 插件前台控制器 - * 如果插件有前台展示业务,写在这个控制器里面 - * 插件如需建立表务必遵循下面格式: - * 单表:表前缀_ext_插件目录名 - * 多表:表前缀_ext_插件目录名,表前缀_ext_插件目录名_分表1,表前缀_ext_插件目录名_分表2... - */ -module.exports = class extends think.cmswing.extIndex { - /** - * index action - * - * @return {Promise} [] - */ - - async indexAction() { - // -- 获取插件目录名 - // this.ext.ext; - - // -- 获取当前分类 - // await this.gettype() - - // -- model调用 - // const list = await this.extModel('demo').select(); - // const list2 = await this.extModel('demo').demo(); - // const list3 = await think.extModel('demo','demo').demo(); - - // -- 分页 - // const model = this.extModel('demo'); - // const data = await model.page(this.get('page')).countSelect(); // 获取分页数据 - // console.log(data); - // const html = this.pagination(data); // 调取分页 - // this.assign('pagerData', html); // 分页展示使用 - - // -- ext service - // 无参数类的实例化 - // const Ser1 = this.extService('demo'); - // const Ser1 = think.extService('demo','demo'); - // const ser1 = Ser1.bbb('bbb'); - // console.log(ser1); - // 有参数类的实例化 - // const Ser2 = this.extService('demo','demo','aaa','bbb'); - // const Ser2 = think.extService('demo','demo','aaa','bbb'); - // const ser2 = Ser2.aaa(); - // console.log(ser2); - - if (this.isMobile) { - return this.extDisplay('m'); - } else { - return this.extDisplay(); - } - } -}; diff --git a/src/controller/ext/collector/logic/admin.js b/src/controller/ext/collector/logic/admin.js deleted file mode 100644 index 1a5c23b86e734a150b60a463ea0ee3657c1b00d5..0000000000000000000000000000000000000000 --- a/src/controller/ext/collector/logic/admin.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = class extends think.Logic { - // indexAction() { - // this.rules = { - // username: { - // required: true, - // method: 'GET' // 指定获取数据的方式 - // } - // }; - // } -}; diff --git a/src/controller/ext/collector/logic/index.js b/src/controller/ext/collector/logic/index.js deleted file mode 100644 index 1a5c23b86e734a150b60a463ea0ee3657c1b00d5..0000000000000000000000000000000000000000 --- a/src/controller/ext/collector/logic/index.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = class extends think.Logic { - // indexAction() { - // this.rules = { - // username: { - // required: true, - // method: 'GET' // 指定获取数据的方式 - // } - // }; - // } -}; diff --git a/src/controller/ext/collector/model/demo.js b/src/controller/ext/collector/model/demo.js deleted file mode 100644 index 422c13722e8df0a85474c71a96d1b5843ea209d2..0000000000000000000000000000000000000000 --- a/src/controller/ext/collector/model/demo.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = class extends think.Model { - async demo() { - const list = await this.select(); - return list; - } -}; diff --git a/src/controller/ext/collector/service/demo.js b/src/controller/ext/collector/service/demo.js deleted file mode 100644 index 7fb9b82c4ca75eca572f31c03654065d8a1e521b..0000000000000000000000000000000000000000 --- a/src/controller/ext/collector/service/demo.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = class extends think.Service { - constructor(key, secret) { - super(); - this.key = key; - this.secret = secret; - } - aaa() { - return `key:${this.key},secret:${this.secret}`; - } - bbb(bbb) { - return bbb; - } -}; diff --git a/src/controller/ext/email/admin.js b/src/controller/ext/email/admin.js new file mode 100644 index 0000000000000000000000000000000000000000..b77d72a95baaa38206d5a8e90715a2f92f5e35d9 --- /dev/null +++ b/src/controller/ext/email/admin.js @@ -0,0 +1,18 @@ +// +---------------------------------------------------------------------- +// | CmsWing [ 网站内容管理框架 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2015-2115 http://www.cmswing.com All rights reserved. +// +---------------------------------------------------------------------- +// | Author: arterli +// +---------------------------------------------------------------------- +module.exports = class extends think.cmswing.extAdmin { + async indexAction() { + const email = this.extService('email', 'email'); + email.send({ + to: '15617817578@163.com', // list of receivers + subject: 'this is subject', // subject line + html: 'this is HTML content' // html content + }); + return this.success(); + } +}; diff --git a/src/controller/ext/email/config.js b/src/controller/ext/email/config.js new file mode 100644 index 0000000000000000000000000000000000000000..977988a6a600e5890dba1111cb9b35a34e23d0df --- /dev/null +++ b/src/controller/ext/email/config.js @@ -0,0 +1,46 @@ +module.exports = { + ext: 'email', // 插件目录,必须为英文 + name: '邮件', // 插件名称 + description: '对邮件扩展的封装,如果有需要可自行,配置hook', // 插件描述 + isadm: 0, // 是否有后台管理,1:有,0:没有,入口地址:'/ext/mail/admin/index' + isindex: 0, // 是否需要前台访问,1:需要,0:不需要,入口地址:'/ext/mail/index/index' + version: '1.0', // 版本号 + author: '孙会鹏', // 作者 + table: [], // 插件包含的 数据库表,不包含表前缀,如:cmswing_ext_table 就是 table,多个['table','table_2']没有留空数组。 + sql: '', // 插件安装的时候会找个名字的sql文件导入,默认 插件目录名.sql; + hooks: [], // 挂载的钩子,数组格式,如['hooks1', 'hooks2'],不挂载留空:[] + setting: [ + { + '邮件设置': [ + { + 'name': 'host', // 配置在表单中的键名 ,这个会是this.config('title') + 'label': '邮件服务器:', // 表单的文字 + 'type': 'text', // 表单的类型:text、radio、select + 'value': 'admin@163.com', // 表单的默认值 + 'html': '邮箱账号' + }, + { + 'name': 'port', // 配置在表单中的键名 ,这个会是this.config('title') + 'label': '端口:', // 表单的文字 + 'type': 'text', // 表单的类型:text、radio、select + 'value': '587', // 表单的默认值 + 'html': '邮箱账号' + }, + { + 'name': 'user', // 配置在表单中的键名 ,这个会是this.config('title') + 'label': '邮箱账号:', // 表单的文字 + 'type': 'text', // 表单的类型:text、radio、select + 'value': 'admin@163.com', // 表单的默认值 + 'html': '邮箱账号' + }, + { + 'name': 'pass', + 'label': '授权码:', + 'type': 'pass', + 'value': 'pass', + 'html': '邮箱的授权码' + } + ] + } + ] +}; \ No newline at end of file diff --git a/src/controller/ext/email/service/email.js b/src/controller/ext/email/service/email.js new file mode 100644 index 0000000000000000000000000000000000000000..2f802fd06f8a7aef854fb74c96af5cc8ce9de88b --- /dev/null +++ b/src/controller/ext/email/service/email.js @@ -0,0 +1,33 @@ +module.exports = class extends think.Service { + // 构造函数 + constructor(...para) { + super(para); + + this.transport = { + host: think.config('ext.email.host'), + port: Number(think.config('ext.email.port')), + secure: false, + auth: { + user: think.config('ext.email.user'), + pass: think.config('ext.email.pass') + } + }; + } + + // 发送邮件 + async send(options) { + // 检查 + think.extend(options, { + from: think.config('ext.email.user') + }) + // 发送 + const deferred = think.defer(); + console.log('-----email', this.transport, options); + think.sendEmail(this.transport, options).then(info => { + deferred.resolve(info); + }, err => { + console.log(err); + }); + return deferred.promise; + } +}; diff --git a/src/controller/mod/demo/config.js b/src/controller/mod/demo/config.js index 89b45e5ef61fdb81f9fbfc40cc8ba3e613d4933d..4fc793225874f4972f5dc846afbfeb0a7405ed82 100644 --- a/src/controller/mod/demo/config.js +++ b/src/controller/mod/demo/config.js @@ -1 +1,35 @@ -module.exports = {'name': 'demo', 'title': '模型实例', 'extend': 0, 'relation': '', 'need_pk': 1, 'field_sort': null, 'field_group': '1:基础', 'attribute_list': null, 'attribute_alias': '', 'template_list': '', 'template_add': '', 'template_edit': '', 'list_grid': null, 'list_row': 10, 'search_key': '', 'search_list': '', 'create_time': 1508255784696, 'update_time': 1508256028172, 'status': 1, 'engine_type': 'InnoDB', 'key_show': 1, 'temp_show': 1, 'type_show': 1, 'priv_show': 1, 'groups_show': 1, 'priv_roleid': '', 'priv_groupid': '', 'is_approval': 1, 'hooks': null, 'version': '1.0', 'author': 'cmswing', 'table': 'demo', 'ismod': 1}; +module.exports = { + 'name': 'demo', + 'title': '模型实例', + 'extend': 0, + 'relation': '', + 'need_pk': 1, + 'field_sort': null, + 'field_group': '1:基础', + 'attribute_list': null, + 'attribute_alias': '', + 'template_list': '', + 'template_add': '', + 'template_edit': '', + 'list_grid': null, + 'list_row': 10, + 'search_key': '', + 'search_list': '', + 'create_time': 1508255784696, + 'update_time': 1508256028172, + 'status': 1, + 'engine_type': 'InnoDB', + 'key_show': 1, + 'temp_show': 1, + 'type_show': 1, + 'priv_show': 1, + 'groups_show': 1, + 'priv_roleid': '', + 'priv_groupid': '', + 'is_approval': 1, + 'hooks': null, + 'version': '1.0', + 'author': 'cmswing', + 'table': 'demo', + 'ismod': 1 +}; diff --git a/view/cmswing/forms.html b/view/cmswing/forms.html index 17bbc3078ae8db005bb1d4631113006486150531..c79cb8cfda898c96f6a56a62169178fbd0ee2c8c 100644 --- a/view/cmswing/forms.html +++ b/view/cmswing/forms.html @@ -62,6 +62,27 @@ {% endmacro %} +{%macro pass(setting, label, name, value= '',html= '')%} +
+ +
+
+ +
+ +
+ +
+ this.config('ext.{{setting.ext}}.{{name}}') + {%if html%} + {{html|safe}} + {%endif%} +
+
+
+
+{% endmacro %} + {%macro select(setting, label, name, value= '', options={},html= '')%}
diff --git a/view/ext/setting.html b/view/ext/setting.html index b316643efe6de9a6034634d74802df8977d68033..6c74d9feeaa523ae91c67347931e179f086962b9 100644 --- a/view/ext/setting.html +++ b/view/ext/setting.html @@ -27,6 +27,8 @@ {%for input in amount%} {%if input.type == 'text'%} {{forms.text(setting,label= input.label, name= input.name, value=input.value, html= input.html)}} + {%elif input.type == 'pass'%} + {{forms.pass(setting,label= input.label, name= input.name, value=input.value, html= input.html)}} {%elif input.type == 'radio'%} {{forms.radio(setting,label=input.label, name=input.name, value=input.value, options=input.options,html=input.html)}}