audit-data-sqapply-from.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. <template>
  2. <span>
  3. <sd-webflow
  4. ref="docform"
  5. :validate-form="validForm"
  6. :removed-tabs="['sdRelatedDoc']"
  7. :class="$style.form"
  8. @actionBtnClick="actionBtnClick"
  9. >
  10. <template v-slot:form="{ model, fields, FlowData }">
  11. <table>
  12. <colgroup>
  13. <col style="width: 15%;"/>
  14. <col style="width: 35%;"/>
  15. <col style="width: 15%;"/>
  16. <col style="width: 35%;"
  17. /></colgroup>
  18. <tr v-show="false">
  19. <!-- 标题 -->
  20. <sd-form-item-td name="title" :colspan="3" />
  21. </tr>
  22. <tr>
  23. <td colspan="4" style="border:none">
  24. <audit-advanced-group
  25. :expand="expandJ"
  26. :expand-str="'expandJ'"
  27. :group-label="'基本信息'"
  28. @changedClick="changedClick"
  29. />
  30. </td>
  31. </tr>
  32. <tr v-show="expandJ">
  33. <!-- 申请人 -->
  34. <sd-form-item-td name="creatorName" />
  35. <!-- 公司 -->
  36. <sd-form-item-td name="createDeptName" />
  37. </tr>
  38. <tr v-show="expandJ">
  39. <!-- 申请时间 -->
  40. <sd-form-item-td name="creationTime" />
  41. <!-- 授权类型 -->
  42. <sd-form-item-td name="empowerType">
  43. <template>
  44. <a-select v-model="model.empowerType" @change="changeType">
  45. <a-select-option
  46. v-for="(key, i) in fields.empowerType.attr.selectListItem"
  47. :key="i"
  48. :value="key.value"
  49. >
  50. {{ key.label }}
  51. </a-select-option>
  52. </a-select>
  53. </template>
  54. </sd-form-item-td>
  55. </tr>
  56. <tr v-if="model.empowerType === '1' && expandJ">
  57. <td class="ant-form-item-label ant-form-item-label">
  58. <label title="开始日期"> 开始日期 </label>
  59. </td>
  60. <td class="ant-form-item-control-wrapper">
  61. <a-date-picker v-model="model.startDate" :disabled="true" />
  62. </td>
  63. <td class="ant-form-item-label ant-form-item-label">
  64. <label title="结束日期"> 结束日期 </label>
  65. </td>
  66. <td class="ant-form-item-control-wrapper">
  67. <a-date-picker v-model="model.endDate" :disabled="true" />
  68. </td>
  69. </tr>
  70. <tr v-if="model.empowerType !== '1' && expandJ">
  71. <!-- 授权开始时间 -->
  72. <!-- <sd-form-item-td name="startDate" /> -->
  73. <!-- 授权截止时间 -->
  74. <!-- <sd-form-item-td name="endDate" /> -->
  75. <td class="ant-form-item-label ant-form-item-label">
  76. <label title="开始日期" class="ant-form-item-required"> 开始日期 </label>
  77. </td>
  78. <td class="ant-form-item-control-wrapper">
  79. <a-form-model-item :label="null" :rules="rules" prop="startDate">
  80. <a-date-picker v-model="model.startDate" />
  81. </a-form-model-item>
  82. </td>
  83. <td class="ant-form-item-label ant-form-item-label">
  84. <label title="结束日期" class="ant-form-item-required"> 结束日期 </label>
  85. </td>
  86. <td class="ant-form-item-control-wrapper">
  87. <a-form-model-item :label="null" :rules="rules" prop="endDate">
  88. <a-date-picker v-model="model.endDate" />
  89. </a-form-model-item>
  90. </td>
  91. </tr>
  92. <tr v-show="expandJ">
  93. <!-- 申请原因 -->
  94. <sd-form-item-td name="empowerReason" :colspan="3">
  95. <a-textarea v-model="model.empowerReason" :rows="3" />
  96. </sd-form-item-td>
  97. </tr>
  98. <tr
  99. ><td
  100. v-if="getmaintaindata(model, fields)"
  101. :colspan="4"
  102. style="line-height:40px;border:none1;"
  103. :class="$style.maintaintable"
  104. >
  105. <audit-advanced-group
  106. :expand="expandY"
  107. :expand-str="'expandY'"
  108. :group-label="'模型列表'"
  109. @changedClick="changedClick"
  110. ><template>
  111. <!-- </td></tr><tr><td v-if="getmaintaindata(model,fields)" :colspan="4" :class="$style.maintaintable" style="border:none"> -->
  112. <div :class="$style.wrapper">
  113. <div v-show="expandY && maintaineditable" :class="$style.btnselectmaintain">
  114. <a-button type="link" :class="$style.batchselect" @click="mxRelSelect">
  115. <a-icon type="check-circle" :theme="'filled'" />
  116. 选择
  117. </a-button>
  118. <a-button
  119. type="link"
  120. :disabled="selectedRowKeys.length === 0"
  121. style="z-index:10"
  122. @click="removemx(selectedRowKeys)"
  123. >
  124. <a-icon type="minus-circle" :theme="'filled'" />
  125. 删除
  126. </a-button>
  127. </div>
  128. </div>
  129. <sd-table
  130. v-show="expandY"
  131. ref="maintaintable"
  132. :row-key="(record, index) => index"
  133. :loading="false"
  134. class="maintaintable"
  135. :columns="childMXColumns"
  136. :data-source="maintaindata"
  137. :pagination="false"
  138. :bordered="true"
  139. :row-selection="
  140. maintaineditable
  141. ? {
  142. getCheckboxProps(record) {
  143. return {
  144. props: { disabled: !showSelection(record) },
  145. }
  146. },
  147. selectedRowKeys: selectedRowKeys,
  148. onChange: onSelectChange,
  149. }
  150. : null
  151. "/></template
  152. ></audit-advanced-group>
  153. </td>
  154. </tr>
  155. <tr
  156. ><td :colspan="4" style="border:none1">
  157. <sd-form-item name="iamLicenseUnitEntitys" :label="null">
  158. <template v-slot:read-and-edit="{ editable }">
  159. <audit-advanced-group
  160. :expand="expandW"
  161. :expand-str="'expandW'"
  162. :group-label="'申请单位'"
  163. @changedClick="changedClick"
  164. ><template>
  165. <template>
  166. <div :class="$style.wrapper">
  167. <div v-show="expandW && editable" :class="$style.btnselect">
  168. <a-button type="link" :class="$style.batchselect" @click="dwRelSelect">
  169. <a-icon type="check-circle" :theme="'filled'" />
  170. 选择
  171. </a-button>
  172. </div>
  173. </div>
  174. </template>
  175. <xm-child-table
  176. v-model="model.iamLicenseUnitEntitys"
  177. :read-only="!editable"
  178. label=""
  179. :fields="
  180. [
  181. {
  182. caption: '序号',
  183. name: 'sortNum',
  184. dataType: 'sortNum',
  185. },
  186. ].concat(Array.from(fields.iamLicenseUnitEntitys.attr.dync))
  187. "
  188. :columns="childDWColumns"
  189. :width="1200"
  190. :addbuttonvisiable="false"
  191. @change="saveForm"
  192. >
  193. <template v-slot:unitName="{ field, text, index, value }">
  194. {{ text }}
  195. </template>
  196. <template v-slot:unitCode="{ field, text, index, value }">
  197. {{ text }}
  198. </template>
  199. </xm-child-table>
  200. </template>
  201. </audit-advanced-group>
  202. </template>
  203. </sd-form-item></td
  204. >
  205. </tr>
  206. <tr v-show="false">
  207. <sd-form-item-td name="iamLicensePeopleEntitys" :label="null" :colspan="3">
  208. </sd-form-item-td>
  209. </tr>
  210. </table>
  211. </template>
  212. </sd-webflow>
  213. <AuditSelectMaintain :visible="visibleY" @listMxSelected="listMxSelected">
  214. </AuditSelectMaintain>
  215. <div v-show="false">
  216. <sd-group-picker
  217. ref="dwRelSelect"
  218. v-model="mainSendUnit"
  219. :single="false"
  220. :read-only="false"
  221. @change="change"
  222. />
  223. </div>
  224. <roleModal v-model="roleShow" @selectRoleList="changeRole" />
  225. <projectModal v-model="projectShow" @selectProject="changeProject" />
  226. </span>
  227. </template>
  228. <script>
  229. import { Modal } from 'ant-design-vue'
  230. import auditAdvancedGroup from '../../components/audit-advanced-group.vue'
  231. import auditAdvancedGroupMixins from '../../components/audit-advanced-group-mixins'
  232. import auditMaintainService from './audit-maintain-service'
  233. import AuditSelectMaintain from './audit-select-maintain.vue'
  234. import roleModal from '../dataUphold/role-modal.vue'
  235. import projectModal from '../dataUphold/project-modal.vue'
  236. import components from './_import-components/audit-sqapply-from-import'
  237. export default {
  238. name: 'AuditDataSqapplyFrom',
  239. metaInfo: {
  240. title: '数据授权申请',
  241. },
  242. components: {
  243. ...components,
  244. auditAdvancedGroup,
  245. AuditSelectMaintain,
  246. roleModal,
  247. projectModal,
  248. },
  249. mixins: [auditAdvancedGroupMixins],
  250. data() {
  251. return {
  252. mainSendUnit: [],
  253. expandY: true,
  254. expandW: true,
  255. expandJ: true,
  256. visibleY: false,
  257. childMXColumns: [
  258. {
  259. title: '序号',
  260. dataIndex: 'sortNum',
  261. customRender: (text, record, index) => `${index + 1}`,
  262. width: '80px',
  263. },
  264. {
  265. title: '模型名称',
  266. dataIndex: 'modelName',
  267. },
  268. {
  269. title: '模型编号',
  270. dataIndex: 'modelCode',
  271. },
  272. {
  273. title: '模型描述',
  274. dataIndex: 'modelDesc',
  275. },
  276. ],
  277. childDWColumns: [
  278. {
  279. title: '序号',
  280. dataIndex: 'sortNum',
  281. customRender: (text, record, index) => `${index + 1}`,
  282. width: '80px',
  283. },
  284. { dataIndex: 'id', sdHidden: true },
  285. { dataIndex: 'maintainId', sdHidden: true },
  286. {
  287. title: '单位名称',
  288. dataIndex: 'unitName',
  289. },
  290. {
  291. title: '单位编号',
  292. dataIndex: 'unitCode',
  293. },
  294. {
  295. title: '单位Id',
  296. dataIndex: 'unitId',
  297. sdHidden: true,
  298. },
  299. ],
  300. maintaindata: [],
  301. selectedRowKeys: [],
  302. flag: true,
  303. maintaineditable: false,
  304. rules: [
  305. {
  306. required: true,
  307. trigger: ['change', 'blur'],
  308. },
  309. ],
  310. roleShow: false,
  311. projectShow: false,
  312. }
  313. },
  314. watch: {
  315. maintaindata() {
  316. this.saveForm()
  317. },
  318. },
  319. methods: {
  320. changeType() {
  321. const empowerType = this.$refs.docform.getFieldValue('empowerType')
  322. if (empowerType === '1') {
  323. this.$refs.docform.setFieldValue('startDate', '')
  324. this.$refs.docform.setFieldValue('endDate', '')
  325. }
  326. this.saveForm()
  327. },
  328. getmodelsqdata(model) {
  329. this.mainSendUnit = []
  330. },
  331. saveForm() {
  332. const save = new Promise((resolve) => {
  333. let udata = []
  334. if (this.$refs.docform.getFieldValue('iamLicenseUnitEntitys') !== undefined) {
  335. udata = this.$refs.docform.getFieldValue('iamLicenseUnitEntitys')
  336. }
  337. if (this.maintaindata.length > 0) {
  338. const empowerType = this.$refs.docform.getFieldValue('empowerType')
  339. const creatorName = this.$refs.docform.getFieldValue('creatorId')
  340. const createDeptName = this.$refs.docform.getFieldValue('createDeptName')
  341. let sl = null
  342. let el = null
  343. if (empowerType === '0') {
  344. if (this.$refs.docform.getFieldValue('startDate') !== undefined) {
  345. const s = new Date(this.$refs.docform.getFieldValue('startDate'))
  346. const e = new Date(this.$refs.docform.getFieldValue('endDate'))
  347. sl = s.getTime()
  348. el = e.getTime()
  349. }
  350. }
  351. const maintainId = this.maintaindata.map((item) => item.id).join(',')
  352. udata.forEach((item) => {
  353. item.docType = 'date'
  354. item.maintainId = maintainId
  355. item.empowerType = empowerType
  356. item.startDate = sl
  357. item.endDate = el
  358. })
  359. this.$refs.docform.setFieldValue('iamLicenseUnitEntitys', udata)
  360. // 处理人员数据
  361. let pdata = []
  362. if (this.$refs.docform.getFieldValue('iamLicensePeopleEntitys') !== undefined) {
  363. pdata = this.$refs.docform.getFieldValue('iamLicensePeopleEntitys')
  364. }
  365. this.maintaindata.forEach((item) => {
  366. // 判断当前模型ID是否存在,存在则值处理 期间 日期 否则增加,处理过的增加标志位
  367. const m = pdata.find((p) => p.maintainId === item.id)
  368. if (m) {
  369. m.flag = true
  370. m.empowerType = empowerType
  371. m.startDate = sl
  372. m.endDate = el
  373. } else {
  374. pdata.push({
  375. docType: 'apply',
  376. empowerType: empowerType,
  377. startDate: sl,
  378. endDate: el,
  379. userId: creatorName + '',
  380. userUnit: createDeptName,
  381. maintainId: item.id,
  382. flag: true,
  383. })
  384. }
  385. })
  386. pdata.forEach((item, index) => {
  387. if (!item.flag) {
  388. pdata.splice(index, 1)
  389. } else {
  390. item.flag = null
  391. }
  392. })
  393. this.$refs.docform.setFieldValue('iamLicensePeopleEntitys', pdata)
  394. }
  395. // return Promise.resolve(true)
  396. resolve(true)
  397. })
  398. return save
  399. },
  400. validForm() {
  401. if (this.maintaindata.length === 0) {
  402. Modal.warning({
  403. title: '提示',
  404. content: '请选择需要授权的模型!',
  405. })
  406. return Promise.resolve(false)
  407. } else {
  408. // const udata = this.$refs.docform.getFieldValue('iamLicenseUnitEntitys')
  409. // if (udata.length === 0) {
  410. // Modal.warning({
  411. // title: '提示',
  412. // content: '请选择授权单位!',
  413. // })
  414. // return Promise.resolve(false)
  415. // } else {
  416. this.$refs.docform.setFieldValue(
  417. 'title',
  418. this.$refs.docform.getFieldValue('creatorName') + '模型授权申请'
  419. )
  420. return Promise.resolve(true)
  421. // }
  422. }
  423. },
  424. actionBtnClick(evt, { button, FlowData }) {
  425. if (button.fakeId === 'save' || button.fakeId === 'workflow-push') {
  426. // 保存前先校验计划是否已经存在
  427. evt.waitUntil(
  428. new Promise((resolve, reject) => {
  429. this.saveForm().then((res) => {
  430. if (!res) {
  431. evt.preventDefault()
  432. }
  433. resolve()
  434. })
  435. })
  436. )
  437. }
  438. },
  439. removemx(keys) {
  440. // 用的序号作key,从大往小删,防止串了
  441. const removeKeys = keys.sort((a, b) => b - a)
  442. removeKeys.forEach((key) => {
  443. this.maintaindata.splice(key, 1)
  444. })
  445. this.selectedRowKeys = []
  446. },
  447. getmaintaindata(model, fields) {
  448. if (this.flag) {
  449. this.maintaineditable = !fields.iamLicenseUnitEntitys.readonly
  450. const id = model.id
  451. if (id) {
  452. auditMaintainService.getmaintainsqdata(id).then((data) => {
  453. this.maintaindata = data
  454. this.getmodelsqdata(model)
  455. })
  456. }
  457. this.flag = false
  458. }
  459. return true
  460. },
  461. showSelection() {
  462. return true
  463. },
  464. onSelectChange(selectedRowKeys) {
  465. this.selectedRowKeys = selectedRowKeys
  466. },
  467. change(values) {
  468. let iamAuditDwMxs = []
  469. if (this.$refs.docform.getFieldValue('iamLicenseUnitEntitys')) {
  470. iamAuditDwMxs = this.$refs.docform.getFieldValue('iamLicenseUnitEntitys')
  471. }
  472. values.forEach((element) => {
  473. const mmc = {}
  474. mmc.unitName = element.name
  475. // mmc.unitCode = element.props?.code
  476. mmc.unitCode = element.code + ''
  477. mmc.unitId = element.code
  478. iamAuditDwMxs.push(mmc)
  479. })
  480. this.$refs.docform.setFieldValue('iamLicenseUnitEntitys', iamAuditDwMxs)
  481. this.saveForm()
  482. },
  483. // 选择模型列表
  484. mxRelSelect() {
  485. // 选择模型列表
  486. this.visibleY = true
  487. },
  488. // 选择申请单位
  489. dwRelSelect() {
  490. // 选择申请单位
  491. setTimeout(() => {
  492. this.$refs.dwRelSelect.openPicker()
  493. }, 0)
  494. },
  495. listMxSelected(keys, keyinfos) {
  496. let iamAuditMxs = []
  497. iamAuditMxs = this.maintaindata
  498. keyinfos.forEach((element) => {
  499. const mmc = {}
  500. mmc.modelName = element.modelName
  501. mmc.modelCode = element.modelCode
  502. mmc.modelDesc = element.modelDesc
  503. mmc.id = element.id
  504. iamAuditMxs.push(mmc)
  505. })
  506. this.maintaindata = iamAuditMxs
  507. // 处理人员数据-仅增加新增的
  508. // pdata.forEach((item) => {
  509. // item.docType = 'apply'
  510. // item.maintainId = maintainId
  511. // })
  512. },
  513. },
  514. }
  515. </script>
  516. <style module lang="scss">
  517. @use '@/common/design' as *;
  518. @import '@/webflow/sd-flow-form.scss';
  519. .btnselect {
  520. position: relative;
  521. top: 2px;
  522. right: 80px;
  523. float: right;
  524. .batchselect {
  525. z-index: 100;
  526. margin-left: 10px;
  527. }
  528. }
  529. .btnselectmaintain {
  530. position: relative;
  531. float: right;
  532. .batchselect {
  533. z-index: 100;
  534. margin-right: -10px;
  535. margin-left: 10px;
  536. }
  537. }
  538. .maintaintable {
  539. :global(.ant-table-thead > tr > th) {
  540. border-right: none;
  541. }
  542. :global(.ant-table-bordered.ant-table-empty .ant-table-placeholder) {
  543. border: none;
  544. }
  545. :global(.ant-table-body table) {
  546. // border-left:none;
  547. border: none;
  548. }
  549. }
  550. </style>