| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- <template>
- <div>
- <div class="menu-title">
- 知识图谱导入
- </div>
- <div class="menu-content">
- <el-tabs v-model="activeName" @tab-click="handleClick">
- <el-tab-pane label="本体导入" name="first">
- <el-row :gutter="5" style="margin: 20px 0">
- <el-col :span="7">
- <div>
- <label>请选择本体:</label>
- <el-select v-model="ontologyId" placeholder="请选择本体">
- <el-option v-for="item in ontologyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
- </el-select>
- </div>
- </el-col>
- <el-col :span="10">
- <div>
- <label>请选择文件:</label>
- <el-input v-model="fileName" readonly style="width: 300px;margin-right: 20px" disabled></el-input>
- <el-upload
- ref="upload" style="display: inline-block"
- :auto-upload="false"
- action="#" accept=".xls, .xlsx"
- :on-change="handleFileChange"
- :limit="2"
- :show-file-list="false">
- <el-button type="primary">上传文件</el-button>
- </el-upload>
- </div>
- </el-col>
- <el-col :span="2">
- <el-button type="primary" style="float:right;" @click="queryData" :loading="btLoading">执行</el-button>
- </el-col>
- </el-row>
- <div><a :href="path+'template.xlsx'" download="template.xlsx" style="text-decoration:underline;color: #0D6DFF">下载模板</a></div>
- <div class="result" style="width: 100%;margin-top: 20px;color: #5c5c5c;" v-if="showFlag && activeName == 'first'">成功导入</div>
- <div style="margin-top: 20px;height:20px;border: 1px solid rgba(0, 0, 0, 0.1);padding: 20px" v-if="showFlag && activeName == 'first'">
- <el-descriptions title="" :column="3" >
- <el-descriptions-item label="概念数量">{{resultCmd.gncount.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
- <el-descriptions-item label="对象属性数量">{{resultCmd.gxscount.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
- <el-descriptions-item label="值属性数量">{{resultCmd.zsxcount.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
- </el-descriptions>
- </div>
- </el-tab-pane>
- <el-tab-pane label="图谱数据导入" name="second">
- <el-row :gutter="5" style="margin: 20px 0">
- <el-col :span="7">
- <div>
- <label>请选择图谱:</label>
- <el-select v-model="spaceName" placeholder="请选择图谱" style="width: calc(100% - 204px)">
- <el-option v-for="item in spaceList" :label="item.comment" :value="item.name"></el-option>
- </el-select>
- <!--<el-button type="primary" style="margin-left: 20px;" @click="addCmd">新建图谱</el-button>-->
- </div>
- </el-col>
- <el-col :span="10">
- <div >
- <label>请选择文件:</label>
- <el-input v-model="fileName" readonly style="margin-right: 20px;width: calc(100% - 204px)" disabled></el-input>
- <el-upload
- ref="upload" style="display: inline-block"
- :auto-upload="false"
- action="#" accept=".zip"
- :on-change="handleFileChange"
- :limit="2"
- :show-file-list="false">
- <el-button type="primary">上传文件</el-button>
- </el-upload>
- </div>
- <div style="color: red;margin-top: 10px">* zip文件必须包含vertex.json、edge.json</div>
- </el-col>
- <el-col :span="2">
- <el-button type="primary" style="float:right;" @click="startSpace">执行</el-button>
- </el-col>
- </el-row>
- <div><a :href="path+'图谱数据.zip'" download="图谱数据.zip" style="text-decoration:underline;color: #0D6DFF">下载模板</a></div>
- <div class="result" style="width: 100%;margin-top: 20px;color: #5c5c5c;" v-if="showFlag && activeName == 'second'">{{message}}</div>
- <div style="margin-top: 20px;" v-if="showFlag && activeName == 'second'">
- <el-table :data="resultCmd1" border style="width: 100%" >
- <el-table-column prop="title" label="标题"></el-table-column>
- <el-table-column prop="gf_name" label="文件名"></el-table-column>
- <el-table-column prop="flag" label="状态">
- <template slot-scope="scope">
- <label :style="{color:scope.row.flag?'#67c23a':'#f56c6c'}">{{scope.row.flag?"成功":"失败"}}</label>
- </template>
- </el-table-column>
- </el-table>
- </div>
- </el-tab-pane>
- </el-tabs>
- </div>
- <el-dialog title="新建图谱" :visible.sync="cmdDialogVisible" width="40%">
- <el-steps :active="active" finish-status="success" style="margin-bottom: 20px">
- <el-step title="新建图谱"></el-step>
- <el-step title="选择本体"></el-step>
- </el-steps>
- <el-form ref="cmd" label-width="120px" :model="cmd" v-if="active == 0">
- <el-form-item label="图谱名称:">
- <el-input v-model="cmd.name" style="width: 100%" ></el-input>
- </el-form-item>
- <el-form-item label="图谱描述:">
- <el-input v-model="cmd.comment" style="width: 100%" ></el-input>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer" v-if="active == 0">
- <el-button type="primary" @click="createSpace">下一步</el-button>
- </span>
- <el-form ref="cmd" label-width="130px" :model="cmd" v-if="active == 1">
- <el-form-item label="选择本体:">
- <el-select v-model="cmd.ontologyId" placeholder="请选择本体" style="width: 100%">
- <el-option v-for="item in ontologyList" :key="item.id" :label="item.name" :value="item.id"></el-option>
- </el-select>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer" v-if="active == 1">
- <el-button @click="cmdDialogVisible = false">取 消</el-button>
- <el-button type="primary" @click="submitModify" :loading="loading">确 定</el-button>
- </span>
- </el-dialog>
- </div>
- </template>
- <script>
- import request,{getFileUrl} from '@/utils/request';
- var _this;
- export default {
- name: "codeWarehouse",
- data() {
- return {
- activeName: 'first',
- ontologyId:"",
- fileName:"",
- file:"",
- ontologyList:[],
- resultCmd:{
- gncount:"",
- gxscount:"",
- zsxcount:""
- },
- resultCmd1:{},
- showFlag:false,
- cmd:{},
- cmdDialogVisible:false,
- spaceList:[],
- active:0,
- spaceName:"",
- loading:false,
- path:getFileUrl(),
- message:"",
- btLoading:false
- }
- },
- mounted() {
- _this = this;
- _this.queryOntology();
- _this.querySpaceList();
- },
- methods: {
- handleClick(tab, event) {
- _this.fileName = "";
- _this.file = "";
- _this.resultCmd = {};
- _this.showFlag = false;
- _this.btLoading = false;
- },
- handleFileChange(file) {
- this.$refs.upload.clearFiles();
- _this.fileName = file.raw.name;
- _this.file = file.raw;
- },
- queryOntology() {
- request({
- url: `/ontology/query_list`,
- method: 'post',
- data: {EQI_sourceType: 1}
- }).then(res => {
- _this.ontologyList = res.data;
- });
- },
- querySpaceList() {
- request({
- url: '/nebula_operate/showspace',
- method: 'get'
- }).then(res => {
- _this.spaceList = res.data;
- });
- },
- queryData() {
- _this.resultCmd = {};
- _this.showFlag = false;
- if(!_this.ontologyId){
- _this.$message.warning("请选择本体");
- return false;
- }
- if(!_this.file){
- _this.$message.warning("请选择文件");
- return false;
- }
- _this.btLoading = true;
- _this.$message.info("数据在执行中。。");
- let formData = new FormData();
- formData.append("file", _this.file);
- formData.append("ontologyId", _this.ontologyId);
- request({
- url: '/nebula_model/importmodel/'+_this.ontologyId,
- method: 'post',
- data: formData
- }).then(res => {
- _this.resultCmd = res.data;
- _this.showFlag = true;
- _this.btLoading = false;
- });
- },
- addCmd(){
- _this.active = 0;
- _this.cmd = {
- ontologyId:"",
- name:"",
- comment:""
- }
- _this.loading = false;
- _this.cmdDialogVisible = true;
- },
- createSpace(){
- if(!_this.cmd.name){
- _this.$message.warning("请输入图谱名称");
- return false;
- }
- if(!_this.cmd.comment){
- _this.$message.warning("请输入图谱描述");
- return false;
- }
- _this.active = 1;
- },
- submitModify(){
- if(!_this.cmd.ontologyId){
- _this.$message.warning("请选择本体");
- return false;
- }
- _this.loading = true;
- this.$message({
- message: '正在初始化图空间,请等待...',
- type:"info",
- duration:20000
- });
- request({
- url: '/nebula_operate/createspace',
- method: 'post',
- data: {name:_this.cmd.name,comment:_this.cmd.comment}
- }).then(res => {
- var timer = setTimeout(function(){
- request({
- url: '/nebula_model/initgraphdatabase/'+_this.cmd.ontologyId+'/'+_this.cmd.name,
- method: 'get',
- data: {}
- }).then(res => {
- _this.$message.success("新建图谱成功");
- clearTimeout(timer);
- _this.loading = false;
- _this.cmdDialogVisible = false;
- _this.querySpaceList();
- });
- },20000)
- });
- },
- startSpace(){
- _this.resultCmd = {};
- _this.showFlag = false;
- if(!_this.spaceName){
- _this.$message.warning("请选择图谱");
- return false;
- }
- if(!_this.file){
- _this.$message.warning("请选择文件");
- return false;
- }
- request({
- url: '/graph-task/query_list/'+_this.spaceName,
- method: 'get',
- data: {}
- }).then(res => {
- if(res.data.length <= 0){
- let formData = new FormData();
- formData.append("file", _this.file);
- request({
- url: '/nebula_graph_import/uploadfile/'+_this.spaceName,
- method: 'put',
- data: formData
- }).then(res => {
- _this.resultCmd1 = res.data;
- var flag = true;
- res.data.forEach(item => {
- if(!item.flag){
- _this.message = "导入失败";
- flag = false;
- }
- })
- if(flag){
- _this.message = "导入成功";
- }
- _this.showFlag = true;
- });
- }else{
- _this.$message.warning("该图谱在执行中。。");
- }
- });
- }
- }
- }
- </script>
- <style lang="scss">
- .upload-btn {
- display: inline-block;
- margin-left: 20px;
- }
- </style>
|