index.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <template>
  2. <el-card class="tjm_card_style_custom">
  3. <div class="tjm_card_title">查询表格</div>
  4. <div class="tjm_card_select">
  5. <el-form class="tjm_card_select_left" :model="params" inline label-width="80px" label-position="left">
  6. <el-form-item label="项目名称">
  7. <el-input v-model="params.name" clearable placeholder="请输入项目名称"></el-input>
  8. </el-form-item>
  9. <el-form-item label="项目等级">
  10. <el-select v-model="params.zcLevel" clearable placeholder="请选择项目等级">
  11. <el-option v-for="item in levelDic" :key="item" :label="item" :value="item"></el-option>
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item label="项目类别">
  15. <el-select v-model="params.zcType" clearable placeholder="请选择项目类别">
  16. <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="状态">
  20. <el-select v-model="params.isLand" clearable placeholder="请选择状态">
  21. <el-option v-for="(label, key) in statusDic" :key="key" :label="label" :value="parseInt(key)"></el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="填报时间">
  25. <el-date-picker v-model="createTime" type="daterange" value-format="YYYY-MM-DD" range-separator="-" start-placeholder="开始时间" end-placeholder="结束时间"></el-date-picker>
  26. </el-form-item>
  27. <el-form-item>
  28. <el-button type="primary" icon="search" @click="reloadTable">搜索</el-button>
  29. <el-button icon="refresh-right" @click="reset">重置</el-button>
  30. </el-form-item>
  31. </el-form>
  32. </div>
  33. <el-divider></el-divider>
  34. <div class="tjm_card_tools">
  35. <div class="tjm_card_tools_right">
  36. <el-button icon="download" @click="table_export">导出</el-button>
  37. </div>
  38. </div>
  39. <div class="tjm_card_table">
  40. <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border>
  41. <el-table-column type="index" width="50"></el-table-column>
  42. <template v-for="(item, index) in columns" :key="index">
  43. <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
  44. <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
  45. </el-table-column>
  46. </template>
  47. <el-table-column label="操作" fixed="right" width="240">
  48. <template #default="scope">
  49. <el-button type="primary" link icon="tickets" @click="table_detail(scope.row)">详情</el-button>
  50. <el-button v-if="scope.row.isReward == 0 && scope.row.isLand == 1 && scope.row.rewardRadix" type="primary" link icon="star" @click="table_score(scope.row)">打分</el-button>
  51. <el-button v-if="scope.row.rewardScore" type="primary" link @click="table_reward(scope.row)">
  52. <template #icon><tjm-icon-tabler-arrows-split-2 /></template>
  53. 奖励分配
  54. </el-button>
  55. </template>
  56. </el-table-column>
  57. </el-table>
  58. </div>
  59. <div class="tjm_card_pagination">
  60. <yh-pagination v-model:pageNo="params.page" v-model:pageSize="params.size" :total="total" @paginationChange="reloadTable"></yh-pagination>
  61. </div>
  62. </el-card>
  63. <policy-strive-detail v-if="dialog.detail" ref="policyStriveDetail" @success="reloadTable" @closed="closed"></policy-strive-detail>
  64. <policy-strive-score v-if="dialog.score" ref="policyStriveScore" @success="reloadTable" @closed="closed"></policy-strive-score>
  65. <policy-strive-reward v-if="dialog.reward" ref="policyStriveReward" @success="reloadTable" @closed="closed"></policy-strive-reward>
  66. </template>
  67. <script>
  68. import API from "@/api/policy/strive"
  69. import { exportExcel } from "@/utils/exportExcel";
  70. import { levelDic, typeDic } from "@/views/policyShare/main";
  71. import { columns, statusDic } from "./main";
  72. import yhPagination from "@/components/Pagination/index.vue";
  73. import policyStriveDetail from "@/views/policyStrive/dialog.vue";
  74. import policyStriveScore from "./scoreDialog.vue";
  75. import policyStriveReward from "./rewardDialog.vue";
  76. export default {
  77. components: {
  78. yhPagination,
  79. policyStriveDetail,
  80. policyStriveScore,
  81. policyStriveReward
  82. },
  83. data() {
  84. return {
  85. columns, levelDic, typeDic, statusDic,
  86. loading: false,
  87. createTime: [],
  88. params: {
  89. page: 1,
  90. size: 10,
  91. status: "done"
  92. },
  93. total: 0,
  94. tableData: [],
  95. dialog: {
  96. detail: false,
  97. score: false,
  98. reward: false
  99. }
  100. }
  101. },
  102. mounted() {
  103. this.reloadTable();
  104. },
  105. methods: {
  106. columnFormat(row, props) {
  107. if (props == "status") return statusDic[row.isLand] || "";
  108. if (props == "landAmount" || props == "rewardRadix") return row.isLand == 1 && row[props] || "";
  109. return row[props];
  110. },
  111. reloadTable(mode = "add") {
  112. if (mode == "add") this.params.page = 1;
  113. this.params.beginCreateTime = this.createTime && this.createTime.length && this.createTime[0] + " 00:00:00" || null;
  114. this.params.endCreateTime = this.createTime && this.createTime.length && this.createTime[1] + " 23:59:59" || null;
  115. this.loading = true;
  116. API.get(this.params).then(res => {
  117. this.loading = false;
  118. if (res.code === 200) {
  119. this.tableData = res.data.records;
  120. this.total = res.data.total;
  121. } else ElMessage.error(res.msg);
  122. }).catch(() => this.loading = false);
  123. },
  124. reset() {
  125. this.createTime = [];
  126. for (const key in this.params) {
  127. if (key == "page") this.params[key] = 1;
  128. else if (key == "size") this.params[key] = 10;
  129. else this.params[key] = null;
  130. }
  131. this.reloadTable();
  132. },
  133. table_export() {
  134. const header = this.columns.map(c => c.label);
  135. const data = this.tableData.map(v => this.columns.map(c => c.props).map(j => this.columnFormat(v, j)));
  136. exportExcel(header, data, [], `${this.$route.name}.xlsx`);
  137. },
  138. table_detail(row) {
  139. this.dialog.detail = true;
  140. this.$nextTick(() => this.$refs.policyStriveDetail.init("detail").setData(row.id));
  141. },
  142. table_score(row) {
  143. this.dialog.score = true;
  144. this.$nextTick(() => this.$refs.policyStriveScore.init().setData(row));
  145. },
  146. table_reward(row) {
  147. this.dialog.reward = true;
  148. this.$nextTick(() => this.$refs.policyStriveReward.init().setData(row));
  149. }
  150. }
  151. }
  152. </script>