myFilling.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <template>
  2. <div>
  3. <div v-show="!writeFormState.show && !formDetailState.show" class="app-container">
  4. <div>
  5. <transition name="fade">
  6. <div v-show="showSearch">
  7. <el-form ref="queryFormRef" :model="queryParams">
  8. <el-row :gutter="20">
  9. <el-col :span="6">
  10. <el-form-item label="表格名称:" prop="table_name" label-width="auto">
  11. <el-input v-model="queryParams.table_name" placeholder="请输入表格名称"></el-input>
  12. </el-form-item>
  13. </el-col>
  14. <el-col :span="6">
  15. <!-- <el-form-item label="任务状态:" prop="submission_status">-->
  16. <!-- <el-radio-group v-model="queryParams.submission_status">-->
  17. <!-- <el-radio value="0" size="large">待填报</el-radio>-->
  18. <!-- <el-radio value="1" size="large">已上报</el-radio>-->
  19. <!-- </el-radio-group>-->
  20. <!-- </el-form-item>-->
  21. <el-form-item label="任务状态:" prop="submission_status">
  22. <el-select
  23. v-model="queryParams.submission_status"
  24. clearable
  25. placeholder="请选择"
  26. style="width: 240px"
  27. >
  28. <el-option
  29. v-for="item in options"
  30. :key="item.value"
  31. :label="item.label"
  32. :value="item.value"
  33. />
  34. </el-select>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="6">
  38. <el-button type="primary" icon="Search" @click="handleQuery">查询</el-button>
  39. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  40. </el-col>
  41. </el-row>
  42. </el-form>
  43. </div>
  44. </transition>
  45. <!-- 表格组件 -->
  46. <el-table ref="multipleTable" v-loading="loading" :data="tableData" @selection-change="handleSelectionChange">
  47. <el-table-column label="序号" align="center" width="80">
  48. <template #default="scope">
  49. {{ (queryParams.page - 1) * queryParams.pageSize + scope.$index + 1 }}
  50. </template>
  51. </el-table-column>
  52. <el-table-column label="表格名称" align="center" prop="table_name" />
  53. <el-table-column label="开始日期" align="center" prop="start_time" />
  54. <el-table-column label="截止填报时间" align="center" prop="end_time" />
  55. <el-table-column label="任务状态" align="center" prop="submission_status">
  56. <template #default="scope">
  57. <div>
  58. <span v-if="Number(scope.row.submission_status) === 0">待填报</span>
  59. <span v-else>已上报</span>
  60. </div>
  61. </template>
  62. </el-table-column>
  63. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  64. <template #default="scope">
  65. <el-text
  66. v-if="scope.row.submission_status === 0 && scope.row.collection_status === '0'"
  67. class="common-btn-text-primary"
  68. @click="handleWrite(scope.row)"
  69. >填表</el-text
  70. >
  71. <el-text class="common-btn-text-primary" @click="handleView(scope.row)">详情</el-text>
  72. </template>
  73. </el-table-column>
  74. </el-table>
  75. <pagination
  76. v-show="total > 0"
  77. v-model:page="queryParams.page"
  78. v-model:limit="queryParams.pageSize"
  79. :total="total"
  80. @pagination="fetchFillList"
  81. />
  82. </div>
  83. </div>
  84. <WriteForm v-if="writeFormState.show" :event-id="writeFormState.eventId" @refresh="fetchFillList" @close="handleCancel" />
  85. <FormDetail v-if="formDetailState.show" :event-id="formDetailState.eventId" @close="handleCancel" />
  86. </div>
  87. </template>
  88. <script setup lang="ts">
  89. import { onMounted, reactive, ref } from 'vue';
  90. import { fillList } from '@/api/dataFilling/datafilling';
  91. import WriteForm from './writeForm.vue';
  92. import FormDetail from './formDetail.vue';
  93. import { ComponentInternalInstance, getCurrentInstance } from 'vue';
  94. import { parseTime } from '@/utils/ruoyi';
  95. import { deepClone } from '@/utils';
  96. const loading = ref(true);
  97. const showSearch = ref(true);
  98. const multiple = ref(true);
  99. const ids = ref<Array<number | string>>([]);
  100. const single = ref(true);
  101. const total = ref(0);
  102. const tableData = ref([]);
  103. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  104. const options = [
  105. {
  106. value: '0',
  107. label: '待填报',
  108. },
  109. {
  110. value: '1',
  111. label: '已上报',
  112. }]
  113. const initFormData = reactive({
  114. report_id: '',
  115. table_name: '',
  116. start_time: '',
  117. end_time: '',
  118. submission_status: []
  119. });
  120. const data = reactive({
  121. form: { ...initFormData },
  122. queryParams: {
  123. page: 1,
  124. pageSize: 10,
  125. table_name: '',
  126. submission_status: ''
  127. }
  128. });
  129. const { queryParams } = toRefs(data);
  130. let writeFormState = reactive({
  131. show: false,
  132. eventId: ''
  133. });
  134. let formDetailState = reactive({
  135. show: false,
  136. eventId: ''
  137. });
  138. const handleCancel = () => {
  139. writeFormState.show = false;
  140. formDetailState.show = false;
  141. };
  142. const handleWrite = (row) => {
  143. if (row) {
  144. writeFormState.eventId = row.report_id;
  145. writeFormState.show = true;
  146. }
  147. };
  148. const handleView = (row) => {
  149. if (row) {
  150. formDetailState.eventId = row.report_id;
  151. formDetailState.show = true;
  152. }
  153. };
  154. const fetchFillList = () => {
  155. loading.value = true;
  156. const params = deepClone(queryParams.value);
  157. params.submission_status = !queryParams.value.submission_status ? [] : [queryParams.value.submission_status]
  158. fillList(params)
  159. .then((res) => {
  160. for(let i = 0; i < res.data.length; i++) {
  161. res.data[i].end_time = parseTime(res.data[i].end_time);
  162. res.data[i].start_time = parseTime(res.data[i].start_time);
  163. }
  164. tableData.value = res.data;
  165. total.value = res.total;
  166. })
  167. .finally(() => {
  168. loading.value = false;
  169. });
  170. };
  171. onMounted(() => {
  172. fetchFillList();
  173. });
  174. const handleQuery = () => {
  175. queryParams.value.page = 1; // 重置页码
  176. fetchFillList();
  177. };
  178. const resetQuery = () => {
  179. queryParams.value = { page: 1, pageSize: 10, table_name: '', submission_status: '' };
  180. handleQuery();
  181. };
  182. const handleSelectionChange = (selection) => {
  183. ids.value = selection.map((item) => item.id);
  184. };
  185. </script>