提交 4e40a0f6 编写于 作者: Skyeye云's avatar Skyeye云

新增文档管理,CRM客户关联文档管理

上级 291df9a1
......@@ -33,7 +33,9 @@ layui.config({
limit: getLimit(),
cols: [[
{ title: systemLanguage["com.skyeye.serialNumber"][languageType], type: 'numbers' },
{ field: 'name', title: '名称', align: 'left', width: 100 },
{ field: 'name', title: '名称', align: 'left', width: 100, templet: function (d) {
return '<a lay-event="details" class="notice-title-click">' + d.name + '</a>';
}},
{ field: 'department', title: '部门', align: 'left', width: 100 },
{ field: 'job', title: '职位', align: 'left', width: 100 },
{ field: 'workPhone', title: '办公电话', align: 'left', width: 100 },
......@@ -71,6 +73,8 @@ layui.config({
edit(data);
} else if (layEvent === 'delete') {
del(data);
} else if (layEvent === 'details') {
details(data);
}
});
......@@ -100,6 +104,19 @@ layui.config({
loadTable();
}});
}
// 详情
function details(data) {
parent._openNewWindows({
url: systemCommonUtil.getUrl('FP2023072400004&objectId=' + objectId + '&objectKey=' + objectKey + '&id=' + data.id, null),
title: systemLanguage["com.skyeye.detailsPageTitle"][languageType],
pageId: "contactsDetails",
area: ['90vw', '90vh'],
callBack: function (refreshCode) {
winui.window.msg(systemLanguage["com.skyeye.successfulOperation"][languageType], {icon: 1, time: 2000});
loadTable();
}});
}
// 删除
function del(data, obj) {
......
var objectKey = "";
var objectId = "";
var catalogId = "";
layui.config({
base: basePath,
version: skyeyeVersion
}).extend({
window: 'js/winui.window'
}).define(['window', 'table', 'jquery', 'winui', 'form'], function (exports) {
winui.renderColor();
var $ = layui.$,
form = layui.form,
table = layui.table;
objectKey = GetUrlParam("objectKey");
objectId = GetUrlParam("objectId");
if (isNull(objectKey) || isNull(objectId)) {
winui.window.msg("请传入适用对象信息", {icon: 2, time: 2000});
return false;
}
var authPermission = teamObjectPermissionUtil.checkTeamBusinessAuthPermission(objectId, 'documentAuthEnum');
catalogTreeUtil.init({
boxId: 'catalogBox',
className: objectKey,
objectId: objectId,
addOrUser: false,
checkAuth: true,
auth: authPermission,
isRoot: 1,
chooseCallback: function (chooseId) {
catalogId = chooseId;
table.reloadData("messageTable", {page: {curr: 1}, where: getTableParams()});
}
});
table.render({
id: 'messageTable',
elem: '#messageTable',
method: 'post',
url: reqBasePath + 'queryDocumentList',
where: getTableParams(),
even: true,
page: true,
limits: getLimits(),
limit: getLimit(),
cols: [[
{ title: systemLanguage["com.skyeye.serialNumber"][languageType], type: 'numbers' },
{ field: 'name', title: '名称', align: 'left', width: 100, templet: function (d) {
return '<a lay-event="details" class="notice-title-click">' + d.name + '</a>';
}},
{ field: 'typeId', title: '分类', align: 'left', width: 100, templet: function (d) {
if (!isNull(d.typeMation)) {
return d.typeMation.dictName;
}
return '';
}},
{ field: 'catalogId', title: '所属目录', align: 'left', width: 300, templet: function (d) {
if (!isNull(d.catalogMation)) {
return d.catalogMation.name;
}
return '';
}},
{ field: 'createName', title: systemLanguage["com.skyeye.createName"][languageType], align: 'left', width: 120 },
{ field: 'createTime', title: systemLanguage["com.skyeye.createTime"][languageType], align: 'center', width: 150 },
{ field: 'lastUpdateName', title: systemLanguage["com.skyeye.lastUpdateName"][languageType], align: 'left', width: 120 },
{ field: 'lastUpdateTime', title: systemLanguage["com.skyeye.lastUpdateTime"][languageType], align: 'center', width: 150 },
{ title: systemLanguage["com.skyeye.operation"][languageType], fixed: 'right', align: 'center', width: 150, templet: function (d) {
var str = '';
if (authPermission['editDocument']) {
str += '<a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="edit"><language showName="com.skyeye.editBtn"></language></a>';
}
if (authPermission['deleteDocument']) {
str += '<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delete"><language showName="com.skyeye.deleteBtn"></language></a>';
}
return str;
}}
]],
done: function(json) {
matchingLanguage();
initTableSearchUtil.initAdvancedSearch(this, json.searchFilter, form, "请输入名称", function () {
table.reloadData("messageTable", {page: {curr: 1}, where: getTableParams()});
});
}
});
table.on('tool(messageTable)', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'edit') {
edit(data);
} else if (layEvent === 'delete') {
del(data);
} else if (layEvent === 'details') {
details(data);
}
});
// 新增
$("body").on("click", "#addBean", function() {
parent._openNewWindows({
url: systemCommonUtil.getUrl('FP2023072400001&objectId=' + objectId + '&objectKey=' + objectKey, null),
title: systemLanguage["com.skyeye.addPageTitle"][languageType],
pageId: "documentAdd",
area: ['90vw', '90vh'],
callBack: function (refreshCode) {
winui.window.msg(systemLanguage["com.skyeye.successfulOperation"][languageType], {icon: 1, time: 2000});
loadTable();
}});
});
// 编辑
function edit(data) {
parent._openNewWindows({
url: systemCommonUtil.getUrl('FP2023072400002&objectId=' + objectId + '&objectKey=' + objectKey + '&id=' + data.id, null),
title: systemLanguage["com.skyeye.editPageTitle"][languageType],
pageId: "documentEdit",
area: ['90vw', '90vh'],
callBack: function (refreshCode) {
winui.window.msg(systemLanguage["com.skyeye.successfulOperation"][languageType], {icon: 1, time: 2000});
loadTable();
}});
}
// 详情
function details(data) {
parent._openNewWindows({
url: systemCommonUtil.getUrl('FP2023072400003&objectId=' + objectId + '&objectKey=' + objectKey + '&id=' + data.id, null),
title: systemLanguage["com.skyeye.detailsPageTitle"][languageType],
pageId: "documentDetails",
area: ['90vw', '90vh'],
callBack: function (refreshCode) {
winui.window.msg(systemLanguage["com.skyeye.successfulOperation"][languageType], {icon: 1, time: 2000});
loadTable();
}});
}
// 删除
function del(data, obj) {
layer.confirm(systemLanguage["com.skyeye.deleteOperationMsg"][languageType], {icon: 3, title: systemLanguage["com.skyeye.deleteOperation"][languageType]}, function (index) {
layer.close(index);
AjaxPostUtil.request({url: reqBasePath + "deleteDocumentMationById", params: {id: data.id}, type: 'json', method: 'DELETE', callback: function (json) {
winui.window.msg(systemLanguage["com.skyeye.deleteOperationSuccessMsg"][languageType], {icon: 1, time: 2000});
loadTable();
}});
});
}
form.render();
$("body").on("click", "#reloadTable", function() {
loadTable();
});
function loadTable() {
table.reloadData("messageTable", {where: getTableParams()});
}
function getTableParams() {
return $.extend(true, {objectKey: objectKey, objectId: objectId, catalogId: catalogId}, initTableSearchUtil.getSearchValue("messageTable"));
}
exports('documentList', {});
});
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link href="../../assets/lib/layui/css/layui.css" rel="stylesheet" />
<link href="../../assets/lib/winui/css/winui.css" rel="stylesheet" />
</head>
<body>
<div class="winui-toolbar">
<div class="winui-tool">
<button id="reloadTable" class="winui-toolbtn search-table-btn-right"><i class="fa fa-refresh" aria-hidden="true"></i><language showName="com.skyeye.refreshDataBtn"></language></button>
<button id="addBean" class="winui-toolbtn search-table-btn-right" auth="addDocument"><i class="fa fa-plus" aria-hidden="true"></i><language showName="com.skyeye.addBtn"></language></button>
</div>
</div>
<div style="margin:auto 10px;">
<div style="width: 200px; float: left;" id="catalogBox">
</div>
<div style="width: calc(100% - 220px); float: left; margin:auto 10px;">
<table id="messageTable" lay-filter="messageTable"></table>
</div>
</div>
<script src="../../assets/lib/layui/layui.js"></script>
<script src="../../assets/lib/layui/custom.js"></script>
<script type="text/javascript">
layui.config({base: '../../js/document/'}).use('documentList');
</script>
</body>
</html>
\ No newline at end of file
......@@ -9,12 +9,10 @@ layui.config({
window: 'js/winui.window'
}).define(['window', 'table', 'jquery', 'winui', 'form'], function (exports) {
winui.renderColor();
var $ = layui.$,
form = layui.form,
table = layui.table;
table.render({
id: 'messageTable',
elem: '#messageTable',
......
......@@ -990,8 +990,9 @@ var dataShowType = {
* @param callback 回调函数
* @param chooseCallback 如果是提供选择的树插件类型,则具备点击节点的回调事件
* @param valueKey value展示的key
* @param isRoot 如是是树结构,则表示是否展示根节点
*/
showData: function (json, showType, showBoxId, defaultId, form, callback, chooseCallback, valueKey) {
showData: function (json, showType, showBoxId, defaultId, form, callback, chooseCallback, valueKey, isRoot) {
var _box = $("#" + showBoxId);
_box.html('');
_box.attr('showType', showType);
......@@ -1121,7 +1122,7 @@ var dataShowType = {
});
} else if (showType == 'radioTree' || showType == 'checkboxTree') {
// 单选框树/多选框树
var _html = sysDictDataUtil.getShowTteeHtml(showBoxId, '0');
var _html = sysDictDataUtil.getShowTteeHtml(showBoxId, isNull(isRoot) ? '0' : isRoot);
var _js = `<script>
layui.define(["jquery", 'fsTree'], function(exports) {
var jQuery = layui.jquery,
......
......@@ -355,6 +355,8 @@ var dsFormUtil = {
content.dataChange = getDataUseHandlebars('{{#bean}}' + content.dataChange + '{{/bean}}', {bean: content});
}
content.objectId = objectId;
content.objectKey = objectKey;
var jsonStr = {bean: content};
var html = getDataUseHandlebars('{{#bean}}' + component.htmlContent + '{{/bean}}', jsonStr);
var html_js = getDataUseHandlebars('{{#bean}}' + component.jsContent + '{{/bean}}', jsonStr);
......
......@@ -9,8 +9,10 @@ var catalogTreeUtil = {
className: null, // 业务对象的className
addOrUser: false, // 是否根据当前登录人查询
choose: null, // 是否可以选择 null:不可以选择 radio:单选 checkBox:多选
choose: null, // 是否可以选择 null:不可以选择 radioTree:单选 checkboxTree:多选,
defaultId: '', // 默认值
loadType: true, // 加载的类型 true:一次性加载完 false:异步加载
checkAuth: false, // 是否开启权限校验,true:开启;false:不开启
auth: {}, // 权限信息 数据格式:{"add": true},代表add操作有权限
isRoot: 1, // 是否显示根目录,1:是 0:否
chooseCallback: undefined, // 选中节点后加载的事件
......@@ -35,42 +37,8 @@ var catalogTreeUtil = {
var showBoxId = catalogTreeUtil.config.boxId;
var isRoot = catalogTreeUtil.config.isRoot;
var data = catalogTreeUtil.getData();
if (showType == 'radio' || showType == 'checkBox') {
var _html = catalogTreeUtil.getShowTteeHtml(showBoxId, isRoot);
var _js = `<script>
layui.define(["jquery", 'fsTree'], function(exports) {
var jQuery = layui.jquery,
fsTree = layui.fsTree;
(function($) {
var ${showBoxId}Object;
fsTree.render({
id: "${showBoxId}Tree",
simpleData: '` + JSON.stringify(data) + `',
checkEnable: true,
loadEnable: false,
chkStyle: "radio",
showLine: false,
showIcon: true,
expandSpeed: 'fast',
onCheck: function (event, treeId, treeNode) {
$('#${showBoxId}').attr('chooseId', treeNode.id);
}
}, function(id) {
${showBoxId}Object = $.fn.zTree.getZTreeObj(id);
fuzzySearch(id, '#${showBoxId}Name', null, true);
});
if (` + !isNull(defaultId) + `) {
var zTree = ${showBoxId}Object.getCheckedNodes(false);
for (var i = 0; i < zTree.length; i++) {
if(zTree[i].id == '` + defaultId + `'){
${showBoxId}Object.checkNode(zTree[i], true, true);
$('#${showBoxId}').attr('chooseId', zTree[i].id);
}
}
}
})(jQuery);});
</script>`;
$("#" + showBoxId).append(_html + _js);
if (showType == 'radioTree' || showType == 'checkboxTree') {
dataShowType.showData({treeRows: data}, showType, showBoxId, catalogTreeUtil.config.defaultId, null, null, null, null, '1');
} else {
var _html = catalogTreeUtil.getShowTteeHtml(showBoxId, isRoot);
var _js = `<script>
......@@ -86,9 +54,10 @@ var catalogTreeUtil = {
checkEnable: false,
loadEnable: false,
showLine: false,
showIcon: true,
showIcon: false,
expandSpeed: 'fast',
clickCallback: onClickTree,
addDiyDom: ztreeUtil.addDiyDom,
onRename: onRename,
beforeRename: beforeRename,
onRightClick: onRightClick,
......@@ -96,6 +65,7 @@ var catalogTreeUtil = {
}, function(id) {
ztree = $.fn.zTree.getZTreeObj(id);
fuzzySearch(id, '#${showBoxId}Name', null, true);
ztreeUtil.initEventListener(id);
});
function onRightClick(event, treeId, treeNode) {
chooseCagelogId = treeNode.id;
......@@ -241,6 +211,7 @@ var catalogTreeUtil = {
})(jQuery);});
</script>`;
_html += `<link href="../../assets/lib/winui/css/customer/ztree/common-tree.css" rel="stylesheet" />`;
$("#" + showBoxId).append(_html + _js);
$("#" + showBoxId + "Choose").on("change", function() {
if (typeof (catalogTreeUtil.config.chooseCallback) == "function") {
......@@ -264,15 +235,7 @@ var catalogTreeUtil = {
clickCallbackInputs="parentId:$id" treeName="name" style="overflow-y: auto; height: 100%;"></ul>
</div>
<ul class="layui-dropdown-menu" id="caralogTreeRight">
<li class="is-file createNewFolder">
<a href="javascript:;"><img alt="" src="../../assets/images/create-folder-icon.png" /><span>新建</span></a>
</li>
<li class="is-file reName" >
<a href="javascript:;"><img alt="" src="../../assets/images/rename-icon.png" /><span>重命名</span></a>
</li>
<li class="is-file deleteFolder">
<a href="javascript:;"><img alt="" src="../../assets/images/delete-icon.png" /><span>删除</span></a>
</li>
` + catalogTreeUtil.getAuthAfterBtn() + `
</ul>
<script type="text/javascript" src="../../assets/lib/layui/lay/modules/jquery-min.js"></script>
<script type="text/javascript" src="../../assets/lib/layui/lay/modules/contextMenu/jquery.contextMenu.min.js"></script>
......@@ -282,6 +245,38 @@ var catalogTreeUtil = {
return _html;
},
getAuthAfterBtn: function () {
if (!catalogTreeUtil.config.checkAuth) {
return `<li class="is-file createNewFolder">
<a href="javascript:;"><img alt="" src="../../assets/images/create-folder-icon.png" /><span>新建</span></a>
</li>
<li class="is-file reName" >
<a href="javascript:;"><img alt="" src="../../assets/images/rename-icon.png" /><span>重命名</span></a>
</li>
<li class="is-file deleteFolder">
<a href="javascript:;"><img alt="" src="../../assets/images/delete-icon.png" /><span>删除</span></a>
</li>`;
} else {
var str = '';
if (catalogTreeUtil.config.auth['addCatalog']) {
str += `<li class="is-file createNewFolder">
<a href="javascript:;"><img alt="" src="../../assets/images/create-folder-icon.png" /><span>新建</span></a>
</li>`;
}
if (catalogTreeUtil.config.auth['renameCatalog']) {
str += `<li class="is-file reName" >
<a href="javascript:;"><img alt="" src="../../assets/images/rename-icon.png" /><span>重命名</span></a>
</li>`;
}
if (catalogTreeUtil.config.auth['deleteCatalog']) {
str += `<li class="is-file deleteFolder">
<a href="javascript:;"><img alt="" src="../../assets/images/delete-icon.png" /><span>删除</span></a>
</li>`;
}
return str;
}
},
/**
* 一次性获取所有数据
*/
......
......@@ -19,8 +19,8 @@
* 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。
* window.UEDITOR_HOME_URL = "/xxxx/xxxx/";
*/
window.UEDITOR_HOME_URL = sysMainMation.homePagePath + 'assets/lib/layui/lay/modules/ueditor/';
var URL = window.UEDITOR_HOME_URL || getUEBasePath();
/**
* 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。
*/
......
......@@ -253,13 +253,17 @@ layui.define(['layer', "fsCommon"], function(exports) {
// 查询菜单树列表
FsTree.prototype.queryTree = function() {
var _this = this;
var domTree = $("#" + _this.config.id);
var url = _this.config.url; // 请求url
var simpleData = !isNull(_this.config.simpleData) ? JSON.parse(_this.config.simpleData) : [];
if (domTree.attr("isLoad") === "0") {
// 静态数据加载树
simpleData = _this.pushRootNode(domTree, simpleData, _this);
}
if (isNull(url) && simpleData.length == 0) {
fsCommon.warnMsg("静态数据或请求地址为空!");
return;
}
var domTree = $("#" + _this.config.id);
domTree.empty();
var otherParam = {}; // 业务参数
......@@ -281,17 +285,8 @@ layui.define(['layer', "fsCommon"], function(exports) {
_this.config.otherParam = otherParam;
if (domTree.attr("isLoad") === "0") {
var array = [].concat(simpleData);
if (domTree.attr("isRoot") !== "0") {
var arr = {};
arr["open"] = true;
arr["isParent"] = true;
arr["drag"] = false;
arr[_this.config.treeName] = "全部";
arr[_this.config.treeIdKey] = "0";
array.push(arr);
}
_this.showTree(array);
// 静态数据加载树
_this.showTree(simpleData);
} else {
var method = domTree.attr("method"); // 请求方式
if (!isNull(otherParam)) {
......@@ -305,15 +300,7 @@ layui.define(['layer', "fsCommon"], function(exports) {
if (!$.isArray(array)) {
array = new Array();
}
if (domTree.attr("isRoot") !== "0") {
var arr = {};
arr["open"] = true;
arr["isParent"] = true;
arr["drag"] = false;
arr[_this.config.treeName] = "全部";
arr[_this.config.treeIdKey] = "0";
array.push(arr);
}
array = _this.pushRootNode(domTree, array, _this);
_this.showTree(array);
} else {
fsCommon.warnMsg(data.returnMessage, {icon : 0});
......@@ -322,6 +309,20 @@ layui.define(['layer', "fsCommon"], function(exports) {
}
}
// 添加根节点
FsTree.prototype.pushRootNode = function (domTree, array, _this) {
if (domTree.attr("isRoot") !== "0") {
var arr = {};
arr["open"] = true;
arr["isParent"] = true;
arr["drag"] = false;
arr[_this.config.treeName] = "全部";
arr[_this.config.treeIdKey] = "0";
array.push(arr);
}
return array;
}
/**
* 刷新节点,tid不为空,刷新当前tid节点数据,否则刷新全部数据
*/
......
......@@ -47,7 +47,7 @@
"teamObjectType": {"name": "团队适用对象", "className": "skyeye-pro#com.skyeye.team.classenum.TeamObjectTypeEnum"},
"contactsAuthEnum": {"name": "联系人权限", "className": "skyeye-pro#com.skyeye.contacts.classenum.ContactsAuthEnum", "pageUrl": "../../tpl/contacts/contactsList.html"},
"catalogAuthEnum": {"name": "目录权限", "className": "skyeye-pro#com.skyeye.catalog.classenum.CatalogAuthEnum"},
"documentAuthEnum": {"name": "文档权限", "className": "skyeye-pro#com.skyeye.document.classenum.DocumentAuthEnum"},
"documentAuthEnum": {"name": "文档权限", "className": "skyeye-pro#com.skyeye.document.classenum.DocumentAuthEnum", "pageUrl": "../../tpl/document/documentList.html"},
"disCussionAuthEnum": {"name": "讨论帖权限", "className": "skyeye-pro#com.skyeye.discussion.classenum.DisCussionAuthEnum"},
"flowableStateEnum": {"name": "工作流状态", "className": "skyeye-pro#com.skyeye.common.enumeration.FlowableStateEnum"},
"correspondentEnterEnum": {"name": "往来单位类型", "className": "skyeye-pro#com.skyeye.common.enumeration.CorrespondentEnterEnum", "remark": "往来单位的组件中使用"},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册