Commit ad6b8373 authored by wends's avatar wends

replace object to data

parent b3e350e2
import request from '@/utils/request'
// const baseURL = process.env.VUE_APP_BASE_API
const baseURL = ''
// 获取数据集列表-分页
export function getDatasetList(data) {
return request({
url: `${baseURL}/cc/linque/getDatasetList`,
method: 'post',
data
})
}
// 获取数据集详情
export function getDatasetDetail(data) {
return request({
url: `${baseURL}/cc/linque/getDatasetDetail`,
method: 'post',
data
})
}
// 创建数据集
export function addDataset(data) {
return request({
url: `${baseURL}/cc/linque/addDataset`,
method: 'post',
data
})
}
......@@ -69,7 +69,7 @@ const routes = [
{
path: '/',
component: Common,
redirect: '/object-management/object-model'
redirect: '/data-management/data-model'
}
]
if (settings.overview) {
......@@ -98,14 +98,14 @@ export const constantRoutes = routes
import systemManagement from './modules/systemManagement'
// 租户管理
import tenantManagement from './modules/tenantManagement'
// 管理
import objectManagement from './modules/objectManagement'
// 可视
import objectVisible from './modules/objectVisibleManagement'
// 数据管理
import dataManagement from './modules/dataManagement'
// 数据可视
import dataVisible from './modules/dataVisibleManagement'
export const asyncRoutes = [
objectManagement,
objectVisible,
dataManagement,
dataVisible,
systemManagement,
tenantManagement,
// 404 page must be placed at the end !!!
......
import Common from '@/layout/common/index'
const router = {
menuId: 'DataMgr',
path: '/data-management',
name: '数据管理',
component: Common,
redirect: '/data-management/data-model',
meta: { title: '数据管理', icon: 'data-mgr' },
alwaysShow: true,
children: [
{
menuId: 'DataModel',
path: 'data-model',
name: '数据模型',
component: () => import('@/views/data-management/model-management'),
meta: { title: '数据模型', icon: 'data-model' }
},
{
menuId: 'DataInstance',
path: 'object-instance',
name: '数据实例',
component: () => import('@/views/data-management/instance-management'),
meta: { title: '数据实例', icon: 'data-instance' }
}
]
}
export default router
import Common from '@/layout/common/index'
const router = {
menuId: 'ObjectVisible',
path: '/object-visible',
name: '可视',
menuId: 'DataVisible',
path: '/data-visible',
name: '数据可视',
component: Common,
redirect: '/object-visible/dashboard',
meta: { title: '物可视', icon: 'object-visible' },
redirect: '/data-visible/dashboard',
meta: { title: '数据可视', icon: 'data-visible' },
alwaysShow: true,
children: [
{
menuId: 'DashBoard',
path: 'dashboard',
name: '仪表盘',
component: () => import('@/views/object-visible/dashboard'),
component: () => import('@/views/data-visible/dashboard'),
meta: { title: '仪表盘', icon: 'dashboard' }
}
]
......
import Common from '@/layout/common/index'
const router = {
menuId: 'DatasetMgr',
path: '/dataset-management',
name: '数据管理',
component: Common,
redirect: '/dataset-management/mine-dataset',
meta: { title: '数据管理', icon: 'dataMgr' },
alwaysShow: true,
children: [
{
menuId: 'DatasetMgrMine',
path: 'mine-dataset',
name: '我的数据',
component: () => import('@/views/dataset-management/mine-dataset'),
meta: { title: '我的数据', icon: 'my-data' }
},
{
menuId: 'DatasetMgrDetail',
path: 'dataset-detail',
name: '数据详情',
hidden: true,
component: () => import('@/views/dataset-management/dataset-detail'),
meta: { title: '数据详情', icon: 'tenant' }
},
{
menuId: 'DatasetMgrUpload',
path: 'upload-dataset',
name: '上传数据',
hidden: true,
component: () => import('@/views/dataset-management/upload-dataset'),
meta: { title: '上传数据', icon: 'tenant' }
}
]
}
export default router
import Common from '@/layout/common/index'
const router = {
menuId: 'ObjectMgr',
path: '/object-management',
name: '物管理',
component: Common,
redirect: '/object-management/object-model',
meta: { title: '物管理', icon: 'object-mgr' },
alwaysShow: true,
children: [
{
menuId: 'ObjectModel',
path: 'object-model',
name: '物模型',
component: () => import('@/views/object-management/model-management'),
meta: { title: '物模型', icon: 'object-model' }
},
{
menuId: 'DatasetMgrMine',
path: 'object-instance',
name: '物实例',
component: () => import('@/views/object-management/instance-management'),
meta: { title: '物实例', icon: 'object-instance' }
}
]
}
export default router
......@@ -156,8 +156,8 @@
</template>
<script>
import { listModel } from '@/api/object-management/model-management'
import { listInstance, addInstance, editInstance, deleteInstance } from '@/api/object-management/instance-management'
import { listModel } from '@/api/data-management/model-management'
import { listInstance, addInstance, editInstance, deleteInstance } from '@/api/data-management/instance-management'
export default {
name: 'ObjectModel',
props: {},
......
......@@ -168,7 +168,7 @@
<script>
import dictionary from '@/utils/dictionary'
import { addModel, getModelDetail, editModel } from '@/api/object-management/model-management'
import { addModel, getModelDetail, editModel } from '@/api/data-management/model-management'
export default {
name: 'AddOrUpdate',
mixins: [dictionary],
......
......@@ -72,7 +72,7 @@
<script>
import dictionary from '@/utils/dictionary'
import { getModelDetail, deleteModel } from '@/api/object-management/model-management'
import { getModelDetail, deleteModel } from '@/api/data-management/model-management'
export default {
name: 'Details',
mixins: [dictionary],
......
......@@ -96,9 +96,9 @@
</template>
<script>
import Details from '@/views/object-management/model-management/detail'
import AddOrUpdate from '@/views/object-management/model-management/AddOrUpdate'
import { listModel } from '@/api/object-management/model-management'
import Details from '@/views/data-management/model-management/detail'
import AddOrUpdate from '@/views/data-management/model-management/AddOrUpdate'
import { listModel } from '@/api/data-management/model-management'
export default {
name: 'ObjectModel',
components: {
......
......@@ -87,7 +87,7 @@
<script>
import ELine from '@/components/Charts/ELine'
import { getAllModel, getModelDetail, getModelInstanceList, getModelInstanceChart } from '@/api/object-visible/dashboard'
import { getAllModel, getModelDetail, getModelInstanceList, getModelInstanceChart } from '@/api/data-visible/dashboard'
export default {
name: 'Dashboard',
......
<template>
<div>
<el-card>
<el-page-header
:content="datasetName"
@back="goBack"
/>
</el-card>
<el-card class="margin-top-20">
<div class="buttons-group margin-bottom-20">
<el-button type="primary" icon="el-icon-plus" @click="addRow">上传数据</el-button>
</div>
<el-table
:data="datasetDetailList"
border
>
<el-table-column
type="index"
label="序号"
width="50px"
align="center"
/>
<el-table-column
v-for="(column, index) in tableColumnList"
:key="index"
:prop="column.name"
:label="column.name"
/>
<el-table-column
v-if="tableColumnList.length === 0"
prop="prop"
label="属性"
align="center"
/>
</el-table>
<el-pagination
class="margin-top-20 text-align-right"
:current-page="pageForm.pageNum"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageForm.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-card>
</div>
</template>
<script>
import { getDatasetDetail } from '@/api/dataset-management/mine-dataset'
export default {
name: 'DatasetDetail',
props: {},
data() {
return {
searchForm: {
input: null,
status: null
},
add: true,
dialogVisible: false,
addForm: {
input: null,
status: null
},
pageForm: {
pageSize: 10,
pageNum: 1,
total: 0
},
datasetName: '',
datasetId: '',
tableColumnList: [],
datasetDetailList: []
}
},
created() {
this.datasetName = this.$route.query.datasetName
this.datasetId = this.$route.query.id
this.getDatasetDetail(this.datasetId, 1)
},
mounted() {},
methods: {
getDatasetDetail(id, pageNum) {
getDatasetDetail(id, pageNum)
.then(res => {
const { records, totalSize } = res.data
if (records.length > 0) {
for (const key in records[0]) {
this.tableColumnList.push({
name: key
})
}
this.datasetDetailList = records
}
this.pageForm = {
...this.pageForm,
pageNum,
total: totalSize
}
})
},
goBack() {
this.$router.push({ path: '/dataset-management/mine-dataset' })
},
resetForm() {
this.$refs.searchForm.resetFields()
},
addRow() {
this.$router.push({ path: '/dataset-management/upload-dataset', query: { id: this.datasetId, datasetName: this.datasetName }})
},
handleSizeChange(val) {
this.pageForm.pageSize = val
this.getDatasetDetail(1)
},
handleCurrentChange(val) {
this.pageForm.pageNum = val
this.getDatasetDetail(val)
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<el-card class="no-bottom">
<el-form
ref="searchForm"
:model="searchForm"
label-width="120px"
inline
@submit.native.prevent
>
<el-form-item
label="数据集名称:"
prop="datasetName"
>
<el-input v-model="searchForm.datasetName" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getDatasetList(1)">查询</el-button>
<el-button icon="el-icon-refresh" @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="margin-top-20">
<div class="buttons-group margin-bottom-20">
<el-button type="primary" icon="el-icon-plus" @click="addRow">创建数据集</el-button>
</div>
<el-table
:data="datasetList"
border
>
<el-table-column
type="index"
label="序号"
width="50px"
align="center"
/>
<el-table-column
prop="datasetName"
label="数据集名称"
/>
<el-table-column
prop="type"
label="数据类型"
:formatter="datasetType"
/>
<el-table-column
prop="status"
label="设备状态"
:formatter="datasetStatus"
/>
<el-table-column
prop="amount"
label="数据量"
/>
<el-table-column
prop="createTime"
label="创建时间"
:formatter="$moment"
/>
<el-table-column
prop="updateTime"
label="更新时间"
:formatter="$moment"
/>
<el-table-column
label="操作"
width="140px"
align="center"
>
<template slot-scope="props">
<el-button type="text" @click="routerPush(props.row)">查看</el-button>
<el-button type="text" @click="uploadData(props.row)">上传</el-button>
<el-popconfirm
title="确定要删除此条记录吗?"
@onConfirm="deleteItem(props.row.id)"
>
<el-button slot="reference" type="text" style="margin-left: 10px">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination
class="margin-top-20 text-align-right"
:current-page="pageForm.pageNum"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageForm.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-card>
<el-dialog
:title="add ? '新建数据集' : '编辑数据集'"
:visible.sync="dialogVisible"
width="700px"
>
<el-form
v-if="dialogVisible"
ref="addForm"
:model="addForm"
label-width="120px"
:rules="rules"
>
<el-form-item
label="数据类型:"
prop="type"
>
<el-radio-group v-model="addForm.type">
<el-radio :label="1">数据表</el-radio>
<el-radio :label="2" disabled>图片</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label="数据集名称:"
prop="datasetName"
>
<el-input v-model="addForm.datasetName" />
</el-form-item>
<el-form-item
label="备注:"
>
<el-input
v-model="addForm.info"
type="textarea"
:rows="2"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="saveSystem">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getDatasetList, addDataset } from '@/api/dataset-management/mine-dataset'
export default {
name: 'MineDataset',
props: {},
data() {
return {
searchForm: {
datasetName: null
},
add: true,
dialogVisible: false,
datasetList: [],
addForm: {
type: 1,
datasetName: null,
info: null
},
pageForm: {
pageSize: 10,
pageNum: 1,
total: 0
},
rules: {
type: [
{ required: true, message: '请选择类型', trigger: 'blur' }
],
datasetName: [
{ required: true, message: '请输入数据集名称', trigger: 'blur' }
]
}
}
},
created() {
this.getDatasetList(1)
},
mounted() {},
methods: {
uploadData(row) {
this.$router.push({ path: '/dataset-management/upload-dataset', query: { id: row.id, datasetName: row.datasetName }})
},
routerPush(row) {
this.$router.push({ path: '/dataset-management/dataset-detail', query: { id: row.id, datasetName: row.datasetName }})
},
datasetType(row, column, cellValue, index) {
const data = {
1: '数据表'
}
return data[cellValue]
},
datasetStatus(row, column, cellValue, index) {
const data = {
1: '成功',
2: '暂无'
}
return data[cellValue]
},
getDatasetList(pageNum) {
const params = {
...this.searchForm,
pageNum,
pageSize: this.pageForm.pageSize
}
getDatasetList(params)
.then(res => {
const { records, totalSize } = res.data
this.datasetList = records
this.pageForm = {
...this.pageForm,
pageNum,
total: totalSize
}
})
},
resetForm() {
this.$refs.searchForm.resetFields()
},
addRow() {
this.add = true
this.dialogVisible = true
},
editItem() {
this.add = false
this.dialogVisible = true
},
deleteItem(id) {},
saveSystem() {
this.$refs.addForm.validate()
.then(_ => {
const params = {
...this.addForm
}
addDataset(params)
.then(_ => {
this.$message.success('创建成功')
this.getDatasetList(this.pageForm.pageNum)
this.dialogVisible = false
})
.catch(err => {
console.error(err)
this.$message.error('遇到问题,请稍后重试')
})
})
.catch(_ => {})
},
handleSizeChange(val) {
this.pageForm.pageSize = val
this.getTableData(1)
},
handleCurrentChange(val) {
this.pageForm.pageNum = val
this.getTableData(val)
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div style="padding: 20px">
<el-table
:data="data"
border
>
<el-table-column
v-for="(column, index) in dataHeader"
:key="index"
:prop="column.prop"
:label="column.label"
min-width="200"
show-overflow-tooltip
>
<template slot="header">
<div v-if="!column.edit">
<el-checkbox v-model="column.checked" />
{{ column.label }}
<el-button
icon="el-icon-edit"
size="mini"
type="text"
@click="column.edit = true"
/>
</div>
<div v-if="column.edit" style="display: flex">
<el-input v-model="column.label" size="mini" />
<el-button
icon="el-icon-check"
size="mini"
type="text"
@click="column.edit = false"
/>
</div>
<div style="padding-top: 5px">
<el-select v-model="column.type" size="mini">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</template>
</el-table-column>
</el-table>
<div style="text-align: center;margin-top: 20px">
<el-button @click="prev">上一步</el-button>
<el-button type="primary" @click="next">完成</el-button>
</div>
</div>
</template>
<script>
export default {
name: 'PreSetData',
props: {
results: {
type: Object,
default: () => {
return {
data: [],
errors: [],
meta: {
fields: [],
delimiter: ''
}
}
}
}
},
data() {
return {
data: [],
dataHeader: [],
options: [
{
value: 1,
label: 'TINYINT'
},
{
value: 2,
label: 'SMALLINT'
},
{
value: 3,
label: 'MEDIUMINT'
},
{
value: 4,
label: 'INT'
},
{
value: 5,
label: 'BIGINT'
},
{
value: 6,
label: 'FLOAT'
},
{
value: 7,
label: 'DOUBLE'
},
{
value: 8,
label: 'DECIMAL'
},
{
value: 9,
label: 'DATE'
},
{
value: 10,
label: 'TIME'
},
{
value: 11,
label: 'YEAR'
},
{
value: 12,
label: 'DATETIME'
},
{
value: 13,
label: 'TIMESTAMP'
},
{
value: 14,
label: 'CHAR'
},
{
value: 15,
label: 'VARCHAR'
},
{
value: 16,
label: 'TINYBLOB'
},
{
value: 17,
label: 'TINYTEXT'
},
{
value: 18,
label: 'BLOB'
},
{
value: 19,
label: 'TEXT'
},
{
value: 20,
label: 'MEDIUMBLOB'
},
{
value: 21,
label: 'MEDIUMTEXT'
},
{
value: 22,
label: 'LONGBLOB'
},
{
value: 23,
label: 'LONGTEXT'
}
]
}
},
created() {
this.data = this.results.data
this.results.meta.fields.forEach(v => {
this.dataHeader.push({
label: v,
prop: v,
checked: true,
edit: false,
type: 14
})
})
},
methods: {
prev() {
this.$emit('prev')
},
next() {
this.$emit('next')
}
}
}
</script>
<style scoped>
</style>
<template>
<div class="div-container">
<el-form
ref="form"
:model="form"
label-width="120px"
:rules="rules"
>
<el-form-item label="上传选项:" prop="uploadType">
<el-radio-group v-model="form.uploadType">
<el-radio-button :label="1">追加</el-radio-button>
<el-radio-button :label="2">替换</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="上传方式:" prop="uploadData">
<el-upload
action=""
:before-upload="beforeUpload"
:http-request="httpRequest"
>
<div slot="tip" class="el-upload__tip">只能上传excel、cvs、json文件,且不超过500kb</div>
<el-button>点击上传<i class="el-icon-upload el-icon--right" /></el-button>
</el-upload>
</el-form-item>
<el-form-item label="列分隔符:" prop="delimiterType">
<el-radio-group v-model="form.delimiterType">
<el-radio-button :label="1">半角逗号</el-radio-button>
<el-radio-button :label="2">空格</el-radio-button>
<el-radio-button :label="3">分号</el-radio-button>
<el-radio-button :label="4">自定义</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
v-if="form.delimiterType === 4"
prop="delimiter"
:rules="delimiterRule"
>
<el-input v-model="form.delimiter" style="width: 200px" />
</el-form-item>
<el-form-item label="是否有表头:" prop="header">
<el-radio-group v-model="form.header">
<el-radio-button :label="1"></el-radio-button>
<el-radio-button :label="2"></el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="编码格式:" prop="code">
<el-radio-group v-model="form.code">
<el-radio-button :label="1">UTF-8</el-radio-button>
<el-radio-button :label="2">GBK</el-radio-button>
</el-radio-group>
</el-form-item>
</el-form>
<div style="text-align: center;margin-top: 20px">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="next">下一步</el-button>
</div>
</div>
</template>
<script>
import Papa from 'papaparse'
export default {
name: 'UploadData',
data() {
return {
form: {
uploadType: null,
uploadData: null,
delimiterType: null,
delimiter: null,
header: null,
code: null
},
rules: {
uploadType: [
{ required: true, message: '请选择上传选项', trigger: 'change' }
],
uploadData: [
{ required: true, message: '请选择数据文件', trigger: 'change' }
],
delimiterType: [
{ required: true, message: '请选择列分隔符', trigger: 'change' }
],
header: [
{ required: true, message: '请选择表头', trigger: 'change' }
],
code: [
{ required: true, message: '请选择编码格式', trigger: 'change' }
]
},
delimiterType: {
1: ',',
2: ' ',
3: ';',
4: null
},
results: {}
}
},
computed: {
delimiterRule() {
if (this.form.delimiterType === 4) {
return [
{ required: true, message: '请填写列分隔符', trigger: 'blur' }
]
} else {
return []
}
}
},
methods: {
cancel() {
this.$emit('cancel')
},
next() {
const params = {
...this.form
}
if (params.delimiterType !== 4) {
params.delimiter = null
}
this.$refs.form.validate()
.then(_ => this.$emit('next', {
type: 'upload-data',
params,
results: this.results
}))
.catch(_ => {})
},
beforeUpload(file) {
Papa.parse(file, {
delimiter: this.delimiterType[this.form.delimiterType],
header: this.form.header === 1,
encoding: (this.form.code === 1) ? 'utf-8' : 'gbk',
complete: (results) => {
console.log(results)
this.results = results
}
})
this.form.uploadData = file.name
},
httpRequest() {}
}
}
</script>
<style scoped lang="scss">
.div-container{
width: 600px;
margin: 20px auto;
}
</style>
<template>
<div>
<el-card>
<el-page-header
:content="datasetName"
@back="goBack"
/>
</el-card>
<el-card class="margin-top-20 no-bottom">
<el-steps :active="active" finish-status="success">
<el-step title="上传数据" />
<el-step title="数据预处理" />
<el-step title="完成" />
</el-steps>
<upload-data
v-show="active === 0"
@cancel="onCancel"
@next="onNext"
/>
<pre-set-data
v-if="active === 1"
:results="results"
@prev="onPrev"
@next="onNext"
/>
<div v-if="active === 2">
<div class="step-three">
<div class="icon">
<i class="el-icon-success" />
</div>
<div class="info">
<div class="h1">上传成功</div>
</div>
<div class="buttons-group">
<el-button type="primary" @click="onFinish">回到列表</el-button>
<el-button @click="goDetail">查看数据</el-button>
</div>
<div class="result-content">
<div class="row">
<div class="label">数据集名称:</div>
<div class="content">金融风控_3</div>
</div>
<div class="row">
<div class="label">数据类型:</div>
<div class="content" />
</div>
<div class="row">
<div class="label">数据名称:</div>
<div class="content" />
</div>
<div class="row">
<div class="label">数据量:</div>
<div class="content" />
</div>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
import UploadData from '@/views/dataset-management/upload-dataset/UploadData'
import PreSetData from '@/views/dataset-management/upload-dataset/PreSetData'
export default {
name: 'UploadDataset',
components: {
UploadData,
PreSetData
},
data() {
return {
active: 0,
datasetName: '',
datasetId: '',
results: {}
}
},
created() {
this.datasetName = this.$route.query.datasetName
this.datasetId = this.$route.query.id
},
methods: {
goBack() {
this.$router.go(-1)
},
onCancel() {
this.$router.go(-1)
},
onNext(data) {
if (data.type === 'upload-data') {
this.results = data.results
}
this.active++
},
onPrev() {
this.active--
},
onFinish() {
this.$router.go(-1)
},
goDetail() {
this.$router.push({ path: '/dataset-management/dataset-detail', query: { id: this.datasetId, datasetName: this.datasetName }})
}
}
}
</script>
<style scoped lang="scss">
.step-three{
width: 600px;
margin: 20px auto;
text-align: center;
.icon{
i{
font-size: 150px;
color: #52c41a;
}
}
.info{
.h1{
color: rgba(0,0,0,.85);
font-size: 24px;
line-height: 1.8;
text-align: center;
}
}
.buttons-group{
text-align: center;
margin-top: 40px;
}
.result-content{
margin-top: 24px;
padding: 24px 40px;
background-color: #fafafa;
text-align: left;
.row{
display: flex;
padding-bottom: 16px;
color: rgba(0,0,0,.85);
font-weight: 400;
font-size: 14px;
line-height: 1.5715;
text-align: start;
}
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment