fix: h5工程合并

This commit is contained in:
fanzhuxian
2025-02-26 15:49:13 +08:00
parent 86f41c849f
commit 0bb5cec9a4
217 changed files with 561 additions and 45164 deletions

View File

@@ -10,6 +10,10 @@
// import {
// fieldusing
// } from '@/api/index.js'
import {
getByKey,
refreshCache
} from '@/api/index.js';
export default {
name: 'App',
created() {
@@ -18,6 +22,27 @@
// console.log(String(res))
// })
if(localStorage.getItem('setsystemList')){
this.$store.commit('setsystemList',JSON.parse(localStorage.getItem('setsystemList')))
}
getByKey({
dictKey:'holdSystemList'
}).then(res=>{
if(res.status=='1'){
let arr = res.data.dictValue.split(',').map(value=>{
return {
value : value,
label : value,
data:null
}
})
localStorage.setItem('setsystemList',JSON.stringify(arr))
this.$store.commit('setsystemList',arr)
}
})
}
}
</script>

View File

@@ -14,6 +14,13 @@ export const getLogout = (params) => request.post('Riskmanage/v2/login/logout',p
export const getMenus = (params) => request.post('Riskmanage/v2/sysMenu/getMenus',params)
// 查询首页统计信息
export const getIndexInfo = (params) => request.post('Riskmanage/v2/engine/getIndexInfo',params)
// 查询首页统计信息
export const getByKey = (params) => request.post('Riskmanage/dictionary/getByKey',params)
// 查询首页统计信息
export const refreshCache = (params) => request.post('Riskmanage/dictionary/refreshCache',params)
// 获取调用最多的10条
export const getFieldCallCountList = (params) => request.post('Riskmanage/DataX/statistics/getFieldCallCountList',params)
// 查询模型列表信息
export const getModelsList = (params) => request.post('Riskmanage/models/getModelsList',params)
// 获取组织下全量指标信息
@@ -581,7 +588,12 @@ export const getEventLogDetails = (params) => request.post('/Riskmanage/cignacmb
// ======================================= 获取消息队列============
export const getMqSourceList = (params) => request.post('/Riskmanage/mqSource/getMqSourceList',params)
// 新增list
export const addMqSource = (params) => request.post('/Riskmanage/mqSource/addMqSource',params)
// 修改list
export const updateMqSource = (params) => request.post('/Riskmanage/mqSource/updateMqSource',params)
// 删除list
export const MqupdateStatus = (params) => request.post('/Riskmanage/mqSource/updateStatus',params)
@@ -606,7 +618,12 @@ export const getDataEngineVersionInfo = (params) => request.post('/Riskmanage/v3
export const updateDataEngineVersionInfo = (params) => request.post('/Riskmanage/v3/engineVersionContent/updateEngineVersionContentInfo',params)
// =====================指标统计========================
// 获取指标调用次数
export const getFieldCallList = (params) => request.post('/Riskmanage/DataX/statistics/getFieldCallList',params)
// 获取指标日志
export const getFieldCallLogList = (params) => request.post('/Riskmanage/DataX/statistics/getFieldCallLogList',params)

View File

@@ -0,0 +1,247 @@
<template>
<div style="height: 100%;overflow: scroll;">
<div style="background-color: #fff;border-radius: 10px;padding: 10px;">
<span style="font-size: 20px;font-weight: bold;">
计算指标统计:
</span>
<div>
<div v-for="value in from" style="border-top:1px dotted #ddd;margin-top: 20px;" v-loading="value.loading">
{{value.name}}
<div style="display: flex;justify-content: flex-end;">
<el-input v-model="value.searchKey" placeholder="请输入搜索" size="mini"
style="width: 200px;margin-right: 20px;"></el-input>
<el-date-picker v-model="value.time" type="daterange" range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期" size="mini" style="margin-right: 20px;">
</el-date-picker>
<el-button icon="el-icon-search" circle size="mini" @click="getData(value)"></el-button>
</div>
<div style="display: flex;flex-wrap: wrap;margin: 10px;">
<div v-for="item in value.data">
<div
style="display: flex;font-size: 14px;border-right: 1px solid #ddd;align-items: center;">
<div style="width: 200px;text-align: center;">
<el-button type="text" @click="getlogData(value,item.id)" :disabled="!item.callCount">{{item.fieldCn}}</el-button>
<!-- <el-button type="text" @click="getlogData(value)" :disabled="!item.callCount">{{item.fieldCn}}</el-button> -->
</div>
:
<div style="width: 150px;text-align: center;" >{{item.callCount}}</div>
</div>
</div>
</div>
<div style="display: flex;justify-content: flex-end;padding-right: 20px;padding-top: 20px;">
<el-pagination @size-change="getData(value)" @current-change="getData(value)"
:current-page.sync="value.pageNum" :page-sizes="[10,100, 200, 300, 400]"
:page-size.sync="value.pageSize" layout="sizes, prev, pager, next" :total="value.total">
</el-pagination>
</div>
</div>
</div>
</div>
<el-dialog title="调用日志" :visible.sync="dialogVisible" width="40%" :close-on-click-modal="false"
@close="resetlogfrom">
<div v-loading="logfrom.loading">
<el-table :data="logfrom.data" style="width: 100%">
<el-table-column prop="duration" label="耗时/ms" align="center">
</el-table-column>
<el-table-column prop="createTime" label="调用时间" align="center">
<template slot-scope="scope">
{{new Date(scope.row.createTime).format('yyyy-MM-dd hh:mm:ss')}}
</template>
</el-table-column>
<el-table-column prop="fieldValue" label="调用结果" align="center">
</el-table-column>
<el-table-column prop="address" label="请求参数" align="center">
<template slot-scope="scope">
<el-button type="text" @click="showinputParam(scope.row.inputParam)">查看入参</el-button>
</template>
</el-table-column>
</el-table>
<div style="display: flex;justify-content: flex-end;padding-right: 20px;">
<el-pagination layout="prev, pager, next" :current-page.sync="logfrom.pageNum" @current-change="getlogData(logfrom)" :total="logfrom.total">
</el-pagination>
</div>
<el-dialog width="60%" title="查看入参" :visible.sync="innerVisible" append-to-body @close="inputParam=''">
<div>
<el-input type="textarea" :rows="20" placeholder="" v-model="inputParam" disabled>
</el-input>
</div>
</el-dialog>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {
getFieldCallList,
getFieldCallLogList
} from '@/api/index.js'
const logfromOr = {
"loading":false,
"data": [],
"pageSize": 10,
"pageNum": 1,
"total": 0,
time:[],
fieldType:'',
fieldCn:'',
fieldId:0
}
export default {
data() {
return {
from: [{
"loading":false,
"name": '数据源指标统计:',
"time": [new Date().getTomorrow(-1), new Date()],
"fieldType": 2,
"searchKey": "",
"data": [],
"pageSize": 10,
"pageNum": 1,
"total": 0
},
{
"loading":false,
"name": '接口指标统计:',
"time": [new Date().getTomorrow(-1), new Date()],
"fieldType": 4,
"searchKey": "",
"data": [],
"pageSize": 10,
"pageNum": 1,
"total": 0
},
{
"loading":false,
"name": '衍生指标统计:',
"time": [new Date().getTomorrow(-1), new Date()],
"fieldType": 3,
"searchKey": "",
"data": [],
"pageSize": 10,
"pageNum": 1,
"total": 0
},
],
logfrom: Object.assign({}, JSON.parse(JSON.stringify(logfromOr))),
dialogVisible: false,
inputParam: '',
innerVisible: false
}
},
created() {
this.from.forEach(value => {
this.getData(value)
})
},
methods: {
resetlogfrom() {
this.logfrom = Object.assign({}, JSON.parse(JSON.stringify(logfromOr)))
},
getData(param) {
param.loading = true
getFieldCallList({
"entity": {
"queryTimeStart": new Date(param.time[0]),
"queryTimeEnd": new Date(param.time[1]),
"fieldType": param.fieldType,
"searchKey": param.searchKey
},
"pageSize": param.pageSize,
"pageNum": param.pageNum
}).then(res => {
if (res.status == '1') {
param.total = res.data.total
param.data = res.data.list
}
param.loading = false
})
},
showinputParam(inputParam) {
// console.log(inputParam)
this.inputParam = JSON.stringify(JSON.parse(inputParam), null, 4)
// console.log(this.inputParam)
this.innerVisible = true
},
getlogData(param,id) {
console.log(param)
this.dialogVisible = true
this.logfrom.loading=true
getFieldCallLogList({
"entity": {
"queryTimeStart": new Date(param.time[0]),
"queryTimeEnd": new Date(param.time[1]),
"fieldType": param.fieldType,
"fieldId":id
},
"pageSize": this.logfrom.pageSize,
"pageNum": this.logfrom.pageNum
}).then(res => {
if (res.status == '1') {
this.logfrom.total = res.data.total
this.logfrom.data = res.data.list
this.logfrom.time = JSON.parse(JSON.stringify(param.time))
this.logfrom.fieldType = param.fieldType
this.logfrom.fieldCn = param.fieldCn
this.logfrom.fieldId = id
}
this.logfrom.loading=false
})
}
}
}
</script>
<style>
</style>

View File

@@ -0,0 +1,300 @@
<template>
<div>
<div style="padding-top: 20px;">
<el-button type="primary" @click="add">添加队列</el-button>
<el-select v-model="search.type" placeholder="请选择队列类型" style="margin-left: 20px;">
<el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
<el-table :data="list" border style="width: 100%;margin-top: 20px;" v-loading="loading">
<el-table-column prop="name" label="name" align="center">
</el-table-column>
<el-table-column prop="type" label="类型" align="center">
</el-table-column>
<el-table-column prop="serverAddrs" label="serverAddrs" align="center">
</el-table-column>
<el-table-column prop="groupId" label="groupId" align="center">
</el-table-column>
<el-table-column prop="topic" label="topic" align="center">
</el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center">
<template slot-scope="scope">
{{new Date(scope.row.createTime).format('yyyy-MM-dd hh:mm:ss')}}
</template>
</el-table-column>
<el-table-column prop="" label="操作" align="center">
<template slot-scope="scope">
<div style="display: flex;justify-content: center;">
<el-button type="primary" icon="el-icon-edit" circle size="mini" @click="update(scope.row)">
</el-button>
<el-button type="danger" icon="el-icon-delete" circle size="mini"
@click="deleteMq(scope.row.id)"></el-button>
</div>
</template>
</el-table-column>
</el-table>
<div style="display: flex;justify-content: flex-end;padding-top: 20px;padding-right: 20px;">
<el-pagination background layout="prev, pager, next" :current-page.sync="pageNum" :total="total"
@current-change="getList">
</el-pagination>
</div>
<el-dialog title="添加/修改" :visible.sync="dialogVisible" v-if="dialogVisible" width="800px" @close="close">
<div v-loading="dialogLoading">
<el-form ref="form" :model="form" label-width="120px" :rules="rules">
<el-form-item label="name" prop="name">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="serverAddrs" prop="serverAddrs">
<el-input v-model="form.serverAddrs"></el-input>
</el-form-item>
<el-form-item label="groupId" prop="groupId">
<el-input v-model="form.groupId"></el-input>
</el-form-item>
<el-form-item label="topic" prop="topic">
<el-input v-model="form.topic"></el-input>
</el-form-item>
<el-form-item label="messageBody" prop="messageBody">
<div style="overflow: hidden;position: relative;line-height: 16px;">
<codemirror v-model="form.messageBody" MYname="json" mime="text/javascript"
:autocomplete="false">
</codemirror>
</div>
</el-form-item>
</el-form>
<div style="display: flex;justify-content: flex-end;">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogCallBack"> </el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import codemirror from '@/components/common/codemirror.vue'
import {
getMqSourceList,
addMqSource,
updateMqSource,
MqupdateStatus,
} from '@/api/index.js'
const formOr = {
id: '',
name: '',
type: 'kafka',
serverAddrs: '',
groupId: '',
topic: '',
messageBody: ''
}
export default {
components: {
codemirror
},
data() {
return {
list: [],
pageNum: 1,
total: 0,
dialogVisible: false,
loading: false,
dialogLoading: false,
typeList: [{
label: 'kafka',
value: 'kafka'
}],
codeKey: 0,
search: {
type: 'kafka'
},
rules: {
name: [{
required: true,
message: '请输入name',
trigger: 'blur'
}, ],
serverAddrs: [{
required: true,
message: '请输入serverAddrs',
trigger: 'blur'
}, ],
groupId: [{
required: true,
message: '请输入groupId',
trigger: 'blur'
}, ],
topic: [{
required: true,
message: '请输入topic',
trigger: 'blur'
}, ],
messageBody: [{
required: true,
message: '请输入messageBody',
trigger: 'blur'
}, ],
},
form: JSON.parse(JSON.stringify(formOr)),
dialogCallBack: () => {}
}
},
created() {
this.getList()
},
methods: {
deleteMq(id) {
this.$confirm('确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'error'
}).then(() => {
MqupdateStatus({
ids: id,
status: -1
}).then(res => {
if (res.status == '1') {
this.getList()
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
close() {
this.form = JSON.parse(JSON.stringify(formOr))
this.dialogCallBack = () => {}
},
update(item) {
this.form = {
id: item.id,
name: item.name,
type: item.type,
serverAddrs: item.serverAddrs,
groupId: item.groupId,
topic: item.topic,
messageBody: JSON.stringify(JSON.parse(item.messageBody),null,4),
}
this.dialogVisible = true
this.dialogCallBack = () => {
if (this.verify()) {
return
}
this.dialogLoading = true
updateMqSource(this.form).then(res => {
if (res.status == '1') {
this.dialogVisible = false
this.getList()
}
this.dialogLoading = false
})
}
},
add() {
this.dialogVisible = true
this.form.type = this.search.type
this.dialogCallBack = () => {
if (this.verify()) {
return
}
delete this.form.id
this.dialogLoading = true
addMqSource(this.form).then(res => {
if (res.status == '1') {
this.dialogVisible = false
this.getList()
}
this.dialogLoading = false
})
}
},
verify() {
let is = {
is: false,
msg: ''
}
if(!this.isJSON(this.form.messageBody)){
is.is = true
is.msg = 'messageBody必须为JSON对象'
}
if (!this.form.messageBody || this.form.messageBody.trim() === '') {
is.is = true
is.msg = '请输入messageBody'
}
if (!this.form.topic || this.form.topic.trim() === '') {
is.is = true
is.msg = '请输入topic'
}
if (!this.form.groupId || this.form.groupId.trim() === '') {
is.is = true
is.msg = '请输入groupId'
}
if (!this.form.serverAddrs || this.form.serverAddrs.trim() === '') {
is.is = true
is.msg = '请输入serverAddrs'
}
if (!this.form.type || this.form.type.trim() === '') {
is.is = true
is.msg = '请输入队列类型'
}
if (!this.form.name || this.form.name.trim() === '') {
is.is = true
is.msg = '请输入name'
}
if (is.is) {
this.$message.error(is.msg)
}
return is.is
},
getList() {
this.loading = true
getMqSourceList({
pageNum: this.pageNum,
pageSize: 10
}).then(res => {
if (res.status == 1) {
this.list = res.data.list
this.total = res.data.total
}
this.loading = false
})
}
}
}
</script>
<style>
</style>

View File

@@ -0,0 +1,129 @@
<template>
<div>
<cont title="实时指标" :getData="getDataFun"></cont>
</div>
</template>
<script>
import cont from '@/components/common/cont.vue'
import {
getfieldList,addfieldList,getfieldListTree,updatafieldList,getfieldsave,getfieldInfo,updatafield,fieldusing,fielddownTemplate,fieldupdata
} from '@/api/index.js'
export default {
name:'SQLManage',
components: {
cont
},
data() {
return {
getDataFun: {
type:6,
row: [ {
label: '序号',
row: 'id'
}, {
label: '字段名称',
row: 'fieldEn'
}, {
label: '字段中文名',
row: 'fieldCn'
}, {
label: '消息队列类型',
row: 'mqSourceId',
fn:(res)=>{
let obj = this.$store.state.Mqlist.find(x=>x.id==res)
return obj&&obj.type
},
}, {
label: '字段类型',
row: 'valueType',
type:'type'
}, {
label: '状态',
row: 'status',
type:'State'
}, {
label: '创建人',
row: 'nickName'
},{
label: '创建时间',
row: 'created',
type:'Time'
},],
redact:"dataManageRedact",
async getTree(e){
return await getfieldListTree(e).then(res => {
return res
})
},
async getlist(e) {
e.fType = 6
return await getfieldList(e).then(res => {
return res
})
},
async addlist(e) {
return await addfieldList(e).then(res => {
return res
})
},
async updatalist(e) {
return await updatafieldList(e).then(res => {
return res
})
},
async setsave(e) {
return await getfieldsave(e).then(res => {
return res
})
},
async getInfo(e){
return await getfieldInfo(e).then(res=>{
return res
})
},
async updatafield(e){
return await updatafield(e).then(res=>{
return res
})
},
async fieldusing(e){
return await fieldusing(e).then(res=>{
return res
})
},
async down(e){
return await fielddownTemplate(e).then(res=>{
return res
})
},
async fieldsubmit(e){
return await fieldupdata(e).then(res=>{
return res
})
}
},
};
}
};
</script>
<style>
</style>

View File

@@ -154,7 +154,81 @@ export default new Router({
path: '/403',
component: () => import('../components/page/403.vue'),
meta: { title: '403' }
}
},
// ---
{
path:'/userManagement',
component: () => import('../components/page/systemManagement/userManagement.vue'),
meta: { title: '用户管理' }
},
{
path:'/roleManagement',
component: () => import('../components/page/systemManagement/roleManagement.vue'),
meta: { title: '角色管理' }
},
{
path:'/resourceManagement',
component: () => import('../components/page/systemManagement/resourceManagement.vue'),
meta: { title: '资源管理' }
},
{
path:'/organizationManagement',
component: () => import('../components/page/systemManagement/organizationManagement.vue'),
meta: { title: '组织管理' }
},
//
{
path: '/dataManage',
component: () => import('../components/page/Datamanage.vue'),
meta: { title: '基础指标' }
},
{
path: '/staticManage',
component: () => import('../components/page/staticManage.vue'),
meta: { title: '常量指标' }
},
{
path: '/SQLmanage',
component: () => import('../components/page/SQLManage.vue'),
meta: { title: '数据库指标' }
},{
path: '/realTimeManage',
component: () => import('../components/page/realTimeManage.vue'),
meta: { title: '实时指标' }
},
{
path: '/derivemanage',
component: () => import('../components/page/DeriveManage.vue'),
meta: { title: '衍生指标' }
},
{
path: '/portManage',
component: () => import('@/components/page/portManage.vue'),
meta: {title: '接口指标'}
},
{
path: '/DataSource',
component: () => import('@/components/page/DataSource.vue'),
meta: {title: '数据库源'}
},
{
path: '/portSource',
component: () => import('@/components/page/portSource.vue'),
meta: {title: '接口源'}
},
{
path: '/MqSource',
component: () => import('@/components/page/MqSource.vue'),
meta: {title: '消息队列源'}
},
{
path: '/FieldStatistics',
component: () => import('@/components/page/FieldStatistics.vue'),
meta: {title: '指标统计'}
},
]
},

View File

@@ -175,8 +175,10 @@ export default new Vuex.Store({
value: 'timesOrMore',
valueType:1
},
]
],
// ----
systemList:[]
@@ -226,7 +228,10 @@ export default new Vuex.Store({
state.FieldUserObj = res
localStorage.setItem("fielduserObj", JSON.stringify(res))
}
},
setsystemList(state, res) {
state.systemList = res
},
},
actions: {
getcache(context, str) {

View File

@@ -24,7 +24,10 @@ export default {
},
Sourcelist() {
return this.$store.state.Sourcelist ? this.$store.state.Sourcelist:[]
}
},
systemList(){
return this.$store.state.systemList
}
},
mounted() {},
methods: {
@@ -252,7 +255,22 @@ export default {
return num &&num.fieldCode
}
},
isJSON(str) {
if (typeof str == 'string') {
try {
var obj = JSON.parse(str);
if (typeof obj == 'object' && obj) {
return true;
} else {
return false;
}
} catch (e) {
return false;
}
}
},
}
})
}

View File

@@ -70,18 +70,18 @@ const storeUrl = [{
'/datamanage/listmanage/upload/'
]
},
// {
// regetcache: 'listOperation',
// url: [
// '/v3/listOperation/addListOperation',
// '/v3/listOperation/updateListOperation',
// '/v3/listOperation/updateListOperationStatus',
// '/v3/listOperation/version/addVersion',
// '/v3/listOperation/version/copyVersion',
// '/v3/listOperation/version/updateVersion',
// '/v3/listOperation/version/updateVersionStatus',
// ]
// },
{
regetcache: 'listOperation',
url: [
'/v3/listOperation/addListOperation',
'/v3/listOperation/updateListOperation',
'/v3/listOperation/updateListOperationStatus',
'/v3/listOperation/version/addVersion',
'/v3/listOperation/version/copyVersion',
'/v3/listOperation/version/updateVersion',
'/v3/listOperation/version/updateVersionStatus',
]
},