src/views/system/contract/report/index.vue
@@ -13,24 +13,33 @@
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row> -->
    <div v-if="checkResultList && checkResultList.length > 0">
      <el-card class="box-card" v-for="item in checkResultList" :key="item.id">
    <el-row v-if="checkResultList && checkResultList.length > 0">
      <el-col
        :xl="8"
        :lg="8"
        :md="12"
        :sm="12"
        :xs="12"
        v-for="item in checkResultList"
        :key="item.id"
      >
      <el-card class="box-card" >
        <div slot="header" class="clearfix">
          <span>{{ item.unitName }}</span>
          <span>{{ item.unitName +item.whichYear+"年"+item.whichMonth+"月核算报告" }}</span>
          <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">核算</el-button>
        </div>
        <div class="text item">合同<span class="time">{{ item.contractName }}</span></div>
        <div class="text item">最近扣减金额<span class="time">{{ item.latestDeductMoney }}</span></div>
        <div class="text item">累计扣减金额<span class="time">{{ item.deductMoney }}</span></div>
        <div class="text item">最近扣减金额<span class="time">{{ item.latestDeductMoney ?  item.latestDeductMoney:0 }}</span></div>
        <div class="text item">累计扣减金额<span class="time">{{ item.deductMoney ? item.deductMoney:0}}</span></div>
        <div class="text item">最近核算月份
          <span v-if="item.latestTime" class="time">{{ new Date(item.latestTime).getFullYear() }}年{{ new Date(item.latestTime).getMonth() }}月</span>
          <span v-if="item.latestMonth" class="time">{{ item.whichYear }}年{{ item.latestMonth }}月{{item.latestDay}}日</span>
          <span v-else class="time">暂无</span>
        </div>
        <el-button size="small" type="primary" round style="float: right;margin-left: 18px;" @click="handleExport(item)" v-hasPermi="['system:calculate:report:export']">导出</el-button>
        <el-button size="small" round style="float: right;margin-bottom: 18px;" @click="handlePublish(item)" v-if="item.status === 'not_publish'" :disabled="!item.canPublish" v-hasPermi="['system:calculate:report:status']">确认发布</el-button>
        <el-button size="small" round style="float: right;margin-bottom: 18px;" @click="handlePublish(item)" v-if="item.status === 'published'" v-hasPermi="['system:calculate:report:status']">取消发布</el-button>
        <el-button size="small" type="primary" round style="float: right;margin-left: 18px;" @click="handleExport(item.whichYear,item.whichMonth,null,item.contractId,item.contractName)" v-hasPermi="['system:calculate:report:export']">导出</el-button>
        <el-button size="small" round style="float: right;margin-bottom: 18px;" @click="handlePublish(item)"  v-hasPermi="['system:calculate:report:status']">确认发布</el-button>
      </el-card>
    </div>
      </el-col>
    </el-row>
    <el-empty v-else description="暂无数据"></el-empty>
    <pagination
@@ -45,7 +54,7 @@
      <div style="display: flex; flex-direction: row; width: 100%;margin-bottom: 10px; justify-content: center; align-items: center">
        <div style="line-height: 16px">应用规则:</div>
        <div v-for="ruleItem in detail.ruleList" :key="ruleItem.id" style="display: flex; margin-right: 50px;">
          <div style="line-height: 16px;margin-right: 10px;display: flex; align-items: center">{{ ruleItem.scoreCondition }}分</div>
          <div style="line-height: 16px;margin-right: 10px;display: flex; align-items: center">{{ ruleItem.scoreCondition }}</div>
          <div style="line-height: 16px;max-width: 300px;word-wrap:break-word;word-break:normal;color: #2273b9">{{ ruleItem.description }}</div>
        </div>
      </div>
@@ -76,16 +85,19 @@
          :summary-method="getSummaries"
          style="width: 100%;text-align:center">
          <el-table-column
            prop="createTime"
            label="核算日期"
            prop="whichMonth"
            label="核算月份"
            width="180">
          <template slot-scope="scope">
            <span> {{ scope.row.whichYear +'年'+ scope.row.whichMonth+ '月' + scope.row.whichDay+ '日'}}</span>
          </template>
          </el-table-column>
          <el-table-column
            prop="score"
            label="考核分数"
           >
            <template slot-scope="scope">
              <el-link @click="toScorePage(scope.row)">{{scope.row.score}}</el-link>
              <el-link @click="toScorePage(scope.row,detail.unitId)">{{scope.row.score}}</el-link>
            </template>
          </el-table-column>
          <el-table-column
