audit-template-list.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <template>
  2. <div>
  3. <a-card>
  4. <!-- 高级搜索组件 -->
  5. <audit-advanced-query
  6. :expand="expand"
  7. :search-data="formData"
  8. :ref-name="searchform"
  9. :search-style="{ height: '170px', left: '20px', top: '57px' }"
  10. :search-fun="handleSearch"
  11. @searchedClick="searchedClick"
  12. >
  13. <template>
  14. <a-col :span="12">
  15. <a-form-model-item :label="'模板名称'" prop="templateName">
  16. <a-input v-model="formData.templateName" allow-clear />
  17. </a-form-model-item>
  18. </a-col>
  19. <a-col :span="12">
  20. <a-form-model-item :label="'模板类型'" prop="templateType">
  21. <a-select v-model="formData.templateType" :allow-clear="true">
  22. <a-select-option :value="1"> 资料清单 </a-select-option>
  23. <a-select-option :value="2"> 审计方案 </a-select-option>
  24. <a-select-option :value="3"> 审计通知书 </a-select-option>
  25. <a-select-option :value="6"> 审计报告 </a-select-option>
  26. </a-select>
  27. </a-form-model-item>
  28. </a-col>
  29. <a-col :span="12">
  30. <a-form-model-item :label="'是否默认'" prop="isDefault">
  31. <a-select v-model="formData.isDefault" :allow-clear="true">
  32. <a-select-option :value="0"> 否 </a-select-option>
  33. <a-select-option :value="1"> 是 </a-select-option>
  34. </a-select>
  35. </a-form-model-item>
  36. </a-col>
  37. </template>
  38. </audit-advanced-query>
  39. <sd-data-table-ex
  40. ref="SJMBKDataTable"
  41. :filter-expressions="expressions"
  42. :columns="columns"
  43. :actions="actions"
  44. form-id="iamTemplate"
  45. data-url="api/xcoa-mobile/v1/iamtemplate/all-list"
  46. :search-fields="['templateName', 'templateType', 'isDefault']"
  47. show-selection
  48. :show-advance-query="true"
  49. @searchbtnClick="searchbtnClick"
  50. >
  51. <div slot="islink" slot-scope="text, record">
  52. <a :title="text" @click="rowClick(record)">{{ text }}</a>
  53. </div>
  54. </sd-data-table-ex>
  55. </a-card>
  56. </div>
  57. </template>
  58. <script>
  59. import { message, Modal } from 'ant-design-vue'
  60. import moment from 'moment'
  61. import axios from '@/common/services/axios-instance'
  62. import crossWindowWatcher from '@/common/services/cross-window-watcher'
  63. import TableColumnTypes from '@/common/services/table-column-types'
  64. import TableActionTypes from '@/common/services/table-action-types'
  65. import auditAdvancedQuery from '../../components/audit-advanced-query.vue'
  66. import auditAdvancedQueryMixins from '../../components/audit-advanced-query-mixins'
  67. import auditAdvancedGroupMixins from '../../components/audit-advanced-group-mixins'
  68. import components from './_import-components/audit-template-list-import'
  69. export default {
  70. name: 'AuditTemplateList',
  71. metaInfo: {
  72. title: '审计模板库',
  73. },
  74. components: {
  75. ...components,
  76. auditAdvancedQuery,
  77. },
  78. mixins: [auditAdvancedQueryMixins, auditAdvancedGroupMixins],
  79. data() {
  80. return {
  81. searchform: 'searchform',
  82. expressions: [],
  83. formData: {
  84. templateName: '',
  85. templateType: null,
  86. isDefault: null,
  87. },
  88. formId: 'iamTemplate',
  89. // nodePerms: {},
  90. columns: [
  91. {
  92. title: '序号',
  93. dataIndex: 'sortNumber',
  94. width: '80px',
  95. customRender: (text, record, index) => `${index + 1}`,
  96. },
  97. {
  98. title: '模板名称',
  99. dataIndex: 'templateName',
  100. scopedSlots: { customRender: 'islink' },
  101. },
  102. {
  103. title: '模板类型',
  104. dataIndex: 'templateType',
  105. },
  106. {
  107. title: '是否默认',
  108. dataIndex: 'isDefault',
  109. },
  110. {
  111. title: '适用机构范围',
  112. dataIndex: 'orgNameScope',
  113. },
  114. {
  115. title: '编制日期',
  116. dataIndex: 'authTime',
  117. sdRender: TableColumnTypes.date,
  118. sdHidden: true,
  119. // sorter: true,
  120. // defaultSortOrder: 'desc',
  121. },
  122. ],
  123. actions: [
  124. {
  125. label: '新建',
  126. id: 'new',
  127. permission: 'create',
  128. type: TableActionTypes.primary, // 新建按钮,不需要回调,自动处理
  129. callback: () => {
  130. const url = '/audit-template-form' // 新页面要打开的路由地址
  131. crossWindowWatcher.waitForChanged(url).then((refreshFlag) => {
  132. if (refreshFlag) {
  133. // 这里写或者调刷新的方法
  134. this.refresh()
  135. }
  136. })
  137. },
  138. },
  139. {
  140. label: '删除',
  141. id: 'delete',
  142. type: TableActionTypes.oa.delete, // 删除按钮,不需要回调,会自动处理
  143. },
  144. {
  145. label: '批量导出附件',
  146. id: 'exportdataFiles',
  147. permission: null, // 纯前端操作,不需要权限控制
  148. callback: this.exportTemplateFiles,
  149. },
  150. ],
  151. }
  152. },
  153. computed: {},
  154. created() {},
  155. methods: {
  156. refresh() {
  157. return this.$refs.SJMBKDataTable.refresh(true)
  158. },
  159. rowClick(record) {
  160. const url = '/audit-template-form?record=' + record.id // 新页面要打开的路由地址
  161. crossWindowWatcher.waitForChanged(url).then((refreshFlag) => {
  162. if (refreshFlag) {
  163. this.refresh()
  164. }
  165. })
  166. },
  167. // 导出审计模板附件
  168. exportTemplateFiles() {
  169. // const loading = arguments[arguments.length - 1]
  170. const selectedRowKeys = this.$refs.SJMBKDataTable.getSelectedRowKeys()
  171. if (selectedRowKeys.length === 0) {
  172. Modal.warning({
  173. title: '提示',
  174. content: '请选择要一键导出附件的模板(最多可选择10条)',
  175. })
  176. } else {
  177. const timestamp = new Date().getTime()
  178. console.log(timestamp)
  179. // loading.loadingStatus.exportdataFiles = true
  180. axios({
  181. method: 'get',
  182. url: 'api/xcoa-mobile/v1/spic-common/exportTemplateFiles/' + selectedRowKeys,
  183. responseType: 'blob',
  184. })
  185. .then((res) => {
  186. if (res.data) {
  187. let blob = null
  188. let fileName = res.headers['content-disposition']?.split('fileName=')[1]
  189. if (fileName === null || fileName === undefined) {
  190. fileName = '.zip'
  191. }
  192. blob = new Blob([res.data], { type: 'application/zip' })
  193. const time = moment(moment()).format('yyyyMMDD')
  194. fileName = '审计模板-' + time + '.zip'
  195. if ('msSaveOrOpenBlob' in navigator) {
  196. // 适配ie
  197. window.navigator.msSaveOrOpenBlob(blob, fileName)
  198. // loading.loadingStatus.exportdataFiles = false
  199. } else {
  200. // 其他浏览器
  201. const blobUrl = window.URL.createObjectURL(blob)
  202. const a = document.createElement('a')
  203. a.style.display = 'none'
  204. a.href = blobUrl
  205. a.setAttribute('download', fileName)
  206. a.click()
  207. // loading.loadingStatus.exportdataFiles = false
  208. }
  209. message.success('导出成功')
  210. } else {
  211. message.error('导出失败,请联系系统管理员')
  212. // loading.loadingStatus.exportdataFiles = false
  213. }
  214. })
  215. .catch(() => {
  216. message.error('导出失败')
  217. })
  218. }
  219. },
  220. // 查询
  221. handleSearch() {
  222. this.expressions = []
  223. // 模板名称
  224. if (this.formData.templateName) {
  225. this.expressions.push({
  226. dataType: 'str',
  227. name: 'templateName',
  228. op: 'like',
  229. stringValue: `%${this.formData.templateName}%`,
  230. })
  231. }
  232. // 模板类型
  233. if (this.formData.templateType) {
  234. this.expressions.push({
  235. dataType: 'str',
  236. name: 'templateType',
  237. op: 'like',
  238. stringValue: `%${this.formData.templateType}%`,
  239. })
  240. }
  241. // 是否默认
  242. if (this.formData.isDefault != null) {
  243. this.expressions.push({
  244. dataType: 'str',
  245. name: 'isDefault',
  246. op: 'like',
  247. stringValue: `%${this.formData.isDefault}%`,
  248. })
  249. }
  250. },
  251. },
  252. }
  253. </script>
  254. <style module lang="scss">
  255. @use '@/common/design' as *;
  256. </style>