From 6a3a82279be265d61faaffa0100e25820e2be6f6 Mon Sep 17 00:00:00 2001
From: ZhangXianQiang <1135831638@qq.com>
Date: 星期五, 26 四月 2024 10:56:51 +0800
Subject: [PATCH] fix:修改考核结果表格分页

---
 src/views/system/score/default/index.vue |  260 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 159 insertions(+), 101 deletions(-)

diff --git a/src/views/system/score/default/index.vue b/src/views/system/score/default/index.vue
index bb8463e..d62817e 100644
--- a/src/views/system/score/default/index.vue
+++ b/src/views/system/score/default/index.vue
@@ -48,6 +48,7 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
+           v-hasPermi="['platform:score:add']"
         >鏂板</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -58,6 +59,7 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
+           v-hasPermi="['platform:score:edit']"
         >淇敼</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -68,6 +70,7 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
+           v-hasPermi="['platform:score:remove']"
         >鍒犻櫎</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -77,7 +80,7 @@
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-hasPermi="['system:auditing:export']"
+          v-hasPermi="['platform:score:export']"
         >瀵煎嚭</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -85,20 +88,20 @@
 
     <el-table v-loading="loading" :data="auditingList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="杩愮淮鑰冩牳鍗曚綅" align="center" prop="unitName" width="180"/>
-      <el-table-column label="鑰冩牳鍚�" align="center" prop="checkPublishId" width="180">
+      <el-table-column label="鑰冩牳鍗曚綅" align="center" prop="unitName" width="180"/>
+      <el-table-column label="鑰冩牳鍚堝悓" align="center" prop="contractName" width="180" />
+      <el-table-column label="鑰冩牳瑙勫垯" align="center" prop="ruleName" width="120" :show-overflow-tooltip="true"/>
+      <el-table-column label="鑰冩牳鎸囨爣" align="center" prop="num" width="120" />
+      <el-table-column label="鑰冩牳鎵e垎" align="center" prop="score" width="120" />
+      <el-table-column label="鍒涘缓浜�" align="center" prop="createUser" />
+      <el-table-column label="瀹℃牳鐘舵��" align="center" prop="auditingStatus">
         <template slot-scope="scope">
-          <div v-if="scope.row.checkPublishId === 5">瑙嗛鑰冩牳</div>
-        </template>
+        <el-tag
+          :type="scope.row.auditingStatus === '閫氳繃' ? 'success' : scope.row.auditingStatus === '鏈�氳繃' ? 'danger' : 'primary'"
+          disable-transitions>{{scope.row.auditingStatus}}</el-tag>
+      </template>
       </el-table-column>
-      <el-table-column label="杩愮淮鑰冩牳瑙勫垯" align="center" prop="defaultRuleName" width="180" />
-      <el-table-column label="杩愮淮鑰冩牳鎵e垎" align="center" prop="score" width="120" />
-      <el-table-column label="鍒涘缓浜�" align="center" prop="createBy" />
-      <el-table-column label="瀹℃牳浜�" align="center" prop="auditingUserName" />
-      <el-table-column label="瀹℃牳鐘舵��" align="center" prop="auditingStatus" />
-      <el-table-column label="瀹℃牳璇存槑" align="center" prop="remark" width="180"/>
-      <el-table-column label="瀹℃牳鏃堕棿" align="center" prop="auditingTime" width="180"/>
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180"/>
+      <el-table-column label="瀹℃牳浜�" align="center" prop="auditingUser" />
       <el-table-column label="鎿嶄綔" align="center" fixed="right" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -107,14 +110,16 @@
             icon="el-icon-s-check"
             @click="handleAuditing(scope.row)"
             v-hasPermi="['default:audit']"
+            v-if="scope.row.auditingStatus === '寰呭鏍�'"
           >瀹℃牳</el-button>
-<!--          <el-button-->
-<!--            size="mini"-->
-<!--            type="text"-->
-<!--            icon="el-icon-edit"-->
-<!--            @click="handleUpdate(scope.row)"-->
-<!--            v-hasPermi="['system:auditing:edit']"-->
-<!--          >淇敼</el-button>-->
+         <el-button
+           size="mini"
+           type="text"
+           icon="el-icon-edit"
+           @click="handleUpdate(scope.row)"
+           v-if="scope.row.auditingStatus === '寰呭鏍�'"
+           v-hasPermi="['system:auditing:edit']"
+         >淇敼</el-button>
           <el-button
             size="mini"
             type="text"