@@ -94,13 +106,45 @@
            width="180">
            <template slot-scope="scope">
              <el-input
                :disabled="!scope.row.latest"
                type="number"
                :precision="2" :step="0.1"
                :min="0" :max="1000000"
                v-model="scope.row.deductMoney"
                :disabled="!checkRole(['admin'])"
                placeholder="请输入扣减金额">
              </el-input>
            </template>
          </el-table-column>
          <el-table-column
            prop="status"
            label="操作"
            width="150"
            v-if="checkRole(['admin'])"
          >
            <template slot-scope="scope">
              <el-button
                size="small"
                type="text"
                v-if="scope.row.status === 'PUBLISHED'"
                @click="handleDetailPublish(scope.row)"
              >
                取消发布
              </el-button>
              <el-button
                v-else
                size="small"
                type="text"
                @click="handleDetailPublish(scope.row)"
                >
                发布
              </el-button>
              <el-button
                size="small"
                type="text"
                @click="handleExport(scope.row.whichYear,scope.row.whichMonth,scope.row.whichDay,detail.contractId,detail.contractName)"
              >
                导出
              </el-button>
            </template>
          </el-table-column>
        </el-table>
@@ -123,8 +167,8 @@
</template>
<script>
import { getCalculateReports, getCalculateReportById, backfill, updatePublishStatus } from "@/api/platform/calculate-report";
import { getCalculateReports, getCalculateReportById, backfill, updatePublishStatus,updatePublishStatusById } from "@/api/platform/calculate-report";
import { checkPermi, checkRole } from "@/utils/permission"; // 权限判断函数
export default {
  name: "CheckResult",
  data() {
@@ -174,6 +218,8 @@
    this.getList();
  },
  methods: {
    checkPermi,
    checkRole,
    frequencyFormatter(row) {
      if (row.frequency === "1") {
        return "月度考核"
@@ -241,23 +287,30 @@
      // })
    },
    handleDetail(row) {
      getCalculateReportById(row.id).then(res => {
      getCalculateReportById(row.contractId,row.whichYear,row.whichMonth).then(res => {
        this.detail = res.data
        this.detailTitle = row.unitName + '考核结果'
        this.detailOpen = true
      })
    },
    handlePublish(row) {
      let text = row.status === 'published' ? '取消发布' : '发布';
      this.$modal.confirm('确认要【' + text + "】【" + row.contractName + "】【" + new Date(row.latestTime).getMonth() + "月】" + '的核算报告吗?').then(function() {
      let text = row.status === 'PUBLISHED' ? '取消发布' : '发布';
      this.$modal.confirm('确认要【' + text + "】【" +  row.unitName +row.whichYear+"年】" + '的核算报告吗?').then(function() {
        // return publishCheckResult(ids);
      }).then(() => {
        updatePublishStatus(row.id).then(res => {
        updatePublishStatus(row.contractId,row.whichYear).then(res => {
          this.getList();
          this.$modal.msgSuccess(text + "成功");
        })
      }).catch(() => {});
    },
    handleDetailPublish(row){
      let text = row.status === 'PUBLISHED' ? '取消发布' : '发布';
      row.status = row.status === 'PUBLISHED' ? 'UNPUBLISHED' : 'PUBLISHED'
      updatePublishStatusById(row.id,row.status).then(res => {
        this.$modal.msgSuccess(text + "成功");
      })
    },
    /** 搜索按钮操作 */
    handleQuery() {
@@ -274,7 +327,7 @@
    submitForm() {
      let data = {
        id: this.detail.id,
        recordList: this.detail.recordList.filter(item => item.latest)
        recordList: this.detail.recordList
      }
      if (data.recordList.length > 0) {
        backfill(data).then(res => {
@@ -290,10 +343,12 @@
    },
    /** 导出按钮操作 */
    handleExport(item) {
    handleExport(whichYear,whichMonth,whichDay,contractId,contractName) {
      const name = contractName+whichYear+'年'+(whichMonth==null? '': whichMonth+'月')+(whichDay==null? '': whichDay+'日')+'运维核算.xlsx'
      this.download('calculate-report/export', {
        ...{ 'contractId': item.contractId }
      }, `${item.contractName}运维核算.xlsx`)
        ...{ 'whichYear': whichYear,'whichMonth': whichMonth,'whichDay':whichDay, 'contractId': contractId},
      }, `${name}`)
    },
    /** 合计行 */
    getSummaries(param) {
@@ -327,11 +382,29 @@
      });
      return sums;
    },
    toScorePage() {
    // 使用Vue Router进行页面跳转
    this.$router.push('/contract/score/index');
    toScorePage(row,unitId) {
      // 使用Vue Router进行页面跳转
      const { startDate, endDate } = this.getMonthDatesFormatted(row.whichYear, row.whichMonth);
      const time = [startDate,endDate]
      this.$router.push({path: '/contract/score', query: {unitId: unitId, time: time}});
    },
    getMonthDatesFormatted(year, month) {
      const startDate = new Date(year, month - 1, 1);
      const endDate = new Date(year, month, 0);
      // 格式化成 YYYY-MM-DD
      const formatDate = (date) => {
        const yyyy = date.getFullYear();
        const mm = String(date.getMonth() + 1).padStart(2, '0');
        const dd = String(date.getDate()).padStart(2, '0');
        return `${yyyy}-${mm}-${dd}`;
      };
      return {
        startDate: formatDate(startDate),
        endDate: formatDate(endDate)
      };
    },
    // 删除按钮
    handleDelete() {