audit-pre-report.vue 8.6 KB

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