@@ -141,14 +146,17 @@
         </el-form-item>
 
         <el-form-item label="杩愮淮鑰冩牳瑙勫垯">
-          <el-input v-model="auditingForm.defaultRuleName" disabled/>
+          <el-input v-model="auditingForm.ruleName" type="textarea" autosize disabled/>
+        </el-form-item>
+        <el-form-item label="杩愮淮鑰冩牳鎸囨爣">
+          <el-input v-model="auditingForm.num" disabled/>
         </el-form-item>
         <el-form-item label="杩愮淮鑰冩牳鎵e垎">
           <el-input v-model="auditingForm.score" disabled/>
         </el-form-item>
         <el-form-item label="瀹℃牳缁撴灉" prop="auditingStatus">
-          <el-radio v-model="auditingForm.auditingResult" label="pass">閫氳繃</el-radio>
-          <el-radio v-model="auditingForm.auditingResult" label="return">椹冲洖</el-radio>
+          <el-radio v-model="auditingForm.auditingStatus" label="閫氳繃">閫氳繃</el-radio>
+          <el-radio v-model="auditingForm.auditingStatus" label="鏈�氳繃">椹冲洖</el-radio>
         </el-form-item>
         <el-form-item label="瀹℃牳璇存槑" prop="remark">
           <el-input v-model="auditingForm.remark" type="textarea" show-word-limit maxlength="100"/>
@@ -161,63 +169,58 @@
     </el-dialog>
 
     <!-- 鏂板鎴栦慨鏀� -->
-    <el-dialog title="杩愮淮绉垎瀹℃牳" :visible.sync="open" width="700px"append-to-body>
-      <el-form ref="auditingForm" :model="auditingForm" :rules="auditingRules" label-width="120px">
-        <el-form-item label="杩愮淮鑰冩牳鍗曚綅" prop="unitName">
-          <el-select v-model="form.unitNameList" placeholder="杩愮淮鑰冩牳鍗曚綅">
+    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="杩愮淮鑰冩牳鍗曚綅" prop="unitId">
+          <el-select v-model="form.unitId" placeholder="杩愮淮鑰冩牳鍗曚綅" @change="handleChangeUnit">
             <el-option
-              v-for="item in unitNameList"
-              :key="item.id"
-              :label="item.value"
-              :value="item.id">
-            </el-option>
+            v-for="item in unitList"
+            :key="item.id"
+            :label="item.value"
+            :value="item.id">
+          </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="鑰冩牳鍚�" prop="examineId">
-          <el-select v-model="form.examineId" placeholder="鑰冩牳鍚�" >
-            <el-option
-              v-for="item in examineList"
-              :key="item.id"
-              :label="item.value"
-              :value="item.id">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="杩愮淮鑰冩牳瑙勫垯" prop="tempRuleFormList">
+        <el-form-item label="杩愮淮鑰冩牳瑙勫垯" prop="ruleIdsArray">
           <div class="row-warp">
-            <div class="row" v-for="(form) in tempRuleFormList">
+            <div class="row">
               <div class="row-left">
-                <div>瑙勫垯</div>
                 <div class="block">
                   <span class="demonstration"></span>
                   <el-cascader
-                    v-model="value"
+                    ref="cascader"
+                    v-model="form.ruleIdsArray"
                     :options="options"
-                    :props = "props"
-                    @change="handleChange"></el-cascader>
+                    @change="handleChange">
+                    <template slot-scope="{ data }">
+                      <el-tooltip
+                        class="item"
+                        :disabled="data.label.length < 16 && !data.deductCategory"
+                        effect="dark"
+                        :content="data.label.length < 16 ? data.deductCategory ? data.deductCategory + ' ' + data.calcFraction + (data.calcUnit ? '/' + data.calcUnit : '') : '' : (data.deductCategory ? data.label + ' ' + data.deductCategory + ' ' + data.calcFraction + (data.calcUnit ? '/' + data.calcUnit : '') : data.label)"
+                        placement="left"
+                      >
+                        <span>{{ data.label }}</span>
+                      </el-tooltip>
+                    </template>
+                  </el-cascader>
                 </div>
               </div>
-              <div class="row-right">
+              <div class="row-right" v-if="needNum">
                 <div>鎸囨爣</div>
                 <div class="margin-5">
-                  <el-input type="number" v-model="form.weight"/>
+                  <el-input placeholder="璇疯緭鍏�" v-model="form.num" @input="handleChangeNum"/>
                 </div>
               </div>
