kpi-sendtask-form.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <template>
  2. <a-modal
  3. ref="sendTaskFormModal"
  4. :body-style="bodyStyle"
  5. :title="title"
  6. :destroy-on-close="true"
  7. :visible="visible"
  8. :width="modalWidth"
  9. :confirm-loading="loading"
  10. @ok="handleOk"
  11. @cancel="handleCancel"
  12. >
  13. <sd-form ref="form" :class="$style.form" :init-values="formValues">
  14. <a-form-item label="时间维度">
  15. <span>{{ indiInfo.indiFrequency }}</span>
  16. </a-form-item>
  17. <kpi-datadate-component ref="datadate" :date-type="frequencyType"></kpi-datadate-component>
  18. <a-form-item label="报送指标名称">
  19. <span>{{ indiInfo.indiName }}</span>
  20. </a-form-item>
  21. <a-form-item>
  22. <div :class="$style.wrapper">
  23. <div :class="$style.deptbtn">
  24. <a-button type="link" @click="selectDept">
  25. <a-icon type="plus-circle" :theme="'filled'" />
  26. 选择
  27. </a-button>
  28. </div>
  29. </div>
  30. <sd-child-table
  31. v-model="sendDept"
  32. label="报送单位列表"
  33. :fields="fields"
  34. :columns="[
  35. { dataIndex: 'monitorDeptId', sdHidden: true },
  36. { dataIndex: 'submitterAccount', sdHidden: true },
  37. ]"
  38. ></sd-child-table>
  39. </a-form-item>
  40. </sd-form>
  41. </a-modal>
  42. </template>
  43. <script>
  44. import { Message } from 'ant-design-vue'
  45. import pickValues from '@/common/services/pick-values'
  46. import sdListPickerVue from '@/common/components/sd-list-picker.vue'
  47. import kpiDatadateComponent from '../components/kpi-datadate-component.vue'
  48. import KpiService from '../kpi-service'
  49. import components from './_import-components/kpi-sendtask-form-import'
  50. export default {
  51. name: 'KpiSendtaskForm',
  52. metaInfo: {
  53. title: 'KpiSendtaskForm',
  54. },
  55. components: {
  56. ...components,
  57. kpiDatadateComponent,
  58. },
  59. props: {
  60. // 弹出窗标题
  61. title: {
  62. type: String,
  63. default: '下发报送',
  64. },
  65. // 弹出窗宽度
  66. modalWidth: {
  67. type: String,
  68. default: '1000px',
  69. },
  70. // 弹出窗显示参数
  71. visible: {
  72. type: Boolean,
  73. default: false,
  74. },
  75. // 指标信息
  76. indiInfo: {
  77. type: Object,
  78. default: () => {},
  79. },
  80. },
  81. data() {
  82. return {
  83. loading: false,
  84. bodyStyle: {
  85. padding: 0,
  86. },
  87. formValues: [],
  88. sendDept: [],
  89. fields: [
  90. {
  91. name: 'monitorDeptName',
  92. caption: '报送单位',
  93. dataType: 'string',
  94. },
  95. {
  96. name: 'monitorDeptId',
  97. caption: '报送单位ID',
  98. dataType: 'string',
  99. },
  100. {
  101. name: 'submitterAccount',
  102. caption: '报送人账号',
  103. dataType: 'string',
  104. },
  105. {
  106. name: 'submitterName',
  107. caption: '报送人',
  108. dataType: 'string',
  109. },
  110. ],
  111. }
  112. },
  113. computed: {
  114. frequencyType() {
  115. // 时间维度类型
  116. let type = 'day' // 默认日
  117. switch (this.indiInfo.indiFrequency) {
  118. case '年':
  119. type = 'year'
  120. break
  121. case '半年':
  122. type = 'halfyear'
  123. break
  124. case '季度':
  125. type = 'quarter'
  126. break
  127. case '月':
  128. type = 'month'
  129. break
  130. case '周':
  131. type = 'week'
  132. break
  133. case '日':
  134. type = 'day'
  135. break
  136. default:
  137. break
  138. }
  139. return type
  140. },
  141. },
  142. methods: {
  143. selectDept() {
  144. // 选择报送单位列表
  145. const indiID = this.indiInfo.id
  146. pickValues(sdListPickerVue, {
  147. loadListData() {
  148. const dataSource = []
  149. return KpiService.getOrgsByIndiId(indiID)
  150. .then((res) => {
  151. res?.forEach((item) => {
  152. dataSource.push({
  153. id: item.monitorDeptId + '',
  154. name: item.monitorDeptName,
  155. submitterAccount: item.submitterAccount,
  156. submitterName: item.submitterName,
  157. })
  158. })
  159. return dataSource
  160. })
  161. .catch((e) => {
  162. Message.error({ content: '阈值参考单位获取失败,请联系管理员' })
  163. })
  164. },
  165. }).then((values) => {
  166. // 子表赋值
  167. values?.forEach((item) => {
  168. this.sendDept.push({
  169. monitorDeptId: item.id,
  170. monitorDeptName: item.name,
  171. submitterAccount: item.submitterAccount,
  172. submitterName: item.submitterName,
  173. })
  174. })
  175. })
  176. },
  177. handleOk(e) {
  178. // 下发报送
  179. this.loading = true
  180. let frequency = '' // 时间维度
  181. switch (this.indiInfo.indiFrequency) {
  182. case '年':
  183. frequency = '6'
  184. break
  185. case '半年':
  186. frequency = '5'
  187. break
  188. case '季度':
  189. frequency = '4'
  190. break
  191. case '月':
  192. frequency = '3'
  193. break
  194. case '周':
  195. frequency = '2'
  196. break
  197. case '日':
  198. frequency = '1'
  199. break
  200. default:
  201. break
  202. }
  203. const monitorList = [] // 报送单位
  204. this.sendDept?.forEach((item) => {
  205. monitorList.push({
  206. submitterAccount: item.submitterAccount,
  207. monitorDeptId: item.monitorDeptId,
  208. })
  209. })
  210. const datadate = this.$refs.datadate.getFormatDate() // 数据时期
  211. const params = {
  212. indiId: this.indiInfo.id, // 指标ID
  213. indiFrequency: frequency, // 指标时间维度
  214. year: datadate.year, // 年度
  215. dataPeriod: datadate.date, // 数据时期
  216. monitorList: monitorList, // 报送单位列表
  217. taskName: datadate.year + '年' + datadate.date, // 任务名称
  218. }
  219. KpiService.sendTask(params)
  220. .then((res) => {
  221. if (res.success) {
  222. Message.success({ content: '下发报送成功' })
  223. setTimeout(() => {
  224. // 清空子表值
  225. this.sendDept = []
  226. this.loading = false
  227. this.$parent.$parent.visible = !this.$parent.$parent.visible
  228. // 刷新列表
  229. this.$parent.$parent.$refs.dataTable.clearSelection()
  230. this.$parent.$parent.$refs.dataTable.refresh()
  231. }, 1000)
  232. } else {
  233. let errmsg = '下发报送任务失败,请联系管理员'
  234. if (res.resultDesc) errmsg = res.resultDesc
  235. Message.error({ content: errmsg })
  236. setTimeout(() => {
  237. this.loading = false
  238. }, 1000)
  239. }
  240. })
  241. .catch((e) => {
  242. Message.error({ content: '下发报送任务失败,请联系管理员' })
  243. setTimeout(() => {
  244. this.loading = false
  245. }, 1000)
  246. })
  247. },
  248. handleCancel(e) {
  249. // 清空子表值
  250. this.sendDept = []
  251. this.$parent.$parent.visible = !this.$parent.$parent.visible
  252. },
  253. },
  254. }
  255. </script>
  256. <style module lang="scss">
  257. @use '@/common/design' as *;
  258. .form {
  259. :global(.ant-form-item-control-wrapper) {
  260. width: auto !important;
  261. padding: 0 20px;
  262. }
  263. .deptbtn {
  264. position: relative;
  265. float: right;
  266. z-index: 100;
  267. right: 90px;
  268. top: -5px;
  269. }
  270. :global(.header_sd-child-table_common) {
  271. > span,
  272. > :global(.ant-space) div:first-child {
  273. display: none;
  274. }
  275. }
  276. :global(.wrapper_sd-child-table_common) {
  277. position: relative;
  278. }
  279. :global(.caption_sd-child-table_common) {
  280. margin: 0;
  281. }
  282. }
  283. </style>