risk-case-form.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. <template>
  2. <div>
  3. <sd-webflow ref="flow" :validate-form="validForm" :removed-tabs="['sdRelatedDoc']">
  4. <template v-slot:form="{ model, fields }">
  5. <table>
  6. <tr>
  7. <td style="border: none">
  8. <audit-advanced-group
  9. :expand="part1Expand"
  10. :expand-str="'part1Expand'"
  11. :group-label="'基本信息'"
  12. tablestyle="''"
  13. @changedClick="changedClick"
  14. ></audit-advanced-group>
  15. </td>
  16. </tr>
  17. </table>
  18. <table v-show="part1Expand">
  19. <tr>
  20. <!-- 案例名称 -->
  21. <sd-form-item-td name="title" />
  22. <!-- 案件类别 -->
  23. <sd-form-item-td name="caseType" />
  24. </tr>
  25. <tr>
  26. <!-- 案件描述 -->
  27. <sd-form-item-td name="caseDesc" :colspan="3">
  28. <a-textarea v-model="model.caseDesc" :auto-size="{ maxRows: 3, minRows: 3 }" />
  29. </sd-form-item-td>
  30. </tr>
  31. <tr>
  32. <!-- 发生年份 -->
  33. <!-- <td class="ant-form-item-label ant-form-item-label"
  34. ><label title="发生年份" class="">发生年份</label></td
  35. >
  36. <td>
  37. <a-date-picker
  38. v-model="defaultValyears"
  39. placeholder="请选择年"
  40. mode="year"
  41. :open="dataopen"
  42. format="YYYY"
  43. :allow-clear="true"
  44. @openChange="openChangeYear"
  45. @panelChange="panelChangeYear"
  46. /></td> -->
  47. <sd-form-item-td name="caseYear">
  48. <a-date-picker
  49. v-model="defaultValyears"
  50. placeholder="请选择年"
  51. mode="year"
  52. :open="dataopen"
  53. format="YYYY"
  54. :allow-clear="true"
  55. @openChange="openChangeYear"
  56. @panelChange="panelChangeYear"
  57. />
  58. </sd-form-item-td>
  59. <!-- 案例来源 -->
  60. <sd-form-item-td name="caseSource" />
  61. </tr>
  62. <tr>
  63. <!-- 经验与教训启示 -->
  64. <sd-form-item-td name="lessons" :colspan="3">
  65. <a-textarea v-model="model.lessons" :auto-size="{ maxRows: 3, minRows: 3 }" />
  66. </sd-form-item-td>
  67. </tr>
  68. <tr>
  69. <!-- 编制人员 -->
  70. <sd-form-item-td name="creatorName" />
  71. <!-- 编制日期 -->
  72. <sd-form-item-td v-if="initParam()" name="releaseDate" />
  73. </tr>
  74. <tr>
  75. <!-- 创建单位 -->
  76. <sd-form-item-td name="createDeptName" />
  77. </tr>
  78. <tr>
  79. <!-- 附件 -->
  80. <sd-form-item-td name="attachment" :colspan="3">
  81. <template v-slot:read-and-edit="{ editable }">
  82. <sd-attachment
  83. v-model="model.attachment"
  84. :group-id="JSON.parse(fields.attachment.value).value"
  85. :read-only="!editable"
  86. ></sd-attachment>
  87. </template>
  88. </sd-form-item-td>
  89. </tr>
  90. </table>
  91. <table>
  92. <tr
  93. ><td :colspan="4">
  94. <sd-form-item name="riskCaseEventList" :label="null">
  95. <template v-slot:read-and-edit="{ editable }">
  96. <audit-advanced-group
  97. :expand="part2Expand"
  98. :expand-str="'part2Expand'"
  99. :group-label="'相关风险事项'"
  100. @changedClick="changedClick"
  101. >
  102. <template>
  103. <risk-identification-child-table
  104. ref="docformMeasureRel"
  105. v-model="model.riskCaseEventList"
  106. :class="$style.deptPlanChild"
  107. :label="null"
  108. :read-only="!editable"
  109. :select-data="true"
  110. :fields="
  111. [
  112. {
  113. caption: '序号',
  114. name: 'sortNum',
  115. dataType: 'number',
  116. },
  117. ].concat(Array.from(fields.riskCaseEventList.attr.dync))
  118. "
  119. :columns="columns"
  120. @select="measureRelSelect"
  121. >
  122. </risk-identification-child-table>
  123. </template>
  124. </audit-advanced-group>
  125. </template> </sd-form-item
  126. ></td>
  127. </tr>
  128. </table>
  129. </template>
  130. </sd-webflow>
  131. <!-- 风险事项选择器-->
  132. <div v-show="false">
  133. <ic-measure-picker
  134. ref="icRiskeventsel"
  135. v-model="eventSelect"
  136. :version-id="this.FxversionId"
  137. :types="'FK'"
  138. :org-id="this.orgId"
  139. :org-name="this.orgName + '风险库'"
  140. :single="false"
  141. :read-only="false"
  142. @change="fnqd"
  143. ></ic-measure-picker>
  144. </div>
  145. </div>
  146. </template>
  147. <script>
  148. import moment from 'moment'
  149. import { Modal } from '@/common/one-ui'
  150. import { getUserInfo } from '@/common/store-mixin'
  151. import icMeasurePicker from '@product/iam/components/ic-picker/ic-measure-picker.vue'
  152. import auditAdvancedGroup from '../../components/audit-advanced-group.vue'
  153. import auditAdvancedGroupMixins from '../../components/audit-advanced-group-mixins'
  154. import CommonService from '../../core/api/common-service'
  155. import riskService from '../risklib/risk-service'
  156. import riskTasksService from '../task/risk-tasks-service'
  157. import riskIdentificationChildTable from '../task/riskIdentification/components/risk-identification-child-table.vue'
  158. import components from './_import-components/risk-case-form-import'
  159. export default {
  160. name: 'RiskCaseForm',
  161. metaInfo: {
  162. title: '风险案例',
  163. },
  164. components: {
  165. ...components,
  166. icMeasurePicker,
  167. riskIdentificationChildTable,
  168. auditAdvancedGroup,
  169. },
  170. mixins: [auditAdvancedGroupMixins],
  171. data() {
  172. return {
  173. defaultValyears: moment().format('YYYY'),
  174. part1Expand: true,
  175. part2Expand: true,
  176. dataopen: false,
  177. eventSelect: [],
  178. FxversionId: null,
  179. FxversionCode: null,
  180. orgId: null,
  181. orgName: null,
  182. columns: [
  183. { dataIndex: 'id', sdHidden: true },
  184. { dataIndex: 'parentId', sdHidden: true },
  185. { dataIndex: 'versionId', sdHidden: true },
  186. { dataIndex: 'riskCategoryId', sdHidden: true },
  187. { dataIndex: 'eventId', sdHidden: true },
  188. {
  189. title: '序号',
  190. dataIndex: 'sortNum',
  191. width: '50px',
  192. customRender: (text, record, index) => `${index + 1}`,
  193. },
  194. { dataIndex: 'eventName' },
  195. { dataIndex: 'eventCode' },
  196. { dataIndex: 'riskCategoryPath' },
  197. { dataIndex: 'versionCode' },
  198. ],
  199. }
  200. },
  201. created() {
  202. // 获取当前用户所属风控机构的风险库
  203. CommonService.getCurrentUserCompany().then((res1) => {
  204. this.orgName = res1.name
  205. riskTasksService.findIamOrgId(res1.id, 'riskLibraryVersion').then((res2) => {
  206. if (res2.data) {
  207. this.orgId = res2.data.toString()
  208. riskService.getversion(this.orgId).then((res) => {
  209. if (res.data.id) {
  210. this.FxversionId = res.data.id.toString()
  211. this.FxversionCode = res.data.versionCode
  212. }
  213. })
  214. }
  215. })
  216. })
  217. },
  218. mounted() {
  219. const caseYear = this.$refs.flow.FlowData.processFormData.processFormPropertyValues.find(
  220. (item) => item.name === 'caseYear'
  221. )?.value
  222. if (this.$route.query.businessTypeId === '' || this.$route.query.businessTypeId === undefined) {
  223. this.defaultValyears =
  224. caseYear === ''
  225. ? this.defaultValyears
  226. : moment(new Date().setFullYear(caseYear)).format('YYYY')
  227. this.$refs.flow.setFieldValue('caseYear', caseYear + '') // 字段caseYear赋值字符串类型的值 add zhangtt 2023-2-24
  228. } else {
  229. this.$refs.flow.setFieldValue('caseYear', this.defaultValyears + '')
  230. }
  231. },
  232. methods: {
  233. // 点击选择框事件 弹出日期组件选择年
  234. openChangeYear(status) {
  235. if (status) {
  236. this.dataopen = true
  237. } else {
  238. this.dataopen = false
  239. }
  240. },
  241. // 选择年之后 关闭弹框
  242. panelChangeYear(value) {
  243. this.dataopen = false
  244. this.defaultValyears = moment(value).format('YYYY')
  245. this.$refs.flow.setFieldValue('caseYear', this.defaultValyears)
  246. },
  247. initParam(val) {
  248. var flow = this.$refs.flow
  249. if (flow === undefined) {
  250. return false
  251. }
  252. if (flow.getFieldValue('releaseDate') === undefined) {
  253. flow.setFieldValue('releaseDate', flow.getFieldValue('creationTime'))
  254. }
  255. return true
  256. },
  257. measureRelSelect() {
  258. if (this.FxversionId) {
  259. this.$refs.icRiskeventsel.openPicker()
  260. } else {
  261. Modal.info({
  262. content: '请配置机构对应的风险库',
  263. })
  264. }
  265. },
  266. fnqd(data) {
  267. const ids = []
  268. let iamAuditEvents = []
  269. if (this.$refs.flow.getFieldValue('riskCaseEventList')) {
  270. iamAuditEvents = this.$refs.flow.getFieldValue('riskCaseEventList')
  271. }
  272. data.forEach((i) => {
  273. let id = i.id.toString()
  274. if (id.indexOf('1000') > -1) {
  275. id = id.substring(4, id.length)
  276. }
  277. if (iamAuditEvents.findIndex((i) => i.eventId.toString() === id) === -1) {
  278. ids.push(parseInt(id))
  279. }
  280. })
  281. riskService.getFxlist(ids).then((data) => {
  282. if (data) {
  283. data.forEach((element) => {
  284. if (
  285. iamAuditEvents.findIndex(
  286. (i) => i.eventCode.toString() === element.eventCode.toString()
  287. ) === -1
  288. ) {
  289. const mmc = {}
  290. mmc.id = null
  291. mmc.riskCategoryPath = element.riskCategoryPath
  292. mmc.riskCategoryId = element.riskCategoryId.toString()
  293. mmc.versionId = parseInt(this.FxversionId)
  294. mmc.eventCode = element.eventCode
  295. mmc.eventName = element.eventName
  296. mmc.eventId = element.id
  297. mmc.versionCode = this.FxversionCode
  298. iamAuditEvents.push(mmc)
  299. }
  300. })
  301. this.visible = false
  302. this.$refs.flow.setFieldValue('riskCaseEventList', iamAuditEvents)
  303. }
  304. })
  305. },
  306. validForm() {
  307. return new Promise((resolve, reject) => {
  308. this.$refs.flow.setFieldValue('caseYear', this.defaultValyears)
  309. resolve(true)
  310. })
  311. },
  312. },
  313. }
  314. </script>
  315. <style module lang="scss">
  316. @use '@/common/design' as *;
  317. .btnselect {
  318. position: relative;
  319. top: 4px;
  320. float: right;
  321. .batchselect {
  322. z-index: 100;
  323. margin-right: 80px;
  324. }
  325. }
  326. </style>