audit-matters-catalog.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. <template>
  2. <div :class="$style.wrapHeight">
  3. <div :class="$style.rowHeight">
  4. <audit-matters-catalog-tree
  5. ref="auditMattersCatalogTree"
  6. show-line
  7. top-node-text="指引库"
  8. :is-select-dep="true"
  9. :draggable="true"
  10. manager-type="view"
  11. @treeSelect="treeSelect"
  12. @depChanged="depChanged"
  13. @dragNodeOk="dragNodeOk"
  14. ></audit-matters-catalog-tree>
  15. <div :class="$style.rightcard">
  16. <a-card>
  17. <sd-data-table-ex
  18. :key="key"
  19. ref="dataTable"
  20. :editnode="editnode"
  21. form-id="iamAuditMattersCatalog"
  22. page-id="audit/matters/iamAuditMattersCatalog"
  23. :columns="columns1"
  24. :actions="actions"
  25. :search-fields="['catalogName']"
  26. :filter-expressions="expressions"
  27. :show-selection="(item) => item.editAndDeleteAuth !== 0"
  28. :custom-delete-fun="deleteRows"
  29. @recordSaved="onRecordSaved"
  30. @formBtnClick="formBtnClick"
  31. >
  32. <template slot="catalogName" slot-scope="text, record">
  33. <a
  34. v-if="record.editAndDeleteAuth !== 0"
  35. @click="
  36. () => {
  37. $refs.dataTable.showDetailModal(
  38. record.id,
  39. 'audit/matters/iamAuditMattersCatalog'
  40. )
  41. }
  42. "
  43. >{{ text }}</a
  44. >
  45. <span v-else>{{ text }}</span>
  46. </template>
  47. <!-- 详情表单 -->
  48. <template v-slot:form="{ model }" v-sd-watermark="waterMark" @saved="onSaved">
  49. <!-- 一般字段直接写name即可 -->
  50. <a-form-model-item
  51. prop="catalogCode"
  52. label="分类编号"
  53. :rules="[
  54. { validator: validator },
  55. {
  56. required: true,
  57. trigger: ['change', 'blur'],
  58. },
  59. ]"
  60. >
  61. <a-input v-model.trim="model.catalogCode" />
  62. </a-form-model-item>
  63. <!-- <sd-form-item name="catalogCode" /> -->
  64. <sd-form-item name="catalogName" />
  65. <sd-form-item name="catalogDesc">
  66. <a-textarea v-model="model.catalogDesc" :rows="3" />
  67. </sd-form-item>
  68. <sd-form-item name="isEnd" />
  69. <sd-form-item name="sortNumber" />
  70. <sd-form-item
  71. :hidden="true"
  72. name="parentId"
  73. :input-props="{ defaultValue: parentId, disabled: true }"
  74. />
  75. <sd-form-item
  76. :hidden="true"
  77. name="orgId"
  78. :input-props="{ defaultValue: orgId, disabled: true }"
  79. />
  80. <sd-form-item
  81. :hidden="true"
  82. name="catalogPath"
  83. :input-props="{ defaultValue: catalogPath, disabled: true }"
  84. />
  85. </template>
  86. </sd-data-table-ex>
  87. </a-card>
  88. </div>
  89. </div>
  90. </div>
  91. </template>
  92. <script>
  93. import { Modal, message } from 'ant-design-vue'
  94. import TableColumnTypes from '@/common/services/table-column-types'
  95. import systemManage from '@/system-manage/system-manage'
  96. import debounce from 'lodash.debounce'
  97. import axios from '@/common/services/axios-instance'
  98. import TableActionTypes from '@/common/services/table-action-types'
  99. import auditMattersCatalogTree from './audit-matters-catalog-tree'
  100. import auditMattersService from './audit-matters-service'
  101. import components from './_import-components/audit-matters-catalog-import'
  102. export default {
  103. name: 'AuditMattersCatalog',
  104. metaInfo: {
  105. title: '指引分类配置',
  106. },
  107. components: {
  108. ...components,
  109. auditMattersCatalogTree,
  110. },
  111. data() {
  112. return {
  113. editnode: true, // 列表是否可以新建
  114. key: 0,
  115. waterMark: systemManage.getFormWaterMark(),
  116. treeData: [],
  117. columns1: [
  118. {
  119. dataIndex: 'id',
  120. sdHidden: true,
  121. },
  122. {
  123. dataIndex: 'parentId',
  124. sdHidden: true,
  125. },
  126. {
  127. title: '排序号',
  128. dataIndex: 'sortNumber',
  129. defaultSortOrder: 'ascend',
  130. width: '100px',
  131. },
  132. {
  133. title: '分类编号',
  134. dataIndex: 'catalogCode',
  135. },
  136. {
  137. title: '分类名称',
  138. dataIndex: 'catalogName',
  139. scopedSlots: { customRender: 'catalogName' },
  140. },
  141. {
  142. title: '创建时间',
  143. dataIndex: 'creationTime',
  144. sorter: true,
  145. sdRender: TableColumnTypes.date,
  146. },
  147. {
  148. title: '是否末级分类',
  149. dataIndex: 'isEnd',
  150. },
  151. ],
  152. actions: [
  153. {
  154. label: '新建',
  155. type: 'primary',
  156. callback: this.create,
  157. permission: 'iamAuditMatters-create',
  158. },
  159. {
  160. label: '删除',
  161. id: 'delete',
  162. permission: 'iamAuditMatters-delete',
  163. type: 'delete',
  164. callback: this.deleteRows,
  165. },
  166. ],
  167. expressions: [
  168. {
  169. dataType: 'long',
  170. name: 'parentId',
  171. op: 'eq',
  172. longValue: null,
  173. },
  174. ],
  175. parentId: 0,
  176. orgId: null,
  177. parentName: '业务类型',
  178. catalogPath: null,
  179. isEnd: null,
  180. }
  181. },
  182. created() {},
  183. methods: {
  184. // 节点拖拽完成
  185. dragNodeOk() {
  186. this.$refs.dataTable.clearSelection()
  187. this.$refs.dataTable.refresh()
  188. },
  189. treeSelect(selectedKeys, info) {
  190. this.catalogPath = null
  191. // 父级id
  192. if (info != null && info.selectedNodes[0]) {
  193. this.parentId = Number(info.selectedNodes[0].data.props.id)
  194. this.parentName = info.selectedNodes[0].data.props.text // 父级名称
  195. // this.orgId = Number(info.selectedNodes[0].data.props.id)
  196. this.editnode = info.selectedNodes[0].data.props.edit
  197. if (info.selectedNodes[0].data.props.props) {
  198. this.isEnd = info.selectedNodes[0].data.props.props.isEnd
  199. }
  200. // 判断父节点不为根节点
  201. if (this.parentId !== this.$refs.auditMattersCatalogTree.depvalue) {
  202. if (info.selectedNodes[0].data.props.props.catalogPath) {
  203. this.catalogPath =
  204. info.selectedNodes[0].data.props.props.catalogPath + ',' + this.parentId
  205. } else {
  206. this.catalogPath = this.parentId
  207. }
  208. }
  209. } else {
  210. if (selectedKeys.id) {
  211. this.parentId = Number(selectedKeys.id)
  212. this.parentName = selectedKeys.text // 父级名称
  213. } else {
  214. this.parentId = 0
  215. }
  216. }
  217. // 如果是末级,则隐藏新建按钮
  218. this.expressions.forEach((item) => {
  219. if (item.name === 'parentId') {
  220. item.longValue = this.parentId
  221. }
  222. })
  223. this.expressions = [...this.expressions]
  224. this.orgId = this.$refs.auditMattersCatalogTree.depvalue
  225. },
  226. // 部门下拉框选择事件
  227. depChanged(value, info) {
  228. this.orgId = this.$refs.auditMattersCatalogTree.depvalue
  229. },
  230. // 新建保存回调刷新树
  231. onRecordSaved() {
  232. this.$refs.auditMattersCatalogTree.refreshNode(this.parentId)
  233. },
  234. // 删除回调
  235. onRecordsDeleted() {
  236. message.success('删除成功')
  237. this.$refs.auditMattersCatalogTree.refreshNode(this.parentId)
  238. },
  239. formBtnClick(evt, btn) {},
  240. validator(rule, value, callback) {
  241. let id = -1
  242. if (this.$refs.dataTable.recordId) {
  243. id = this.$refs.dataTable.recordId
  244. }
  245. value = encodeURIComponent(value)
  246. const url =
  247. `api/xcoa-mobile/v1/iam-audit-matters-catalog/check-category-code?catalogCode=${value}&parentId=${this.parentId}&id=` +
  248. id
  249. debounce(() => {
  250. axios.get(url).then((res) => {
  251. if (res.data) {
  252. callback()
  253. } else {
  254. callback('已存在分类编码,不可以重复')
  255. }
  256. })
  257. }, 500)()
  258. },
  259. deleteRows() {
  260. const ids = this.$refs.dataTable.getSelectedRowKeys()
  261. if (ids.length === 0) {
  262. Modal.info({
  263. content: '请选择需要删除的文件',
  264. })
  265. return
  266. }
  267. // 判断是否有下级
  268. auditMattersService.deleteCheckCategory(ids).then((res) => {
  269. if (!res) {
  270. return new Promise((resolve) => {
  271. Modal.confirm({
  272. title: '您确定删除这项内容吗?',
  273. content: '该层级下有子节点,是否全部删除?',
  274. okText: '删除',
  275. okType: 'danger',
  276. onOk: () => {
  277. this.deleteCategory(ids, resolve)
  278. },
  279. onCancel: () => {
  280. resolve()
  281. },
  282. })
  283. })
  284. } else {
  285. this.deleteCategory(ids, null)
  286. }
  287. })
  288. },
  289. create() {
  290. if (this.parentId === 0) {
  291. message.error('请选择上级节点!')
  292. } else {
  293. if (this.isEnd !== '1') {
  294. this.$refs.dataTable.showDetailModal(null, 'audit/matters/iamAuditMattersCatalog')
  295. } else {
  296. message.error('末级分类下不可再新建分类')
  297. }
  298. }
  299. },
  300. deleteCategory(ids, resolve) {
  301. auditMattersService
  302. .deleteCategory(ids)
  303. .then(() => {
  304. this.$refs.dataTable.clearSelection()
  305. this.onRecordsDeleted()
  306. this.refresh()
  307. })
  308. .finally(resolve)
  309. },
  310. refresh() {
  311. this.$refs.dataTable.refresh()
  312. },
  313. },
  314. }
  315. </script>
  316. <style module lang="scss">
  317. @use '@/common/design' as *;
  318. .wrap-height {
  319. height: 100%;
  320. .row-height {
  321. display: flex;
  322. flex: auto;
  323. height: 100%;
  324. .rightcard {
  325. flex: 1;
  326. width: calc(100% - 20%);
  327. height: 100%;
  328. }
  329. }
  330. }
  331. </style>