audit-template-form.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. <template>
  2. <audit-form-top-banner :handel-save-form="saveForm" :form-data="mode" @handelSaveForm="saveForm">
  3. <sd-detail-form
  4. ref="docform"
  5. form-id="iamTemplate"
  6. page-id="audit/template/iamTemplate"
  7. :record-id="this.$route.query.record ? parseInt(this.$route.query.record) : null"
  8. :class="$style.form"
  9. :read-only="readOnly"
  10. @close="close(true)"
  11. @saved="saved"
  12. @sdFormReady="sdFormReady"
  13. >
  14. <template v-slot="{ model, fields }">
  15. <table
  16. ><tr
  17. ><td style="padding-left:5px;border:none">
  18. <audit-advanced-group
  19. :expand="templateExpand"
  20. :expand-str="'templateExpand'"
  21. :group-label="'基本信息'"
  22. tablestyle="''"
  23. @changedClick="changedClick"
  24. ></audit-advanced-group> </td></tr
  25. ></table>
  26. <table v-show="templateExpand">
  27. <tr>
  28. <!-- 模板名称 -->
  29. <sd-form-item-td name="templateName">
  30. <a-form-model-item
  31. :rules="[
  32. {
  33. validator: validator,
  34. trigger: ['change', 'blur'],
  35. },
  36. ]"
  37. prop="templateName"
  38. >
  39. <a-input v-model="model.templateName"></a-input
  40. ></a-form-model-item>
  41. </sd-form-item-td>
  42. <!-- 模板类型 -->
  43. <sd-form-item-td v-if="mode === 'VIEW'" name="templateType" />
  44. <sd-form-item-td v-else name="templateType">
  45. <template v-slot:read-and-edit="{ editable }">
  46. <a-select
  47. v-model="model.templateType"
  48. :allow-clear="true"
  49. :options="fields.templateType.attr.selectListItem"
  50. @change="typeChange"
  51. ></a-select>
  52. </template>
  53. </sd-form-item-td>
  54. </tr>
  55. <tr>
  56. <sd-form-item-td
  57. v-if="(mode === 'VIEW') | (isfalse === true)"
  58. :input-props="{ disabled: isfalse }"
  59. name="isDefault"
  60. />
  61. <sd-form-item-td v-else name="isDefault">
  62. <template v-slot:read-and-edit="{ editable }">
  63. <a-radio-group v-model="model.isDefault" @change="ischange(model)">
  64. <a-radio
  65. v-for="(v, index) in fields.isDefault.attr.selectListItem"
  66. :key="index"
  67. :allow-clear="true"
  68. :value="v.value"
  69. @click="fnRadioChange"
  70. >{{ v.label }}</a-radio
  71. >
  72. </a-radio-group>
  73. </template>
  74. </sd-form-item-td>
  75. <sd-form-item-td :hidden="model.isDefault !== '0'" name="rangeDeptMember">
  76. <template v-slot:read-and-edit="{ editable }">
  77. <span v-if="editable">
  78. <AuditGroupPicker
  79. v-model="model.rangeDeptMember"
  80. :single="false"
  81. :read-only="false"
  82. :root-node="rootNode"
  83. :selectall="rootNode === undefined ? true : false"
  84. :top-node-text="rootNode === undefined ? '审计机构库' : ''"
  85. :treeparams="
  86. rootNode === undefined
  87. ? {
  88. formId: 'IAM_ORG',
  89. idColumnId: 'id',
  90. nameColumnId: 'org_name',
  91. parentColumnId: 'parent_id',
  92. otherColumnId: ['org_id', 'creation_time'],
  93. configId: '11',
  94. }
  95. : {}
  96. "
  97. />
  98. </span>
  99. <span v-else>
  100. {{ fields.rangeDeptMember.attr.displayValue }}
  101. </span>
  102. </template>
  103. </sd-form-item-td>
  104. </tr>
  105. <tr>
  106. <!-- 模板说明 -->
  107. <sd-form-item-td name="templateDesc" :colspan="3">
  108. <a-textarea v-model="model.templateDesc" :rows="3" />
  109. </sd-form-item-td>
  110. </tr>
  111. <tr>
  112. <!-- 编制人员 -->
  113. <sd-form-item-td name="authName" />
  114. <!-- 编制日期 -->
  115. <sd-form-item-td name="authTime" />
  116. </tr>
  117. <tr>
  118. <!-- 附件 -->
  119. <sd-form-item-td v-if="initparams(model)" name="attachment" :colspan="3">
  120. <template v-slot:read-and-edit="{ editable }">
  121. <sd-attachment
  122. :key="key"
  123. ref="attch"
  124. v-model="model.attachment"
  125. :read-only="editable !== true"
  126. :max="1"
  127. :accept="acceptType"
  128. :group-id="JSON.parse(fields.attachment.value).value"
  129. >
  130. </sd-attachment>
  131. </template>
  132. </sd-form-item-td>
  133. </tr>
  134. </table>
  135. </template>
  136. </sd-detail-form>
  137. </audit-form-top-banner>
  138. </template>
  139. <script>
  140. import { Message } from 'ant-design-vue'
  141. import debounce from 'lodash.debounce'
  142. import axios from '@/common/services/axios-instance'
  143. import { getUserInfo } from '@/common/store-mixin'
  144. import crossWindowWatcher from '@/common/services/cross-window-watcher'
  145. import auditFormTopBanner from '../../components/audit-form-top-banner'
  146. import auditAdvancedGroup from '../../components/audit-advanced-group.vue'
  147. import auditAdvancedGroupMixins from '../../components/audit-advanced-group-mixins'
  148. import AuditGroupPicker from '../../components/picker/audit-group-picker.vue'
  149. import components from './_import-components/audit-template-form-import'
  150. export default {
  151. name: 'AuditTemplateForm',
  152. metaInfo: {
  153. title: '审计模板库',
  154. },
  155. components: {
  156. ...components,
  157. auditAdvancedGroup,
  158. AuditGroupPicker,
  159. auditFormTopBanner,
  160. },
  161. mixins: [auditAdvancedGroupMixins],
  162. data() {
  163. return {
  164. mode: null,
  165. readOnly: false,
  166. key: 0,
  167. isfalse: false,
  168. saveFlag: true,
  169. templateExpand: true,
  170. rootNode: {},
  171. acceptType: '',
  172. templateType: '',
  173. }
  174. },
  175. created() {
  176. let userInfo = getUserInfo()
  177. getUserInfo().roles.find((item) => {
  178. if (item.code === 'ADMINISTRATOR') {
  179. return (this.rootNode = { code: 0, name: '审计机构库', id: 0 })
  180. } else {
  181. const params = {
  182. orgId: userInfo.deptId,
  183. }
  184. axios({
  185. url: 'api/xcoa-mobile/v1/iamorg/getUserGroup',
  186. method: 'get',
  187. }).then((res) => {
  188. userInfo = res.data
  189. params.orgId = res.data.id
  190. axios({
  191. url: 'api/xcoa-mobile/v1/iamorg/findIamOrgId',
  192. method: 'post',
  193. params,
  194. }).then((res) => {
  195. this.id = res.data
  196. const deptCode = userInfo.id.toString()
  197. const deptName = userInfo.name
  198. this.rootNode = { code: deptCode, name: deptName, id: this.id }
  199. })
  200. })
  201. }
  202. })
  203. },
  204. mounted() {
  205. const ini = setInterval(() => {
  206. if (
  207. this.$refs.docform &&
  208. (this.$refs.docform.$refs.form || this.$refs.docform.$refs.sdForm)
  209. ) {
  210. clearInterval(ini)
  211. // const userInfo = getUserInfo()
  212. // const authName = this.$refs.docform.getFieldValue('authName')
  213. // if (authName !== userInfo.name) {
  214. // this.mode = 'VIEW'
  215. // this.readOnly = true
  216. // } else {
  217. this.mode = this.$refs.docform.formData.mode
  218. if (this.mode === 'VIEW') {
  219. this.readOnly = true
  220. }
  221. // 加载时如果默认为否,则设置适用机构范围为必填
  222. const isDefault = this.$refs.docform.formData.pageFormData.pageFieldInfos.find((item) => {
  223. return item.name === 'isDefault'
  224. }).value
  225. if (isDefault === '1') {
  226. this.fnRadioChange({ currentTarget: { value: '1' } })
  227. } else {
  228. this.fnRadioChange({ currentTarget: { value: '0' } })
  229. }
  230. // }
  231. }
  232. }, 100)
  233. },
  234. methods: {
  235. fnRadioChange(e) {
  236. const val = e.currentTarget.value
  237. if (val === '1') {
  238. this.$refs.docform.formData.pageFormData.pageFieldInfos.find((item) => {
  239. return item.name === 'rangeDeptMember'
  240. }).required = false
  241. } else {
  242. this.$refs.docform.formData.pageFormData.pageFieldInfos.find((item) => {
  243. return item.name === 'rangeDeptMember'
  244. }).required = true
  245. }
  246. },
  247. // 页面加载完成后
  248. sdFormReady() {},
  249. ischange(model) {
  250. const value = this.$refs.docform.getFieldValue('isDefault')
  251. if (value === '1') {
  252. this.$refs.docform.setFieldValue('rangeDeptMember', null)
  253. model.rangeDeptMember = null
  254. }
  255. },
  256. initparams(model) {
  257. // axios({
  258. // url: 'api/xcoa-mobile/v1/iamorg/getAccountGroup',
  259. // method: 'get',
  260. // }).then((res) => {
  261. // if (res.data === true) {
  262. // this.isfalse = false
  263. // } else {
  264. // this.isfalse = true
  265. // if (model.id === undefined) {
  266. // model.isDefault = '0'
  267. // }
  268. // }
  269. // })
  270. const value = model.templateType
  271. if (value === '01' || value === '04') {
  272. this.acceptType = '.xls,.xlsx'
  273. } else if (value === '07') {
  274. // 其他
  275. this.acceptType =
  276. '.xls,.xlsx,.doc,.docx,.pdf,.ofd,.jpg,.png,.gif,.bmp,.txt,.text,.ppt,.pptx,.zip,.rar,.7z'
  277. } else {
  278. this.acceptType = '.doc,.docx'
  279. }
  280. return true
  281. },
  282. // 类型变化时
  283. typeChange() {
  284. const attch = this.$refs.attch.value
  285. if (attch.length > 0) {
  286. const groupId = JSON.parse(
  287. this.$refs.docform.formData.pageFormData.pageFieldInfos.find(
  288. (item) => item.name === 'attachment'
  289. ).value
  290. ).value
  291. attch.forEach((item) => {
  292. axios.delete(`api/xcoa-mobile/v1/attachment-extend/attachments-delete/` + groupId, {
  293. params: {
  294. attachmentId: item.Unid,
  295. formId: '',
  296. beanId: '',
  297. instId: 0,
  298. lockId: this.lockId,
  299. },
  300. })
  301. })
  302. this.key = this.key + 1
  303. this.$refs.attch.getFileList()
  304. }
  305. },
  306. validator(rule, value, callback) {
  307. value = encodeURIComponent(value)
  308. const id = this.$route.query.record || ''
  309. debounce(() => {
  310. axios
  311. .get(`api/xcoa-mobile/v1/iamtemplate/template-name?templateName=${value}&id=` + id)
  312. .then((res) => {
  313. if (res?.data === true) {
  314. callback()
  315. } else {
  316. callback('已存在,不允许重复')
  317. }
  318. })
  319. }, 500)()
  320. },
  321. close(flag) {
  322. crossWindowWatcher.notifyChange(this.$route.fullPath, flag)
  323. window.close()
  324. },
  325. // 保存
  326. saveForm() {
  327. this.$refs.docform.validateFields().then(() => {
  328. Message.success('保存成功').then(() => {
  329. this.$refs.docform.saveBtnClick()
  330. })
  331. })
  332. },
  333. saved() {
  334. this.close(true)
  335. },
  336. },
  337. }
  338. </script>
  339. <style module lang="scss">
  340. @import '@/webflow/sd-flow-form.scss';
  341. </style>