audit-pre-report.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. <template>
  2. <a-card>
  3. <a-form layout="inline" :class="$style.form">
  4. <!-- 报表名称 -->
  5. <a-form-item label="报表名称">
  6. <a-input v-model="searchData.reportName" allow-clear />
  7. </a-form-item>
  8. <a-form-item>
  9. <!-- 搜索 清除 模板生成 -->
  10. <a-button :class="$style.btn" type="primary" @click="handlerSearch">搜索</a-button>
  11. <a-button :class="$style.btn" @click="deleteReport">清除</a-button>
  12. <a-button :class="$style.btn" @click="modelGenerate">模板生成</a-button>
  13. </a-form-item>
  14. </a-form>
  15. <a-table
  16. :columns="columns"
  17. :data-source="dataSource"
  18. :row-key="(record) => record.id"
  19. :pagination="pages"
  20. @change="pagesChange"
  21. >
  22. <!-- 任务状态 0 未开始 1 进行中 2 完成 3 失败 -->
  23. <template slot="status" slot-scope="text, record">
  24. <span v-if="record.taskStatus === 0">未开始</span>
  25. <span v-if="record.taskStatus === 1">进行中</span>
  26. <span v-if="record.taskStatus === 2">完成</span>
  27. <span v-if="record.taskStatus === 3">失败</span>
  28. </template>
  29. <!-- 模板生成 -->
  30. <template slot="edit" slot-scope="text, record">
  31. <a-button v-if="record.taskStatus === 2" type="link" @click="downloadTable(record)"
  32. >下载</a-button
  33. >
  34. </template>
  35. </a-table>
  36. <a-modal v-model="recordShow" title="模板生成" @ok="generateReport">
  37. <a-spin :spinning="isshowLoading" tip="正在生成……" size="large">
  38. <a-form-model
  39. ref="form"
  40. :model="form"
  41. :label-col="labelCol"
  42. :wrapper-col="wrapperCol"
  43. :rules="rules"
  44. >
  45. <a-form-model-item label="报表名称" prop="reportName">
  46. <!-- <a-select v-model="form.reportName">
  47. <a-select-option v-for="(item, i) in tableOption" :key="i" :value="item.value">{{
  48. item.label
  49. }}</a-select-option>
  50. </a-select> -->
  51. <a-input v-model="form.reportName" allow-clear />
  52. </a-form-model-item>
  53. <a-form-model-item label="公司选择" prop="companyUnit">
  54. <!-- <SdGroupPicker
  55. ref="cRelSelect"
  56. v-model="form.companyUnit"
  57. :read-only="false"
  58. @change="changecompany"
  59. /> -->
  60. <audit-company-select
  61. ref="cRelSelect"
  62. v-model="form.companyUnit"
  63. :read-only="false"
  64. @change="changecompany"
  65. />
  66. </a-form-model-item>
  67. <a-form-model-item label="生成年份" prop="time">
  68. <!-- <a-month-picker v-model="form.time" mode="year" format="YYYY" @change="timeChange" /> -->
  69. <a-date-picker
  70. mode="year"
  71. format="YYYY"
  72. :allow-clear="false"
  73. placeholder="选择年份"
  74. :input-read-only="true"
  75. :value="form.time"
  76. @change="panelStartYearChange"
  77. @panelChange="panelStartYearChange"
  78. ></a-date-picker>
  79. </a-form-model-item>
  80. </a-form-model>
  81. </a-spin>
  82. </a-modal>
  83. </a-card>
  84. </template>
  85. <script>
  86. import components from './_import-components/audit-report-list-import'
  87. import auditPreReport from './audit-pre-report'
  88. import auditCompanySelect from './audit-company-select'
  89. import moment from 'moment'
  90. export default {
  91. name: 'AuditPreReport',
  92. metaInfo: {
  93. title: '模型信息管理',
  94. },
  95. components: {
  96. ...components,
  97. auditCompanySelect,
  98. },
  99. filters: {
  100. // 时间格式化
  101. dateFormat(value) {
  102. return value
  103. },
  104. },
  105. data() {
  106. return {
  107. searchData: {
  108. reportName: '',
  109. },
  110. labelCol: { span: 4 },
  111. wrapperCol: { span: 14 },
  112. isshowLoading: false,
  113. form: {
  114. reportName: '',
  115. time: '',
  116. companyUnit: '',
  117. year: '',
  118. },
  119. dataSource: [],
  120. // createTime
  121. // creator
  122. // creatorId
  123. // fileUrl
  124. // id
  125. // tableName
  126. // tableYear
  127. // taskStatus
  128. rules: {
  129. reportName: [{ required: true, message: '请输入报表名称', trigger: 'blur' }],
  130. companyUnit: [{ required: true, message: '请选择公司', trigger: 'blur' }],
  131. time: [{ required: true, message: '请选择年份', trigger: 'change' }],
  132. },
  133. columns: [
  134. // 序号 ,报表名称,时间,生成状态 操作
  135. {
  136. title: '序号',
  137. dataIndex: 'index',
  138. customRender: (text, record, index) => `${index + 1}`,
  139. },
  140. {
  141. title: '报表名称',
  142. dataIndex: 'tableName',
  143. },
  144. {
  145. title: '时间',
  146. dataIndex: 'createTime',
  147. // sdRender: TableColumnTypes.date,
  148. customRender: (text) => this.$options.filters.dateFormat(text),
  149. },
  150. {
  151. title: '生成状态',
  152. dataIndex: 'taskStatus',
  153. scopedSlots: { customRender: 'status' },
  154. },
  155. // fileUrl
  156. {
  157. title: '操作',
  158. dataIndex: 'id',
  159. scopedSlots: { customRender: 'edit' },
  160. },
  161. ],
  162. recordShow: false,
  163. pages: {
  164. current: 1,
  165. total: 0,
  166. pageSize: 10,
  167. showSizeChanger: true,
  168. showQuickJumper: true,
  169. showTotal: (total) => `共 ${total} 条`,
  170. },
  171. tableOption: [],
  172. okFlag: false,
  173. }
  174. },
  175. computed: {
  176. rowSelection() {
  177. return {
  178. onChange: (selectedRowKeys, selectedRows) => {
  179. console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows)
  180. },
  181. type: 'radio',
  182. }
  183. },
  184. },
  185. created() {
  186. this.initTable()
  187. },
  188. methods: {
  189. handlerSearch() {
  190. this.initTable()
  191. },
  192. pagesChange(value) {
  193. this.pages.current = value.current
  194. this.pages.pageSize = value.pageSize
  195. this.initTable()
  196. },
  197. panelStartYearChange(value) {
  198. console.log('🚀 ~ panelStartYearChange ~ value:', value)
  199. this.form.time = value
  200. this.form.year = moment(value).format('YYYY')
  201. console.log('🚀 ~ panelStartYearChange ~ this.form:', this.form)
  202. },
  203. downloadTable(record) {
  204. const url = record.downloadUrl
  205. // 根据该路径下载文件
  206. const a = document.createElement('a')
  207. a.href = url
  208. a.download = ''
  209. a.click()
  210. a.remove()
  211. },
  212. deleteReport() {
  213. this.searchData.reportName = ''
  214. this.initTable()
  215. },
  216. modelGenerate() {
  217. this.recordShow = true
  218. },
  219. // 单位 选择
  220. changecompany(val) {},
  221. // 初始化table
  222. initTable() {
  223. const data = {
  224. year: '',
  225. tableName: this.searchData.reportName,
  226. size: this.pages.pageSize,
  227. page: this.pages.current,
  228. }
  229. auditPreReport.getTable(data).then((res) => {
  230. if (res.data.code + '' === '200') {
  231. const { records, total, size, current } = res.data.data
  232. this.dataSource = records
  233. this.pages.total = total
  234. this.pages.pageSize = size
  235. this.pages.current = current
  236. }
  237. })
  238. },
  239. // // 初始化所有报表
  240. // initAllTable() {
  241. // const data = {
  242. // size: 999,
  243. // page: 1,
  244. // }
  245. // auditPreReport.getTable(data).then((res) => {
  246. // if (res.data.code === 200) {
  247. // const { records } = res.data.data
  248. // this.tableOption = records.map((item) => {
  249. // return {
  250. // label: item.tableName,
  251. // value: item.tableName,
  252. // }
  253. // })
  254. // }
  255. // })
  256. // },
  257. timeChange(val) {
  258. // 生成年份 如2024
  259. },
  260. // 生成报表
  261. generateReport() {
  262. this.$refs.form.validate((valid) => {
  263. if (valid) {
  264. if (this.okFlag) {
  265. return
  266. }
  267. this.okFlag = true
  268. this.isshowLoading = true
  269. const comp = (this.form.companyUnit || []).map((item) => {
  270. return {
  271. orgCode: item.orgCode,
  272. companyName: item.name,
  273. }
  274. })
  275. const data = {
  276. // 公司列表
  277. companies: comp,
  278. // 选择年
  279. year: this.form.year,
  280. // 报表名称
  281. tableName: this.form.reportName,
  282. }
  283. auditPreReport
  284. .generateReportData(data)
  285. .then((res) => {
  286. this.recordShow = false
  287. this.okFlag = false
  288. // 清空表单
  289. this.form = {
  290. reportName: '',
  291. time: '',
  292. companyUnit: '',
  293. year: '',
  294. }
  295. this.initTable()
  296. this.isshowLoading = false
  297. })
  298. .catch(() => {
  299. this.okFlag = false
  300. this.isshowLoading = false
  301. })
  302. }
  303. })
  304. },
  305. },
  306. }
  307. </script>
  308. <style module lang="scss">
  309. @use '@/common/design' as *;
  310. .btn {
  311. margin-left: 10px;
  312. }
  313. .form {
  314. margin-bottom: 20px;
  315. }
  316. </style>