km-kmap-table.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <template>
  2. <table :class="$style.table">
  3. <colgroup>
  4. <col :class="$style.label" />
  5. <col :class="$style.input" />
  6. <col :class="$style.label" />
  7. <col :class="$style.input" />
  8. </colgroup>
  9. <tr v-show="!docReadonly">
  10. <sd-form-item-td
  11. name="kmapCategory"
  12. :colspan="3"
  13. :input-props="{ defaultValue: defaultCategory }"
  14. >
  15. <template v-slot:read-and-edit="{ editable }">
  16. <km-tree-select
  17. v-model="model.kmapCategory"
  18. :editable="editable"
  19. tree-data-url="api/xcoa-mobile/v1/km-kmap-category/kmap-category-tree"
  20. ></km-tree-select>
  21. </template>
  22. </sd-form-item-td>
  23. </tr>
  24. <tr v-show="!docReadonly">
  25. <sd-form-item-td name="kmapName" :colspan="3" />
  26. </tr>
  27. <tr v-show="!docReadonly">
  28. <sd-form-item-td name="label" :colspan="3">
  29. <template v-slot:read-and-edit="{ editable }">
  30. <km-tag-picker v-model="model.label" :editable="editable" />
  31. </template>
  32. </sd-form-item-td>
  33. </tr>
  34. <tr v-show="!docReadonly">
  35. <sd-form-item-td name="abstractMessage" :colspan="3">
  36. <a-textarea v-model="model.abstractMessage" />
  37. </sd-form-item-td>
  38. </tr>
  39. <tr v-show="!docReadonly">
  40. <sd-form-item-td name="cover" :colspan="3">
  41. <template v-slot:read-and-edit="{ editable }">
  42. <km-upload-img
  43. v-model="model.cover"
  44. :read-only="!editable"
  45. :group-id="JSON.parse(fields.coverAttachment.value).value"
  46. ></km-upload-img>
  47. </template>
  48. </sd-form-item-td>
  49. </tr>
  50. <tr v-show="!docReadonly">
  51. <sd-form-item-td name="creatorName" />
  52. <sd-form-item-td name="createDeptName" />
  53. </tr>
  54. <tr v-show="!docReadonly">
  55. <sd-form-item-td name="type" :input-props="{ defaultValue: '1' }" />
  56. <td v-if="model.type === '1'" colspan="2">
  57. <a-button type="primary" @click="fnSelectKmapTemplate">
  58. 选择模板
  59. </a-button>
  60. </td>
  61. </tr>
  62. <tr v-show="!docReadonly">
  63. <sd-form-item-td
  64. name="kmKmapKnowledgeList"
  65. :label="null"
  66. :colspan="4"
  67. :hidden="model.type === '1'"
  68. :input-props="{
  69. columns: [
  70. { dataIndex: 'type', sdHidden: true },
  71. { dataIndex: 'link', sdHidden: true },
  72. { dataIndex: 'knowledgeId', sdHidden: true },
  73. { dataIndex: 'title' },
  74. { dataIndex: 'categoryName' },
  75. ],
  76. readOnly: true,
  77. }"
  78. >
  79. <template v-slot:input-form="scope">
  80. <sd-form-item name="type"> </sd-form-item>
  81. <sd-form-item name="title" :hidden="scope.model.type === '1'">
  82. <a-input
  83. ref="childTitle"
  84. v-model="scope.model.title"
  85. placeholder="请点击选择"
  86. @click="fnShowSelect($event)"
  87. /></sd-form-item>
  88. <sd-form-item
  89. :hidden="scope.model.type === '1'"
  90. name="categoryName"
  91. :input-props="{ disabled: true }"
  92. ></sd-form-item>
  93. <sd-form-item name="title" :hidden="scope.model.type === '0'"> </sd-form-item>
  94. <sd-form-item :hidden="scope.model.type === '0'" name="categoryName"></sd-form-item>
  95. <sd-form-item :hidden="scope.model.type === '0'" name="link"></sd-form-item>
  96. <a-modal
  97. :destroy-on-close="true"
  98. title="选择知识"
  99. :width="1000"
  100. :mask-closable="false"
  101. :footer="null"
  102. :confirm-loading="confirmLoading"
  103. :visible="showSelectDoc"
  104. @cancel="showSelectDoc = false"
  105. >
  106. <km-knowledage-base
  107. :is-selectd="true"
  108. @selectedDoc="fnSelectedDoc($event, scope.model)"
  109. />
  110. </a-modal>
  111. </template>
  112. </sd-form-item-td>
  113. </tr>
  114. <tr v-show="docReadonly && model.type === '0'">
  115. <a-table :pagination="false" :columns="childColumns" :data-source="model.kmKmapKnowledgeList">
  116. <a slot="fldSubject" slot-scope="text, record" @click="fnOpenDoc(record)">
  117. {{ text }}
  118. </a>
  119. </a-table>
  120. </tr>
  121. <tr>
  122. <td colspan="4">
  123. <div v-if="model.type === '1'">
  124. <km-js-mind ref="jsmind" v-model="model.kmapTemplate" :read-only="docReadonly" />
  125. </div>
  126. </td>
  127. </tr>
  128. </table>
  129. </template>
  130. <script>
  131. import { Message } from 'ant-design-vue'
  132. import pickValues from '@/common/services/pick-values'
  133. import PageService from '@/common/services/page-service'
  134. import sdListPickerVue from '@/common/components/sd-list-picker.vue'
  135. import KmKnowledageBase from '../knowledge-base/km-knowledage-base'
  136. import components from './_import-components/km-kmap-table-import'
  137. export default {
  138. name: 'KmKmapTable',
  139. components: {
  140. ...components,
  141. 'km-knowledage-base': KmKnowledageBase,
  142. },
  143. props: {
  144. model: {
  145. type: Object,
  146. default: () => {},
  147. },
  148. fields: {
  149. type: Object,
  150. default: () => {},
  151. },
  152. docReadonly: {
  153. type: Boolean,
  154. default: false,
  155. },
  156. defaultCategory: {
  157. type: [Array, String],
  158. default: undefined,
  159. },
  160. },
  161. inject: {
  162. oaKmapContext: { default: () => ({}) },
  163. },
  164. data() {
  165. return {
  166. showSelectDoc: false,
  167. confirmLoading: false,
  168. KmapTemplateId: null,
  169. childColumns: [
  170. { dataIndex: 'title', title: '知识标题', scopedSlots: { customRender: 'fldSubject' } },
  171. { dataIndex: 'categoryName', title: '所属分类' },
  172. ],
  173. }
  174. },
  175. methods: {
  176. // 打开选择知识modal
  177. fnShowSelect(event) {
  178. if (event) {
  179. event.srcElement.blur()
  180. }
  181. this.showSelectDoc = true
  182. },
  183. // 选中知识
  184. fnSelectedDoc(records, model) {
  185. model.knowledgeId = records.id
  186. model.title = records.title
  187. model.categoryName = records.categoryName
  188. this.showSelectDoc = false
  189. this.$refs.childTitle.focus()
  190. this.$refs.childTitle.blur()
  191. },
  192. // 选择模板
  193. fnSelectKmapTemplate() {
  194. pickValues(sdListPickerVue, {
  195. single: true,
  196. loadListData: this.fnGetKmapTemplateList,
  197. // singleColumn: true,
  198. title: '选择模板',
  199. value: this.KmapTemplateId,
  200. }).then((res) => {
  201. if (!res) return
  202. const key = Symbol.for()
  203. const hide = Message.loading({ content: '处理中...', key })
  204. this.KmapTemplateId = res
  205. // 获取模板的值
  206. const params = {
  207. id: res[0].id,
  208. }
  209. PageService.get(params, 'kmap/kmKmapTemplate/kmKmapTemplate').then((res) => {
  210. const mapTemplate = res.data.pageFormData.pageFieldInfos.find(
  211. (item) => item.name === 'mapTemplate'
  212. )
  213. this.oaKmapContext.$refs.kMapDetail.setFieldValue('kmapTemplate', mapTemplate.value)
  214. this.$refs.jsmind.refresh(mapTemplate.value)
  215. hide()
  216. })
  217. })
  218. },
  219. // 获取知识地图模板数据
  220. fnGetKmapTemplateList() {
  221. const param = {
  222. columns: 'name,state,creationTim',
  223. maxResults: -1,
  224. startPosition: 0,
  225. expressions: [
  226. {
  227. dataType: 'str',
  228. name: 'state',
  229. op: 'eq',
  230. stringValue: 1,
  231. },
  232. ],
  233. formId: 'kmKmapTemplate',
  234. orderBy: 'creationTime desc',
  235. }
  236. return PageService.getList(param).then((res) => {
  237. return res.data.data.map((item) => {
  238. return {
  239. id: item.id,
  240. name: item.name,
  241. }
  242. })
  243. })
  244. },
  245. fnOpenDoc(record) {
  246. if (record.type === '1') {
  247. // 说明是外部知识
  248. window.open(record.link, '_blank')
  249. } else {
  250. window.open(`#/km-knowledage-view?id=${record.knowledgeId}&title=${record.title}`, '_blank')
  251. }
  252. },
  253. },
  254. }
  255. </script>
  256. <style module lang="scss">
  257. @use '@/common/design' as *;
  258. .table {
  259. .label {
  260. width: 20%;
  261. }
  262. .input {
  263. width: 30%;
  264. }
  265. }
  266. </style>