home.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>知识图谱维护管理</title>
  7. <link rel="stylesheet" href="/elementUI/2.7.2/theme-chalk/index.css">
  8. </script>
  9. <style>
  10. </style>
  11. </head>
  12. <body>
  13. <div id="app" v-cloak>
  14. <el-container v-cloak>
  15. <el-header v-if="!simpleUpdataPage">
  16. <div class="logo" contenteditable="false">知识图谱维护管理</div>
  17. <div class="time">{{nowDate}}</div>
  18. <div class="user-area">
  19. <span class="icon-avatar"></span>
  20. <span class="user-identity">{{username}}</span>
  21. <span class="icon-dropdown-down"></span>
  22. </div>
  23. </el-header>
  24. <el-container>
  25. <!-- background-color="#D5E9FE" -->
  26. <el-aside :width="isCollapse?'69px':'268px'" v-if="!simpleUpdataPage">
  27. <!-- <div class="logo" contenteditable="false">知识图谱维护管理</div> -->
  28. <div :class="isCollapse? 'collapse-sign collapse-sign-open': 'collapse-sign collapse-sign-close'"
  29. @click="isCollapse=!isCollapse"></div>
  30. <el-menu :default-active="currentPage.id" :collapse-transition="false" :collapse="isCollapse"
  31. background-color="#e5f0fb" text-color="#000000" active-text-color="#0088F4">
  32. <el-submenu v-for="menu in menuData" :key="menu.id" :index="menu.id">
  33. <template slot="title">
  34. <i class="menu-label"><img :src="menu.label" alt="图标"></i>
  35. <span class="menu-title-text">{{menu.title}}</span>
  36. </template>
  37. <el-menu-item v-for="i in menu.children" @click="menuSelect(i)" class="submenu" :key="i.id" :index="i.id">
  38. <span class="submenu-text">{{i.title}}</span>
  39. </el-menu-item>
  40. </el-submenu>
  41. </el-menu>
  42. </el-aside>
  43. <el-main>
  44. <div class="tags" v-if="!simpleUpdataPage">
  45. <el-tabs v-model="editableTabsValue" @tab-click="tabClick" type="card" :editable="false">
  46. <el-tab-pane :key="item.name" v-for="(item, index) in editableTabs" :closable="false" :label="item.title"
  47. :name="item.name">
  48. <span slot="label">
  49. {{item.title}}
  50. <i :class="item.name==currentPage.id?'icon-close-blue':'icon-close-gray'"
  51. @click.stop="removeTab(index)"></i>
  52. </span>
  53. </el-tab-pane>
  54. </el-tabs>
  55. <div class="padding"></div>
  56. </div>
  57. <div class="content">
  58. <iframe ref="iframe" v-show="currentPage.url" :src="currentPage.url" frameborder="0"></iframe>
  59. <!-- <el-empty v-show="!currentPage.url" description="这里什么都没有"></el-empty> -->
  60. </div>
  61. </el-main>
  62. </el-container>
  63. </el-container>
  64. <!-- 对话框 -->
  65. <el-dialog :title="dialogData.title" :visible.sync="dialogVisible" ref="dialogRef"
  66. :width="dialogData.width?dialogData.width:'686px'" height="491px" :center="false" :close-on-click-modal="false">
  67. <template #default>
  68. <div v-if="dialogData.opType=='addEntity'" class="addEntity">
  69. <div class="tools">
  70. <span>导出模板</span>
  71. <span>导入</span>
  72. <span @click="addEntityAddRow" class="add-row add-row"><span class="icon-add"></span>新增行</span>
  73. </div>
  74. <div class="content">
  75. <el-table border :data="tableData" style="width: 100%" height="230">
  76. <el-table-column type="index" label="序号" width="73"></el-table-column>
  77. <el-table-column prop="name" label="实体名称">
  78. <template slot-scope="scope">
  79. <el-input type="text" v-model="tableData[scope.$index].name" placeholder="请输入实体名称">
  80. </template>
  81. </el-table-column>
  82. <el-table-column prop="label" label="实体类型" width="152">
  83. <template slot-scope="scope">
  84. <el-select v-model="tableData[scope.$index].label" placeholder="请选择">
  85. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  86. </el-option>
  87. </el-select>
  88. </template>
  89. </el-table-column>
  90. <el-table-column label="操作" width="103">
  91. <template slot-scope="scope">
  92. <el-button @click.native.prevent="deleteRow(scope.$index,tableData)" type="text" size="small">
  93. 删除
  94. </el-button>
  95. </template>
  96. </el-table-column>
  97. </el-table>
  98. </div>
  99. </div>
  100. <div v-if="dialogData.opType=='modifyEntityName-dropdown'" class="modifyEntityName-dropdown">
  101. <div class="tools">
  102. <el-select v-model="selectedName" placeholder="请选择">
  103. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  104. </el-option>
  105. </el-select>
  106. <el-input v-model="searchInp" placeholder="请输入实体名称"></el-input>
  107. <el-button type="primary" @click="getNode">搜索</el-button>
  108. </div>
  109. <div class="content">
  110. <el-table border :data="nodeTable" style="width: 100%" height="230">
  111. <el-table-column type="index" label="序号" width="73"></el-table-column>
  112. <el-table-column prop="oldName" label="原实体名称"></el-table-column>
  113. <el-table-column prop="name" label="实体名称" width="152">
  114. <template slot-scope="scope">
  115. <el-input type="text" v-model="scope.row.name" placeholder="请输入实体名称">
  116. </template>
  117. </el-table-column>
  118. <el-table-column prop="type" label="实体类型"></el-table-column>
  119. <el-table-column label="操作" width="103">
  120. <template slot-scope="scope">
  121. <el-button @click.native.prevent="updateEntityName([scope.row],scope.$index)" type="text"
  122. size="small">
  123. 确认
  124. </el-button>
  125. <el-button @click.native.prevent="deleteRow(scope.$index,nodeTable)" type="text" size="small">
  126. 删除
  127. </el-button>
  128. </template>
  129. </el-table-column>
  130. </el-table>
  131. </div>
  132. </div>
  133. <!-- 下拉框删除实体 -->
  134. <div v-if="dialogData.opType=='deleteEntity-dropdown' && nodeTable" class="modifyEntityName-dropdown">
  135. <div class="tools">
  136. <el-select v-model="selectedName" placeholder="请选择">
  137. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  138. </el-option>
  139. </el-select>
  140. <el-input v-model.trim="searchInp" placeholder="请输入实体名称"></el-input>
  141. <el-button type="primary" @click="getNode">搜索</el-button>
  142. </div>
  143. <div class="content">
  144. <el-table border :data="nodeTable" style="width: 100%" height="230">
  145. <el-table-column type="index" label="序号" width="73"></el-table-column>
  146. <el-table-column prop="oldName" label="实体名称"></el-table-column>
  147. <el-table-column label="操作" width="160">
  148. <template slot-scope="scope">
  149. <el-button @click.native.prevent="deleteEntityFunc([scope.row.nodeId],scope.$index)" type="text"
  150. size="small">
  151. 删除
  152. </el-button>
  153. </template>
  154. </el-table-column>
  155. </el-table>
  156. </div>
  157. </div>
  158. <!-- 下拉新增关系 -->
  159. <div v-if="dialogData.opType=='addRelationship-dropdown'" class="addEntity">
  160. <div class="tools">
  161. <span>导出模板</span>
  162. <span>导入</span>
  163. <span @click="addRelationshipDropdownAddRow" class="add-row"><span class="icon-add"></span>新增行</span>
  164. </div>
  165. <div class="content">
  166. <el-table border :data="addRelationshipDropdown" style="width: 100%" height="250">
  167. <el-table-column type="index" label="序号" width="70"></el-table-column>
  168. <el-table-column label="起始实体类型">
  169. <template slot-scope="scope">
  170. <el-select v-model="scope.row.startLabel" placeholder="请选择">
  171. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  172. </el-option>
  173. </el-select>
  174. </template>
  175. </el-table-column>
  176. <el-table-column prop="startName" label="起始实体名称" width="150">
  177. <template slot-scope="scope">
  178. <el-autocomplete v-model.trim="scope.row.startName"
  179. :fetch-suggestions="(queryString,cb)=>{querySearchAsync(queryString,cb,scope.row.startLabel)}"
  180. @select="handleSelect($event, scope.row,'start')" placeholder="请选择起始实体"
  181. :popper-append-to-body="false"></el-autocomplete>
  182. </template>
  183. </el-table-column>
  184. <el-table-column label="目标实体类型">
  185. <template slot-scope="scope">
  186. <el-select v-model="scope.row.endLabel" placeholder="请选择">
  187. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  188. </el-option>
  189. </el-select>
  190. </template>
  191. </el-table-column>
  192. <el-table-column prop="endName" label="目标实体名称" width="150">
  193. <template slot-scope="scope">
  194. <el-autocomplete v-model.trim="scope.row.endName" placeholder="请选择起目标实体"
  195. :fetch-suggestions="((queryString,cb)=>{querySearchAsync(queryString,cb,scope.row.endLabel)})"
  196. @select="handleSelect($event, scope.row,'end')"></el-autocomplete>
  197. </template>
  198. </el-table-column>
  199. <el-table-column prop="relationshipType" width="170" label="关系名称">
  200. <template slot-scope="scope">
  201. <el-input type="text" v-model="scope.row.relationshipType" placeholder="请输入关系(边)名称">
  202. </template>
  203. </el-table-column>
  204. <el-table-column label="操作" width="100">
  205. <template slot-scope="scope">
  206. <el-button @click.native.prevent="deleteRow(scope.$index,addRelationshipDropdown)" type="text"
  207. size="small">
  208. 删除
  209. </el-button>
  210. </template>
  211. </el-table-column>
  212. </el-table>
  213. </div>
  214. </div>
  215. <div v-if="dialogData.opType=='modifyRelationshipName-dropdown'" class="modifyEntityName-dropdown">
  216. <div class="tools">
  217. <el-input v-model.trim="searchRelationshipName" placeholder="请输入关系名称"></el-input>
  218. <el-button type="primary" @click="findRelationshipType">搜索</el-button>
  219. </div>
  220. <div class="content">
  221. <el-table border :data="modifyRelationshipNameDropdown" style="width: 100%" height="230">
  222. <el-table-column type="index" label="序号" width="73"></el-table-column>
  223. <el-table-column prop="oldRelationshipType" label="原关系名称"></el-table-column>
  224. <el-table-column prop="newRelationshipType" label="修改为">
  225. <template slot-scope="scope">
  226. <el-input type="text" v-model="scope.row.newRelationshipType" placeholder="请输入关系名称">
  227. </template>
  228. </el-table-column>
  229. <el-table-column label="操作" width="103">
  230. <template slot-scope="scope">
  231. <el-button @click.native.prevent="updateRelationshipType(modifyRelationshipNameDropdown,scope.$index)"
  232. type="text" size="small">
  233. 确认
  234. </el-button>
  235. </template>
  236. </el-table-column>
  237. </el-table>
  238. </div>
  239. </div>
  240. <!-- 下拉属性新增 -->
  241. <div v-if="dialogData.opType=='addProperty-dropdown'" class="modifyEntityName-dropdown">
  242. <div class="tools-2">
  243. <div class="tools-2-up">
  244. <div class="left">
  245. <span>实体类型:</span>
  246. <el-select v-model="addPropertyDropdown.label" placeholder="请选择">
  247. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  248. </el-option>
  249. </el-select>
  250. <span style="margin-left: 10px;">实体名称:</span>
  251. <!-- <el-autocomplete v-model.trim="addPropertyDropdown.name"
  252. :fetch-suggestions="((queryString,cb)=>{querySearchAsync(queryString,cb,addPropertyDropdown.label)})"
  253. @select="handleSelect($event,addPropertyDropdown,'addProperty-dropdown')"
  254. placeholder="请输入实体名称"></el-autocomplete> -->
  255. <el-select class="select-entity-name" v-model.trim="addPropertyDropdown.nodeId" filterable remote
  256. placeholder="请输入实体名称" @change="addPropertyDropdownValueChange"
  257. :remote-method="((query)=>addPropertyDropdownRemoteMethod(query,addPropertyDropdown.label))"
  258. :loading="false">
  259. <el-option v-for="item in addPropertyDropdownOptions" :key="item.nodeId" :label="item.name"
  260. :value="item.nodeId">
  261. </el-option>
  262. </el-select>
  263. </div>
  264. <div class="right">
  265. <span class="blue">导出模板</span>
  266. <span class="blue">导出</span>
  267. <span @click="addPropertyDropdownAddRow()" class="blue add-row"><span class="icon-add"></span>新增行</span>
  268. </div>
  269. </div>
  270. <div class="tools-2-down"> <span>请添加实体:<span class="blue">{{addPropertyDropdown.name}}</span> 相关的属性值</span>
  271. </div>
  272. </div>
  273. <div class="content">
  274. <el-table border :data="addPropertyDropdown.property" style="width: 100%" height="230">
  275. <el-table-column type="index" label="序号" width="73"></el-table-column>
  276. <el-table-column prop="key" label="属性名称">
  277. <template slot-scope="scope">
  278. <el-input type="text" v-model="scope.row.key" placeholder="请输入属性名称">
  279. </template>
  280. </el-table-column>
  281. <el-table-column prop="value" label="属性值">
  282. <template slot-scope="scope">
  283. <el-input type="text" v-model="scope.row.value" placeholder="请输入关系名称">
  284. </template>
  285. </el-table-column>
  286. <el-table-column label="操作" width="103">
  287. <template slot-scope="scope">
  288. <el-button @click.native.prevent="deleteRow(scope.$index,addPropertyDropdown.property)" type="text"
  289. size="small">
  290. 删除
  291. </el-button>
  292. </template>
  293. </el-table-column>
  294. </el-table>
  295. </div>
  296. </div>
  297. <!-- 右键属性新增 -->
  298. <div v-if="dialogData.opType=='addProperty'" class="modifyEntityName-dropdown">
  299. <div class="tools-2">
  300. <div class="tools-2-up">
  301. <div class="left">
  302. <span>实体名称:{{addProperty.name}}</span>
  303. </div>
  304. <div class="right">
  305. <span @click="addPropertyAddRow()" class="blue add-row"><span class="icon-add"></span>新增行</span>
  306. </div>
  307. </div>
  308. <div class="tools-2-down"></div>
  309. </div>
  310. <div class="content">
  311. <el-table border :data="addProperty.property" style="width: 100%" height="230">
  312. <el-table-column type="index" label="序号" width="73"></el-table-column>
  313. <el-table-column prop="key" label="属性名称">
  314. <template slot-scope="scope">
  315. <el-input type="text" v-model="scope.row.key" placeholder="请输入属性名称">
  316. </template>
  317. </el-table-column>
  318. <el-table-column prop="value" label="属性值">
  319. <template slot-scope="scope">
  320. <el-input type="text" v-model="scope.row.value" placeholder="请输入关系名称">
  321. </template>
  322. </el-table-column>
  323. <el-table-column label="操作" width="103">
  324. <template slot-scope="scope">
  325. <el-button @click.native.prevent="deleteRow(scope.$index,addProperty.property)" type="text"
  326. size="small">
  327. 删除
  328. </el-button>
  329. </template>
  330. </el-table-column>
  331. </el-table>
  332. </div>
  333. </div>
  334. <!-- 删除关系 -->
  335. <div v-if="dialogData.opType=='deleteRelationship'" class="deleteRelationship">
  336. <div class="content">
  337. 是否确认删除{{deleteRelationship.startName}}(起始节点)→{{deleteRelationship.endName}}(目标节点)之间的关系:{{deleteRelationship.relationshipType}}
  338. ?
  339. </div>
  340. </div>
  341. <!-- 修改关系 -->
  342. <div v-if="dialogData.opType=='modifyRelationship'" class="modifyRelationship">
  343. <div class="content">
  344. <div class="up">原关系名称:{{modifyRelationship.oldVal}}</div>
  345. <div class="down">修改为:<el-input v-model.trim="modifyRelationship.newVal"></el-input></div>
  346. </div>
  347. </div>
  348. <!-- 修改关系实体名称-右键 -->
  349. <div v-if="dialogData.opType=='modifyEntityName'" class="modifyEntityName">
  350. <div class="content">
  351. <div class="up">原实体名称:{{modifyEntityName.oldName}}</div>
  352. <div class="center">实体名称:<el-input v-model.trim="modifyEntityName.name"></el-input></div>
  353. <div class="down">实体类型:
  354. <el-select v-model="modifyEntityName.label" placeholder="请选择">
  355. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  356. </el-option>
  357. </el-select>
  358. </div>
  359. </div>
  360. </div>
  361. <!-- 右键删除实体 -->
  362. <div v-if="dialogData.opType=='deleteEntity'" class="deleteRelationship">
  363. <div class="content">
  364. 删除实体节点提交保存后会将数据库中节点所有一层以内的关系及属性一同删除。是否确认删除实体-{{deleteEntity.name}} ?
  365. </div>
  366. </div>
  367. <!-- 右键删除实体属性 -->
  368. <div v-if="dialogData.opType=='deleteProperty'" class="deleteRelationship">
  369. <div class="content">
  370. 是否确认删除实体{{deleteProperty.name}}的属性-{{deleteProperty.propertyName}} ?
  371. </div>
  372. </div>
  373. <!-- //右键新增关系-->
  374. <div v-if="dialogData.opType=='addRelationship'" class="modifyEntityName">
  375. <div class="content">
  376. <div class="up">起始实体名称:{{addRelationship.startName}}</div>
  377. <div class="center">
  378. 目标实体类型:<el-select v-model="addRelationship.endLabel" placeholder="请选择">
  379. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  380. </el-option>
  381. </el-select>
  382. </div>
  383. <div class="center">
  384. 目标实体名称: <el-autocomplete v-model.trim="addRelationship.endName"
  385. :fetch-suggestions="((queryString,cb)=>{querySearchAsync(queryString,cb,addRelationship.endLabel)})"
  386. @select="handleSelect($event, addRelationship,'addRelationship')"
  387. placeholder="请输入实体名称"></el-autocomplete>
  388. </div>
  389. <div class="down">关系名称:<el-input v-model.trim="addRelationship.relationshipType"
  390. placeholder="请输入关系名称"></el-input>
  391. </div>
  392. </div>
  393. </div>
  394. <div v-if="dialogData.opType=='modifyProperty-dropdown'" class="modifyProperty-dropdown">
  395. <div class="tools">
  396. <el-select v-model="modifyPropertyDropdown.label" placeholder="请选择">
  397. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  398. </el-option>
  399. </el-select>
  400. <el-autocomplete v-model="modifyPropertyDropdown.name" :fetch-suggestions="querySearchAsync2"
  401. @select="handleSelect($event, modifyPropertyDropdown.properties,'modifyProperty-dropdown')"
  402. placeholder="请输入实体名称">
  403. </el-autocomplete>
  404. </div>
  405. <div class="content">
  406. <el-table border :data="modifyPropertyDropdown.properties" style="width: 100%" height="230">
  407. <el-table-column type="index" label="序号" width="73"></el-table-column>
  408. <el-table-column label="原属性名称" prop="oldPropertyName"></el-table-column>
  409. <el-table-column prop="key" label="属性名称" width="130">
  410. <template slot-scope="scope">
  411. <el-input type="text" v-model="scope.row.newPropertyName" placeholder="请输入属性名称">
  412. </template>
  413. </el-table-column>
  414. <el-table-column label="原属性值" prop="oldPropertyValue"></el-table-column>
  415. <el-table-column prop="value" label="属性值">
  416. <template slot-scope="scope">
  417. <el-input type="text" v-model="scope.row.newPropertyValue" placeholder="请输入属性值">
  418. </template>
  419. </el-table-column>
  420. <el-table-column label="操作" width="103">
  421. <template slot-scope="scope">
  422. <el-button
  423. @click.native.prevent="modifyPropertyDropdownConfirm(scope.$index,modifyPropertyDropdown.properties)"
  424. type="text" size="small">
  425. 确定
  426. </el-button>
  427. </template>
  428. </el-table-column>
  429. </el-table>
  430. </div>
  431. </div>
  432. <!-- 右键修改实体属性 -->
  433. <div v-if="dialogData.opType=='modifyProperty'" class="modifyEntityName">
  434. <div class="content">
  435. <div class="up">
  436. <span>原属性名称:{{modifyProperty.oldPropertyName}}</span>
  437. <span>原属性值:{{modifyProperty.oldPropertyValue}}</span>
  438. </div>
  439. <div class="center">
  440. 属性名称:<el-input v-model.trim="modifyProperty.newPropertyName" placeholder="请输入属性名称"></el-input>
  441. 属性值:<el-input v-model.trim="modifyProperty.newPropertyValue" placeholder="请输入属性值"></el-input>
  442. </div>
  443. <!-- <div class="down">
  444. 属性类型:<el-input v-model.trim="addRelationship.relationshipType"
  445. placeholder="请输入关系名称"></el-input>
  446. </div> -->
  447. </div>
  448. </div>
  449. <div v-if="dialogData.opType=='merge-entity'" class="merge-entity">
  450. <div class="content">
  451. <div class="text">
  452. 确认实体-{{mergeEntity.firstName}}、实体-{{mergeEntity.secondName}}是否需要合并,合并后实体的关系及属性一同合并。
  453. </div>
  454. <div class="input">
  455. 合并后的名称:<el-input v-model.trim="mergeEntity.newName" placeholder="请输入实体名称"></el-input>
  456. </div>
  457. </div>
  458. </div>
  459. <div v-show="dialogData.opType==='entityLink'" class="entityLink" id="entityLink">
  460. </div>
  461. </template>
  462. <span slot="footer" class="dialog-footer" v-show="dialogData.showFooter">
  463. <el-button @click="dialogVisible = false" class="cancel">取 消</el-button>
  464. <el-button type="primary" @click="dialogSubmit" class="confirm">确 定</el-button>
  465. </span>
  466. </el-dialog>
  467. </div>
  468. </body>
  469. <script>
  470. </script>
  471. </html>