Authored by wangtao
Showing 39 changed files with 938 additions and 162 deletions
... ... @@ -317,8 +317,9 @@ layui.define(['form', 'admin', 'laydate', 'common', 'sessions', 'reskpilist'], f
charToExpr(data, 'commonlyExpr');
charToExpr(data, 'importantExpr');
charToExpr(data, 'seriousExpr');
form.on('submit(add-alarmpolicy-form)', function () {
//lsq 告警策略编辑不了,id值应该选择的是submit的按钮的lay-filter 2022-09-27
// form.on('submit(add-alarmpolicy-form)', function () {
form.on('submit(alarmpolicy-form-save-id)', function () {
delete data.noticeMergeFlagExpr;
admin.req({
url: domainName + '/api-web/alarmPolicy/save?access_token=' + accessToken
... ...
... ... @@ -334,7 +334,8 @@ layui.define(['form', 'admin', 'laydate', 'table', 'common','sessions','cron','o
});
data.subGroupLists = receiveGroupInfoS;
delete data["sub_send_type"];
form.on('submit(add-alarmsubscribe-form)',function () {
//lsq 提交按钮需要用的是submit按钮的lay-filter 2022-09-27
form.on('submit(alarmsubscribe-form-save-id)',function () {
var alrmlevels = [],reportTypes = [];
$('input[name="reportType"]:checked').each(function() {
reportTypes.push($(this).val());
... ...
... ... @@ -26,7 +26,8 @@ layui.define(['form','table', 'admin', 'common','sessions'], function (exports)
//保存
$("#alarmtemplate-form-save-id").on("click",function (){
form.on('submit(add-alarmtemplate-form)',function () {
//lsq 告警模板编辑不了,id值应该选择的是submit的按钮的lay-filter 2022-09-27
form.on('submit(alarmtemplate-form-save-id)',function () {
var data = form.val("add-alarmtemplate-form");
var policyIds = [];
var policylist = $("#alarmtemplate-policy-table-body").find("tr");
... ...
... ... @@ -2608,6 +2608,22 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin',
{field: 'resTypeName', title: '资源类型', minWidth: x_110, align: 'center'},
{field: 'state', title: '资源状态', minWidth: x_110, align: 'center', sort: true, templet: '#resStateTpl'}
],
"DATABASE_OGG": [
{field: 'ip', title: 'IP地址', width: x_130, align: 'center', sort: true},
{
field: 'resName', title: '资源名称', minWidth: x_300, sort: true,
templet: '#resindex_resName'
//lsq 资源名称用模板 2022-08-29
// templet: '<div><span data-zymc="{{ d.resId }}" data-restype="{{d.resType}}" data-name="{{d.resName}}" data-childrennum="{{d.childrenNum}}" data-ip="{{ d.ip }}" data-resTypeName="{{ d.resTypeName }}" data-admin="{{ d.adminName }}" data-pingenable="{{d.pingEnable}}" class="layui-table-link">{{ d.resName }}</span></div>'
},
// {field: 'shortName', title: '别名', width: 100, align: 'center', sort: true, templet:'#shortNameTpl'},
{field: 'health', title: '健康状态', width: x_120, align: 'center', sort: true, templet: '#healthTpl'},
{field: 'lastColTime', title: '最近采集时间', width: x_160, align: 'center', sort: true},
{field: 'linkState', title: '连接状态', align: 'center', width: x_120, templet: '#linkStateTpl', sort: true},
{field: 'adminName', title: '负责人', width: x_130, align: 'center', sort: true},
{field: 'adminPhone', title: '负责人电话', width: x_130, align: 'center', sort: true},
{field: 'state', title: '资源状态', width: x_110, align: 'center', sort: true, templet: '#resStateTpl'}
],
},
/**
* 验证是否跳转详情页
... ...
... ... @@ -4367,6 +4367,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
//lsq 状态信息无其他下探 2022-06-08
var statusF = $menu.data('statusf');
var one = $menu.data('one');
//lsq 只有kpiIdent==1时才有性能趋势 2022-09-27
var kpiIdent=$menu.data('ident');
var menubox = '<div class="detail_menubox" id="detail_menubox_id" style="color:#666;"><ul>';
//lsq 只有状态指标下探的标识
if(one==1){
... ... @@ -4380,7 +4382,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
if (!hideM) {
menubox += '<li type="m"><i class="layui-icon">&#xe64d;</i>过滤多指标</li>';
}
if (!nature) {
if (!nature && kpiIdent==1) {
menubox += '<li type="t"><i class="layui-icon">&#xe62c;</i>性能趋势</li>';
}
// if(!statusF){
... ...
layui.define(['commonDetail', 'common', 'admin'], function (exports) {
var commonDetail = layui.commonDetail;
var common = layui.common;
var admin = layui.admin;
//对外暴露的接口
exports('database_ogg', function (data) {
var resId = '';
var showFlag = common.getUrlParam("show");
if (showFlag && showFlag == '0') {
resId = common.getUrlParam("resId");
} else {
resId = data.resId;
}
commonDetail.bindTips();
// 基本信息
var jbxxKpi = "KPIE13DD9A3,KPIF74D9D2B";
// ogg信息
var oggkpi = "KPI95C50C7C,KPIEC53A8C4,KPI03937134,KPI1A122D84,KPI16282DF0";
reload();
//渲染页面
function reload() {
//基本信息
commonDetail.renderText("databaseogg_baseinfo",resId,jbxxKpi);
//资源状态
commonDetail.renderResHealth("databaseogg_health_state",resId);
// ogg信息
commonDetail.renderTable("databaseogg_ogginfo", false, resId, oggkpi, 'ogg运行情况', 'ogg-', 'ext, KPI1A122D84 , KPI16282DF0', 'desc');
// 告警信息
commonDetail.renderActiveAlarms('databaseogg_alarmlist', resId)
}
//定时任务
var timer = setInterval(function () {
reload()
}, commonDetail.timerTime);
commonDetail.detailTimer.push(timer);
});
});
... ...
... ... @@ -76,7 +76,7 @@ layui.define(['commonDetail','common','sessions'], function (exports) {
//内存使用率走势(12小时)
commonDetail.renderLineCharat('hostminicomputerpartition_memoryrun',resId,memoryRunKpiId,'内存使用率','mem');
//虚拟内存使用率走势(12小时)
commonDetail.renderLineCharat('hostminicomputerpartition_vmemoryrun',resId,vmemoryRunKpiId,'虚拟内存使用率','vmem');
commonDetail.renderLineCharat('hostminicomputerpartition_vmemoryrun',resId,vmemoryRunKpiId,'虚拟内存使用率','mem');
//文件系统
commonDetail.renderTable('hostminicomputerpartition_sysfile',false,resId,sysfileKpiId,'文件系统','fs');
//网卡信息
... ...
... ... @@ -237,7 +237,18 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
if (flag) {
$(".protocol-base-area").css("display", "none");
}
form.on('submit(protocol-add-form)', function (data) {
},
yes: function (index, layero) {//确定按钮回调方法
var flag = true;
//看协议参数名称和参数code、参数排序有没有输入
$.each($("#editProtocolParam_add_table").find("input[name='paramName'],input[name='paramCode'],input[name='sort']"), function (i, e) {
if (!$(e).val()) {
flag = false;
return;
}
})
if (flag) {
var paramList = [];
$.each($("#editProtocolParam_add_table").find("tbody tr"), function (i, e) {
paramList.push({
... ... @@ -255,7 +266,6 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
})
var submitData = layui.form.val('protocol-add-form');
submitData.protocolParamList = paramList;
var loading = layer.load(2)
$.ajax({
url: common.domainName + '/api-web/manage/protocol/save?access_token=' + accessToken,
type: 'post',
... ... @@ -263,29 +273,21 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
contentType: "application/json;charset=utf-8",
async: false,
success: function (res) {
// layer.closeAll();
layer.close(indexm); //joke modify 20210303
layer.closeAll('loading');
reloadTable();
var loading = layer.load(2)
if (res.success){
layer.close(index); //joke modify 20210303
layer.close(loading);
layer.msg("操作成功", { icon: 1});
reloadTable();
}else {
layer.close(loading);
layer.msg(res.mag, { offset: '15px' , icon: 1 , time: 1000 });
}
},
error: function () {
layer.closeAll('loading');
}
})
});
},
yes: function (index, layero) {//确定按钮回调方法
var flag = true;
//看协议参数名称和参数code、参数排序有没有输入
$.each($("#editProtocolParam_add_table").find("input[name='paramName'],input[name='paramCode'],input[name='sort']"), function (i, e) {
if (!$(e).val()) {
flag = false;
return;
}
})
if (flag) {
$('#protocolAddForm').find("button.protocol-add-submit").trigger("click")
} else {
layer.msg("请将参数协议填写完整", {offset: '15px', icon: 7, time: 1500});
return false;
... ... @@ -313,4 +315,4 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
}
});
});
\ No newline at end of file
});
... ...
... ... @@ -448,10 +448,15 @@ layui.define(['table', 'form', 'laydate', 'common', 'sessions', 'laydate', 'admi
defaultValue=price;
}
row = createSelect(e.protocolCode,param,index);
let td = '';
if (param.paramCode === 'privkey'){
td='<td style="width: 60%"><textarea'+chooseStyle+' data-paramName="' + param.paramName + '" data-paramCode="' + param.paramCode + '" data-protocol="' + e.protocolCode + '" data-allCode="' + e.protocolCode+param.paramCode + '" type="' + type + '" class="layui-textarea" name="paramValue">'+defaultValue+'</textarea></td>'
}else {
td='<td style="width: 60%"><input'+chooseStyle+' data-paramName="' + param.paramName + '" data-paramCode="' + param.paramCode + '" data-protocol="' + e.protocolCode + '" data-allCode="' + e.protocolCode+param.paramCode + '" type="' + type + '" class="layui-input" value="' + defaultValue + '" name="paramValue"></td>'
}
if (row == '') {
row = '<tr'+revealStyle+'>' +
'<td style="width: 40%"><span>' + param.paramName + fillStyle+'</span></td>' +
'<td style="width: 60%"><input'+chooseStyle+' data-paramName="' + param.paramName + '" data-paramCode="' + param.paramCode + '" data-protocol="' + e.protocolCode + '" data-allCode="' + e.protocolCode+param.paramCode + '" type="' + type + '" class="layui-input" value="' + defaultValue + '" name="paramValue"></td>' +
'<td style="width: 40%"><span>' + param.paramName + fillStyle+'</span></td>' + td +
'</tr>'
}
$dom.find("table tbody").append(row);
... ... @@ -495,10 +500,15 @@ layui.define(['table', 'form', 'laydate', 'common', 'sessions', 'laydate', 'admi
param.paramValue=price;
}
row=createSelect(k,param,index);
let td = '';
if (param.paramCode === 'privkey'){
td='<td style="width: 60%"><textarea'+chooseStyle+' data-paramName="' + param.paramName + '" data-paramCode="' + param.paramCode + '" data-protocol="' +k + '" data-allCode="' + k+param.paramCode + '" type="' + type + '" class="layui-textarea" name="paramValue" >'+param.paramValue+'</textarea></td>'
}else {
td='<td style="width: 60%"><input '+chooseStyle+' data-paramName="'+param.paramName+'" data-paramCode="'+param.paramCode+'" data-protocol="'+k+'" value="'+param.paramValue+'" data-allCode="' + k+param.paramCode + '" type="'+type+'" class="layui-input" name="paramValue"></td>'
}
if (row == '') {
var row = '<tr '+revealStyle+'>' +
'<td style="width: 40%"><span>'+param.paramName+fillStyle+'</span>'+typeHtml+'</td>' +
'<td style="width: 60%"><input '+chooseStyle+' data-paramName="'+param.paramName+'" data-paramCode="'+param.paramCode+'" data-protocol="'+k+'" value="'+param.paramValue+'" data-allCode="' + k+param.paramCode + '" type="'+type+'" class="layui-input" name="paramValue"></td>' +
'<td style="width: 40%"><span>'+param.paramName+fillStyle+'</span>'+typeHtml+'</td>' + td +
'</tr>'
}
$dom.find("table tbody").append(row);
... ...
... ... @@ -1950,6 +1950,27 @@ layui.define(['common', 'tree', 'laypage', 'laytpl', 'upload', 'admin', 'form',
}
}
res.push(obj)
}else if ($(td).find('.xm-select-demo').length > 0 || $(td).find('textarea').length > 0){
var $dom = $(td).find('.xm-select-demo').length>=1?$(td).find('.xm-select-demo'):$(td).find('textarea');
var obj ={
protocol: $dom.data("protocol"),
paramCode:$dom.data("paramcode"),
paramName:$dom.data("paramname"),
paramValue:$dom.val()
}
//为xmSelect时
if($(td).find('.xm-select-demo').length>=1){
obj.paramValue=$(td).find('.label-content').attr('title')?$(td).find('.label-content').attr('title'):'';
}
//是否集群 保存是否0,是1
if(obj.protocol=="REDIS_CLI" && obj.paramCode=="redis_isCluster"){
if(obj.paramValue=="否"){
obj.paramValue="0";
}else{
obj.paramValue="1";
}
}
res.push(obj)
}
})
})
... ...
... ... @@ -475,7 +475,13 @@ layui.define(['form', 'admin', 'layer', 'laytpl', 'common', 'view', 'sessions',
//回显业务图资源图
biz_view = xmSelect.get('#select-restype-options-biz')[0];
resource_view = xmSelect.get('#select-restype-options-view')[0];
var optionsMap= $.parseJSON(resType.options);
var optionsMap = {};
try {
optionsMap = $.parseJSON(resType.options);
} catch (e) {
console.error(" ==> 格式转换错误");
console.error(resType, e);
}
resource_view.setValue([optionsMap.viewCallBack]);
biz_view.setValue([optionsMap.bizCallBack]);
//回显采集类型
... ... @@ -1326,4 +1332,4 @@ layui.define(['form', 'admin', 'layer', 'laytpl', 'common', 'view', 'sessions',
return {getResTypeChecks: getResTypeChecks}
});
});
\ No newline at end of file
});
... ...
... ... @@ -198,7 +198,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'treeTabl
});
userNames = contents.toString();
// 表单提交事件
form.on('submit(form-usergroup-add)', function (data) {
form.on('submit(btn-usergroup-submit)', function (data) {
Object.assign(usergroup, form.val('form-usergroup-add'));
//状态是否为开启
usergroup.groupStatus= document.querySelector("#groupStatus_").checked? 0 : 1;
... ... @@ -236,4 +236,4 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'treeTabl
});
});
});
});
\ No newline at end of file
});
... ...
... ... @@ -206,7 +206,7 @@ layui.define(['element', 'admin'], function (exports) {
*/
bindElemClickEvent() {
let that=this;
var eventKeys = ['button','[data-bizid]','.layui-table-link'];
var eventKeys = ['button','[data-bizid]','.layui-table-link','[data-zymc]','[data-busid]'];
eventKeys.map(item=>{
if(!$(item).hasClass("on_fn")){
$(item).unbind('click.handle').on('click.handle',(function (e){
... ...
... ... @@ -345,8 +345,8 @@
</div>
</div>
</div>
<button type="submit" lay-submit class="layui-btn hide" id="alarmpolicy-form-save-id">保存</button>
<!--lsq 告警策略编辑不了,按钮没有lay-filter 2022-09-27-->
<button type="submit" lay-submit class="layui-btn hide" lay-filter="alarmpolicy-form-save-id" id="alarmpolicy-form-save-id">保存</button>
</form>
<script>
layui.use('alarmpolicyAdd', function (fn) {
... ...
... ... @@ -141,8 +141,8 @@
<textarea class="layui-textarea" name="subDesc"></textarea>
</div>
</div>
<button type="submit" lay-submit class="layui-btn hide" id="alarmsubscribe-form-save-id">保存</button>
<!--lsq 告警订阅编辑不了,按钮没有lay-filter 2022-09-27-->
<button type="submit" lay-submit class="layui-btn hide" lay-filter="alarmsubscribe-form-save-id" id="alarmsubscribe-form-save-id">保存</button>
</form>
<!--<style>-->
<!-- #alarmsubscirbe-form-select-users{-->
... ...
... ... @@ -22,8 +22,8 @@
<input type="text" id="alarmTemplateDesc" name="alarmTempDesc" lay-reqtext="请输模板描述" class="layui-input">
</div>
</div>
<button type="submit" lay-submit class="layui-btn hide" id="alarmtemplate-form-save-id">保存</button>
<!--lsq 告警模板编辑不了,按钮没有lay-filter 2022-09-27-->
<button type="submit" lay-submit class="layui-btn hide" lay-filter="alarmtemplate-form-save-id" id="alarmtemplate-form-save-id">保存</button>
</form>
<div class="layui-form layui-form-pane">
... ...
... ... @@ -54,7 +54,8 @@
<label class="layui-form-label">发送用户</label>
<div style="width: calc(100% - 110px)">
<div class="layui-input-inline" style="width: calc(100% - 10px);display: inline-flex;">
<div class="tags" id="select_noticeTimely_id_user" style="width: calc(100% - 20px);border: solid 1px #D2D2D2;margin-top: 0px;height: 36px;"></div>
<!--lsq 选择用户过多时,超出高度滚动 2022-09-27-->
<div class="tags" id="select_noticeTimely_id_user" style="width: calc(100% - 20px);border: solid 1px #D2D2D2;margin-top: 0px;min-height:36px; height: auto; max-height: 200px; overflow: auto;"></div>
<i class="layui-icon form-btn-icon" id="noticeTimely-form-select-users" style="line-height: 36px;margin-left: 5px;">&#xe615;</i>
</div>
</div>
... ...
... ... @@ -23,7 +23,7 @@
<textarea name="protocolDesc" class="layui-textarea"></textarea>
</div>
</div>
<button type="submit" lay-submit class="protocol-add-submit" style="display: none">提交</button>
<button type="submit" lay-submit id="protocol-add-submit" style="display: none">提交</button>
</form>
</div>
<div class="layui-card-body layui-form-pane editProtocolParam-list" style="padding-top: 0px;">
... ... @@ -112,4 +112,4 @@
layui.use('protocolAdd', function (fn) {
fn({{ d }});
});
</script>
\ No newline at end of file
</script>
... ...
... ... @@ -558,7 +558,7 @@
</script>
<!--虚拟内存使用率-->
<script type="text/html" id="vmmemoryRateTpl">
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="vmem" data-name="虚拟内存使用率"
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="mem" data-name="虚拟内存使用率"
data-warning="1" data-ident="1" data-trend="1">
<div class="layui-progress layui-progress-big" lay-showpercent="true">
<div class="layui-progress-bar layui-bg-green"
... ...
... ... @@ -588,7 +588,7 @@
</script>
<!--虚拟内存使用率-->
<script type="text/html" id="vmmemoryRateTpl">
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="vmem" data-name="虚拟内存使用率"
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="mem" data-name="虚拟内存使用率"
data-warning="1" data-ident="1" data-trend="1">
<div class="layui-progress layui-progress-big" lay-showpercent="true">
<div class="layui-progress-bar layui-bg-green {{ d.vmmemoryUseRate >= 95 ? 'layui-bg-red' : (d.vmmemoryUseRate >= 90 ? 'layui-bg-orange' : (d.vmmemoryUseRate >= 80 ? 'layui-bg-blue':''))}}"
... ...
<!--ogg详细页面-->
<article class="page-container template">
<div class="page-panel">
<div class="main">
<div class="layui-card">
<div class="lay-row">
<div class="lay-row-item">
<h5 class="lay-row-title">基本信息<i data-id="databaseogg_baseinfo" class="iconfont detail_base_info">&#xe61e;</i></h5>
<ul class="info-table" id="databaseogg_baseinfo"></ul>
</div>
<div class="lay-row-item">
<h5 class="lay-row-title">资源状态</h5>
<div class="res-state" id="databaseogg_health_state"></div>
</div>
</div>
<div class="layui-card-body">
<div class="lay-row" id="databaseogg_ogginfoHide">
<div class="lay-row-item">
<h5 class="lay-row-title">ogg运行情况<span id="databaseogg_ogginfoMore" class="layui-table-link">更多</span></h5>
<div id="databaseogg_ogginfo"></div>
</div>
</div>
<div class="lay-row">
<div class="lay-row-item">
<h5 class="lay-row-title">实时告警动态</h5>
<div id="databaseogg_alarmlist"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</article>
<textarea id="database_ogg_param_id" style="display: none;">{{d}}</textarea>
<script>
layui.use('database_ogg', function (fn) {
var $ = layui.$;
var parm = $("#database_ogg_param_id").val();
if(parm.indexOf('{{d') != -1){
fn();
}else{
fn(JSON.parse(parm));
}
});
</script>
\ No newline at end of file
... ...
... ... @@ -3,8 +3,8 @@
<head>
<meta charset="utf-8"/>
<title>iconfont Demo</title>
<link rel="shortcut icon" href="//img.alicdn.com/imgextra/i2/O1CN01ZyAlrn1MwaMhqz36G_!!6000000001499-73-tps-64-64.ico" type="image/x-icon"/>
<link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01EYTRnJ297D6vehehJ_!!6000000008020-55-tps-64-64.svg"/>
<link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
<link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
<link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
<link rel="stylesheet" href="demo.css">
<link rel="stylesheet" href="iconfont.css">
... ... @@ -55,6 +55,24 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe710;</span>
<div class="name">感叹号</div>
<div class="code-name">&amp;#xe710;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe7f3;</span>
<div class="name">警示 感叹号 !</div>
<div class="code-name">&amp;#xe7f3;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe83d;</span>
<div class="name">拓扑</div>
<div class="code-name">&amp;#xe83d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe67c;</span>
<div class="name">提示</div>
<div class="code-name">&amp;#xe67c;</div>
... ... @@ -1452,9 +1470,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1659325108758') format('woff2'),
url('iconfont.woff?t=1659325108758') format('woff'),
url('iconfont.ttf?t=1659325108758') format('truetype');
src: url('iconfont.woff2?t=1663752017313') format('woff2'),
url('iconfont.woff?t=1663752017313') format('woff'),
url('iconfont.ttf?t=1663752017313') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
... ... @@ -1481,6 +1499,33 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-gantanhao"></span>
<div class="name">
感叹号
</div>
<div class="code-name">.icon-gantanhao
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jingshigantanhao"></span>
<div class="name">
警示 感叹号 !
</div>
<div class="code-name">.icon-jingshigantanhao
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tuopu"></span>
<div class="name">
拓扑
</div>
<div class="code-name">.icon-tuopu
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tishi"></span>
<div class="name">
提示
... ... @@ -3579,6 +3624,30 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gantanhao"></use>
</svg>
<div class="name">感叹号</div>
<div class="code-name">#icon-gantanhao</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jingshigantanhao"></use>
</svg>
<div class="name">警示 感叹号 !</div>
<div class="code-name">#icon-jingshigantanhao</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tuopu"></use>
</svg>
<div class="name">拓扑</div>
<div class="code-name">#icon-tuopu</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tishi"></use>
</svg>
<div class="name">提示</div>
... ...
@font-face {
font-family: "iconfont"; /* Project id 2843738 */
src: url('iconfont.woff2?t=1659325108758') format('woff2'),
url('iconfont.woff?t=1659325108758') format('woff'),
url('iconfont.ttf?t=1659325108758') format('truetype');
src: url('iconfont.woff2?t=1663752017313') format('woff2'),
url('iconfont.woff?t=1663752017313') format('woff'),
url('iconfont.ttf?t=1663752017313') format('truetype');
}
.iconfont {
... ... @@ -13,6 +13,18 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-gantanhao:before {
content: "\e710";
}
.icon-jingshigantanhao:before {
content: "\e7f3";
}
.icon-tuopu:before {
content: "\e83d";
}
.icon-tishi:before {
content: "\e67c";
}
... ...
... ... @@ -6,6 +6,27 @@
"description": "",
"glyphs": [
{
"icon_id": "9974757",
"name": "感叹号",
"font_class": "gantanhao",
"unicode": "e710",
"unicode_decimal": 59152
},
{
"icon_id": "689255",
"name": "警示 感叹号 !",
"font_class": "jingshigantanhao",
"unicode": "e7f3",
"unicode_decimal": 59379
},
{
"icon_id": "1415612",
"name": "拓扑",
"font_class": "tuopu",
"unicode": "e83d",
"unicode_decimal": 59453
},
{
"icon_id": "577891",
"name": "提示",
"font_class": "tishi",
... ...
... ... @@ -422,11 +422,13 @@ export default {
}
if (res.msg) {
proxy.$global.showMsg(res.msg, 'warning');
proxy.$global.showMsg(res.msg);
} else {
proxy.$global.showMsg('放入回收站成功!');
let isUser = !isUserFolder.value;
reload(isUser);
//joke 屏蔽 20221122 开始
// let isUser = !isUserFolder.value;
// reload(isUser);
//joke 屏蔽 20221122 结束
}
if (props.isRecycle) {
... ... @@ -540,10 +542,13 @@ export default {
proxy.$refs[id].validate((valid) => {
if (valid) {
let params = docForm.value;
if (currentNodeData.value.id == undefined || currentNodeData.value.id == '') {
params.pid = '0'
} else {
params.pid = currentNodeData.value.id;
//joke 修改 20221121
if (params.id == '' || params.id == null){
if (currentNodeData.value.id == undefined || currentNodeData.value.id == '') {
params.pid = '0'
} else {
params.pid = currentNodeData.value.id;
}
}
if (isUserFolder.value) {
params.id = "";
... ...
... ... @@ -665,7 +665,7 @@
</script>
<!--虚拟内存使用率-->
<script type="text/html" id="vmmemoryRateTpl">
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="vmem" data-name="虚拟内存使用率"
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag=mem" data-name="虚拟内存使用率"
data-warning="1" data-ident="1" data-trend="1">
<div class="layui-progress layui-progress-big" lay-showpercent="true">
<div class="layui-progress-bar layui-bg-green {{ d.vmmemoryUseRate >= 95 ? 'layui-bg-red' : (d.vmmemoryUseRate >= 90 ? 'layui-bg-orange' : (d.vmmemoryUseRate >= 80 ? 'layui-bg-blue':''))}}"
... ...
... ... @@ -665,7 +665,7 @@
</script>
<!--虚拟内存使用率-->
<script type="text/html" id="vmmemoryRateTpl">
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="vmem" data-name="虚拟内存使用率"
<div class="layui-progress-wrap kpiSubDiv" data-resid={{d.resId}} data-kpiid="KPI20352505" data-flag="mem" data-name="虚拟内存使用率"
data-warning="1" data-ident="1" data-trend="1">
<div class="layui-progress layui-progress-big" lay-showpercent="true">
<div class="layui-progress-bar layui-bg-green {{ d.vmmemoryUseRate >= 95 ? 'layui-bg-red' : (d.vmmemoryUseRate >= 90 ? 'layui-bg-orange' : (d.vmmemoryUseRate >= 80 ? 'layui-bg-blue':''))}}"
... ...
... ... @@ -21,7 +21,8 @@
}
.yfyw-user .form-class {
margin-bottom: 0px !important;
/*margin-bottom: 0px !important;*/
margin: 5px; !important;
}
.yfyw-user .el-form--label-top .el-form-item__label {
... ...
... ... @@ -79,7 +79,7 @@ export default {
id:docIds.join(','),
}
proxy.$http.get('/api-web/bOpsFile/deleteSearch',param, function (res){
emit('callback',true);
})
}
... ... @@ -95,8 +95,7 @@ export default {
};
proxy.$http.post('/api-web/bOpsFile/fileSynchronization', params, function (res) {
if (res && res.code == 0) {
// proxy.$global.showMsg("");
console.log('执行回调成功', res)
emit('callback',true);
}
});
}
... ...
<div>
<div>
<!-- 人员信息总汇-->
<el-divider content-position="left">人员信息汇总</el-divider>
<el-divider content-position="left">
人员信息汇总
<el-tooltip placement="bottom-start" effect="light">
<template #content> 人员信息统计规则:<br/> &nbsp;&nbsp;&nbsp;&nbsp;• 左侧树:只统计业务下在职运维人员<br/> &nbsp;&nbsp;&nbsp;&nbsp;•人员信息汇总:统计业务下所有运维人员 </template>
<i class="iconfont icon-gantanhao" style="color:rgb(30,159,255);"></i><span></span>
</el-tooltip>
</el-divider>
<el-button v-if="!isAdmin()" :size="$global.elementConfig.size.button" @click="add"
style="float:right;margin-right: 6px;margin-bottom: 6px">录入
</el-button>
<cm-table-page :columns="columns" :dataList="dataList" @loaddata="getPage" :showIndex="true"
:showBorder="true" :currentPage="currentPage" :total="total" :loading="false"
:showPage="true" :height="height" :pageSize="pageSize"></cm-table-page>
... ... @@ -12,9 +21,10 @@
<component v-bind:is="componentName"
:docType="docType"
height="500"
:isAdd="isAdd"
:docTypeName="docTypeName"
:pageSize="pageSize"
:treeNode="treeNode" :parentNode="parentNode" :projectId="projectId"></component>
:treeNode="treeNode" @showPopout="showPopout" :parentNode="parentNode" :projectId="projectId" @callback="refreshPage"></component>
</div>
</template>
</cm-dialog>
... ...
... ... @@ -53,7 +53,7 @@ export default {
let docTypeName = Vue.ref('');
let componentName = Vue.ref('');
let dialogFlg = Vue.ref(false);
let isAdd = Vue.ref(false);
let columns = Vue.ref([{
prop: 'nickname',
... ... @@ -64,6 +64,7 @@ export default {
title.value = "个人信息";
componentName.value = "USER";
props.parentNode.id = row.id;
isAdd.value = false;
showDialog(true);
}
}, {
... ... @@ -107,6 +108,7 @@ export default {
title.value = "个人信息";
componentName.value = "USER";
props.parentNode.id = row.id;
isAdd.value = false;
showDialog(true);
},
render: function (row) {
... ... @@ -128,6 +130,8 @@ export default {
componentName.value = "DOCUMENT";
docType.value = "THREE_PERSONAGE_NDA";
docTypeName.value = "入场资料";
props.parentNode.id = row.id;
props.treeNode.map.nodeType.code ="THREE_PERSONAGE_NDA";
showDialog(true);
},
render: function (row) {
... ... @@ -148,6 +152,9 @@ export default {
componentName.value = "DOCUMENT";
docType.value = "THREE_MONTHLY_SUMMARY";
docTypeName.value = "月度总结";
props.parentNode.id = row.id;
props.treeNode.map.nodeType.code ="THREE_MONTHLY_SUMMARY";
showDialog(true);
},
render: function (row) {
... ... @@ -165,10 +172,28 @@ export default {
dialogFlg.value = flg;
}
let showPopout = (val) => {
dialogFlg.value = val;
getPage();
}
let dataList = Vue.ref([]);
let currentPage = Vue.ref(1);
let total = Vue.ref(0);
let add = () => {
title.value = "个人信息录入";
componentName.value = "USER";
isAdd.value = true;
showDialog(true);
}
let isAdmin = () => {
let userRoleArr = proxy.$global.common.getUserRole();
let userName = proxy.$global.common.getUserName();
return userName != 'admin' && userName != 'root' && !userRoleArr.includes('pmp');
}
// 获取表格数据
let getPage = (obj) => {
if (!props.treeNode.map || !props.treeNode.map.nodeType) {
... ... @@ -197,7 +222,9 @@ export default {
}
});
}
let refreshPage= () => {
getPage();
}
// 挂载完
Vue.onMounted(() => {
... ... @@ -225,7 +252,12 @@ export default {
docTypeName,
dialogFlg,
showDialog,
componentName
componentName,
add,
isAdd,
showPopout,
refreshPage,
isAdmin
}
}
}
... ...
... ... @@ -17,11 +17,11 @@
<i class="iconfont icon-icon--yingbing" /> 人员基本信息
</div>
<div style="padding-left: 40px;margin-bottom: 6px">
<el-form :rules="rules" ref="rule" :model="ruleForm" label-width="120px" :size="$global.elementSize" label-position="top" >
<el-form :rules="rules" ref="rule" :model="ruleForm" label-width="120px" :size="$global.elementSize" label-position="right" >
<el-row :gutter="5">
<el-col :span="8">
<el-form-item label="姓名" prop="nickname" class="form-class">
<el-input v-model="ruleForm.nickname" :readonly="true"></el-input>
<el-input v-model="ruleForm.nickname" :readonly="whether"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
... ... @@ -91,7 +91,37 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="8">
<el-form-item label="出生日期" prop="birthday" class="form-class">
<el-date-picker
v-model="ruleForm.birthday"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
:readonly="isAdmin()"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入党时间" prop="partyDate" class="form-class">
<el-date-picker
v-model="ruleForm.partyDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
:readonly="isAdmin()"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="籍贯" prop="nativePlace" class="form-class">
<el-input v-model="ruleForm.nativePlace" :readonly="isAdmin()"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="8">
<el-form-item label="政治面貌" prop="politicsStatus" class="form-class">
... ... @@ -99,26 +129,35 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="在职状态" prop="certificate" :readonly="true" class="form-class">
<el-radio-group v-model="ruleForm.state" :disabled="true">
<el-form-item label="在职状态" prop="state" class="form-class">
<el-radio-group v-model="ruleForm.state" :disabled="isAdmin()">
<el-radio :label="1">在职</el-radio>
<el-radio :label="2">离职</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="犯罪记录证明" prop="hasProof" class="form-class">
<el-input v-model="ruleForm.hasProof" :readonly="isAdmin()"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="24">
<el-form-item label="获得证书" prop="post" class="form-textarea">
<el-input v-model="ruleForm.certificate" type="textarea" :readonly="isAdmin()"></el-input>
<el-row :gutter="">
<el-col :span="12">
<el-form-item label="获得证书" prop="certificate">
<el-input v-model="ruleForm.certificate" :readonly="isAdmin()"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="家庭住址" prop="post">
<el-input v-model="ruleForm.post" :readonly="isAdmin()"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="24">
<el-form-item label="家庭住址" prop="post" class="form-textarea">
<el-input v-model="ruleForm.post" type="textarea" :readonly="isAdmin()"></el-input>
<el-form-item label="岗位职责" prop="responsibility" class="form-textarea">
<el-input v-model="ruleForm.responsibility" type="textarea" :readonly="isAdmin()"></el-input>
</el-form-item>
</el-col>
</el-row>
... ... @@ -126,9 +165,60 @@
<el-button type="primary" size="mini" @click="saveUser()">保存基本信息</el-button>
</div>
</el-form>
<div v-if="showMore">
<!--工作简历表格-->
<div class="title" style="padding-left: 0px">
<i class="iconfont icon-icon--yingbing" /> 工作简历信息 <el-button v-show="!isAdmin()" type="primary" size="small" @click="addFamilyInfo('新增','work')" plain>新增</el-button>
</div>
<el-table border :data="workInfoTableData" stripe style="width: 100%" >
<el-table-column label="序号" type="index" width="100" align="center"/>
<el-table-column prop="place" align="center" label="工作单位" />
<el-table-column prop="position" align="center" label="职位" />
<el-table-column prop="startDate" align="center" label="入职日期" />
<el-table-column prop="endDate" align="center" label="离职日期" />
<el-table-column v-if="!isAdmin()" prop="address" align="center" label="操作" width="100" >
<template #default="scope">
<div class="list-handle">
<span class="icon-bg">
<i class="el-icon-delete" title="删除" @click="deleteByType(scope.row,'work')"></i>
</span>
<span class="icon-bg">
<i class="el-icon-edit-outline" title="修改" @click="updateFamilyOrWorkInfo(scope.row,'work')"></i>
</span>
</div>
</template>
</el-table-column>
</el-table>
<!--家庭成员表格-->
<div class="title" style="margin-top: 10px;padding-left: 0px">
<i class="iconfont icon-icon--yingbing" /> 家庭成员信息 <el-button v-show="!isAdmin()" type="primary" size="small" @click="addFamilyInfo('新增','family')" plain>新增</el-button>
</div>
<el-table border :data="familyInfoTableData" stripe style="width: 100%" >
<el-table-column label="序号" type="index" width="100" align="center"/>
<el-table-column prop="name" align="center" label="成员姓名" />
<el-table-column prop="appellation" align="center" label="称谓" />
<el-table-column prop="place" align="center" label="工作单位" />
<el-table-column prop="position" align="center" label="职位" />
<el-table-column v-if="!isAdmin()" prop="address" align="center" label="操作" width="100" >
<template #default="scope">
<div class="list-handle">
<span class="icon-bg">
<i class="el-icon-delete" title="删除" @click="deleteByType(scope.row,'family')"></i>
</span>
<span class="icon-bg">
<i class="el-icon-edit-outline" title="修改" @click="updateFamilyOrWorkInfo(scope.row,'family')"></i>
</span>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<!--资产信息-->
<div class="title">
<div class="title" v-if="showMore">
<i class="iconfont icon-liebiaomoshi"/> 资产信息
<el-dropdown v-if="Object.keys(icon).length > 0 && !isAdmin()" size="mini" split-button @click="assetsAdd('bastion',`新建${icon['bastion'].name}资产`)" style="margin-left: 20px">
<i class="icon el-icon-plus"/>添加{{icon['bastion'].name}}
... ... @@ -199,5 +289,93 @@
</template>
</cm-dialog>
<!--家庭人员信息弹框-->
<cm-dialog :title="familyDiaTitle" width="60%" :showDialogVisible="familyDiaShow" @hidedialog="showDiaByType(false,'family')" :showFooter="true" @okfunc="saveOrUpdateByType('family',familyInfoFormRef)">
<template v-slot style="padding: 10px">
<el-form ref="familyInfoFormRef" :rules="familyOrWorkRules" :model="familyInfoForm" label-width="120px" :size="$global.elementSize" label-position="right" >
<el-row :gutter="5">
<el-col :span="12">
<el-form-item label="id" prop="id" v-show="false" >
<el-input v-model="familyInfoForm.id" :readonly="true"></el-input>
</el-form-item>
<el-form-item label="personId" prop="personId" v-show="false" >
<el-input v-model="familyInfoForm.personId" :readonly="true"></el-input>
</el-form-item>
<el-form-item label="姓名" prop="name" class="form-class">
<el-input v-model="familyInfoForm.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="称谓" prop="appellation" class="form-class">
<el-input v-model="familyInfoForm.appellation"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="12">
<el-form-item label="工作单位" prop="place" class="form-class">
<el-input v-model="familyInfoForm.place"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职位" prop="position" class="form-class">
<el-input v-model="familyInfoForm.position"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
</cm-dialog>
<!--工作简历弹框-->
<cm-dialog :title="workDiaTitle" width="60%" :showDialogVisible="workDiaShow" @hidedialog="showDiaByType(false,'work')" :showFooter="true" @okfunc="saveOrUpdateByType('work',familyInfoFormRef)">
<template v-slot style="padding: 10px">
<el-form ref="familyInfoFormRef" :rules="familyOrWorkRules" :model="workInfoForm" label-width="120px" :size="$global.elementSize" label-position="right" >
<el-row :gutter="5">
<el-col :span="12">
<el-form-item label="id" prop="id" v-show="false" >
<el-input v-model="workInfoForm.id" :readonly="true"></el-input>
</el-form-item>
<el-form-item label="personId" prop="personId" v-show="false" >
<el-input v-model="workInfoForm.personId" :readonly="true"></el-input>
</el-form-item>
<el-form-item label="工作单位" prop="place" class="form-class">
<el-input v-model="workInfoForm.place"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职位" prop="position" class="form-class">
<el-input v-model="workInfoForm.position"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="12">
<el-form-item label="入职日期" prop="startDate" class="form-class">
<el-date-picker
v-model="workInfoForm.startDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="离职日期" prop="endDate" class="form-class">
<el-date-picker
v-model="workInfoForm.endDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
</cm-dialog>
</div>
... ...
... ... @@ -12,19 +12,19 @@ const assets = (props, {attrs, slots, emit}) => {
//查询资产类型列表
let getAssetType = () => {
if(Object.keys(icon.value).length > 0){
if (Object.keys(icon.value).length > 0) {
return;
}
proxy.$http.post(`/api-web/manage/ddic/findSucDdics/OPS_SECOND_PROPERTY`, {}, function (res) {
if (res && res.data.length > 0) {
icon.value = {};
res.data.forEach(function(item, index, arr){
res.data.forEach(function (item, index, arr) {
let code = item.ddicCode;
let obj = {};
// code = code.substring(code.lastIndexOf("_") + 1, code.length).toLowerCase();
obj.name=item.ddicName;
obj.icon=item.ddicDesc;
icon.value[code] =obj;
obj.name = item.ddicName;
obj.icon = item.ddicDesc;
icon.value[code] = obj;
});
}
});
... ... @@ -42,15 +42,14 @@ const assets = (props, {attrs, slots, emit}) => {
let assetsAdd = (type, msg) => {
proxy.$http.get(`/api-web/person/assets/typeList/${type}`, {}, function (res) {
if (res && res.data && res.data.length > 0) {
btnClick('add',res.data,msg);
btnClick('add', res.data, msg);
} else {
proxy.$global.showMsg("没有配置属性!","warning");
proxy.$global.showMsg("没有配置属性!", "warning");
}
});
}
/**
* 新增资产
* <p>
... ... @@ -72,13 +71,13 @@ const assets = (props, {attrs, slots, emit}) => {
data = arr;
}
data.map(function (v){
data.map(function (v) {
let str = v.extend;
if(str){
if (str) {
try {
let json = JSON.parse(str);
v.extend = json;
}catch (e){
} catch (e) {
}
}
})
... ... @@ -92,12 +91,12 @@ const assets = (props, {attrs, slots, emit}) => {
}
let checkAssets = () =>{
let checkAssets = () => {
let data = btnType.value.data;
let size = 0;
data.forEach(function (v){
if( !v.value || v.value == '' || v.value == null){
size ++;
data.forEach(function (v) {
if (!v.value || v.value == '' || v.value == null) {
size++;
}
})
... ... @@ -112,15 +111,15 @@ const assets = (props, {attrs, slots, emit}) => {
*/
let addAssets = () => {
let data = btnType.value.data
data.map(function (v){
data.map(function (v) {
v.extend = JSON.stringify(v.extend);
})
if(checkAssets()){
proxy.$global.showMsg(`请填写资产信息,不能全部为空!`,'warning');
if (checkAssets()) {
proxy.$global.showMsg(`请填写资产信息,不能全部为空!`, 'warning');
return;
}
proxy.$http.post(`/api-web/person/assets/add/${props.parentNode.id}`,data , function (res) {
proxy.$http.post(`/api-web/person/assets/add/${props.parentNode.id}`, data, function (res) {
if (res && res.success) {
proxy.$global.showMsg("添加成功");
showDialog(false);
... ... @@ -138,12 +137,12 @@ const assets = (props, {attrs, slots, emit}) => {
*/
let saveAssets = () => {
let data = btnType.value.data
data.map(function (v){
data.map(function (v) {
v.extend = JSON.stringify(v.extend);
})
if(checkAssets()){
proxy.$global.showMsg(`请填写资产信息,不能全部为空!`,'warning');
if (checkAssets()) {
proxy.$global.showMsg(`请填写资产信息,不能全部为空!`, 'warning');
return;
}
proxy.$http.post(`/api-web/person/assets/edit/${props.parentNode.id}`, data, function (res) {
... ... @@ -162,12 +161,12 @@ const assets = (props, {attrs, slots, emit}) => {
* 时间:2021/11/3 20:14
*/
let deleteAssets = (arr) => {
proxy.$global.confirm(`您确认永久删除该资产信息吗?`,function (){
proxy.$global.confirm(`您确认永久删除该资产信息吗?`, function () {
proxy.$http.post(`/api-web/person/assets/delete/${props.parentNode.id}`, arr, function (res) {
if (res && res.success) {
proxy.$global.showMsg("删除成功");
} else {
proxy.$global.showMsg("删除失败,资产不存在或者已被删除!","error");
proxy.$global.showMsg("删除失败,资产不存在或者已被删除!", "error");
}
showDialog(false);
getAssets();
... ... @@ -185,7 +184,11 @@ const assets = (props, {attrs, slots, emit}) => {
* 时间:2021/11/3 20:17
*/
let showDialog = (flg) => {
op.value = flg;
if (!props.isAdd) {
op.value = flg;
} else {
proxy.$global.showMsg("请先添加用户!", "error");
}
}
let okFunc = () => {
... ... @@ -233,17 +236,32 @@ export default {
type: String,
default: ''
},
isAdd: {
type: Boolean,
default: false
}
},
data() {
return {
}
return {}
},
setup(props, {attrs, slots, emit}) {
const refreshTree = Vue.inject('refreshTree');
let height = Vue.ref(window.innerHeight - 130);
//判定是否展示家庭成员、工作简历级资产列表
let showMore = Vue.ref(false);
const {proxy} = Vue.getCurrentInstance();
let imageUrl = Vue.ref('');
const familyInfoTableData = Vue.ref([]);
// 家庭成员信息弹框显示标识
let familyDiaShow = Vue.ref(false);
//家庭成员信息弹框标题
let familyDiaTitle = Vue.ref('');
const workInfoTableData = Vue.ref([]);
// 简历信息弹框显示标识
let workDiaShow = Vue.ref(false);
//简历信息弹框标题
let workDiaTitle = Vue.ref('');
let ruleForm = Vue.ref({
nickname: '',
... ... @@ -256,11 +274,36 @@ export default {
company: '',
headImgUrl: '',
post: '',
projectId: null,
// projectId: null,
quitTime: '',
state: '',
idcard:'',
politicsStatus:''
idcard: '',
politicsStatus: '',
hasProof: '', //是否有无犯罪证明 joke add 20221012
nativePlace: '', //籍贯 joke add 20221012
birthday: '', //出生日期 joke add 20221012
partyDate: '', //入党日期 joke add 20221012
responsibility: '' //岗位职责 joke add 20221012
})
let familyInfoForm = Vue.ref({
id: '',
personId: props.parentNode.id, //用户id
name: '', //家庭成员姓名
appellation: '', //家庭成员称谓
place: '', //家庭成员工作单位
position: '', //家庭成员职位
})
let familyInfoFormRef = Vue.ref('');
let workInfoForm = Vue.ref({
id: '',
personId: props.parentNode.id, //用户id
place: '', //工作单位
position: '', //职位
startDate: '', //入职日期
endDate: '', //离职日期
})
... ... @@ -273,6 +316,12 @@ export default {
}, function (res) {
if (res && res.object) {
ruleForm.value = res.object
//如果为新录入,则屏蔽部分页面(家庭成员、工作经历、获得奖励及资产信息)
if (res.object.id != null && res.object.id != '') {
showMore.value = true;
}
proxy.familyInfoTableData = res.object.familyInfoList;
proxy.workInfoTableData = res.object.workExperienceList;
} else {
ruleForm.value = res.object
}
... ... @@ -282,6 +331,94 @@ export default {
imageUrl.value = `${sessionStorage.getItem('domainName')}/api-web/bOpsPerson/downloadFile?id=${props.parentNode.id}&access_token=${localStorage.getItem('access_token')}`
}
let refreshTable = () => {
proxy.$http.get("/api-web/bOpsPerson/search", {
"nickname": props.parentNode.label,
"id": props.parentNode.id,
"projectId": props.projectId
}, function (res) {
if (res && res.object) {
//如果为新录入,则屏蔽部分页面(家庭成员、工作经历、获得奖励及资产信息)
if (res.object.id != null && res.object.id != '') {
showMore.value = true;
}
proxy.familyInfoTableData = res.object.familyInfoList;
proxy.workInfoTableData = res.object.workExperienceList;
}
});
//图片回显
imageUrl.value = `${sessionStorage.getItem('domainName')}/api-web/bOpsPerson/downloadFile?id=${props.parentNode.id}&access_token=${localStorage.getItem('access_token')}`
}
//点击家庭成员信息的新增按钮事件
let showDiaByType = (flg, type) => {
if (type === 'family') {
//展示新增或编辑页面
familyDiaShow.value = flg;
if (flg === false) {
familyInfoForm.value = {
id: '',
personId: props.parentNode.id, //用户id
name: '', //家庭成员姓名
appellation: '', //家庭成员称谓
place: '', //家庭成员工作单位
position: '', //家庭成员职位
}
}
} else if (type === 'work') {
//展示新增或编辑页面
workDiaShow.value = flg;
if (flg === false) {
workInfoForm.value = {
id: '',
personId: props.parentNode.id, //用户id
place: '', //工作单位
position: '', //职位
startDate: '', //入职日期
endDate: '', //离职日期
}
}
}
}
let seTitleByType = (name, type) => {
if (type === 'family') {
familyDiaTitle.value = name + '家庭成员';
} else if (type === 'work') {
workDiaTitle.value = name + '工作经历';
}
}
//点击家庭成员新增按钮
let addFamilyInfo = (name, type) => {
showDiaByType(true, type);
seTitleByType(name, type);
}
//点击修改按钮
let updateFamilyOrWorkInfo = (row, type) => {
//获取数据
if (type === 'family') {
familyInfoForm.value = {
id: row.id,
personId: props.parentNode.id, //用户id
name: row.name, //家庭成员姓名
appellation: row.appellation, //家庭成员称谓
place: row.place, //家庭成员工作单位
position: row.position, //家庭成员职位
}
} else if (type === 'work') {
workInfoForm.value = {
id: row.id,
personId: props.parentNode.id, //用户id
place: row.place, //工作单位
position: row.position, //职位
startDate: row.startDate, //入职日期
endDate: row.endDate, //离职日期
}
}
addFamilyInfo('编辑', type);
}
/**
* @Author LH
... ... @@ -290,13 +427,13 @@ export default {
* @param callback
* @returns {*}
*/
const checkTel= (rule, value, callback) => {
var re1=/^0\d{2}-[1-9]\d{7}$/;
var re2=/^0\d{3}-[1-9]\{6,7}$/;
var result=re1.test(value)||re2.test(value);
const checkTel = (rule, value, callback) => {
var re1 = /^0\d{2}-[1-9]\d{7}$/;
var re2 = /^0\d{3}-[1-9]\{6,7}$/;
var result = re1.test(value) || re2.test(value);
if (!result && value) {
return callback(new Error('请输入正确的座机号!'))
}else{
} else {
callback()
}
}
... ... @@ -307,42 +444,94 @@ export default {
* @param callback
* @returns {*}
*/
const checkPhone= (rule, tel, callback) => {
var mobile = /^1[0-9]\d{9}$/;
const checkPhone = (rule, tel, callback) => {
var mobile = /^1[0-9]\d{9}$/;
if (tel != '' && !mobile.test(tel)) {
callback(new Error('请输入正确的手机号!'))
} else {
callback();
}
}
const checkIdCard=(rule, idCard, callback) => {
const checkIdCard = (rule, idCard, callback) => {
var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (idCard != '' && !pattern.test(idCard)) {
callback(new Error('身份证校验失败!'));
callback(new Error('身份证校验失败!'));
} else {
callback();
}
}
const validatorDate = (rule, value, callback) => {
return value !== '' ? callback() : callback(new Error(rule.message));
};
/**
* @author LH
* 表单规则校验
*/
let rules=Vue.ref({
let rules = Vue.ref({
nickname: [
{ message: '请输入姓名', trigger: 'blur' }
{required: true, message: '请输入姓名', trigger: 'blur'}
],
sex: [
{required: true, message: '请选择性别', trigger: 'blur'}
],
phone: [
{ validator: checkPhone, trigger: 'blur' }
{required: true, message: '请输入手机号', trigger: 'blur'},
{validator: checkPhone,message: '请输入正确的手机号' , trigger: 'blur'}
],
company: [
{ message:'请输入所在公司', trigger: 'blur' }
{required: true, message: '请输入所在公司', trigger: 'blur'}
],
idcard: [
{ validator:checkIdCard,message:'请输入正确的身份证号', trigger: 'blur'}
{required: true, message: '请输入身份证号', trigger: 'blur'},
{validator: checkIdCard, message: '请输入正确的身份证号', trigger: 'blur'}
],
entryTime: [
{required: true, message: '请选择入职时间', trigger: 'blur'}
],
state: [
{required: true, message: '请选择在职状态', trigger: 'blur'}
],
university: [
{required: true, message: '请输入毕业院校', trigger: 'blur'}
],
education: [
{required: true, message: '请输入学历', trigger: 'blur'}
]
});
let familyOrWorkRules = Vue.ref({
name: [
{required: true, message: '请输入姓名'},
{message: '请输入姓名', trigger: 'blur'}
],
appellation: [
{required: true, message: '请输入称谓'},
{message: '请输入称谓', trigger: 'blur'}
],
place: [
{required: true, message: '请输入工作单位'},
{message: '请输入工作单位', trigger: 'blur'}
],
position: [
{required: true, message: '请输入职位'},
{message: '请输入职位', trigger: 'blur'}
],
startDate: [
{required: true, message: '请选择入职日期'},
{validator: validatorDate, message: '请选择入职日期', trigger: 'blur'}
],
endDate: [
{required: true, message: '请选择离职日期'},
{validator: validatorDate, message: '请选择离职日期', trigger: 'blur'}
],
});
//调用基础页面的左侧树获取接口,刷新左侧树 joke add 20221128
let refreshMainTree = () => {
refreshTree();
}
/**
* @EDITOR LH
... ... @@ -350,36 +539,86 @@ export default {
*/
// 保存用户信息
let saveUser = () => {
proxy.$refs.rule.validate((valid) => {
if (valid) {
console.log('submit!!');
proxy.$http.post("/api-web/bOpsPerson/saveOrUpdate", ruleForm.value, function (res) {
if (res && res.code == 0) {
proxy.$global.showMsg('保存成功!');
if (props.treeNode.map == undefined) {
proxy.$global.showMsg('请先添加业务', 'warning');
emit('showPopout', false)
}
proxy.$refs.rule.validate((valid) => {
if (valid) {
console.log('submit!!');
ruleForm.value.busId = props.treeNode.map.nodeType.projectId;
proxy.$http.post("/api-web/bOpsPerson/saveOrUpdate", ruleForm.value, function (res) {
if (res && res.code == 0) {
proxy.$global.showMsg('保存成功!');
if (props.isAdd){ //新增时
//刷新左侧树
refreshMainTree();
}
});
} else {
console.log('error submit!!');
return false;
}
});
}
emit('showPopout', false)
});
} else {
console.log('error submit!!');
return false;
}
});
}
let saveOrUpdateByType = (type, rules) => {
let msg = '新增';
var data = {};
if (type === 'family') {
if (familyDiaTitle.value.indexOf('新增') == -1) { //表示编辑
msg = '编辑';
}
data = familyInfoForm.value;
} else if (type === 'work') {
if (workDiaTitle.value.indexOf('新增') == -1) { //表示编辑
msg = '编辑';
}
data = workInfoForm.value;
}
rules.validate((valid) => {
if (valid) {
proxy.$http.post("/api-web/bOpsPerson/saveOrUpdateByType?type=" + type, data, function (res) {
if (res && res.success == true) {
proxy.$global.showMsg(msg + '成功!');
showDiaByType(false, type);
refreshTable();
}
});
}
})
}
//删除
let deleteByType = (row, type) => {
proxy.$http.post("/api-web/bOpsPerson/deleteByType?type=" + type + "&ids=" + row.id, {}, function (res) {
if (res && res.success == true) {
proxy.$global.showMsg('删除成功!');
refreshTable();
}
});
}
let getFile = (param) => {
let fileObj = param.file
let params = {
file: fileObj,
id: props.parentNode.id
}
// 上传文件
proxy.$http.uploadFile("/api-web/bOpsPerson/uploadFile", params, function (res) {
if (res && res.success) {
proxy.$global.showMsg("上传成功!");
if (!props.isAdd) {
let fileObj = param.file
let params = {
file: fileObj,
id: props.parentNode.id
}
})
imageUrl.value = URL.createObjectURL(fileObj);
// 上传文件
proxy.$http.uploadFile("/api-web/bOpsPerson/uploadFile", params, function (res) {
if (res && res.success) {
proxy.$global.showMsg("上传成功!");
}
})
imageUrl.value = URL.createObjectURL(fileObj);
} else {
proxy.$global.showMsg("请先添加用户!", "error");
}
}
let beforeAvatarUpload = (file) => {
... ... @@ -411,12 +650,16 @@ export default {
getAssetType,
icon
} = assets(props, {attrs, slots, emit});
let whether = Vue.ref(true);
// // 挂载完
Vue.onMounted(() => {
if (!props.isAdd) {
getPage();
getAssets();
} else {
whether.value = false;
}
getAssetType();
getPage();
getAssets();
})
// 监听编辑状态
... ... @@ -424,6 +667,7 @@ export default {
getAssetType();
getPage();
getAssets();
refreshTable();
});
return {
imageUrl,
... ... @@ -447,6 +691,26 @@ export default {
// 资产属性
icon,
rules,
familyInfoTableData,
addFamilyInfo,
showDiaByType,
seTitleByType,
saveOrUpdateByType,
familyDiaShow,
familyDiaTitle,
familyInfoForm,
deleteByType,
workDiaShow,
workDiaTitle,
workInfoForm,
updateFamilyOrWorkInfo,
familyOrWorkRules,
familyInfoFormRef,
whether,
showMore,
refreshTable,
refreshMainTree,
refreshTree
}
}
}
... ...
... ... @@ -2,7 +2,7 @@
<el-row :gutter="5" >
<el-col :span="4" >
<div class="cm-card" :style="{'min-height':height+'px','max-height':height+'px','height':'100%','overflow-y':'auto','overflow-x':'hidden'}">
<el-tree :data="dataSource" :default-expanded-keys="[1]" :props="defaultProps" >
<el-tree :data="dataSource" accordion :default-expanded-keys="defaultExpandedkeys" node-key="id" :props="defaultProps" >
<template #default="{ node, data }">
<div style=" width: 100%;">
<div style="width: 85%;max-width: 85%;overflow: hidden;text-overflow: ellipsis;text-align: left;" @click="handleNodeClick(data)" :title="node.label">
... ...
... ... @@ -40,10 +40,11 @@ export default {
},
setup() {
const {proxy} = Vue.getCurrentInstance()
const {proxy} = Vue.getCurrentInstance();
let height = Vue.ref(window.innerHeight - 20);
let dataSource = Vue.ref([]);
let componentName = Vue.ref('COLLECT_ALL');
let defaultExpandedkeys = Vue.ref([]);
// 当前点击节点
let treeNode = Vue.ref({});
let parentNode = Vue.ref({});
... ... @@ -53,7 +54,27 @@ export default {
let pageSize = Vue.ref(10)
let canAddFolder = Vue.ref(true);
//刷新左侧树,提供给用户新增页面调用使用 joke add 20221128
let refreshTree = () => {
defaultExpandedkeys.value = [];
reloadTree();
}
Vue.provide("refreshTree", refreshTree);
let reloadTree = () => {
var params = {
username: localStorage.getItem("lgn"),
};
proxy.$http.get("/api-web/bOpsProject/getTree", params, function (res) {
if (res && res.data) {
dataSource.value = res.data;
//设置默认展开节点
defaultExpandedkeys.value = [treeNode.value.id,treeNode.value.parentId,parentNode.value.id,parentNode.value.parentId];
} else {
}
}, function () {
});
}
// 搜索
let getTree = () => {
var params = {
... ... @@ -64,7 +85,12 @@ export default {
proxy.$http.get("/api-web/bOpsProject/getTree", params, function (res) {
if (res && res.data) {
dataSource.value = res.data;
treeNode.value = res.data[0];
if (res.data.length >0){
//默认打开首个项目
defaultExpandedkeys.value = [res.data[0].id];
projectId.value = res.data[0].dataList[0].id;
treeNode.value = res.data[0];
}
} else {
proxy.$global.showMsg('暂无数据!');
}
... ... @@ -110,7 +136,9 @@ export default {
pageSize.value = 10;
}
getParent(dataSource.value, data.parentId);
projectId.value = data.map.nodeType.projectId;
if (data.level==1){
projectId.value = data.map.nodeType.projectId;
}
treeNode.value = data;
componentName.value = comName;
}
... ... @@ -129,7 +157,9 @@ export default {
componentName,
docType,
docTypeName,
canAddFolder
canAddFolder,
refreshTree,
defaultExpandedkeys
};
},
}
... ...