-              <div class="item-op">
-                <el-button @click="removeRule(form)" type="danger" icon="el-icon-delete" circle></el-button>
-              </div>
-            </div>
-            <div style="margin-top: 25px">
-              <el-button type="success" @click="nextAdd" size="mini" plain>娣诲姞</el-button>
             </div>
           </div>
         </el-form-item>
-        <el-form-item label="杩愮淮鑰冩牳鎵e垎"  style="width: 20%">
-          <el-input v-model="auditingForm.score"></el-input>
+        <el-form-item label="杩愮淮鑰冩牳鎵e垎" style="width: 51%" prop="score">
+          <el-input v-model="form.score"></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitAuditing">纭� 瀹�</el-button>
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
         <el-button @click="cancel">鍙� 娑�</el-button>
       </div>
     </el-dialog>
@@ -225,44 +228,24 @@
 </template>
 
 <script>
-import { listAuditing, getAuditing, delAuditing, addAuditing, updateAuditing,auditing } from "@/api/platform/default-score";
+import { listAuditing, getAuditing, delAuditing, addAuditing, updateAuditing, auditing } from "@/api/platform/contract-score";
 import { unitSelect } from "@/api/platform/unit";
+import { getRuleListByUnitId, getRule } from "@/api/platform/calculate-rule";
 
 export default {
   name: "Auditing",
   data() {
     return {
-      options: [{
-        value: 'city',
-        label: '鍓嶇鎰熺煡婧愭不鐞嗗伐浣�',
-        children: [{
-          value: 'fushun',
-          label: '鏃堕挓鍚屾',
-        }, {
-          value: 'rong',
-          label: 'OSD鏍囪瘑鏈慨澶�',
-        }, {
-          value: 'rong',
-          label: '涓�鏈轰竴妗d笉鍚堟牸',
-        }
-        ]
-      },
-      ],
+      needNum: false,
+      options: [],
       auditingOpen: false,
       auditingForm: {},
       unitList: [],
-      unitNameList: [
-        {id:2 , value:"鎴愰兘x杩愮淮"}
-        ],
       // 鑰冩牳妯℃澘
       examineList: [
         {id:1 , value:"杞﹁締鑰冩牳"},
         {id:2 , value:"瑙嗛鑰冩牳"}
       ],
-      // 涓存椂瑙勫垯琛ㄥ崟
-      tempRuleForm: {},
-      // 涓存椂瑙勫垯琛ㄥ崟鍒楄〃
-      tempRuleFormList: [{"ruleId": null, "adjustCoefficient": null}],
       // 閬僵灞�
       loading: true,
       // 閫変腑鏁扮粍
@@ -290,7 +273,7 @@
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        defaultId: null,
+        unitId: null,
         auditingStatus: null,
         auditingTime: null,
         auditingUser: null,
@@ -301,9 +284,31 @@
       // 琛ㄥ崟鏍¢獙
       auditingRules: {
         auditingStatus: [
-          { required: true, message: "璇峰厛瀹屾垚瀹℃牳缁撴灉", trigger: "blur" }
+          { required: true, message: "璇峰厛瀹屾垚瀹℃牳缁撴灉", trigger: "blur",  },
+          { 
+            validator: (rule, value, callback) => {
+              if (value === '寰呭鏍�') {
+                callback(new Error("璇峰厛瀹屾垚瀹℃牳缁撴灉"));
+              } else {
+                callback();
+              }
+            },
+            trigger: 'blur'
+          }
         ],
-      }
+      },
+      rules: {
+        unitId: [
+          { required: true, message: "璇烽�夋嫨杩愮淮鑰冩牳鍗曚綅", trigger: "blur" }
+        ],
+        ruleIdsArray: [
+          { required: true, message: "璇烽�夋嫨杩愮淮鑰冩牳瑙勫垯", trigger: "blur" }
+        ],
+        score: [
+          { required: true, message: "鍒嗘暟涓嶈兘涓虹┖", trigger: "blur" }
+        ]
+      },
+      calcObj: {}
     };
   },
   created() {
@@ -311,8 +316,50 @@
     this.getUnitSelect();
   },
   methods: {
-    handleChange(value) {
-      console.log(value);
+    /**
+     * 閫夋嫨瑙勫垯
+     */
+    handleChange() {
+      let item = this.$refs['cascader'].getCheckedNodes()[0].data;
+      this.calcObj = item;
+      this.form.contractId = item.contractId;
+      if (item.deductCategory == "鎵f寚瀹氬垎鏁�") {
+        this.needNum = false;
+        this.form.score = item.calcFraction;
+      } else {
+        this.needNum = true;
+        this.form.score = null;
+      }
+      if (this.form.num != null && this.needNum) {
+        this.handleChangeNum();
+      }
+    },
+    /**
+     * 杈撳叆鎸囨爣
+     */
+    handleChangeNum() {
+      if (this.calcObj.deductCategory == "鍒嗘暟涔樹互鏁伴噺") {
+        this.form.score = Math.floor(this.calcObj.calcFraction * this.form.num * 100) / 100;
+      } else if (this.calcObj.deductCategory == "闄や互鏁伴噺鍚庝箻浠ュ垎鏁�") {
+        this.form.score = Math.floor(Math.ceil(this.form.num / this.calcObj.calcUnit) * this.calcObj.calcFraction * 100) / 100;
+      }
+    },
+    handleChangeUnit(value) {
+      getRuleListByUnitId(value).then((res) => {
+        this.options = this.getTreeData(res.data);
+      })
+    },
+    getTreeData(data){
+      for(var i=0;i<data.length;i++){
+        if(data[i].children.length<1){
+          // children鑻ヤ负绌烘暟缁勶紝鍒欏皢children璁句负undefined
+          data[i].children=undefined;
+        }else {
+          // children鑻ヤ笉涓虹┖鏁扮粍锛屽垯缁х画 閫掑綊璋冪敤 鏈柟娉�
+          this.getTreeData(data[i].children);
+        }
+      }
+      return data;
     },
     // 鎻愪氦瀹℃牳
     submitAuditing() {
@@ -333,8 +380,7 @@
     // 鎵撳紑瀹℃牳
     handleAuditing(row) {
       this.auditingOpen = true;
-      this.auditingForm = row;
-      this.auditingForm.auditingStatus = this.auditingForm.auditingStatus ? this.auditingForm.auditingStatus : null
+      this.auditingForm = {...row};
     },
     // 鍏抽棴瀹℃牳
     closeAuditing() {
@@ -360,8 +406,9 @@
         this.queryParams["createStartTime"] = this.daterangeCreateTime[0];
         this.queryParams["createEndTime"] = this.daterangeCreateTime[1];
       }
+      console.log("this.queryParams", this.queryParams)
       listAuditing(this.queryParams).then(response => {
-        this.auditingList = response.data;
+        this.auditingList = response.rows;
         this.total = response.total;
         this.loading = false;
       });
@@ -376,20 +423,15 @@
     reset() {
       this.form = {
         id: null,
-        defaultId: null,
         auditingStatus: null,
         remark: null,
         auditingTime: null,
-        auditingUser: null,
-        createTime: null,
-        updateTime: null,
-        deleted: null
+        auditingUser: null
       };
       this.resetForm("form");
     },
     /** 鎼滅储鎸夐挳鎿嶄綔 */
     handleQuery() {
-      this.queryParams.pageNum = 1;
       this.getList();
     },
     /** 閲嶇疆鎸夐挳鎿嶄綔 */
@@ -415,14 +457,26 @@
     handleUpdate(row) {
       this.reset();
       const id = row.id || this.ids
+      if (row.auditingStatus != '寰呭鏍�') {
+        this.$message.warning("璇ヨ褰曞凡瀹℃牳锛屼笉鑳戒慨鏀�");
+        return;
+      }
       getAuditing(id).then(response => {
         this.form = response.data;
         this.open = true;
-        this.title = "淇敼杩愮淮鑰冩牳瀹℃牳";
+        this.title = "淇敼杩愮淮鑰冩牳绉垎";
+        this.handleChangeUnit(this.form.unitId);
+        getRule(this.form.ruleId).then(res => {
+          this.calcObj = res.data;
+          if (this.calcObj.deductCategory != "鎵f寚瀹氬垎鏁�") {
+            this.needNum = true;
+          }
+        })
       });
     },
     /** 鎻愪氦鎸夐挳 */
     submitForm() {
+      this.form.ruleId = this.calcObj.id;
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id != null) {
@@ -453,9 +507,9 @@
     },
     /** 瀵煎嚭鎸夐挳鎿嶄綔 */
     handleExport() {
-      this.download('/default-auditing/export', {
+      this.download('/contract/score/export', {
         ...this.queryParams
-      }, `auditing_${new Date().getTime()}.xlsx`)
+      }, `鍚堝悓鑰冩牳绉垎_${new Date().getTime()}.xlsx`)
     }
   }
 };
@@ -486,4 +540,8 @@
   flex-direction: row;
 }
 </style>
-
+<style>
+.el-cascader-node {
+  max-width: 300px;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.8.0