Merge branch '5.0.1' of https://gitee.com/mingSoft/MCMS into 5.0.1

 Conflicts:
	pom.xml
	src/main/webapp/static/plugins/ms/1.0.0/compatible.js
This commit is contained in:
信 赵 2020-04-28 16:23:51 +08:00
commit 0a2f344bba
18 changed files with 1026 additions and 661 deletions

View File

@ -24,9 +24,12 @@
</p> </p>
<p align="center"> <p align="center">
铭飞平台:<a href="https://ms.mingsoft.net">https://ms.mingsoft.net/</a> <br/> <a href="https://ms.mingsoft.net" target="_blank">铭飞平台</a>
演示:<a href="http://demo.cms.mingsoft.net/ms/login.do">http://demo.cms.mingsoft.net/ms/login.do</a><br/> <a href="http://demo.cms.mingsoft.net/ms/login.do" target="_blank">在线演示</a>
<a href="http://file.mingsoft.net/ms-runner-4.7.2.zip">一键运行版本</a> <a href="http://doc.ms.mingsoft.net/plugs-cms/" target="_blank">在线使用手册</a>
<a href="https://mingsoft.ke.qq.com/?tuin=383187f3#tab=1&category=-1" target="_blank">腾讯课堂在线视频</a><br/>
<a href="https://ke.qq.com/course/478498" target="_blank">代码生成器视频教程</a><br/>
<a href="http://file.mingsoft.net/ms-runner-5.0.0.zip" target="_blank">Windows一键运行版本\Linux一键运行版本</a>
</p> </p>
------------------------------------------------------------------------------- -------------------------------------------------------------------------------

File diff suppressed because one or more lines are too long

View File

@ -99,6 +99,7 @@ public class CategoryAction extends BaseAction{
BaseEntity categoryEntity = categoryBiz.getEntity(Integer.parseInt(category.getId())); BaseEntity categoryEntity = categoryBiz.getEntity(Integer.parseInt(category.getId()));
model.addAttribute("categoryEntity",categoryEntity); model.addAttribute("categoryEntity",categoryEntity);
} }
model.addAttribute("appId",BasicUtil.getAppId());
return "/cms/category/form"; return "/cms/category/form";
} }

View File

@ -102,6 +102,7 @@ public class ContentAction extends BaseAction{
BaseEntity contentEntity = contentBiz.getEntity(Integer.parseInt(content.getId())); BaseEntity contentEntity = contentBiz.getEntity(Integer.parseInt(content.getId()));
model.addAttribute("contentEntity",contentEntity); model.addAttribute("contentEntity",contentEntity);
} }
model.addAttribute("appId",BasicUtil.getAppId());
return "/cms/content/form"; return "/cms/content/form";
} }

View File

@ -24,7 +24,6 @@ package net.mingsoft.cms.action;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import net.mingsoft.basic.action.BaseAction;
import net.mingsoft.basic.biz.IModelBiz; import net.mingsoft.basic.biz.IModelBiz;
import net.mingsoft.basic.entity.AppEntity; import net.mingsoft.basic.entity.AppEntity;
import net.mingsoft.basic.util.BasicUtil; import net.mingsoft.basic.util.BasicUtil;

View File

@ -33,3 +33,4 @@ category.id=\u6240\u5C5E\u680F\u76EE
content.sort=\u81EA\u5B9A\u4E49\u987A\u5E8F content.sort=\u81EA\u5B9A\u4E49\u987A\u5E8F
category.diy.url=\u81EA\u5B9A\u4E49\u94FE\u63A5 category.diy.url=\u81EA\u5B9A\u4E49\u94FE\u63A5
content.keyword=\u5173\u952E\u5B57 content.keyword=\u5173\u952E\u5B57
templet.file=\u672A\u627E\u5230\u6A21\u677F\u6587\u4EF6

View File

@ -33,3 +33,4 @@ category.id=\u6240\u5C5E\u680F\u76EE
content.sort=\u81EA\u5B9A\u4E49\u987A\u5E8F content.sort=\u81EA\u5B9A\u4E49\u987A\u5E8F
category.diy.url=\u81EA\u5B9A\u4E49\u94FE\u63A5 category.diy.url=\u81EA\u5B9A\u4E49\u94FE\u63A5
content.keyword=\u5173\u952E\u5B57 content.keyword=\u5173\u952E\u5B57
templet.file=\u672A\u627E\u5230\u6A21\u677F\u6587\u4EF6

View File

