diff --git a/src/api/tag.js b/src/api/tag.js new file mode 100644 index 0000000..d8adb4e --- /dev/null +++ b/src/api/tag.js @@ -0,0 +1,16 @@ +import { getAction, deleteAction, putAction, postAction, httpAction,uploadAction } from '@/api/manage' + +const idcTableTagadd = (params)=>postAction("/idcTableTag/add",params); +const idcTableTaglist = (params)=>getAction("/idcTableTag/list",params); +const idcTableTagedit = (params)=>putAction("/idcTableTag/edit",params); +const idcTableTagdelete = (params)=>deleteAction("/idcTableTag/delete",params); + +export { + idcTableTagadd, + idcTableTaglist, + idcTableTagedit, + idcTableTagdelete +} + + + diff --git a/src/api/task.js b/src/api/task.js index 98adb61..7ec69e1 100644 --- a/src/api/task.js +++ b/src/api/task.js @@ -6,15 +6,15 @@ const taskQueryById = (params)=>getAction("/task/queryById",params); const taskPageList = (params)=>getAction("/task/pageList",params); const taskDistributeTask = (params)=>putAction("/task/distributeTask",params); const taskDeleteById = (params)=>deleteAction("/task/deleteById",params); - - +const getDataAnalysis = (params)=>getAction("/dataAnalysis/getDataAnalysis",params); export { taskCreate, taskUpdateById, taskQueryById, taskPageList, taskDistributeTask, - taskDeleteById + taskDeleteById, + getDataAnalysis } diff --git a/src/views/ship/modules/tagModal.vue b/src/views/ship/modules/tagModal.vue new file mode 100644 index 0000000..e418343 --- /dev/null +++ b/src/views/ship/modules/tagModal.vue @@ -0,0 +1,121 @@ +<template> + <a-modal + :title="title" + :width="800" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleOk" + @cancel="handleCancel" + okText="保存" + cancelText="关闭"> + + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="标签名称" > + <a-input v-decorator="['tagName']" ></a-input> + </a-form-item> + <a-form-item + label="标签说明"> + <a-input v-decorator="['tagDescribe']" ></a-input> + </a-form-item> + </a-form> + </a-spin> + </a-modal> +</template> + +<script> + import { idcTableTagadd, + idcTableTaglist, + idcTableTagedit,} from '@/api/tag' + import JCron from "@/components/jeecg/JCron"; + import JSelectMultiple from '@/components/jeecg/JSelectMultiple' + import pick from 'lodash.pick' + // import moment from "moment" + + export default { + name: "dataTypeModal", + components: { + JCron, + JSelectMultiple + }, + data () { + return { + title:"操作", + buttonStyle: 'solid', + visible: false, + status:'', + model: {}, + confirmLoading: false, + form: this.$form.createForm(this), + strategys:[], + dataStrategySelected:'', + idcDataStrategyId:"" + } + }, + created () { + + }, + methods: { + add () { + this.edit({}); + }, + edit (record) { + this.visible =true; + let that = this; + that.form.resetFields(); + this.model = Object.assign({},record); + this.$nextTick(() => { + this.form.setFieldsValue(pick(this.model,'enName','cnName')); + }); + }, + close () { + this.$emit('close'); + this.visible = false; + }, + handleOk () { + const that = this; + // 触发表单验证 + this.form.validateFields((err, values) => { + console.log('values',values) + if (!err) { + that.confirmLoading = true; + if(!this.model.id){ + idcTableTagadd(values).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + that.close(); + }) + }else{ + idcTableTagedit({id:this.model.id,tagName:values.tagName,tagDescribe:values.tagDescribe}).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + that.close(); + }) + } + } + }) + }, + handleCancel () { + this.close() + }, + } + } +</script> + +<style scoped> +.disabled{ + pointer-events: none; +} +</style> \ No newline at end of file diff --git a/src/views/ship/tag.vue b/src/views/ship/tag.vue new file mode 100644 index 0000000..cd6eed9 --- /dev/null +++ b/src/views/ship/tag.vue @@ -0,0 +1,186 @@ +<template> + <a-card :bordered="false"> + + <!-- 查询区域 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline"> + <a-row :gutter="30"> + <a-col :md="18" :sm="10" > + <a-form-item label="关键词"> + <a-input placeholder="请输入搜索关键词" v-model="queryParam.tagName"></a-input> + </a-form-item> + </a-col> + <a-col :md="6" :sm="10" > + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button @click="loadData" type="primary" v-has="'cont:btn'" icon="search">查询</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px;left: 10px">重置</a-button> + </span> + </a-col> + </a-row> + </a-form> + </div> + + <!-- table区域-begin --> + <div style="height:900px;overflow-y:auto;"> + <a-button @click="handleAdd" type="primary" v-has="'cont:btn'" icon="plus" style="margin-left: 8px;left: 10px;margin-bottom: 10px;">新增</a-button> + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys,onChange: onSelectChange}" + @change="handleTableChange"> +<!-- :locale="myLocale"--> + + <!-- 字符串超长截取省略号显示--> + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)" v-has="'cont:btn'">修改</a> + <a-divider type="vertical" v-has="'cont:btn'" /> + <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"> + <a>删除</a> + </a-popconfirm> + </span> + </a-table> + </div> + <!-- table区域-end --> + + <!-- 表单区域 --> + <tagModal ref="modalForm" @ok="modalFormOk"></tagModal> + </a-card> +</template> + +<script> + import tagModal from './modules/tagModal' + import { idcTableTaglist, + idcTableTagdelete } from '@/api/tag' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import JEllipsis from "@/components/jeecg/JEllipsis"; + + export default { + name: "tag", + mixins:[JeecgListMixin], + components: { + tagModal, + JEllipsis, + VNodes: { + functional: true, + render: (h, ctx) => ctx.props.vnodes, + }, + }, + data () { + return { + description: '标签管理', + dataSource: [], + queryParam: { + pageNum :1, + pageSize:20, + tagName:"" + }, + columns: [ + { + title: '#', + dataIndex: '', + key:'id', + width:60, + align:"id", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title: '标签名称', + align:"left", + dataIndex: 'tagName', + }, + { + title: '标签描述', + align:"left", + dataIndex: 'tagDescribe' + }, + { + title: '创建时间', + align:"center", + width: 250, + dataIndex: 'createTime', + }, + { + title: '创建人', + align:"left", + dataIndex: 'createBy', + }, + { + title: '操作', + dataIndex: 'action', + align:"center", + width:180, + scopedSlots: { customRender: 'action' }, + } + ] + } + }, + computed: { + }, + created () { + this.loadData(); + }, + methods: { + //筛选需要重写handleTableChange + handleTableChange(pagination, filters, sorter) { + //分页、排序、筛选变化时触发 + //TODO 筛选 + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field; + this.isorter.order = "ascend" == sorter.order ? "asc" : "desc" + } + this.ipagination = pagination; + this.loadData(); + }, + searchReset(){ + this.queryParam= { + pageNum :1, + pageSize:20, + tagName:"" + } + }, + loadData() { + idcTableTaglist(this.queryParam).then((res) => { + if (res.success) { + this.dataSource = res.result.records; + if(res.result.total) + { + this.ipagination.total = res.result.total; + } + } else { + this.$message.warning(res.message); + } + }); + }, + handleDelete: function (id) { + var that = this; + idcTableTagdelete({id: id}).then((res) => { + if (res.success) { + that.$message.success(res.message); + that.loadData(); + } else { + that.$message.warning(res.message); + } + }); + }, + handleEdit: function (record) { + this.$refs.modalForm.edit(record); + this.$refs.modalForm.title = "编辑"; + }, + handleAdd() { + this.$refs.modalForm.add(); + this.$refs.modalForm.title = "新增"; + }, + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/task/statistics.vue b/src/views/task/statistics.vue index 3be2fb8..3b2ce12 100644 --- a/src/views/task/statistics.vue +++ b/src/views/task/statistics.vue @@ -12,7 +12,7 @@ </a-col> <a-col :md="6" :sm="10" > <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button @click="handleAdd" type="primary" v-has="'cont:btn'" icon="search">查询</a-button> + <a-button @click="loadData" type="primary" v-has="'cont:btn'" icon="search">查询</a-button> </span> </a-col> </a-row> @@ -24,7 +24,8 @@ bordered rowKey="id" :columns="columns" - :dataSource="dataSource"> + :dataSource="dataSource" + @change="handleTableChange"> <!-- :locale="myLocale"--> <!-- 字符串超长截取省略号显示--> @@ -35,15 +36,15 @@ </a-col> <a-col :md="16" :sm="2"> <a-row> - <div style="margin-left: 10px;"> + <div class="quarter"> <div class="quarter-div"> <a-row> <a-col :span="12" style="text-align: center;"> <img style="margin-top: 10px;" :src="guaz" /> </a-col> <a-col :span="12"> - <div style="margin-top: 14px">1</div> - <div>文件总数</div> + <div style="margin-top: 14px">{{fileNum.totalNumRow}}</div> + <div>结构化数据条数</div> </a-col> </a-row> </div> @@ -53,8 +54,8 @@ <img style="margin-top: 10px;" :src="guaz" /> </a-col> <a-col :span="12"> - <div style="margin-top: 14px">2</div> - <div>图片</div> + <div style="margin-top: 14px">{{fileNum.totalFileSize}}GB</div> + <div>非结构化文件(大小)</div> </a-col> </a-row> </div> @@ -64,8 +65,8 @@ <img style="margin-top: 10px;" :src="guaz" /> </a-col> <a-col :span="12"> - <div style="margin-top: 14px">3</div> - <div>音频</div> + <div style="margin-top: 14px">{{fileNum.tableCount}}</div> + <div>表数量</div> </a-col> </a-row> </div> @@ -75,8 +76,8 @@ <img style="margin-top: 10px;" :src="guaz" /> </a-col> <a-col :span="12"> - <div style="margin-top: 14px">4</div> - <div>数据库文件</div> + <div style="margin-top: 14px">{{ fileNum.fileLinkCount }}</div> + <div>文件接引数量</div> </a-col> </a-row> </div> @@ -86,8 +87,8 @@ <img style="margin-top: 10px;" :src="guaz" /> </a-col> <a-col :span="12"> - <div style="margin-top: 14px">5</div> - <div>视频</div> + <div style="margin-top: 14px">{{ fileNum.docFileCount }}</div> + <div>文档数量</div> </a-col> </a-row> </div> @@ -95,10 +96,10 @@ </a-row> <a-row> <a-col :md="12" :sm="2"> - <div id="cleaningVariance" class="cleaningVariance" ref="cleaningVariance" style="width: 620px; height: 450px; float: left"></div> + <div id="cleaningVariance" class="cleaningVariance" ref="cleaningVariance"></div> </a-col> <a-col :md="12" :sm="2"> - <div id="totalNumberCatalogues" class="totalNumberCatalogues" ref="totalNumberCatalogues" style="width: 620px; height: 450px; float: right"></div> + <div id="totalNumberCatalogues" class="totalNumberCatalogues" ref="totalNumberCatalogues"></div> </a-col> </a-row> </a-col> @@ -109,12 +110,8 @@ <script> import { shipModelPageList, shipModeldeleteById } from '@/api/ship' - import { taskCreate, - taskUpdateById, - taskQueryById, - taskPageList, - taskDistributeTask, - taskDeleteById } from '@/api/task' + import { getDataAnalysis, + taskPageList, } from '@/api/task' import { getAction } from '@/api/manage' import JEllipsis from "@/components/jeecg/JEllipsis"; import guaz from '@assets/guaz.png' @@ -126,11 +123,12 @@ data () { return { description: '任务统计', - dataSources: [], + dataSource: [], guaz, queryParam: { pageNum :1, - pageSize:20 + pageSize:20, + name:"" }, columns: [ { @@ -160,7 +158,15 @@ width:180, scopedSlots: { customRender: 'action' }, } - ] + ], + fileNum:{ + totalNumRow:0, + tableCount:0, + docFileCount:0, + totalFileSize:0, + fileLinkCount:0 + }, + cleaningVariancesource:[] } }, mounted() { @@ -176,26 +182,46 @@ }, methods: { - dataAdd(){ + //筛选需要重写handleTableChange + handleTableChange(pagination, filters, sorter) { + //分页、排序、筛选变化时触发 + //TODO 筛选 + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field; + this.isorter.order = "ascend" == sorter.order ? "asc" : "desc" + } + this.ipagination = pagination; + this.loadData(); }, - getselect(){ - + handleEdit(value){ + this.cleaningVariancesource =[]; + getDataAnalysis({taskId:value.id,startDate:value.startTime,endDate:value.endTime}).then((res) => { + if (res.success) { + res.result.schemaNames.forEach(row => { + this.cleaningVariancesource.push([row, parseInt(res.result.numRowMap[row]) ]) + }) + this.fileNum.totalNumRow = res.result.totalNumRow + this.fileNum.tableCount = res.result.tableCount + this.fileNum.docFileCount = res.result.docFileCount + this.fileNum.totalFileSize = res.result.totalFileSize + this.fileNum.fileLinkCount = res.result.fileLinkCount + this.getcleaningVariance(); + } else { + this.$message.warning(res.message); + } + }); }, loadData() { taskPageList(this.queryParam).then((res) => { if (res.success) { this.dataSource = res.result.rows||res.result; - if(res.result.total) - { - this.ipagination.total = res.result.total; - } } else { this.$message.warning(res.message); } }); }, getTables(){ - this.getcleaningVariance(); + this.gettotalNumberCatalogues(); }, getcleaningVariance(){ @@ -207,18 +233,12 @@ legend: {}, tooltip: {}, dataset: { - source: [ - ['product', '', ], - ['平台', 43.3], - ['编队', 83.1], - ['航空兵', 86.4], - ['陆战队', 72.4], - ['作战', 72.4], - ['反潜', 72.4], - ['舰炮', 72.4] - ] + source: this.cleaningVariancesource }, - xAxis: { type: 'category' }, + xAxis: { type: 'category', + nameTextStyle: { + align: "center" + } }, yAxis: {}, // Declare several bar series, each will be mapped // to a column of dataset.source by default. @@ -247,13 +267,10 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '平台' }, - { value: 735, name: '编队' }, - { value: 580, name: '航空兵' }, - { value: 484, name: '陆战队' }, - { value: 300, name: '作战' }, - { value: 735, name: '反潜' }, - { value: 580, name: '舰炮' } + { value: 1048, name: '文档' }, + { value: 735, name: '视频' }, + { value: 580, name: '音频' }, + { value: 484, name: '结构化数据' }, ], emphasis: { itemStyle: { @@ -275,10 +292,10 @@ @import '~@assets/less/common.less'; .quarter-div { - width: 15%; + width: 18%; height: 100px; float: left; - margin-right: 26px; + margin-right: 6px; background: #edf2ff; border: 1px solid #d3e5fd; border-radius: 10px; @@ -292,4 +309,13 @@ margin-left: 0px; margin-right: 50px; } + .cleaningVariance { + width: 620px; height: 450px; float: left; padding: 30px 10px 10px 20px; + } + .totalNumberCatalogues { + width: 620px; height: 450px; float: right; padding: 30px 10px 10px 20px; + } + .quarter { + margin-left: 10px; margin-bottom: 20px;padding: 30px 10px 10px 20px; + } </style> \ No newline at end of file