index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <template>
  2. <div class="view-table-content">
  3. <div style="width: 100%">
  4. <div class="view-dataType-title">
  5. <div class="view-dataType-title-btn">
  6. <el-button type="success" @click="openDialog()">新增</el-button>
  7. <el-button type="warning" @click="reset()">重置</el-button>
  8. </div>
  9. <div class="view-dataType-title-search">
  10. <el-input placeholder="请输入实体名称" v-model="keyWordData" class="input1">
  11. <el-button slot="append" icon="el-icon-search" @click="searchClick"></el-button>
  12. </el-input>
  13. </div>
  14. </div>
  15. <div class="view-dataType-table">
  16. <LTable ref="table" @selection-change="selection" :defaultFetch="false" :fetch="fetch" :columns="columns" :dataSource="tableData" :options="options" :pagination="tableRequset"></LTable>
  17. </div>
  18. <!-- 添加或修改模型信息对话框 -->
  19. <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="600px" :before-close="handleClose" :rules="rules">
  20. <el-form ref="form" :model="form" label-width="80px">
  21. <el-form-item label="实体名称" prop="name">
  22. <el-input v-model="form.name" placeholder="请输入实体名称" />
  23. </el-form-item>
  24. <el-form-item label="实体类型" prop="category">
  25. <el-select v-model="form.category" placeholder="请选择实体类型">
  26. <el-option v-for="(item, index) in categoryList" :key="index" :label="item.name" :value="item.name" />
  27. </el-select>
  28. </el-form-item>
  29. </el-form>
  30. <span slot="footer" class="dialog-footer">
  31. <el-button @click="handleClose">取 消</el-button>
  32. <el-button type="primary" @click="submit">确 定</el-button>
  33. </span>
  34. </el-dialog>
  35. </div>
  36. </div>
  37. </template>
  38. <script>
  39. import { getEntityList, getAllEntityClass, addEntity, updateEntity, deleteEntity, checkEntity } from '@/api/als/entityManage'
  40. import { deepClone, debounce } from '@/utils'
  41. import LTable from '@/views/components/LTable/index.vue'
  42. export default {
  43. name: 'EntityManage',
  44. components: { LTable },
  45. data() {
  46. // 这里存放数据
  47. return {
  48. dialogTitle: '新增',
  49. dialogVisible: false,
  50. keyWordData: '',
  51. searchValue: '',
  52. rules: {
  53. name: [{ required: true, message: '实体名称不能为空', trigger: 'blur' }],
  54. category: [{ required: true, message: '实体类型不能为空', trigger: 'change' }]
  55. },
  56. columns: [
  57. {
  58. prop: 'name',
  59. label: '实体名称'
  60. },
  61. {
  62. prop: 'category',
  63. label: '实体类型'
  64. },
  65. {
  66. button: true,
  67. label: '操作',
  68. width: '240px',
  69. group: [
  70. {
  71. name: '编辑',
  72. type: 'text',
  73. round: false,
  74. plain: false,
  75. onClick: (row, index, scope) => {
  76. this.handUpdate(row)
  77. }
  78. },
  79. {
  80. name: '删除',
  81. type: 'text',
  82. round: false,
  83. plain: false,
  84. onClick: (row, index, scope) => {
  85. this.remove([row])
  86. }
  87. }
  88. ]
  89. }
  90. ],
  91. options: {
  92. stripe: false, // 斑马纹
  93. mutiSelect: true, // 多选框
  94. index: false, // 显示序号, 多选则 mutiSelect
  95. loading: false, // 表格动画
  96. initTable: false, // 是否一挂载就加载数据
  97. border: true,
  98. height: 'calc(100vh - 300px)'
  99. },
  100. tableCheckItems: [],
  101. tableData: [],
  102. tableRequset: {
  103. total: 0,
  104. pageIndex: 1,
  105. pageSize: 20,
  106. searchValue: ''
  107. },
  108. form: {
  109. id: '',
  110. name: '',
  111. category: ''
  112. },
  113. debounceFn: debounce(this.fetch, 500),
  114. categoryList: []
  115. }
  116. },
  117. watch: {
  118. keyWord() {
  119. this.tableRequset.pageIndex = 1
  120. this.debounceFn()
  121. }
  122. },
  123. mounted() {
  124. this.getEntityAPI()
  125. this.getEntityClassAPI()
  126. },
  127. methods: {
  128. async deleteEntityAPI(params) {
  129. try {
  130. const deleteData = {
  131. node_id: params[0]
  132. }
  133. const { code } = await deleteEntity(deleteData)
  134. if (code === 200) {
  135. this.$message({
  136. type: 'success',
  137. message: '操作成功!'
  138. })
  139. this.getEntityAPI()
  140. this.handleClose()
  141. }
  142. } catch (error) {}
  143. },
  144. reset() {
  145. this.getEntityAPI()
  146. this.keyWordData = ''
  147. },
  148. async getEntityAPI(params) {
  149. try {
  150. if (this.$refs.table) this.$refs.table.clearSelection()
  151. const { pageSize, pageIndex } = this.tableRequset
  152. this.loading = this.$loading({
  153. lock: true,
  154. text: '正在获取知识图谱实体数据,请稍候...',
  155. spinner: 'el-icon-loading'
  156. })
  157. const {
  158. data: { dataList, total }
  159. } = await getEntityList({ pageSize, pageNum: pageIndex, ...params })
  160. this.tableData = dataList
  161. this.tableRequset.total = total
  162. this.loading.close()
  163. } catch (error) {
  164. this.loading.close()
  165. }
  166. },
  167. async getEntityClassAPI(params) {
  168. try {
  169. const {
  170. data: { dataList }
  171. } = await getAllEntityClass()
  172. this.categoryList = dataList
  173. this.loading.close()
  174. } catch (error) {}
  175. },
  176. fetch() {
  177. this.getEntityAPI()
  178. },
  179. async searchClick() {
  180. try {
  181. if (this.$refs.table) this.$refs.table.clearSelection()
  182. const {
  183. data: { dataList, total }
  184. } = await checkEntity({ node_name: this.keyWordData })
  185. this.tableData = dataList
  186. this.tableRequset.total = total
  187. } catch (error) {}
  188. },
  189. async addEntityAPI() {
  190. try {
  191. const addData = {
  192. node_name: this.form.name,
  193. node_label: this.form.category
  194. }
  195. const { code } = await addEntity(addData)
  196. if (code === 200) {
  197. this.$message({
  198. type: 'success',
  199. message: '操作成功!'
  200. })
  201. this.handleClose()
  202. this.getEntityAPI()
  203. }
  204. } catch (error) {}
  205. },
  206. async updateEntityAPI() {
  207. try {
  208. const updateData = {
  209. node_id: this.form.id,
  210. new_node_name: this.form.name,
  211. new_node_label: this.form.category
  212. }
  213. const { code } = await updateEntity(updateData)
  214. if (code === 200) {
  215. this.$message({
  216. type: 'success',
  217. message: '操作成功!'
  218. })
  219. this.handleClose()
  220. this.getEntityAPI()
  221. }
  222. } catch (error) {}
  223. },
  224. openDialog() {
  225. this.dialogTitle = '新增'
  226. this.dialogVisible = true
  227. },
  228. handleClose() {
  229. this.dialogVisible = false
  230. this.form = {
  231. id: '',
  232. name: '',
  233. category: ''
  234. }
  235. },
  236. handUpdate(row) {
  237. this.dialogTitle = '编辑'
  238. this.form = deepClone(row)
  239. this.dialogVisible = true
  240. },
  241. submit() {
  242. this.$refs.form.validate((valid) => {
  243. if (valid) {
  244. switch (this.dialogTitle) {
  245. case '编辑':
  246. this.updateEntityAPI()
  247. break
  248. case '新增':
  249. this.addEntityAPI()
  250. break
  251. }
  252. }
  253. })
  254. },
  255. selection(val) {
  256. this.tableCheckItems = val
  257. },
  258. remove(row) {
  259. this.$confirm('是否删除该数据', '提示', {
  260. confirmButtonText: '确定',
  261. cancelButtonText: '取消',
  262. type: 'warning'
  263. })
  264. .then(() => {
  265. this.deleteEntityAPI(row.map((e) => e.id))
  266. })
  267. .catch(() => {})
  268. }
  269. }
  270. }
  271. </script>
  272. <style lang="scss" scoped>
  273. </style>