@ -1,8 +1,6 @@
package net.mingsoft.config; package net.mingsoft.config;
import java.util.LinkedHashMap; import net.mingsoft.basic.security.BaseAuthRealm;
import java.util.Map;
import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
@ -11,9 +9,9 @@ import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreato
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import net.mingsoft.basic.security.BaseAuthRealm; import java.util.LinkedHashMap;
import java.util.Map;
@Configuration @Configuration
public class ShiroConfig { public class ShiroConfig {
@ -21,6 +19,29 @@ public class ShiroConfig {
@Value("${ms.manager.path}") @Value("${ms.manager.path}")
private String managerPath; private String managerPath;
/**
* 开启Shiro的注解(@RequiresRoles , @RequiresPermissions),需借助SspringAOP扫描使用Sshiro注解的类并在必要时进行安全逻辑验证
* 配置以下两个bean(Defaul tAdvisorAutoProxyCreator和uthorizat ionAttributeSourceAdvisor)即可实现此功能
*/
@Bean
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
advisorAutoProxyCreator.setProxyTargetClass(true);
return advisorAutoProxyCreator;
}
/**
* 开启shiro aop注解支持
* 使用代理方式;所以需要开启代码支持
* @param securityManager
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
@Bean @Bean
public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor( public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(
DefaultWebSecurityManager securityManager) { DefaultWebSecurityManager securityManager) {

View File

@ -200,7 +200,7 @@
:limit="1" :limit="1"
:on-exceed="categoryImghandleExceed" :on-exceed="categoryImghandleExceed"
:disabled="false" :disabled="false"
:data="{uploadPath:'/cms/category','isRename':true,'appId':true}" :data="{uploadPath:'/${appId}/cms/category','isRename':true}"
:on-success="categoryImgSuccess" :on-success="categoryImgSuccess"
accept="image/*" accept="image/*"
list-type="picture-card"> list-type="picture-card">
@ -232,12 +232,12 @@
<script> <script>
var form = new Vue({ var form = new Vue({
el: '#form', el: '#form',
data() { data: function () {
return { return {
treeList: [{ treeList: [{
id: '0', id: '0',
categoryTitle: '顶级栏目', categoryTitle: '顶级栏目',
children: [], children: []
}], }],
categoryList: [], categoryList: [],
saveDisabled: false, saveDisabled: false,
@ -269,7 +269,13 @@
//栏目字典 //栏目字典
categoryFlag: [] categoryFlag: []
}, },
categoryTypeOptions: [{"value": "1", "label": "列表"}, {"value": "2", "label": "封面"}], categoryTypeOptions: [{
"value": "1",
"label": "列表"
}, {
"value": "2",
"label": "封面"
}],
categoryListUrlOptions: [], categoryListUrlOptions: [],
categoryUrlOptions: [], categoryUrlOptions: [],
mdiyModelIdOptions: [], mdiyModelIdOptions: [],
@ -279,16 +285,26 @@
categoryTitle: [{ categoryTitle: [{
"required": true, "required": true,
"message": "请选择栏目管理名称" "message": "请选择栏目管理名称"
}, {"pattern": /^[^[!@#$%^&*()_+-/~?@#¥%…&*()——+—?》《:“‘’]+$/, "message": "栏目管理名称格式不匹配"}], }, {
categoryListUrl: [{"required":true,"message":"请选择列表模板"}], "pattern": /^[^[!@#$%^&*()_+-/~?@#¥%…&*()——+—?》《:“‘’]+$/,
"message": "栏目管理名称格式不匹配"
}],
categoryListUrl: [{
"required": true,
"message": "请选择列表模板"
}],
// 内容模板 // 内容模板
categoryUrl: [{"required":true,"message":"请选择内容模板"}], categoryUrl: [{
}, "required": true,
"message": "请选择内容模板"
}]
} }
};
}, },
watch: { watch: {
'form.categoryId': function (n, o) { 'form.categoryId': function (n, o) {
var _this = this;
if (n == this.form.id) { if (n == this.form.id) {
this.$notify({ this.$notify({
title: '提示', title: '提示',
@ -297,12 +313,15 @@
}); });
return; return;
} }
this.categoryList.forEach(item => {
if (item.categoryParentId != null && item.categoryParentId != "" && item.categoryParentId.indexOf(this.form.id) != -1) { this.categoryList.forEach(function (item) {
if (item.categoryParentId != null && item.categoryParentId != "" && item.categoryParentId.indexOf(_this.form.id) != -1) {
if (item.id == n) { if (item.id == n) {
this.form.categoryId = null; _this.form.categoryId = null;
this.$refs.tree.clearHandle();
this.$notify({ _this.$refs.tree.clearHandle();
_this.$notify({
title: '提示', title: '提示',
message: '不能选择子分类', message: '不能选择子分类',
type: 'warning' type: 'warning'
@ -314,9 +333,11 @@
}, },
computed: {}, computed: {},
methods: { methods: {
getTree() { getTree: function () {
var that = this; var that = this;
ms.http.get(ms.manager + "/cms/category/list.do", {pageSize: 9999}).then(function (res) { ms.http.get(ms.manager + "/cms/category/list.do", {
pageSize: 9999
}).then(function (res) {
if (res.result) { if (res.result) {
//res.data.rows.push({id:0,categoryId: null,categoryTitle:'顶级栏目管理'}); //res.data.rows.push({id:0,categoryId: null,categoryTitle:'顶级栏目管理'});
that.categoryList = res.data.rows; that.categoryList = res.data.rows;
@ -326,21 +347,24 @@
console.log(err); console.log(err);
}); });
}, },
save() { save: function () {
var that = this; var that = this;
var url = ms.manager + "/cms/category/save.do" var url = ms.manager + "/cms/category/save.do";
if (that.form.id > 0) { if (that.form.id > 0) {
url = ms.manager + "/cms/category/update.do"; url = ms.manager + "/cms/category/update.do";
} }
this.$refs.form.validate((valid) => {
if (valid) {
this.$refs.form.validate(function (valid) {
if (valid) {
//栏目属性为封面则不需要列表模板 //栏目属性为封面则不需要列表模板
if (that.form.categoryType == '2') { if (that.form.categoryType == '2') {
that.form.categoryListUrl = ''; that.form.categoryListUrl = '';
} }
that.saveDisabled = true; that.saveDisabled = true;
var data = JSON.parse(JSON.stringify(that.form)); var data = JSON.parse(JSON.stringify(that.form));
if (data.id && data.id == data.categoryId) { if (data.id && data.id == data.categoryId) {
that.$notify({ that.$notify({
title: '提示', title: '提示',
@ -348,11 +372,13 @@
type: 'error' type: 'error'
}); });
that.saveDisabled = false; that.saveDisabled = false;
return return;
} }
if (data.categoryId == '0') { if (data.categoryId == '0') {
data.categoryId = ''; data.categoryId = '';
} }
if (data.categoryFlag) { if (data.categoryFlag) {
data.categoryFlag = data.categoryFlag.join(','); data.categoryFlag = data.categoryFlag.join(',');
} }
@ -373,44 +399,51 @@
type: 'warning' type: 'warning'
}); });
} }
that.saveDisabled = false; that.saveDisabled = false;
}); });
} else { } else {
return false; return false;
} }
}) });
}, },
//获取分类内容模型 //获取分类内容模型
getColumnContentModelId: function () { getColumnContentModelId: function () {
var that = this; var that = this;
ms.http.get(ms.manager + "/mdiy/model/list.do", {modelType: 'zdymx_wz'}).then( ms.http.get(ms.manager + "/mdiy/model/list.do", {
function (data) { modelType: 'zdymx_wz'
}).then(function (data) {
that.mdiyModelIdOptions = data.data.rows; that.mdiyModelIdOptions = data.data.rows;
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
}, },
//获取当前分类 //获取当前分类
get(id) { get: function (id) {
var that = this; var that = this;
ms.http.get(ms.manager + "/cms/category/get.do", {"id": id}).then(function (res) { ms.http.get(ms.manager + "/cms/category/get.do", {
"id": id
}).then(function (res) {
if (res.result && res.data) { if (res.result && res.data) {
if (res.data.categoryFlag) { if (res.data.categoryFlag) {
res.data.categoryFlag = res.data.categoryFlag.split(','); res.data.categoryFlag = res.data.categoryFlag.split(',');
} }
if (res.data.categoryImg) { if (res.data.categoryImg) {
res.data.categoryImg = JSON.parse(res.data.categoryImg); res.data.categoryImg = JSON.parse(res.data.categoryImg);
res.data.categoryImg.forEach(function (value) { res.data.categoryImg.forEach(function (value) {
value.url = ms.base + value.path value.url = ms.base + value.path;
}) });
} else { } else {
res.data.categoryImg = [] res.data.categoryImg = [];
} }
if (!res.data.categoryId) { if (!res.data.categoryId) {
res.data.categoryId = '0'; res.data.categoryId = '0';
} }
that.form = res.data;
//判断该分类是否存在文章,存在则不能修改栏目属性 that.form = res.data; //判断该分类是否存在文章,存在则不能修改栏目属性
that.contentList(that.form.id); that.contentList(that.form.id);
} }
}).catch(function (err) { }).catch(function (err) {
@ -420,7 +453,7 @@
contentList: function (id) { contentList: function (id) {
var that = this; var that = this;
ms.http.post(ms.manager + "/cms/content/list.do", { ms.http.post(ms.manager + "/cms/content/list.do", {
contentCategoryId: id, contentCategoryId: id
}).then(function (data) { }).then(function (data) {
if (data.data.total > 0) { if (data.data.total > 0) {
that.categoryTypeDisabled = true; that.categoryTypeDisabled = true;
@ -432,7 +465,7 @@
}); });
}, },
//获取categoryListUrl数据源 //获取categoryListUrl数据源
categoryListUrlOptionsGet() { categoryListUrlOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.manager + "/template/queryTemplateFileForColumn.do", {}).then(function (data) { ms.http.get(ms.manager + "/template/queryTemplateFileForColumn.do", {}).then(function (data) {
that.categoryListUrlOptions = data.data; that.categoryListUrlOptions = data.data;
@ -441,7 +474,7 @@
}); });
}, },
//获取categoryUrl数据源 //获取categoryUrl数据源
categoryUrlOptionsGet() { categoryUrlOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.manager + "/template/queryTemplateFileForColumn.do", {}).then(function (data) { ms.http.get(ms.manager + "/template/queryTemplateFileForColumn.do", {}).then(function (data) {
that.categoryUrlOptions = data.data; that.categoryUrlOptions = data.data;
@ -449,51 +482,53 @@
console.log(err); console.log(err);
}); });
}, },
//categoryImg文件上传完成回调
categoryImgSuccess: function (response, file, fileList) {
this.form.categoryImg.push({url: file.url, name: file.name, path: response, uid: file.uid});
},
categoryImghandleRemove: function (file, files) {
var index = -1;
index = this.form.categoryImg.findIndex(text => text == file);
if (index != -1) {
this.form.categoryImg.splice(index, 1);
}
},
//获取categoryFlag数据源 //获取categoryFlag数据源
categoryFlagOptionsGet() { categoryFlagOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'栏目属性',pageSize:99999}).then(function (res) { ms.http.get(ms.base + '/mdiy/dict/list.do', {
dictType: '栏目属性',
pageSize: 99999
}).then(function (res) {
that.categoryFlagOptions = res.rows; that.categoryFlagOptions = res.rows;
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
}, },
//categoryImg文件上传完成回调 //categoryImg文件上传完成回调
categoryImgSuccess: function (response, file, fileList) { categoryImgSuccess: function (response, file, fileList) {
this.form.categoryImg.push({url: file.url, name: file.name, path: response, uid: file.uid}); this.form.categoryImg.push({
url: file.url,
name: file.name,
path: response,
uid: file.uid
});
}, },
//上传超过限制 //上传超过限制
categoryImghandleExceed: function (files, fileList) { categoryImghandleExceed: function (files, fileList) {
this.$notify({title: '当前最多上传1个文件', type: 'warning'}); this.$notify({
title: '当前最多上传1个文件',
type: 'warning'
});
}, },
categoryImghandleRemove: function (file, files) { categoryImghandleRemove: function (file, files) {
var index = -1; var index = -1;
index = this.form.categoryImg.findIndex(text => text == file); index = this.form.categoryImg.findIndex(function (text) {
return text == file;
});
if (index != -1) { if (index != -1) {
this.form.categoryImg.splice(index, 1); this.form.categoryImg.splice(index, 1);
} }
}
}, },
created: function () {
},
created() {
this.getColumnContentModelId(); this.getColumnContentModelId();
this.getTree() this.getTree();
this.categoryListUrlOptionsGet(); this.categoryListUrlOptionsGet();
this.categoryUrlOptionsGet(); this.categoryUrlOptionsGet();
this.categoryFlagOptionsGet(); this.categoryFlagOptionsGet();
this.form.id = ms.util.getParameter("id"); this.form.id = ms.util.getParameter("id");
if (this.form.id) { if (this.form.id) {
this.get(this.form.id); this.get(this.form.id);
} else { } else {

View File

@ -78,16 +78,28 @@
</html> </html>
<script> <script>
"use strict";
var indexVue = new Vue({ var indexVue = new Vue({
el: '#index', el: '#index',
data: { data: {
dataList: [], //分类列表 dataList: [],
selectionList:[],//分类列表选中 //分类列表
loading: true,//加载状态 selectionList: [],
emptyText:'',//提示文字 //分类列表选中
loading: true,
//加载状态
emptyText: '',
//提示文字
manager: ms.manager, manager: ms.manager,
loadState: false, loadState: false,
categoryTypeOptions:[{"value":"1","label":"列表"},{"value":"2","label":"封面"}], categoryTypeOptions: [{
"value": "1",
"label": "列表"
}, {
"value": "2",
"label": "封面"
}],
//搜索表单 //搜索表单
form: { form: {
// 栏目管理名称 // 栏目管理名称
@ -111,8 +123,8 @@ var indexVue = new Vue({
// 自定义链接 // 自定义链接
categoryDiyUrl: '', categoryDiyUrl: '',
// 栏目管理的内容模型id // 栏目管理的内容模型id
mdiyModelId:'', mdiyModelId: ''
}, }
}, },
methods: { methods: {
//查询列表 //查询列表
@ -121,16 +133,16 @@ var indexVue = new Vue({
this.loadState = false; this.loadState = false;
this.loading = true; this.loading = true;
ms.http.get(ms.manager + "/cms/category/list.do", { ms.http.get(ms.manager + "/cms/category/list.do", {
pageSize:999, pageSize: 999
}).then( }).then(function (res) {
function(res) {
if (that.loadState) { if (that.loadState) {
that.loading = false; that.loading = false;
} else { } else {
that.loadState = true that.loadState = true;
} }
if (!res.result || res.data.total <= 0) { if (!res.result || res.data.total <= 0) {
that.emptyText = '暂无数据' that.emptyText = '暂无数据';
that.dataList = []; that.dataList = [];
} else { } else {
that.emptyText = ''; that.emptyText = '';
@ -139,11 +151,11 @@ var indexVue = new Vue({
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
setTimeout(()=>{ setTimeout(function () {
if (that.loadState) { if (that.loadState) {
that.loading = false; that.loading = false;
} else { } else {
that.loadState = true that.loadState = true;
} }
}, 500); }, 500);
}, },
@ -170,19 +182,18 @@ var indexVue = new Vue({
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(function () {
ms.http.post(ms.manager + "/cms/category/delete.do", row.length ? row : [row], { ms.http.post(ms.manager + "/cms/category/delete.do", row.length ? row : [row], {
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
} }
}).then( }).then(function (res) {
function(res){
if (res.result) { if (res.result) {
that.$notify({ that.$notify({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
}); }); //删除成功,刷新列表
//删除成功,刷新列表
that.list(); that.list();
} else { } else {
that.$notify({ that.$notify({
@ -192,7 +203,7 @@ var indexVue = new Vue({
}); });
} }
}); });
}).catch(() => { }).catch(function () {
that.$notify({ that.$notify({
type: 'info', type: 'info',
message: '已取消删除' message: '已取消删除'
@ -200,16 +211,19 @@ var indexVue = new Vue({
}); });
}, },
//表格数据转换 //表格数据转换
categoryTypeFormat(row, column, cellValue, index){ categoryTypeFormat: function (row, column, cellValue, index) {
var value = ""; var value = "";
if (cellValue) { if (cellValue) {
var data = this.categoryTypeOptions.find(function (value) { var data = this.categoryTypeOptions.find(function (value) {
return value.value == cellValue; return value.value == cellValue;
}) });
if (data && data.label) { if (data && data.label) {
value = data.label; value = data.label;
} }
} }
return value; return value;
}, },
//新增 //新增
@ -221,14 +235,14 @@ var indexVue = new Vue({
} }
}, },
//重置表单 //重置表单
rest(){ rest: function () {
this.$refs.searchForm.resetFields(); this.$refs.searchForm.resetFields();
}
}, },
}, created: function () {
created(){
/* this.categoryListUrlOptionsGet(); /* this.categoryListUrlOptionsGet();
this.categoryUrlOptionsGet();*/ this.categoryUrlOptionsGet();*/
this.list(); this.list();
}, }
}) });
</script> </script>

View File

@ -184,7 +184,7 @@
:limit="1" :limit="1"
:on-exceed="contentImghandleExceed" :on-exceed="contentImghandleExceed"
:disabled="false" :disabled="false"
:data="{uploadPath:'/cms/content','isRename':true,'appId':true}" :data="{uploadPath:'/${appId}/cms/content','isRename':true}"
:on-success="contentImgSuccess" :on-success="contentImgSuccess"
accept="image/*" accept="image/*"
list-type="picture-card"> list-type="picture-card">
@ -247,12 +247,16 @@
<script> <script>
var form = new Vue({ var form = new Vue({
el: '#form', el: '#form',
data() { data: function () {
return { return {
saveDisabled: false, saveDisabled: false,
activeName: 'form', activeName: 'form',
model:undefined,//自定义模型实例 model: undefined,
editableTabs:[{title:'文章编辑',name:'form'}], //自定义模型实例
editableTabs: [{
title: '文章编辑',
name: 'form'
}],
editorConfig: { editorConfig: {
imageScaleEnabled: true, imageScaleEnabled: true,
autoHeightEnabled: true, autoHeightEnabled: true,
@ -263,7 +267,7 @@
maximumWords: 2000, maximumWords: 2000,
initialFrameWidth: '100%', initialFrameWidth: '100%',
initialFrameHeight: 400, initialFrameHeight: 400,
serverUrl: ms.base + "/static/plugins/ueditor/1.4.3.1/jsp/editor.do?jsonConfig=%7BvideoUrlPrefix:\'" + ms.base + "\',fileUrlPrefix:\'" + ms.base + "\',imageUrlPrefix:\'" + ms.base + "\',imagePathFormat:\'/upload/cms/content/editor/%7Btime%7D\',filePathFormat:\'/upload/cms/content/editor/%7Btime%7D\',videoPathFormat:\'/upload/cms/content/editor/%7Btime%7D\'%7D", serverUrl: ms.base + "/static/plugins/ueditor/1.4.3.1/jsp/editor.do?jsonConfig=%7BvideoUrlPrefix:\'" + ms.base + "\',fileUrlPrefix:\'" + ms.base + "\',imageUrlPrefix:\'" + ms.base + "\',imagePathFormat:\'/upload/${appId}/cms/content/editor/%7Btime%7D\',filePathFormat:\'/upload/${appId}/cms/content/editor/%7Btime%7D\',videoPathFormat:\'/upload/${appId}/cms/content/editor/%7Btime%7D\'%7D",
UEDITOR_HOME_URL: ms.base + '/static/plugins/ueditor/1.4.3.1/' UEDITOR_HOME_URL: ms.base + '/static/plugins/ueditor/1.4.3.1/'
}, },
contentCategoryIdOptions: [], contentCategoryIdOptions: [],
@ -292,72 +296,98 @@
// 关键字 // 关键字
contentKeyword: '', contentKeyword: '',
// 文章内容 // 文章内容
contentDetails: '', contentDetails: ''
}, },
contentTypeOptions: [], contentTypeOptions: [],
categoryIdOptions: [], categoryIdOptions: [],
contentDisplayOptions: [{"value": "0", "label": "是"}, {"value": "1", "label": "否"}], contentDisplayOptions: [{
"value": "0",
"label": "是"
}, {
"value": "1",
"label": "否"
}],
rules: { rules: {
// 文章标题 // 文章标题
contentTitle: [{"required": true, "message": "请选择文章标题"}], contentTitle: [{
"required": true,
"message": "请选择文章标题"
}],
// 发布时间 // 发布时间
contentDatetime: [{"required": true, "message": "发布时间不能为空"}], contentDatetime: [{
contentCategoryId: [{"required": true, "message": "所属栏目不能为空"}], "required": true,
}, "message": "发布时间不能为空"
}],
contentCategoryId: [{
"required": true,
"message": "所属栏目不能为空"
}]
} }
};
}, },
watch: {}, watch: {},
computed: { computed: {
currCategory(){ currCategory: function () {
var that = this; var that = this;
return this.categoryIdOptions.find(function (value) { return this.categoryIdOptions.find(function (value) {
return value.id===that.form.contentCategoryId return value.id === that.form.contentCategoryId;
}) });
}, }
}, },
methods: { methods: {
save() { save: function () {
var that = this; var _this = this;
//自定义模型需要验证
var that = this; //自定义模型需要验证
if (this.model && !this.model.validate()) { if (this.model && !this.model.validate()) {
this.activeName = 'custom-name'; this.activeName = 'custom-name';
return; return;
} }
var url = ms.manager + "/cms/content/save.do"
var url = ms.manager + "/cms/content/save.do";
if (that.form.id > 0) { if (that.form.id > 0) {
url = ms.manager + "/cms/content/update.do"; url = ms.manager + "/cms/content/update.do";
} }
this.$refs.form[0].validate((valid) => {
this.$refs.form[0].validate(function (valid) {
if (valid) { if (valid) {
that.saveDisabled = true; that.saveDisabled = true; //判断
//判断
if(that.categoryIdOptions.filter(f => f['id'] == that.form.contentCategoryId)[0].categoryType == '2' && that.returnIsShow){ if (that.categoryIdOptions.filter(function (f) {
return f['id'] == that.form.contentCategoryId;
})[0].categoryType == '2' && that.returnIsShow) {
that.$notify({ that.$notify({
title: '提示', title: '提示',
message: '所属栏目不能为封面', message: '所属栏目不能为封面',
type: 'error' type: 'error'
}); });
that.saveDisabled = false; that.saveDisabled = false;
return return;
} }
var data = JSON.parse(JSON.stringify(that.form)); var data = JSON.parse(JSON.stringify(that.form));
if (data.contentType != null) { if (data.contentType != null) {
data.contentType = data.contentType.join(','); data.contentType = data.contentType.join(',');
} }
data.contentImg = JSON.stringify(data.contentImg); data.contentImg = JSON.stringify(data.contentImg);
ms.http.post(url, data).then(function (data) { ms.http.post(url, data).then(function (data) {
if (data.result) { if (data.result) {
//保存时需要赋值关联ID //保存时需要赋值关联ID
if (that.model) { if (that.model) {
that.model.form.linkId = data.data.id; that.model.form.linkId = data.data.id;
that.model.save() that.model.save();
} }
that.$notify({ that.$notify({
title: '成功', title: '成功',
message: '保存成功', message: '保存成功',
type: 'success' type: 'success'
}); });
if (that.returnIsShow) { if (that.returnIsShow) {
javascript: history.go(-1); javascript: history.go(-1);
} }
@ -368,99 +398,107 @@
type: 'warning' type: 'warning'
}); });
} }
that.saveDisabled = false; that.saveDisabled = false;
}); });
} else { } else {
this.activeName = 'form'; _this.activeName = 'form';
return false; return false;
} }
}) });
}, },
removeModel(){ removeModel: function () {
var that = this; var that = this;
var model= document.getElementById('model1') var model = document.getElementById('model1');
var custom= document.getElementById('c_model') var custom = document.getElementById('c_model');
if (custom) { if (custom) {
model.removeChild(custom) model.removeChild(custom);
} }
that.model = undefined; that.model = undefined;
}, },
categoryChange(){ categoryChange: function () {
this.changeModel(); this.changeModel();
}, },
changeModel(){ changeModel: function () {
var that = this; var that = this;
that.editableTabs = [that.editableTabs[0]]; that.editableTabs = [that.editableTabs[0]];
this.removeModel(); this.removeModel();
if (this.currCategory) { if (this.currCategory) {
if (this.currCategory.mdiyModelId) { if (this.currCategory.mdiyModelId) {
ms.http.get(ms.manager + "/mdiy/model/get.do", { ms.http.get(ms.manager + "/mdiy/model/get.do", {
id: this.currCategory.mdiyModelId id: this.currCategory.mdiyModelId
}).then(function (data) { }).then(function (data) {
if (data.data && data.data.id) { if (data.data && data.data.id) {
that.rederModel(data.data,JSON.parse(data.data.modelJson)) that.rederModel(data.data, JSON.parse(data.data.modelJson));
} }
}) });
} }
} }
}, },
rederModel(modelEntity,data){ rederModel: function (modelEntity, data) {
var that = this; var that = this;
that.editableTabs.push({ that.editableTabs.push({
title: modelEntity.modelName, title: modelEntity.modelName,
name: 'custom-name', name: 'custom-name'
}); });
this.removeModel(); this.removeModel();
that.$nextTick(function () { that.$nextTick(function () {
var div=document.createElement('div') var div = document.createElement('div');
div.id='c_model' div.id = 'c_model';
var model= document.getElementById('model1') var model = document.getElementById('model1');
model.appendChild(div) model.appendChild(div);
var s=document.createElement('script') var s = document.createElement('script');
s.innerHTML=data.script s.innerHTML = data.script;
var con=document.createElement('div') var con = document.createElement('div');
con.id = 'custom-model'; con.id = 'custom-model';
con.innerHTML = data.html; con.innerHTML = data.html;
div.appendChild(s); div.appendChild(s);
div.appendChild(con); div.appendChild(con); //初始化自定义模型并传入关联参数
//初始化自定义模型并传入关联参数
that.model = new custom_model( that.model = new custom_model({
{
data: { data: {
title: modelEntity.modelName, title: modelEntity.modelName,
modelId: modelEntity.id, modelId: modelEntity.id,
form: { form: {
linkId: that.form.id linkId: that.form.id
},
} }
}) }
});
}) });
}, },
getValue(data) { getValue: function (data) {
this.form.contentCategoryId = data.id; this.form.contentCategoryId = data.id;
}, },
//获取当前文章 //获取当前文章
get(id) { get: function (id) {
var that = this; var that = this;
ms.http.get(ms.manager + "/cms/content/get.do", {"id": id}).then(function (res) { ms.http.get(ms.manager + "/cms/content/get.do", {
"id": id
}).then(function (res) {
if (res.result && res.data) { if (res.result && res.data) {
if (res.data.contentType&&res.data.contentType!='') { if (res.data.contentType&&res.data.contentType!='') {
res.data.contentType = res.data.contentType.split(','); res.data.contentType = res.data.contentType.split(',');
} } else {
else {
res.data.contentType = []; res.data.contentType = [];
} }
if (res.data.contentImg) { if (res.data.contentImg) {
res.data.contentImg = JSON.parse(res.data.contentImg); res.data.contentImg = JSON.parse(res.data.contentImg);
res.data.contentImg.forEach(function (value) { res.data.contentImg.forEach(function (value) {
value.url = ms.base + value.path value.url = ms.base + value.path;
}) });
} else { } else {
res.data.contentImg = [] res.data.contentImg = [];
} }
that.form = res.data; that.form = res.data;
var category = that.categoryIdOptions.filter(f => f['id'] == that.form.contentCategoryId); var category = that.categoryIdOptions.filter(function (f) {
return f['id'] == that.form.contentCategoryId;
});
if (category.length == 1) { if (category.length == 1) {
if (category[0].categoryType == '2') { if (category[0].categoryType == '2') {
that.returnIsShow = false; that.returnIsShow = false;
@ -473,9 +511,11 @@
}); });
}, },
//获取contentCategoryId数据源 //获取contentCategoryId数据源
contentCategoryIdOptionsGet() { contentCategoryIdOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.manager + "/cms/category/list.do", {pageSize: 9999}).then(function (res) { ms.http.get(ms.manager + "/cms/category/list.do", {
pageSize: 9999
}).then(function (res) {
if (res.result) { if (res.result) {
that.contentCategoryIdOptions = ms.util.treeData(res.data.rows, 'id', 'categoryId', 'children'); that.contentCategoryIdOptions = ms.util.treeData(res.data.rows, 'id', 'categoryId', 'children');
that.categoryIdOptions = res.data.rows; that.categoryIdOptions = res.data.rows;
@ -486,9 +526,12 @@
}); });
}, },
//获取contentType数据源 //获取contentType数据源
contentTypeOptionsGet() { contentTypeOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.base + '/mdiy/dict/list.do', {dictType: '文章属性', pageSize: 99999}).then(function (data) { ms.http.get(ms.base + '/mdiy/dict/list.do', {
dictType: '文章属性',
pageSize: 99999
}).then(function (data) {
that.contentTypeOptions = data.rows; that.contentTypeOptions = data.rows;
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
@ -496,56 +539,58 @@
}, },
//contentImg文件上传完成回调 //contentImg文件上传完成回调
contentImgSuccess: function (response, file, fileList) { contentImgSuccess: function (response, file, fileList) {
this.form.contentImg.push({url: file.url, name: file.name, path: response, uid: file.uid}); this.form.contentImg.push({
url: file.url,
name: file.name,
path: response,
uid: file.uid
});
}, },
contentImghandleRemove: function (file, files) { contentImghandleRemove: function (file, files) {
var index = -1; var index = -1;
index = this.form.contentImg.findIndex(text => text == file); index = this.form.contentImg.findIndex(function (text) {
return text == file;
});
if (index != -1) { if (index != -1) {
this.form.contentImg.splice(index, 1); this.form.contentImg.splice(index, 1);
} }
}, },
//contentImg文件上传完成回调
contentImgSuccess: function (response, file, fileList) {
this.form.contentImg.push({url: file.url, name: file.name, path: response, uid: file.uid});
},
//上传超过限制 //上传超过限制
contentImghandleExceed: function (files, fileList) { contentImghandleExceed: function (files, fileList) {
this.$notify({title: '当前最多上传1个文件', type: 'warning'}); this.$notify({
}, title: '当前最多上传1个文件',
contentImghandleRemove: function (file, files) { type: 'warning'
var index = -1; });
index = this.form.contentImg.findIndex(text => text == file);
if (index != -1) {
this.form.contentImg.splice(index, 1);
}
}, },
//查询列表 //查询列表
list: function (contentCategoryId) { list: function (contentCategoryId) {
var that = this; var that = this;
ms.http.post(ms.manager + "/cms/content/list.do", { ms.http.post(ms.manager + "/cms/content/list.do", {
contentCategoryId: contentCategoryId, contentCategoryId: contentCategoryId
}).then(function (res) { }).then(function (res) {
if (res.result && res.data.total > 0) { if (res.result && res.data.total > 0) {
if (res.data.rows[0].contentType) { if (res.data.rows[0].contentType) {
res.data.rows[0].contentType = res.data.rows[0].contentType.split(','); res.data.rows[0].contentType = res.data.rows[0].contentType.split(',');
} }
if (res.data.rows[0].contentImg) { if (res.data.rows[0].contentImg) {
res.data.rows[0].contentImg = JSON.parse(res.data.rows[0].contentImg); res.data.rows[0].contentImg = JSON.parse(res.data.rows[0].contentImg);
res.data.rows[0].contentImg.forEach(function (value) { res.data.rows[0].contentImg.forEach(function (value) {
value.url = ms.base + value.path value.url = ms.base + value.path;
}) });
} else { } else {
res.data.rows[0].contentImg = [] res.data.rows[0].contentImg = [];
} }
that.form = res.data.rows[0]; that.form = res.data.rows[0];
} }
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
}
}, },
}, created: function () {
created() {
this.contentCategoryIdOptionsGet(); this.contentCategoryIdOptionsGet();
this.contentTypeOptionsGet(); this.contentTypeOptionsGet();
this.form.id = ms.util.getParameter("id"); this.form.id = ms.util.getParameter("id");
@ -553,9 +598,11 @@
this.form.contentCategoryId = ms.util.getParameter("categoryId"); this.form.contentCategoryId = ms.util.getParameter("categoryId");
} }
this.type = ms.util.getParameter("type"); this.type = ms.util.getParameter("type");
if (this.form.id) { if (this.form.id) {
this.get(this.form.id); this.get(this.form.id);
} }
if (this.type) { if (this.type) {
this.list(this.form.contentCategoryId); this.list(this.form.contentCategoryId);
this.returnIsShow = false; this.returnIsShow = false;

View File

@ -25,14 +25,15 @@
var indexVue = new Vue({ var indexVue = new Vue({
el: "#index", el: "#index",
data: { data: {
action:"", //跳转页面 action: "",
//跳转页面
defaultProps: { defaultProps: {
children: 'children', children: 'children',
label: 'categoryTitle' label: 'categoryTitle'
}, },
treeData: [], treeData: [],
loading: true, loading: true,
emptyText:'', emptyText: ''
}, },
methods: { methods: {
handleNodeClick: function (data) { handleNodeClick: function (data) {
@ -49,14 +50,14 @@
this.loadState = false; this.loadState = false;
this.loading = true; this.loading = true;
ms.http.get(ms.manager + "/cms/category/list.do", { ms.http.get(ms.manager + "/cms/category/list.do", {
pageSize:999, pageSize: 999
}).then( }).then(function (res) {
function(res) {
if (that.loadState) { if (that.loadState) {
that.loading = false; that.loading = false;
} else { } else {
that.loadState = true that.loadState = true;
} }
if (!res.result || res.data.total <= 0) { if (!res.result || res.data.total <= 0) {
that.emptyText = '暂无数据'; that.emptyText = '暂无数据';
that.treeData = []; that.treeData = [];
@ -66,34 +67,36 @@
that.treeData = [{ that.treeData = [{
id: 0, id: 0,
categoryTitle: '全部', categoryTitle: '全部',
children: that.treeData, children: that.treeData
}] }];
} }
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
setTimeout(()=>{ setTimeout(function () {
if (that.loadState) { if (that.loadState) {
that.loading = false; that.loading = false;
} else { } else {
that.loadState = true that.loadState = true;
} }
}, 500); }, 500);
}
}, },
}, mounted: function () {
mounted(){
this.action = ms.manager + "/cms/content/main.do"; this.action = ms.manager + "/cms/content/main.do";
this.treeList(); this.treeList();
} }
}) });
</script> </script>
<style> <style>
#index .index-menu { #index .index-menu {
height: 100vh;
min-height: 100vh; min-height: 100vh;
min-width: 140px; min-width: 140px;
} }
#index .ms-iframe-style { #index .ms-iframe-style {
width: 100%; width: 100%;
height: 100%;
border: 0; border: 0;
} }

View File

@ -123,36 +123,147 @@
var indexVue = new Vue({ var indexVue = new Vue({
el: '#main', el: '#main',
data: { data: {
conditionList:[ conditionList: [{
{action:'and', field: 'content_title', el: 'eq', model: 'contentTitle', name: '文章标题', type: 'input'}, action: 'and',
{action:'and', field: 'content_category_id', el: 'eq', model: 'contentCategoryId', name: '所属栏目', key:'id',title:'categoryTitle', type: 'cascader', multiple: false}, field: 'content_title',
{action:'and', field: 'content_type', el: 'eq', model: 'contentType', name: '文章类型', key:'dictValue',title:'dictLabel', type: 'checkbox', label: false, multiple: true}, el: 'eq',
{action:'and', field: 'content_display', el: 'eq', model: 'contentDisplay', name: '是否显示', type: 'radio', label: true, multiple: false}, model: 'contentTitle',
{action:'and', field: 'content_author', el: 'eq', model: 'contentAuthor', name: '文章作者', type: 'input'}, name: '文章标题',
{action:'and', field: 'content_source', el: 'eq', model: 'contentSource', name: '文章来源', type: 'input'}, type: 'input'
{action:'and', field: 'content_datetime', model: 'contentDatetime', el: 'gt', name: '发布时间', type: 'date'}, }, {
{action:'and', field: 'content_sort', el: 'eq', model: 'contentSort', name: '自定义顺序', type: 'number'}, action: 'and',
{action:'and', field: 'content_description', el: 'eq', model: 'contentDescription', name: '描述', type: 'textarea'}, field: 'content_category_id',
{action:'and', field: 'content_keyword', el: 'eq', model: 'contentKeyword', name: '关键字', type: 'textarea'}, el: 'eq',
{action:'and', field: 'content_details', el: 'like', model: 'contentDetails', name: '文章内容', type: 'input'}, model: 'contentCategoryId',
{action:'and', field: 'content_url', el: 'eq', model: 'contentUrl', name: '文章跳转链接地址', type: 'input'}, name: '所属栏目',
{action:'and', field: 'appid', el: 'eq', model: 'appid', name: '文章管理的应用id', type: 'number'}, key: 'id',
{action:'and', field: 'create_date', el: 'eq', model: 'createDate', name: '创建时间', type: 'date'}, title: 'categoryTitle',
{action:'and', field: 'update_date', el: 'eq', model: 'updateDate', name: '修改时间', type: 'date'}, type: 'cascader',
], multiple: false
}, {
action: 'and',
field: 'content_type',
el: 'eq',
model: 'contentType',
name: '文章类型',
key: 'dictValue',
title: 'dictLabel',
type: 'checkbox',
label: false,
multiple: true
}, {
action: 'and',
field: 'content_display',
el: 'eq',
model: 'contentDisplay',
name: '是否显示',
type: 'radio',
label: true,
multiple: false
}, {
action: 'and',
field: 'content_author',
el: 'eq',
model: 'contentAuthor',
name: '文章作者',
type: 'input'
}, {
action: 'and',
field: 'content_source',
el: 'eq',
model: 'contentSource',
name: '文章来源',
type: 'input'
}, {
action: 'and',
field: 'content_datetime',
model: 'contentDatetime',
el: 'gt',
name: '发布时间',
type: 'date'
}, {
action: 'and',
field: 'content_sort',
el: 'eq',
model: 'contentSort',
name: '自定义顺序',
type: 'number'
}, {
action: 'and',
field: 'content_description',
el: 'eq',
model: 'contentDescription',
name: '描述',
type: 'textarea'
}, {
action: 'and',
field: 'content_keyword',
el: 'eq',
model: 'contentKeyword',
name: '关键字',
type: 'textarea'
}, {
action: 'and',
field: 'content_details',
el: 'like',
model: 'contentDetails',
name: '文章内容',
type: 'input'
}, {
action: 'and',
field: 'content_url',
el: 'eq',
model: 'contentUrl',
name: '文章跳转链接地址',
type: 'input'
}, {
action: 'and',
field: 'appid',
el: 'eq',
model: 'appid',
name: '文章管理的应用id',
type: 'number'
}, {
action: 'and',
field: 'create_date',
el: 'eq',
model: 'createDate',
name: '创建时间',
type: 'date'
}, {
action: 'and',
field: 'update_date',
el: 'eq',
model: 'updateDate',
name: '修改时间',
type: 'date'
}],
conditions: [], conditions: [],
contentCategoryIdOptions: [], contentCategoryIdOptions: [],
dataList: [], //文章列表 dataList: [],
selectionList:[],//文章列表选中 //文章列表
total: 0, //总记录数量 selectionList: [],
pageSize: 10, //页面数量 //文章列表选中
currentPage:1, //初始页 total: 0,
//总记录数量
pageSize: 10,
//页面数量
currentPage: 1,
//初始页
manager: ms.manager, manager: ms.manager,
loadState: false, loadState: false,
loading: true,//加载状态 loading: true,
emptyText:'',//提示文字 //加载状态
emptyText: '',
//提示文字
contentTypeOptions: [], contentTypeOptions: [],
contentDisplayOptions:[{"value":"0","label":"是"},{"value":"1","label":"否"}], contentDisplayOptions: [{
"value": "0",
"label": "是"
}, {
"value": "1",
"label": "否"
}],
//搜索表单 //搜索表单
form: { form: {
sqlWhere: null, sqlWhere: null,
@ -160,8 +271,8 @@
contentTitle: null, contentTitle: null,
// 文章类型 // 文章类型
contentType: null, contentType: null,
contentCategoryId:'', contentCategoryId: ''
}, }
}, },
methods: { methods: {
//查询列表 //查询列表
@ -172,31 +283,34 @@
var page = { var page = {
pageNo: that.currentPage, pageNo: that.currentPage,
pageSize: that.pageSize pageSize: that.pageSize
} };
var form = JSON.parse(JSON.stringify(that.form)) var form = JSON.parse(JSON.stringify(that.form));
if (form.contentType.length > 0) { if (form.contentType.length > 0) {
form.contentType = form.contentType.join(','); form.contentType = form.contentType.join(',');
} }
for (key in form){
for (var key in form) {
if (!form[key]) { if (!form[key]) {
delete form[key] delete form[key];
} }
} }
history.replaceState({form:form,page:page},"");
ms.http.post(ms.manager+"/cms/content/list.do",form.sqlWhere?{ history.replaceState({
sqlWhere:form.sqlWhere, form: form,
...page page: page
}:{...form, }, "");
...page ms.http.post(ms.manager + "/cms/content/list.do", form.sqlWhere ? Object.assign({}, {
}).then( sqlWhere: form.sqlWhere
function(res) { }, page) : Object.assign({}, that.form, page)).then(function (res) {
if (that.loadState) { if (that.loadState) {
that.loading = false; that.loading = false;
} else { } else {
that.loadState = true that.loadState = true;
} }
if (!res.result || res.data.total <= 0) { if (!res.result || res.data.total <= 0) {
that.emptyText = '暂无数据' that.emptyText = '暂无数据';
that.dataList = []; that.dataList = [];
that.total = 0; that.total = 0;
} else { } else {
@ -208,11 +322,11 @@
that.loading = false; that.loading = false;
console.log(err); console.log(err);
}); });
setTimeout(()=>{ setTimeout(function () {
if (that.loadState) { if (that.loadState) {
that.loading = false; that.loading = false;
} else { } else {
that.loadState = true that.loadState = true;
} }
}, 500); }, 500);
}, },
@ -227,19 +341,18 @@
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(function () {
ms.http.post(ms.manager + "/cms/content/delete.do", row.length ? row : [row], { ms.http.post(ms.manager + "/cms/content/delete.do", row.length ? row : [row], {
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
} }
}).then( }).then(function (res) {
function(res){
if (res.result) { if (res.result) {
that.$notify({ that.$notify({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
}); }); //删除成功,刷新列表
//删除成功,刷新列表
that.list(); that.list();
} else { } else {
that.$notify({ that.$notify({
@ -249,7 +362,7 @@
}); });
} }
}); });
}).catch(() => { }).catch(function () {
that.$notify({ that.$notify({
type: 'info', type: 'info',
message: '已取消删除' message: '已取消删除'
@ -265,35 +378,41 @@
} }
}, },
//表格数据转换 //表格数据转换
contentCategoryIdFormat(row, column, cellValue, index){ contentCategoryIdFormat: function (row, column, cellValue, index) {
var value = ""; var value = "";
if (cellValue) { if (cellValue) {
var data = this.contentCategoryIdOptions.find(function (value) { var data = this.contentCategoryIdOptions.find(function (value) {
return value.id == cellValue; return value.id == cellValue;
}) });
if (data && data.categoryTitle) { if (data && data.categoryTitle) {
value = data.categoryTitle; value = data.categoryTitle;
} }
} }
return value; return value;
}, },
dateFormat: function (row, column, cellValue, index) { dateFormat: function (row, column, cellValue, index) {
if (cellValue) { if (cellValue) {
return ms.util.date.fmt(cellValue, 'yyyy-MM-dd'); return ms.util.date.fmt(cellValue, 'yyyy-MM-dd');
} else { } else {
return '' return '';
} }
}, },
contentDisplayFormat(row, column, cellValue, index){ contentDisplayFormat: function (row, column, cellValue, index) {
var value = ""; var value = "";
if (cellValue) { if (cellValue) {
var data = this.contentDisplayOptions.find(function (value) { var data = this.contentDisplayOptions.find(function (value) {
return value.value == cellValue; return value.value == cellValue;
}) });
if (data && data.label) { if (data && data.label) {
value = data.label; value = data.label;
} }
} }
return value; return value;
}, },
//pageSize改变时会触发 //pageSize改变时会触发
@ -308,49 +427,55 @@
this.currentPage = currentPage; this.currentPage = currentPage;
this.list(); this.list();
}, },
search(data){ search: function (data) {
this.form.sqlWhere = JSON.stringify(data); this.form.sqlWhere = JSON.stringify(data);
this.list(); this.list();
}, },
//重置表单 //重置表单
rest(){ rest: function () {
this.form.sqlWhere = null; this.form.sqlWhere = null;
this.$refs.searchForm.resetFields(); this.$refs.searchForm.resetFields();
this.list(); this.list();
}, },
//获取contentCategoryId数据源 //获取contentCategoryId数据源
contentCategoryIdOptionsGet() { contentCategoryIdOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.manager+"/cms/category/list.do",{pageSize:9999}).then(function(res){ ms.http.get(ms.manager + "/cms/category/list.do", {
pageSize: 9999
}).then(function (res) {
if (res.result) { if (res.result) {
that.contentCategoryIdOptions = res.data.rows; that.contentCategoryIdOptions = res.data.rows;
} }
that.list(); that.list();
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
}, },
//获取contentType数据源 //获取contentType数据源
contentTypeOptionsGet() { contentTypeOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.base+'/mdiy/dict/list.do', {dictType:'文章属性',pageSize:99999}).then(function (data) { ms.http.get(ms.base + '/mdiy/dict/list.do', {
dictType: '文章属性',
pageSize: 99999
}).then(function (data) {
that.contentTypeOptions = data.rows; that.contentTypeOptions = data.rows;
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
}
}, },
}, mounted: function () {
mounted(){
this.contentCategoryIdOptionsGet(); this.contentCategoryIdOptionsGet();
this.contentTypeOptionsGet(); this.contentTypeOptionsGet();
this.form.contentCategoryId = ms.util.getParameter("categoryId") this.form.contentCategoryId = ms.util.getParameter("categoryId");
if(history.state){ if (history.hasOwnProperty("state")) {
this.form = history.state.form; this.form = history.state.form;
this.currentPage = history.state.page.pageNo; this.currentPage = history.state.page.pageNo;
this.pageSize = history.state.page.pageSize; this.pageSize = history.state.page.pageSize;
} }
}, }
}) });
</script> </script>
<style> <style>
#main .ms-search { #main .ms-search {

View File

@ -119,99 +119,149 @@
</body> </body>
</html> </html>
<script> <script>
"use strict";
var app = new Vue({ var app = new Vue({
el: '#app', el: '#app',
watch:{ watch: {},
},
data: { data: {
homeLoading: false, homeLoading: false,
articleLoading: false, articleLoading: false,
columnLoading: false, columnLoading: false,
template:'index.htm',//主题模板 template: '',
//主题模板
templateOptions: [], templateOptions: [],
position:'index', //位置 position: 'index',
contentSection:'0', //文章栏目 //位置
section:'0', //栏目 contentSection: '0',
//文章栏目
section: '0',
//栏目
time: ms.util.date.fmt(new Date(), "yyyy-MM-dd"), time: ms.util.date.fmt(new Date(), "yyyy-MM-dd"),
treeList: [{ treeList: [{
id: '0', id: '0',
categoryTitle: '顶级栏目', categoryTitle: '顶级栏目',
children:[], children: []
}], }]
}, },
methods: { methods: {
//更新主页 //更新主页
updataIndex(){ updataIndex: function () {
var that = this; var that = this;
if (!that.position || that.position == '') { if (!that.position || that.position == '') {
this.$notify({ title: '请输入主页位置!', type: 'warning' }); this.$notify({
title: '请输入主页位置!',
type: 'warning'
});
return; return;
} }
that.homeLoading = true; that.homeLoading = true;
ms.http.post(ms.manager+'/cms/generate//generateIndex.do', {url:that.template,position:that.position}).then(function (data) { ms.http.post(ms.manager + '/cms/generate//generateIndex.do', {
url: that.template,
position: that.position
}).then(function (data) {
if (data.result) { if (data.result) {
that.$notify({ title: '更新成功!', type: 'success' }); that.$notify({
title: '更新成功!',
type: 'success'
});
} else { } else {
that.$notify({ title: '更新失败!',message: "错误", type: 'error' }); that.$notify({
title: '更新失败!',
message: "错误",
type: 'error'
});
} }
}).catch(function (err) { }).catch(function (err) {
that.$notify({ title: '更新失败!',message: err, type: 'error' }); that.$notify({
title: '更新失败!',
message: err,
type: 'error'
});
console.log(err); console.log(err);
}).finally(()=>{ }).finally(function () {
that.homeLoading = false; that.homeLoading = false;
}); });
}, },
//预览主页 //预览主页
viewIndex(){ viewIndex: function () {
if (!this.position || this.position == '') { if (!this.position || this.position == '') {
this.$notify({ title: '请输入主页位置!', type: 'warning' }); this.$notify({
title: '请输入主页位置!',
type: 'warning'
});
return; return;
} }
window.open(ms.manager + "/cms/generate/" + this.position + "/viewIndex.do"); window.open(ms.manager + "/cms/generate/" + this.position + "/viewIndex.do");
}, },
//更新栏目 //更新栏目
updateColumn(){ updateColumn: function () {
var that = this; var that = this;
that.columnLoading = true; that.columnLoading = true;
ms.http.get(ms.manager + '/cms/generate/' + (that.section ? that.section : 0) + '/genernateColumn.do').then(function (data) { ms.http.get(ms.manager + '/cms/generate/' + (that.section ? that.section : 0) + '/genernateColumn.do').then(function (data) {
if (data.result) { if (data.result) {
that.$notify({ title: '更新成功!', type: 'success' }); that.$notify({
title: '更新成功!',
type: 'success'
});
} }
}).catch(function (err) { }).catch(function (err) {
that.$notify({ title: '更新失败!',message: err, type: 'error' }); that.$notify({
title: '更新失败!',
message: err,
type: 'error'
});
console.log(err); console.log(err);
}).finally(()=>{ }).finally(function () {
that.columnLoading = false; that.columnLoading = false;
}); });
}, },
//生成文章栏目 //生成文章栏目
updateArticle(){ updateArticle: function () {
var that = this; var that = this;
that.articleLoading = true; that.articleLoading = true;
ms.http.post(ms.manager+'/cms/generate/'+(that.contentSection?that.contentSection:0)+'/generateArticle.do', {dateTime:that.time}).then(function (data) { ms.http.post(ms.manager + '/cms/generate/' + (that.contentSection ? that.contentSection : 0) + '/generateArticle.do', {
dateTime: that.time
}).then(function (data) {
if (data.result) { if (data.result) {
that.$notify({ title: '更新成功!', type: 'success' }); that.$notify({
title: '更新成功!',
type: 'success'
});
} }
}).catch(function (err) { }).catch(function (err) {
that.$notify({ title: '更新失败!',message: err, type: 'error' }); that.$notify({
title: '更新失败!',
message: err,
type: 'error'
});
console.log(err); console.log(err);
}).finally(()=>{ }).finally(function () {
that.articleLoading = false; that.articleLoading = false;
}); });
}, },
//获取主题模板数据源 //获取主题模板数据源
templateOptionsGet() { templateOptionsGet: function () {
var that = this; var that = this;
ms.http.get(ms.manager+'/template/queryTemplateFileForColumn.do', {pageSize:99999}).then(function (data) { ms.http.get(ms.manager + '/template/queryTemplateFileForColumn.do', {
that.templateOptions = data.data; pageSize: 99999
}).then(function (data) {
that.templateOptions = data.data; //寻找主页
var template = that.templateOptions.find(function (x) {
return x.indexOf("index") != -1 || x.indexOf("default") != -1;
}); //没有就找其他的
that.template = template || (that.templateOptions.length > 0 ? that.templateOptions[0] : "");
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
}, },
getTree(){ getTree: function () {
var that = this; var that = this;
ms.http.get(ms.manager+"/cms/category/list.do",{pageSize:9999}).then(function(res){ ms.http.get(ms.manager + "/cms/category/list.do", {
pageSize: 9999
}).then(function (res) {
if (res.result) { if (res.result) {
//res.data.rows.push({id:0,categoryId: null,categoryTitle:'顶级栏目管理'}); //res.data.rows.push({id:0,categoryId: null,categoryTitle:'顶级栏目管理'});
that.treeList[0].children = ms.util.treeData(res.data.rows, 'id', 'categoryId', 'children'); that.treeList[0].children = ms.util.treeData(res.data.rows, 'id', 'categoryId', 'children');
@ -219,13 +269,13 @@
}).catch(function (err) { }).catch(function (err) {
console.log(err); console.log(err);
}); });
}
}, },
}, created: function () {
created(){
this.getTree(); this.getTree();
this.templateOptionsGet(); this.templateOptionsGet();
} }
}) });
</script> </script>
<style> <style>
input{ input{

View File

@ -427,92 +427,115 @@
<script> <script>
var app = new Vue({ var app = new Vue({
el: '#app', el: '#app',
watch:{ watch: {},
},
data: { data: {
base: ms.base, base: ms.base,
msNewsLast: '', msNewsLast: '',
msNewsPath: '' msNewsPath: ''
}, },
methods: { methods: {
jumpArtcleManager(){ jumpArtcleManager: function () {
window.parent.indexVue.openMenu({modelId:706,modelTitle:'文章管理',modelIcon: "icon-neirongguanli"}); window.parent.indexVue.openMenu({
modelId: 706,
modelTitle: '文章管理',
modelIcon: "icon-neirongguanli"
});
}, },
//栏目管理 //栏目管理
jumpCategorymanager(){ jumpCategorymanager: function () {
window.parent.indexVue.open({"modelId":708,"modelTitle":"栏目管理","modelModelId":706,"modelUrl":"cms/category/index.do"}); window.parent.indexVue.open({
"modelId": 708,
"modelTitle": "栏目管理",
"modelModelId": 706,
"modelUrl": "cms/category/index.do"
});
}, },
//静态化 //静态化
jumpStaticManager(){ jumpStaticManager: function () {
window.parent.indexVue.open({"modelId":406,"modelTitle":"静态化","modelModelId":23,"modelUrl":"cms/generate/index.do"}); window.parent.indexVue.open({"modelId":709,"modelTitle":"静态化","modelModelId":706,"modelUrl":"cms/generate/index.do"});
}, },
//管理员管理 //管理员管理
jumpAdmininstatorManager(){ jumpAdmininstatorManager: function () {
window.parent.indexVue.open({"modelId":411,"modelTitle":"管理员管理","modelModelId":23,"modelUrl":"basic/manager/index.do"}); window.parent.indexVue.open({
"modelId": 411,
"modelTitle": "管理员管理",
"modelModelId": 23,
"modelUrl": "basic/manager/index.do"
});
}, },
//角色管理 //角色管理
jumpUserManager(){ jumpUserManager: function () {
window.parent.indexVue.open({"modelId":406,"modelTitle":"角色管理","modelModelId":23,"modelUrl":"basic/role/index.do"}); window.parent.indexVue.open({
"modelId": 406,
"modelTitle": "角色管理",
"modelModelId": 23,
"modelUrl": "basic/role/index.do"
});
}, },
//菜单管理 //菜单管理
jumpMenuManager(){ jumpMenuManager: function () {
window.parent.indexVue.open({"modelId":183,"modelTitle":"菜单管理","modelModelId":23,"modelUrl":"model/index.do"}); window.parent.indexVue.open({
"modelId": 183,
"modelTitle": "菜单管理",
"modelModelId": 23,
"modelUrl": "model/index.do"
});
}, },
//模板管理 //模板管理
jumpTemplateManager(){ jumpTemplateManager: function () {
window.parent.indexVue.open({"modelId":87,"modelTitle":"模板管理","modelModelId":84,"modelUrl":"template/index.do"}); window.parent.indexVue.open({
"modelId": 87,
"modelTitle": "模板管理",
"modelModelId": 84,
"modelUrl": "template/index.do"
});
}, },
//应用管理 //应用管理
jumpApplicationManager(){ jumpApplicationManager: function () {
window.parent.indexVue.open({"modelId":86,"modelTitle":"应用管理","modelModelId":84,"modelUrl":"app/-1/edit.do"}); window.parent.indexVue.open({
"modelId": 86,
"modelTitle": "应用管理",
"modelModelId": 84,
"modelUrl": "app/-1/edit.do"
});
}, },
//铭飞开发文档 //铭飞开发文档
jumpMCMSDocument(){ jumpMCMSDocument: function () {
window.open("http://doc.ms.mingsoft.net/plugs-cms/"); window.open("http://doc.ms.mingsoft.net/plugs-cms/");
}, },
enterQQOneGroup(){ enterQQOneGroup: function () {
window.open("https://shang.qq.com/wpa/qunwpa?idkey=ebf251dc9758de6b9c78c499956431cba73e28b3f0b72c0fc28242e98b20fca2"); window.open("https://shang.qq.com/wpa/qunwpa?idkey=ebf251dc9758de6b9c78c499956431cba73e28b3f0b72c0fc28242e98b20fca2");
}, },
enterQQTwoGroup(){ enterQQTwoGroup: function () {
window.open("http://shang.qq.com/wpa/qunwpa?idkey=cfb32b0f47d89d7ef1c3a9493984d4ffbdfe14049fdedd90c517a072e90d68b9"); window.open("http://shang.qq.com/wpa/qunwpa?idkey=cfb32b0f47d89d7ef1c3a9493984d4ffbdfe14049fdedd90c517a072e90d68b9");
}, },
enterQQThreeGroup(){ enterQQThreeGroup: function () {
window.open("http://shang.qq.com/wpa/qunwpa?idkey=5dd11fdb492c4ded090fa1f78a166583978e33c4a61301b136d31e9e3eb7df72"); window.open("http://shang.qq.com/wpa/qunwpa?idkey=5dd11fdb492c4ded090fa1f78a166583978e33c4a61301b136d31e9e3eb7df72");
}, },
enterQQFourGroup(){ enterQQFourGroup: function () {
window.open("http://shang.qq.com/wpa/qunwpa?idkey=565f1e4c4fabeee42947f6c6b96ac7ca4853dece16559d3d78e944ca2931b7f5"); window.open("http://shang.qq.com/wpa/qunwpa?idkey=565f1e4c4fabeee42947f6c6b96ac7ca4853dece16559d3d78e944ca2931b7f5");
}, },
addBusinessQQ(){ addBusinessQQ: function () {
window.open("http://wpa.qq.com/msgrd?v=3&uin=3336073455&site=qq&menu=yes"); window.open("http://wpa.qq.com/msgrd?v=3&uin=3336073455&site=qq&menu=yes");
}, },
//打开铭飞消息页面 //打开铭飞消息页面
openMCMSNews(){ openMCMSNews: function () {
window.open(this.msNewsPath); window.open(this.msNewsPath);
}, },
getNewsLast(){ getNewsLast: function () {
var that = this; var that = this;
axios.create({ axios.create({
withCredentials: true withCredentials: true
}).get("https://ms.mingsoft.net/cms/content/list.do?contentCategoryId=202").then(function (res) { }).get("https://ms.mingsoft.net/cms/content/list.do?contentCategoryId=202").then(function (res) {
that.msNewsLast = res.data.data.rows[0].contentTitle.toString(); that.msNewsLast = res.data.data.rows[0].contentTitle.toString();
that.msNewsPath = 'https://ms.mingsoft.net/html/1/203/202/'+res.data.data.rows[0].id+'.html' that.msNewsPath = 'https://ms.mingsoft.net/html/1/203/202/' + res.data.data.rows[0].id + '.html';
}) });
} }
}, },
created(){ created: function () {
this.getNewsLast() this.getNewsLast();
} }
}) });
</script> </script>
<style> <style>
.custom-body { .custom-body {

View File

@ -1,3 +1,6 @@
//ie的兼容
//Object.assign 对ie对支持
if (typeof Object.assign != 'function') { if (typeof Object.assign != 'function') {
Object.assign = function(target) { Object.assign = function(target) {
'use strict'; 'use strict';

View File

@ -9,6 +9,8 @@
function(config) { function(config) {
config.headers = { config.headers = {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
'Cache-Control': 'no-cache',
'Pragma': 'no-cache',
'X-Requested-With': 'XMLHttpRequest' 'X-Requested-With': 'XMLHttpRequest'
} }
if (config.method === 'post' && config.headers["Content-Type"] === "application/x-www-form-urlencoded") { if (config.method === 'post' && config.headers["Content-Type"] === "application/x-www-form-urlencoded") {

View File

@ -20,23 +20,38 @@
log(e.message); log(e.message);
} }
} }
//树形数据组织
/**
* 列表数据转化为树形结构的列表
* @param source 数据源list
* @param id 编号
* @param parentId 父级编号
* @param children 树形子集变量
* @returns {*}
* 支持父级编号为 0或null
* 原始数据[{id:1,titile:"标题",pid:0},{id:2,titile:"标题",pid:1}]
* 转化树形数据[{id:1,titile:"标题",pid:0,children:[{id:2,titile:"标题",pid:1}]}]
*/
function treeData(source, id, parentId, children) { function treeData(source, id, parentId, children) {
let cloneData = JSON.parse(JSON.stringify(source)) var cloneData = JSON.parse(JSON.stringify(source));
return cloneData.filter(father => { return cloneData.filter(function (father) {
let branchArr = cloneData.filter(child => father[id] == child[parentId]); var branchArr = cloneData.filter(function (child) {
branchArr.length > 0 ? father[children] = branchArr : '' return father[id] == child[parentId];
return !father[parentId]||father[parentId]=='0' // 如果第一层不是parentId=0请自行修改 });
}) branchArr.length > 0 ? father[children] = branchArr : '';
return !father[parentId] || father[parentId] == '0' || father[parentId] == null ;
});
} }
//验证是否为子集 //验证是否为子集
function childValidate(sourceList, id, parentId, key, parentKey) { function childValidate(sourceList, id, parentId, key, parentKey) {
var data=sourceList.find(x=>x[key]==parentId); var data = sourceList.find(function (x) {
return x[key] == parentId;
});
if (data && data[parentKey] != '0' && data[parentKey]) { if (data && data[parentKey] != '0' && data[parentKey]) {
if (id == data[parentKey]) { if (id == data[parentKey]) {
return false return false;
} }
return childValidate(sourceList,id,data[parentKey],key,parentKey) return childValidate(sourceList, id, data[parentKey], key, parentKey);
} }
return true; return true;
} }
@ -44,9 +59,8 @@
//日期处理 //日期处理
var date = { var date = {
//格式化时间 //格式化时间
fmt: function(date, fmt) { fmt: function(de, fmt) {
var date = new Date(date); var date = new Date(typeof de == "string"?de.replace(/-/g, "/"):de);
log(fmt);
if (!fmt) { if (!fmt) {
fmt = "yyyy-mm-dd"; fmt = "yyyy-mm-dd";
} }