Ver código fonte

大体模块

lem 3 anos atrás
pai
commit
9d55405176

+ 26 - 5
src/views/modules/criterion/EvaluationCriterionForm.vue

@@ -10,10 +10,11 @@
         <el-col :span="12">
             <el-form-item label="是否否决" prop="Veto"
                 :rules="[
+                  {required: true, message:'是否否决不能为空', trigger:'blur'}
                  ]">
 		            <el-select v-model="inputForm.Veto" placeholder="请选择"  style="width: 100%;">
                           <el-option
-                            v-for="item in $dictUtils.getDictList('yes_no')"
+                            v-for="item in options"
                             :key="item.value"
                             :label="item.label"
                             :value="item.value">
@@ -48,6 +49,14 @@
            </el-form-item>
         </el-col>
         <el-col :span="12">
+          <el-form-item label="序号" prop="serialNumber"
+                        :rules="[
+                  {required: true, message:'序号不能为空', trigger:'blur'}
+                 ]">
+            <el-input v-model="inputForm.serialNumber" placeholder="请填写序号"     ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
             <el-form-item label="名称" prop="name"
                 :rules="[
                   {required: true, message:'名称不能为空', trigger:'blur'}
@@ -85,14 +94,25 @@
         loading: false,
         inputForm: {
           id: '',
-          Veto: '',
+          Veto: '0',
           remarks: '',
           parent: {
             id: ''
           },
           name: '',
-          sort: ''
-        }
+          sort: '',
+          serialNumber: ''
+        },
+        options: [{
+          value: '',
+          label: '请选择'
+        }, {
+          value: '0',
+          label: '否'
+        }, {
+          value: '1',
+          label: '是'
+        }]
       }
     },
     components: {
@@ -124,6 +144,7 @@
               method: 'get'
             }).then(({data}) => {
               this.inputForm = this.recover(this.inputForm, data.evaluationCriterion)
+              this.inputForm.Veto = data.evaluationCriterion.veto.toString()
               this.loading = false
             })
           }
@@ -151,4 +172,4 @@
       }
     }
   }
-</script>
+</script>

+ 5 - 0
src/views/modules/criterion/EvaluationCriterionList.vue

@@ -9,6 +9,11 @@
       row-key="id"
       v-loading="loading"
       class="table">
+      <el-table-column
+        prop="serialNumber"
+        show-overflow-tooltip
+        label="序号">
+      </el-table-column>
 	  <el-table-column
         prop="name"
         show-overflow-tooltip

+ 251 - 0
src/views/modules/deductiondetails/DeductionDetailsForm.vue

@@ -0,0 +1,251 @@
+<template>
+<div>
+  <el-dialog
+    :title="title"
+    :close-on-click-modal="false"
+    :visible.sync="visible">
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+             label-width="120px">
+      <el-row  :gutter="15">
+        <el-col :span="12">
+          <el-form-item label="施工单位年份" prop="unitId"
+                        :rules="[
+                 ]">
+            <el-input readonly v-model="inputForm.yearOfEvaluation" placeholder="施工单位年份"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="施工单位名称" prop="unitId"
+                :rules="[
+                 ]">
+              <el-input readonly v-model="inputForm.evaName" placeholder="施工单位名称"></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="扣分大类" prop="classId"
+                :rules="[
+                  {required: true, message:'扣分大类不能为空', trigger:'blur'}
+                 ]">
+                <el-select v-model="inputForm.classId" placeholder="请选择" @change="selectGoodsByGroupId($event)"  style="width: 100%;">
+                          <el-option
+                            v-for="item in bigClass"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                          </el-option>
+                      </el-select>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="扣分小类" prop="subClassId"
+                :rules="[
+                  {required: true, message:'扣分小类不能为空', trigger:'blur'}
+                 ]">
+                <el-select v-model="inputForm.subClassId" placeholder="请选择" @change="selectVeto($event)"  style="width: 100%;">
+                          <el-option
+                            v-for="item in subClass"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                          </el-option>
+                      </el-select>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item v-if="inputForm.veto != 1" label="扣分" prop="deductPoints"
+                :rules="[
+                  {required: true,  message:'扣分分数不为空', trigger:'blur'},
+                  {validator: isNumberZero, trigger:'blur'}
+                 ]">
+              <el-input type="number" v-model="inputForm.deductPoints" placeholder="请填写扣分"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="扣分详情" prop="deductionDetails"
+                :rules="[
+                  {required: true,  message:'扣分详情不为空', trigger:'blur'},
+                 ]">
+              <el-input type="textarea" resize="none" :autosize="{ minRows: 4, maxRows: 4 }" v-model="inputForm.deductionDetails" placeholder="请填写扣分详情"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="日期" prop="deductionDate"
+                :rules="[
+                  {required: true,  message:'扣分日期不为空', trigger:'blur'},
+                 ]">
+                <el-date-picker
+                      style="width: 100%;"
+                      readonly
+                      v-model="inputForm.deductionDate"
+                      type="date"
+                      value-format="yyyy-MM-dd"
+                      placeholder="选择扣分日期">
+                    </el-date-picker>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item v-if="veto=== '1'" label="是否否决" prop="veto"
+                        :rules="[
+                  {required: true,  message:'是否否决不能为空', trigger:'blur'},
+                 ]">
+            <el-select v-model="inputForm.veto" placeholder="请选择"  style="width: 100%;">
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        </el-row>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">关闭</el-button>
+      <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" v-noMoreClick>确定</el-button>
+    </span>
+  </el-dialog>
+</div>
+</template>
+
+<script>
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        isNumberZero: (rule, value, callback) => {
+          const reg = /^[+]?[1-9]+$/
+          if (!reg.test(value)) {
+            return callback(new Error('情输入正确的扣分分数'))
+          }
+          this.$http.get(`/database/datalink/dataSource/checkEnName?oldEnName=${this.inputForm.oldEnName}&enName=${value}`).then(({data}) => {
+            if (!data.success) {
+              return callback(new Error('连接英文名已存在!'))
+            } else {
+              return callback()
+            }
+          })
+        },
+        inputForm: {
+          id: '',
+          yearOfEvaluation: '',
+          unitId: '',
+          classId: '',
+          subClassId: '',
+          deductPoints: '',
+          deductionDetails: '',
+          deductionDate: '',
+          veto: '',
+          evaName: ''
+        },
+        options: [ {
+          value: '0',
+          label: '否'
+        }, {
+          value: '1',
+          label: '是'
+        }],
+        bigClass: [],
+        subClass: [],
+        veto: '0',
+        unitId: '',
+        bigClassId: '',
+        classId: '',
+        subClassId: ''
+      }
+    },
+    components: {
+    },
+    methods: {
+      init (method, id) {
+        this.method = method
+        this.inputForm.id = id
+        this.unitId = id
+        if (method === 'add') {
+          this.title = `新建扣分详情`
+        } else if (method === 'edit') {
+          this.title = '修改扣分详情'
+        } else if (method === 'view') {
+          this.title = '查看扣分详情'
+        }
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          this.$refs.inputForm.resetFields()
+          if (method === 'edit' || method === 'view') { // 修改或者查看
+            this.loading = true
+            this.$http({
+              url: `/deductiondetails/deductionDetails/getSummary?id=${this.inputForm.id}`,
+              method: 'get'
+            }).then(({data}) => {
+              this.inputForm = this.recover(this.inputForm, data.deductionDetails)
+              this.created()
+              this.loading = false
+            })
+            this.$http({
+              url: `/deductiondetails/deductionDetails/getBigClass?id=0`,
+              method: 'get'
+            }).then(({data}) => {
+              this.bigClass = data.bigClass
+              this.veto = '0'
+              this.loading = false
+            })
+          }
+        })
+      },
+      // 表单提交
+      doSubmit () {
+        this.$refs['inputForm'].validate((valid) => {
+          if (valid) {
+            this.inputForm.unitId = this.unitId
+            this.loading = true
+            console.log(this.inputForm)
+            this.$http({
+              url: `/deductiondetails/deductionDetails/insertDetails`,
+              method: 'post',
+              data: this.inputForm
+            }).then(({data}) => {
+              if (data && data.success) {
+                this.visible = false
+                this.$message.success(data.msg)
+                this.$emit('refreshDataList')
+              }
+              this.loading = false
+            })
+          }
+        })
+      },
+      created: function () {
+        const aData = new Date()
+        this.value = aData.getFullYear() + '-' + (aData.getMonth() + 1) + '-' + aData.getDate()
+        this.inputForm.deductionDate = this.value.toString()
+      },
+      selectGoodsByGroupId (val) {
+        this.$http({
+          url: `/deductiondetails/deductionDetails/getSubClass?id=${this.inputForm.classId}`,
+          method: 'get'
+        }).then(({data}) => {
+          console.log(data)
+          this.subClass = data.subClass
+          this.loading = false
+        })
+      },
+      selectVeto (val) {
+        console.log(val)
+        this.$http({
+          url: `/deductiondetails/deductionDetails/getVeto?id=${this.inputForm.subClassId}`,
+          method: 'get'
+        }).then(({data}) => {
+          console.log(data)
+          this.veto = data.veto
+          this.inputForm.veto = '0'
+          this.loading = false
+        })
+      }
+
+    }
+  }
+</script>

+ 343 - 0
src/views/modules/deductiondetails/DeductionDetailsList.vue

@@ -0,0 +1,343 @@
+<template>
+  <div>
+      <el-form :inline="true" v-show="isSearchCollapse" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+        <el-col :span="8">
+          <el-form-item label="评价年份" prop="yearOfEvaluation">
+            <el-date-picker
+              v-model="searchForm.yearOfEvaluation"
+              type="year"
+              size="small"
+              value-format="yyyy"
+              placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单位名称" prop="unitName">
+            <el-input size="small" v-model="searchForm.unitName" placeholder="单位名称" clearable></el-input>
+          </el-form-item>
+        </el-col>
+          <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small">查询</el-button>
+            <el-button @click="resetSearch()" size="small">重置</el-button>
+          </el-form-item>
+      </el-form>
+        <!-- 导入导出-->
+      <el-form :inline="true" v-show="isImportCollapse"  class="query-form" ref="importForm">
+         <el-form-item>
+          <el-button type="default" @click="downloadTpl()" size="small">下载模板</el-button>
+         </el-form-item>
+         <el-form-item prop="loginName">
+            <el-upload
+              class="upload-demo"
+              :action="`${this.$http.BASE_URL}/deductiondetails/deductionDetails/import`"
+              :on-success="uploadSuccess"
+               :show-file-list="true">
+              <el-button size="small" type="primary">点击上传</el-button>
+              <div slot="tip" class="el-upload__tip">只允许导入“xls”或“xlsx”格式文件!</div>
+            </el-upload>
+        </el-form-item>
+      </el-form>
+      <el-row>
+<!--        <el-button v-if="hasPermission('deductiondetails:deductionDetails:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">扣分</el-button>-->
+        <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="sub()"
+         :disabled="dataListSelections.length != 1" plain>扣分</el-button>
+        <!--<el-button v-if="hasPermission('deductiondetails:deductionDetails:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()"
+                  :disabled="dataListSelections.length <= 0" plain>删除
+        </el-button>-->
+        <el-button-group class="pull-right">
+            <el-button
+              type="default"
+              size="small"
+              icon="el-icon-search"
+              @click="isSearchCollapse = !isSearchCollapse, isImportCollapse=false">
+            </el-button>
+            <el-button
+              type="default"
+              size="small"
+              icon="el-icon-refresh"
+              @click="refreshList">
+            </el-button>
+        </el-button-group>
+      </el-row>
+    <el-table
+      :data="dataList"
+      border
+      size="medium"
+      @selection-change="selectionChangeHandle"
+      @sort-change="sortChangeHandle"
+      v-loading="loading"
+      class="table">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+	  <el-table-column
+        prop="yearOfEvaluation"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位年份">
+      </el-table-column>
+      <el-table-column
+        prop="evaName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位名称">
+      </el-table-column>
+	  <el-table-column
+        prop="safetyEva"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场安全管控评价">
+      <template slot-scope="scope">
+      <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'1')">{{scope.row.safetyEva}}</el-link>
+      </template>
+    </el-table-column>
+	  <el-table-column
+        prop="progressEva"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场施工质量及进度评价">
+      <template slot-scope="scope">
+      <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'2')">{{scope.row.progressEva}}</el-link>
+      </template>
+    </el-table-column>
+	  <el-table-column
+        prop="costEva"
+        show-overflow-tooltip
+        sortable="custom"
+        label="造价及竣工资料评价">
+      <template slot-scope="scope">
+      <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'3')">{{scope.row.costEva}}</el-link>
+      </template>
+    </el-table-column>
+	  <el-table-column
+        prop="qualityEva"
+        show-overflow-tooltip
+        sortable="custom"
+        label="优质服务及文明施工评价">
+      <template slot-scope="scope">
+      <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'4')">{{scope.row.qualityEva}}</el-link>
+      </template>
+    </el-table-column>
+	  <el-table-column
+        prop="pointsEva"
+        show-overflow-tooltip
+        sortable="custom"
+        label="其他加减分评价">
+      <template slot-scope="scope">
+      <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'5')">{{scope.row.pointsEva}}</el-link>
+      </template>
+    </el-table-column>
+	  <el-table-column
+        prop="veto"
+        show-overflow-tooltip
+        sortable="custom"
+        label="是否存在否决事项">
+      <template slot-scope="scope">
+      <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'6')">{{scope.row.veto}}</el-link>
+      </template>
+    </el-table-column>
+      <el-table-column
+        prop="sumScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="汇总评分">
+      </el-table-column>
+<!--      <el-table-column
+        header-align="center"
+        align="center"
+        fixed="right"
+        width="200"
+        label="操作">
+        <template  slot-scope="scope">
+          <el-button v-if="hasPermission('deductiondetails:deductionDetails:view')" type="text" icon="el-icon-view" size="small" @click="view(scope.row.id)">查看</el-button>
+          <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="text" icon="el-icon-edit" size="small" @click="edit(scope.row.id)">修改</el-button>
+          <el-button v-if="hasPermission('deductiondetails:deductionDetails:del')" type="text"  icon="el-icon-delete" size="small" @click="del(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>-->
+    </el-table>
+    <el-pagination
+      @size-change="sizeChangeHandle"
+      @current-change="currentChangeHandle"
+      :current-page="pageNo"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="pageSize"
+      :total="total"
+      background
+      layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+    <DeductionDetailsForm  ref="deductionDetailsForm" @refreshDataList="refreshList"></DeductionDetailsForm>
+  </div>
+</template>
+
+<script>
+  import DeductionShowDetailsList from '../deductionshowdetails/DeductionShowDetailsList'
+  import DeductionDetailsForm from './DeductionDetailsForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          yearOfEvaluation: new Date().getFullYear().toString()
+        },
+        dataList: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orderBy: '',
+        dataListSelections: [],
+        isSearchCollapse: false,
+        isImportCollapse: false,
+        loading: false,
+        classId: ''
+      }
+    },
+    components: {
+      DeductionShowDetailsList,
+      DeductionDetailsForm
+    },
+    activated () {
+      this.refreshList()
+    },
+
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.$http({
+          url: '/deductiondetails/deductionDetails/summaryList',
+          method: 'get',
+          params: {
+            'pageNo': this.pageNo,
+            'pageSize': this.pageSize,
+            'orderBy': this.orderBy,
+            ...this.searchForm
+          }
+        }).then(({data}) => {
+          if (data && data.success) {
+            console.log(data.page.list)
+            this.dataList = data.page.list
+            this.total = data.page.count
+            this.loading = false
+          }
+        })
+      },
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+
+    // 排序
+      sortChangeHandle (obj) {
+        if (obj.order === 'ascending') {
+          this.orderBy = obj.prop + ' asc'
+        } else if (obj.order === 'descending') {
+          this.orderBy = obj.prop + ' desc'
+        } else {
+          this.orderBy = ''
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.deductionDetailsForm.init('add', '')
+      },
+      // 修改
+      edit (id, type) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        console.log(id)
+        switch (type) {
+          case '1':
+            this.classId = '8c9fe0f62745471e8c341e0e7327aa9b'
+            break
+          case '2':
+            this.classId = '7a77a8251b124e858a1bef1bb353372b'
+            break
+          case '3':
+            this.classId = '783ba447e0774b139fa1dc6ad4eeb4f3'
+            break
+          case '4':
+            this.classId = 'bc91443b714c4993a3b136e000eb8bc2'
+            break
+          case '5':
+            this.classId = '2f0e74b9e50b4bbb8d6322feac578076'
+            break
+          case '6':
+            this.classId = '6018a3a93b164602aebc08ae44207ba5'
+            break
+        }
+        this.$router.push({path: '../deductionshowdetails/DeductionShowDetailsList', query: {unitId: id, classId: this.classId}})
+      },
+      sub (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        this.$refs.deductionDetailsForm.init('edit', id, '', '', '')
+      },
+      // 查看
+      view (id) {
+        this.$refs.deductionDetailsForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.dataListSelections.map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.$http({
+            url: '/deductiondetails/deductionDetails/delete',
+            method: 'delete',
+            params: {'ids': ids}
+          }).then(({data}) => {
+            if (data && data.success) {
+              this.$message.success(data.msg)
+              this.DeductionShowDetailsList.refreshList()
+            }
+            this.loading = false
+          })
+        })
+      },
+      // 导入成功
+      uploadSuccess (res, file) {
+        if (res.success) {
+          this.$message.success({dangerouslyUseHTMLString: true,
+            message: res.msg})
+        } else {
+          this.$message.error(res.msg)
+        }
+      },
+      // 下载模板
+      downloadTpl () {
+        this.$utils.download('/deductiondetails/deductionDetails/import/template')
+      },
+      exportExcel () {
+        this.$utils.download('/deductiondetails/deductionDetails/export')
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>

+ 312 - 0
src/views/modules/deductionshowdetails/CostCompletionList.vue

@@ -0,0 +1,312 @@
+<template>
+  <div>
+      <el-form :inline="true" v-show="isSearchCollapse" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+        <el-col :span="8">
+          <el-form-item label="评价年份" prop="yearOfEvaluation">
+            <el-date-picker
+              v-model="searchForm.yearOfEvaluation"
+              type="year"
+              size="small"
+              value-format="yyyy"
+              placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单位名称" prop="unitName">
+            <el-input size="small" v-model="searchForm.unitName" placeholder="单位名称" clearable></el-input>
+          </el-form-item>
+        </el-col>
+        <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small">查询</el-button>
+            <el-button @click="resetSearch()" size="small">重置</el-button>
+          </el-form-item>
+      </el-form>
+    <el-row>
+      <!--        <el-button v-if="hasPermission('deductiondetails:deductionDetails:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">扣分</el-button>-->
+      <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="sub()"
+                 :disabled="dataListSelections.length != 1" plain>扣分</el-button>
+      <el-button-group class="pull-right">
+        <el-button
+          type="default"
+          size="small"
+          icon="el-icon-search"
+          @click="isSearchCollapse = !isSearchCollapse, isImportCollapse=false">
+        </el-button>
+        <el-button
+          type="default"
+          size="small"
+          icon="el-icon-refresh"
+          @click="refreshList">
+        </el-button>
+      </el-button-group>
+    </el-row>
+    <el-table
+      :data="dataList"
+      border
+      size="medium"
+      @selection-change="selectionChangeHandle"
+      @sort-change="sortChangeHandle"
+      v-loading="loading"
+      class="table">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+      <el-table-column
+        prop="yearOfEvaluation"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位年份">
+      </el-table-column>
+      <el-table-column
+        prop="unitName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位名称">
+      </el-table-column>
+      <el-table-column
+        prop="basicScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="基础分数">
+      </el-table-column>
+      <el-table-column
+        prop="reasonOne"
+        show-overflow-tooltip
+        sortable="custom"
+        label="工程竣工结束30天内,未按要求上报竣工资料至结算中心,每发生一起,扣5分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'1')">{{scope.row.reasonOne}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonTwo"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场签证存在漏签、多签、错签、代签的,每发生一起,扣2-10分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'2')">{{scope.row.reasonTwo}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonThree"
+        show-overflow-tooltip
+        sortable="custom"
+        label="工作量弄虚作假,上报工作量与实际存在10%以上的偏差,每发生一起,扣5分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'3')">{{scope.row.reasonThree}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFour"
+        show-overflow-tooltip
+        sortable="custom"
+        label="接到分包中标通知书后,15天内未至安能杰签订分包合同,每发生一起,扣3分。经催办后7天内仍未至安能杰签订合同,追加扣分5分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'4')">{{scope.row.reasonFour}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFive"
+        show-overflow-tooltip
+        sortable="custom"
+        label="接到安能杰公司开票通知后,7天内未将发票送至安能杰公司,扣1-10分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'5')">{{scope.row.reasonFive}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="sumScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="汇总评分">
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      @size-change="sizeChangeHandle"
+      @current-change="currentChangeHandle"
+      :current-page="pageNo"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="pageSize"
+      :total="total"
+      background
+      layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DeductionShowDetailsForm  ref="deductionShowDetailsForm" @refreshDataList="refreshList"></DeductionShowDetailsForm>
+    <DeductionDetailsForm  ref="deductionDetailsForm" @refreshDataList="refreshList"></DeductionDetailsForm>
+  </div>
+</template>
+
+<script>
+  import DeductionShowDetailsForm from './DeductionShowDetailsForm'
+  import DeductionDetailsForm from '../deductiondetails/DeductionDetailsForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          yearOfEvaluation: new Date().getFullYear().toString(),
+          id: '',
+          unitId: '',
+          classId: ''
+        },
+        columns: [],
+        dataList: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orderBy: '',
+        subClass: '',
+        dataListSelections: [],
+        isSearchCollapse: false,
+        isImportCollapse: false,
+        loading: false
+      }
+    },
+    components: {
+      DeductionShowDetailsForm,
+      DeductionDetailsForm
+    },
+    activated () {
+      this.refreshList()
+    },
+
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.$http({
+          url: '/deductionShowDetails/deductionShowDetails/costCompletionList',
+          method: 'get',
+          params: {
+            'pageNo': this.pageNo,
+            'pageSize': this.pageSize,
+            'orderBy': this.orderBy,
+            ...this.searchForm
+          }
+        }).then(({data}) => {
+          if (data && data.success) {
+            console.log(data)
+            this.dataList = data.page.list
+            this.total = data.page.count
+            this.loading = false
+          }
+        })
+      },
+
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+
+    // 排序
+      sortChangeHandle (obj) {
+        if (obj.order === 'ascending') {
+          this.orderBy = obj.prop + ' asc'
+        } else if (obj.order === 'descending') {
+          this.orderBy = obj.prop + ' desc'
+        } else {
+          this.orderBy = ''
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.deductionShowDetailsForm.init('add', '')
+      },
+      edit (id, type) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        console.log(id)
+        switch (type) {
+          case '1':
+            this.subClass = 'f3cfc08e5ea24d3780bfe89c0d6c8c80'
+            break
+          case '2':
+            this.subClass = '92c068926a8041369b73708c7ff1eda8'
+            break
+          case '3':
+            this.subClass = 'b5010972a5a44e9a8a8e1e04f5361808'
+            break
+          case '4':
+            this.subClass = 'e30f4db933ef477ca66415d0bb426dac'
+            break
+          case '5':
+            this.subClass = '5aabe8b2882c4de396626e7de6a712f7'
+            break
+        }
+        this.$router.push({path: './DeductionShowDetailsList', query: {unitId: id, subClass: this.subClass}})
+      },
+      sub (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        this.$refs.deductionDetailsForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.deductionShowDetailsForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.dataListSelections.map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.$http({
+            url: '/deductionshowdetails/deductionShowDetails/delete',
+            method: 'delete',
+            params: {'ids': ids}
+          }).then(({data}) => {
+            if (data && data.success) {
+              this.$message.success(data.msg)
+              this.refreshList()
+            }
+            this.loading = false
+          })
+        })
+      },
+      // 导入成功
+      uploadSuccess (res, file) {
+        if (res.success) {
+          this.$message.success({dangerouslyUseHTMLString: true,
+            message: res.msg})
+        } else {
+          this.$message.error(res.msg)
+        }
+      },
+      // 下载模板
+      downloadTpl () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/import/template')
+      },
+      exportExcel () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/export')
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>

+ 190 - 0
src/views/modules/deductionshowdetails/DeductionShowDetailsForm.vue

@@ -0,0 +1,190 @@
+<template>
+<div>
+  <el-dialog
+    :title="title"
+    :close-on-click-modal="false"
+    :visible.sync="visible">
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+             label-width="120px">
+      <el-row  :gutter="15">
+        <el-col :span="12">
+            <el-form-item label="施工单位Id" prop="unitId"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.unitId" placeholder="请填写施工单位Id"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="大类Id" prop="classId"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.classId" placeholder="请填写大类Id"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="小类Id" prop="subClassId"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.subClassId" placeholder="请填写小类Id"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="年份" prop="yearOfEvaluation"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.yearOfEvaluation" placeholder="请填写年份"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="名称" prop="unitName"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.unitName" placeholder="请填写名称"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="大类名称" prop="bigName"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.bigName" placeholder="请填写大类名称"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="小类序号" prop="serialNumber"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.serialNumber" placeholder="请填写小类序号"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="小类名称" prop="smallName"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.smallName" placeholder="请填写小类名称"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="扣分分数" prop="deductPoints"
+                :rules="[
+                  {required: true, message:'扣分分数不能为空', trigger:'blur'}
+                 ]">
+              <el-input v-model="inputForm.deductPoints" placeholder="请填写扣分分数"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="扣分详情" prop="deductionDetails"
+                :rules="[
+                  {required: true, message:'扣分详情不能为空', trigger:'blur'}
+                 ]">
+              <el-input v-model="inputForm.deductionDetails" placeholder="请填写扣分详情"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="扣分日期" prop="deductionDate"
+                :rules="[
+                 ]">
+              <el-input v-model="inputForm.deductionDate" placeholder="请填写扣分日期"     ></el-input>
+           </el-form-item>
+        </el-col>
+        <el-col :span="12">
+            <el-form-item label="是否否决" prop="veto"
+                :rules="[
+                  {required: true, message:'是否否决不能为空', trigger:'blur'}
+                 ]">
+                <el-select v-model="inputForm.veto" placeholder="请选择"  style="width: 100%;">
+                          <el-option
+                            v-for="item in $dictUtils.getDictList('')"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                          </el-option>
+                      </el-select>
+           </el-form-item>
+        </el-col>
+        </el-row>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">关闭</el-button>
+      <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" v-noMoreClick>确定</el-button>
+    </span>
+  </el-dialog>
+</div>
+</template>
+
+<script>
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        inputForm: {
+          id: '',
+          unitId: '',
+          classId: '',
+          subClassId: '',
+          yearOfEvaluation: '',
+          unitName: '',
+          bigName: '',
+          serialNumber: '',
+          smallName: '',
+          deductPoints: '',
+          deductionDetails: '',
+          deductionDate: '',
+          veto: ''
+        }
+      }
+    },
+    components: {
+    },
+    methods: {
+      init (method, id) {
+        this.method = method
+        this.inputForm.id = id
+        if (method === 'add') {
+          this.title = `新建扣分详细`
+        } else if (method === 'edit') {
+          this.title = '查看扣分详细'
+        } else if (method === 'view') {
+          this.title = '查看扣分详细'
+        }
+        this.visible = true
+        this.loading = false
+        this.$nextTick(() => {
+          this.$refs.inputForm.resetFields()
+          if (method === 'edit' || method === 'view') { // 修改或者查看
+            this.loading = true
+            this.$http({
+              url: `/deductionshowdetails/deductionShowDetails/queryById?id=${this.inputForm.id}`,
+              method: 'get'
+            }).then(({data}) => {
+              this.inputForm = this.recover(this.inputForm, data.deductionShowDetails)
+              this.loading = false
+            })
+          }
+        })
+      },
+      // 表单提交
+      doSubmit () {
+        this.$refs['inputForm'].validate((valid) => {
+          if (valid) {
+            this.loading = true
+            this.$http({
+              url: `/deductionshowdetails/deductionShowDetails/save`,
+              method: 'post',
+              data: this.inputForm
+            }).then(({data}) => {
+              if (data && data.success) {
+                this.visible = false
+                this.$message.success(data.msg)
+                this.$emit('refreshDataList')
+              }
+              this.loading = false
+            })
+          }
+        })
+      }
+    }
+  }
+</script>

+ 322 - 0
src/views/modules/deductionshowdetails/DeductionShowDetailsList.vue

@@ -0,0 +1,322 @@
+<template>
+  <div>
+      <el-form :inline="true" v-show="isSearchCollapse" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+        <el-col :span="8">
+          <el-form-item label="评价年份" prop="yearOfEvaluation">
+            <el-date-picker
+              v-model="searchForm.yearOfEvaluation"
+              type="year"
+              size="small"
+              value-format="yyyy"
+              placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单位名称" prop="unitName">
+            <el-input size="small" v-model="searchForm.unitName" placeholder="单位名称" clearable></el-input>
+          </el-form-item>
+        </el-col>
+        <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small">查询</el-button>
+            <el-button @click="resetSearch()" size="small">重置</el-button>
+          </el-form-item>
+      </el-form>
+        <!-- 导入导出-->
+      <el-form :inline="true" v-show="isImportCollapse"  class="query-form" ref="importForm">
+         <el-form-item>
+          <el-button type="default" @click="downloadTpl()" size="small">下载模板</el-button>
+         </el-form-item>
+         <el-form-item prop="loginName">
+            <el-upload
+              class="upload-demo"
+              :action="`${this.$http.BASE_URL}/deductionshowdetails/deductionShowDetails/import`"
+              :on-success="uploadSuccess"
+               :show-file-list="true">
+              <el-button size="small" type="primary">点击上传</el-button>
+              <div slot="tip" class="el-upload__tip">只允许导入“xls”或“xlsx”格式文件!</div>
+            </el-upload>
+        </el-form-item>
+      </el-form>
+      <el-row>
+        <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="sub()"
+                   :disabled="dataListSelections.length != 1" plain>扣分</el-button>
+<!--        <el-button v-if="hasPermission('deductionshowdetails:deductionShowDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="edit()"
+         :disabled="dataListSelections.length != 1" plain>修改</el-button>-->
+        <el-button v-if="hasPermission('deductionshowdetails:deductionShowDetails:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()"
+                  :disabled="dataListSelections.length <= 0" plain>删除
+        </el-button>
+        <el-button-group class="pull-right">
+            <el-button
+              type="default"
+              size="small"
+              icon="el-icon-search"
+              @click="isSearchCollapse = !isSearchCollapse, isImportCollapse=false">
+            </el-button>
+            <el-button v-if="hasPermission('deductionshowdetails:deductionShowDetails:import')" type="default" size="small" icon="el-icon-upload2" title="导入" @click="isImportCollapse = !isImportCollapse, isSearchCollapse=false"></el-button>
+            <el-button v-if="hasPermission('deductionshowdetails:deductionShowDetails:export')" type="default" size="small" icon="el-icon-download" title="导出" @click="exportExcel()"></el-button>
+            <el-button
+              type="default"
+              size="small"
+              icon="el-icon-refresh"
+              @click="refreshList">
+            </el-button>
+        </el-button-group>
+      </el-row>
+    <el-table
+      :data="dataList"
+      border
+      size="medium"
+      @selection-change="selectionChangeHandle"
+      @sort-change="sortChangeHandle"
+      v-loading="loading"
+      class="table">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+	  <el-table-column
+        prop="yearOfEvaluation"
+        show-overflow-tooltip
+        sortable="custom"
+        label="年份">
+<!--            <template slot-scope="scope">
+              <el-link  type="primary" :underline="false" v-if="hasPermission('deductionshowdetails:deductionShowDetails:edit')" @click="edit(scope.row.id)">{{scope.row.yearOfEvaluation}}</el-link>
+              <el-link  type="primary" :underline="false" v-else-if="hasPermission('deductionshowdetails:deductionShowDetails:view')"  @click="view(scope.row.id)">{{scope.row.yearOfEvaluation}}</el-link>
+              <span v-else>{{scope.row.yearOfEvaluation}}</span>
+            </template>-->
+      </el-table-column>
+	  <el-table-column
+        prop="unitName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="名称">
+      </el-table-column>
+	  <el-table-column
+        prop="bigName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="大类名称">
+      </el-table-column>
+	  <el-table-column
+        prop="serialNumber"
+        show-overflow-tooltip
+        sortable="custom"
+        label="小类序号">
+      </el-table-column>
+	  <el-table-column
+        prop="smallName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="小类名称">
+      </el-table-column>
+	  <el-table-column
+        prop="deductPoints"
+        show-overflow-tooltip
+        sortable="custom"
+        label="扣分分数">
+      </el-table-column>
+	  <el-table-column
+        prop="deductionDetails"
+        show-overflow-tooltip
+        sortable="custom"
+        label="扣分详情">
+      </el-table-column>
+	  <el-table-column
+        prop="deductionDate"
+        show-overflow-tooltip
+        sortable="custom"
+        label="扣分日期">
+      </el-table-column>
+	  <el-table-column
+        prop="veto"
+        show-overflow-tooltip
+        sortable="custom"
+        label="是否否决">
+      </el-table-column>
+<!--      <el-table-column
+        header-align="center"
+        align="center"
+        fixed="right"
+        width="200"
+        label="操作">
+        <template  slot-scope="scope">
+          <el-button v-if="hasPermission('deductionshowdetails:deductionShowDetails:view')" type="text" icon="el-icon-view" size="small" @click="view(scope.row.id)">查看</el-button>
+          <el-button v-if="hasPermission('deductionshowdetails:deductionShowDetails:edit')" type="text" icon="el-icon-edit" size="small" @click="edit(scope.row.id)">修改</el-button>
+          <el-button v-if="hasPermission('deductionshowdetails:deductionShowDetails:del')" type="text"  icon="el-icon-delete" size="small" @click="del(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>-->
+    </el-table>
+    <el-pagination
+      @size-change="sizeChangeHandle"
+      @current-change="currentChangeHandle"
+      :current-page="pageNo"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="pageSize"
+      :total="total"
+      background
+      layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DeductionShowDetailsForm  ref="deductionShowDetailsForm" @refreshDataList="refreshList"></DeductionShowDetailsForm>
+    <DeductionDetailsForm  ref="deductionDetailsForm" @refreshDataList="refreshList"></DeductionDetailsForm>
+  </div>
+</template>
+
+<script>
+  import DeductionShowDetailsForm from './DeductionShowDetailsForm'
+  import DeductionDetailsForm from '../deductiondetails/DeductionDetailsForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          yearOfEvaluation: new Date().getFullYear().toString(),
+          id: '',
+          unitId: '',
+          classId: '',
+          subClassId: '',
+          subClass: ''
+        },
+        dataList: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orderBy: '',
+        dataListSelections: [],
+        isSearchCollapse: false,
+        isImportCollapse: false,
+        loading: false
+      }
+    },
+    components: {
+      DeductionShowDetailsForm,
+      DeductionDetailsForm
+    },
+    activated () {
+      this.refreshList()
+    },
+
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.searchForm.unitId = this.$route.query.unitId
+        this.searchForm.classId = this.$route.query.classId
+        this.searchForm.subClassId = this.$route.query.subClass
+        console.log(this.searchForm)
+        this.$http({
+          url: '/deductionShowDetails/deductionShowDetails/list',
+          method: 'get',
+          params: {
+            'pageNo': this.pageNo,
+            'pageSize': this.pageSize,
+            'orderBy': this.orderBy,
+            ...this.searchForm
+          }
+        }).then(({data}) => {
+          if (data && data.success) {
+            this.dataList = data.page.list
+            this.total = data.page.count
+            this.loading = false
+          }
+        })
+      },
+
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+
+    // 排序
+      sortChangeHandle (obj) {
+        if (obj.order === 'ascending') {
+          this.orderBy = obj.prop + ' asc'
+        } else if (obj.order === 'descending') {
+          this.orderBy = obj.prop + ' desc'
+        } else {
+          this.orderBy = ''
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.deductionShowDetailsForm.init('add', '')
+      },
+      // 修改
+      edit (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        this.$refs.deductionShowDetailsForm.init('edit', id)
+      },
+      sub (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.unitId
+        })[0]
+        this.$refs.deductionDetailsForm.init('edit', id, this.searchForm.classId, '', '')
+      },
+      // 查看
+      view (id) {
+        this.$refs.deductionShowDetailsForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.dataListSelections.map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.$http({
+            url: '/deductionshowdetails/deductionShowDetails/delete',
+            method: 'delete',
+            params: {'ids': ids}
+          }).then(({data}) => {
+            if (data && data.success) {
+              this.$message.success(data.msg)
+              this.refreshList()
+            }
+            this.loading = false
+          })
+        })
+      },
+      // 导入成功
+      uploadSuccess (res, file) {
+        if (res.success) {
+          this.$message.success({dangerouslyUseHTMLString: true,
+            message: res.msg})
+        } else {
+          this.$message.error(res.msg)
+        }
+      },
+      // 下载模板
+      downloadTpl () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/import/template')
+      },
+      exportExcel () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/export')
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>

+ 310 - 0
src/views/modules/deductionshowdetails/OtherPointsList.vue

@@ -0,0 +1,310 @@
+<template>
+  <div>
+      <el-form :inline="true" v-show="isSearchCollapse" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+        <el-col :span="8">
+          <el-form-item label="评价年份" prop="yearOfEvaluation">
+            <el-date-picker
+              v-model="searchForm.yearOfEvaluation"
+              type="year"
+              size="small"
+              value-format="yyyy"
+              placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单位名称" prop="unitName">
+            <el-input size="small" v-model="searchForm.unitName" placeholder="单位名称" clearable></el-input>
+          </el-form-item>
+        </el-col>
+        <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small">查询</el-button>
+            <el-button @click="resetSearch()" size="small">重置</el-button>
+          </el-form-item>
+      </el-form>
+    <el-row>
+      <!--        <el-button v-if="hasPermission('deductiondetails:deductionDetails:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">扣分</el-button>-->
+      <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="sub()"
+                 :disabled="dataListSelections.length != 1" plain>扣分</el-button>
+    </el-row>
+    <el-table
+      :data="dataList"
+      border
+      size="medium"
+      @selection-change="selectionChangeHandle"
+      @sort-change="sortChangeHandle"
+      v-loading="loading"
+      class="table">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+      <el-table-column
+        prop="yearOfEvaluation"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位年份">
+      </el-table-column>
+      <el-table-column
+        prop="unitName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位名称">
+      </el-table-column>
+      <el-table-column
+        prop="basicScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="基础分数">
+      </el-table-column>
+      <el-table-column
+        prop="reasonOne"
+        show-overflow-tooltip
+        sortable="custom"
+        label="对安能杰相关重点工作进行支撑,视情况加分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'1')">{{scope.row.reasonOne}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonTwo"
+        show-overflow-tooltip
+        sortable="custom"
+        label="对安能杰相关重点工作未进行支撑或支撑不足,视情况扣分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'2')">{{scope.row.reasonTwo}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonThree"
+        show-overflow-tooltip
+        sortable="custom"
+        label="完成省市重点工程,工程进度、质量受到甲方好评,安能杰获赠甲方锦旗,视情况加分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'3')">{{scope.row.reasonThree}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFour"
+        show-overflow-tooltip
+        sortable="custom"
+        label="出现因施工产生廉政问题线索经调查属实的情况,全年考评分数为0,情形恶劣的,从合格供应商名录中剔除。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'4')">{{scope.row.reasonFour}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFive"
+        show-overflow-tooltip
+        sortable="custom"
+        label="承担工程范围内发生设备、人身伤亡事故、交通事故、电网事故等情况,全年考评分数为0,情形恶劣的,从合格供应商名录中剔除。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'5')">{{scope.row.reasonFive}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonSix"
+        show-overflow-tooltip
+        sortable="custom"
+        label="分包商超越资质承接业务,签订分包合同,全年考评分数为0,情形恶劣的,从合格供应商名录中剔除。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'6')">{{scope.row.reasonSix}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="sumScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="汇总评分">
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      @size-change="sizeChangeHandle"
+      @current-change="currentChangeHandle"
+      :current-page="pageNo"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="pageSize"
+      :total="total"
+      background
+      layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DeductionShowDetailsForm  ref="deductionShowDetailsForm" @refreshDataList="refreshList"></DeductionShowDetailsForm>
+    <DeductionDetailsForm  ref="deductionDetailsForm" @refreshDataList="refreshList"></DeductionDetailsForm>
+  </div>
+</template>
+
+<script>
+  import DeductionShowDetailsForm from './DeductionShowDetailsForm'
+  import DeductionDetailsForm from '../deductiondetails/DeductionDetailsForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          yearOfEvaluation: new Date().getFullYear().toString(),
+          id: '',
+          unitId: '',
+          classId: ''
+        },
+        columns: [],
+        dataList: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orderBy: '',
+        subClass: '',
+        dataListSelections: [],
+        isSearchCollapse: false,
+        isImportCollapse: false,
+        loading: false
+      }
+    },
+    components: {
+      DeductionShowDetailsForm,
+      DeductionDetailsForm
+    },
+    activated () {
+      this.refreshList()
+    },
+
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.$http({
+          url: '/deductionShowDetails/deductionShowDetails/otherPointsList',
+          method: 'get',
+          params: {
+            'pageNo': this.pageNo,
+            'pageSize': this.pageSize,
+            'orderBy': this.orderBy,
+            ...this.searchForm
+          }
+        }).then(({data}) => {
+          if (data && data.success) {
+            console.log(data)
+            this.dataList = data.page.list
+            this.total = data.page.count
+            this.loading = false
+          }
+        })
+      },
+
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+
+    // 排序
+      sortChangeHandle (obj) {
+        if (obj.order === 'ascending') {
+          this.orderBy = obj.prop + ' asc'
+        } else if (obj.order === 'descending') {
+          this.orderBy = obj.prop + ' desc'
+        } else {
+          this.orderBy = ''
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.deductionShowDetailsForm.init('add', '')
+      },
+      edit (id, type) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        console.log(id)
+        switch (type) {
+          case '1':
+            this.subClass = '324d659b184b40068f9524848729070f'
+            break
+          case '2':
+            this.subClass = '2da85bc46a474f5fabab19a456b3f09c'
+            break
+          case '3':
+            this.subClass = '6f3134f09f404a0db5c7f3ccf9830993'
+            break
+          case '4':
+            this.subClass = '8c72c9a41d5445dc80e43efe90f9eec8'
+            break
+          case '5':
+            this.subClass = '0c242a74d37c4005a45655329e8cb178'
+            break
+          case '6':
+            this.subClass = 'be115e9ac0c841d5b475743be8499f4c'
+            break
+        }
+        this.$router.push({path: './DeductionShowDetailsList', query: {unitId: id, subClass: this.subClass}})
+      },
+      sub (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        this.$refs.deductionDetailsForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.deductionShowDetailsForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.dataListSelections.map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.$http({
+            url: '/deductionshowdetails/deductionShowDetails/delete',
+            method: 'delete',
+            params: {'ids': ids}
+          }).then(({data}) => {
+            if (data && data.success) {
+              this.$message.success(data.msg)
+              this.refreshList()
+            }
+            this.loading = false
+          })
+        })
+      },
+      // 导入成功
+      uploadSuccess (res, file) {
+        if (res.success) {
+          this.$message.success({dangerouslyUseHTMLString: true,
+            message: res.msg})
+        } else {
+          this.$message.error(res.msg)
+        }
+      },
+      // 下载模板
+      downloadTpl () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/import/template')
+      },
+      exportExcel () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/export')
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>

+ 346 - 0
src/views/modules/deductionshowdetails/QualityCivilizedList.vue

@@ -0,0 +1,346 @@
+<template>
+  <div>
+      <el-form :inline="true" v-show="isSearchCollapse" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+        <el-col :span="8">
+          <el-form-item label="评价年份" prop="yearOfEvaluation">
+            <el-date-picker
+              v-model="searchForm.yearOfEvaluation"
+              type="year"
+              size="small"
+              value-format="yyyy"
+              placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单位名称" prop="unitName">
+            <el-input size="small" v-model="searchForm.unitName" placeholder="单位名称" clearable></el-input>
+          </el-form-item>
+        </el-col>
+        <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small">查询</el-button>
+            <el-button @click="resetSearch()" size="small">重置</el-button>
+          </el-form-item>
+      </el-form>
+    <el-row>
+      <!--        <el-button v-if="hasPermission('deductiondetails:deductionDetails:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">扣分</el-button>-->
+      <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="sub()"
+                 :disabled="dataListSelections.length != 1" plain>扣分</el-button>
+    </el-row>
+    <el-table
+      :data="dataList"
+      border
+      size="medium"
+      @selection-change="selectionChangeHandle"
+      @sort-change="sortChangeHandle"
+      v-loading="loading"
+      class="table">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+      <el-table-column
+        prop="yearOfEvaluation"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位年份">
+      </el-table-column>
+      <el-table-column
+        prop="unitName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位名称">
+      </el-table-column>
+      <el-table-column
+        prop="basicScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="基础分数">
+      </el-table-column>
+      <el-table-column
+        prop="reasonOne"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工现场因扬尘、渣土管控不力,每发生一起,扣3分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'1')">{{scope.row.reasonOne}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonTwo"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工现场因文明施工、安全施工、内部管控等组织不力,被区内其他单位或政府通报或上黑榜,每发生一起,视情况扣1-10分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'2')">{{scope.row.reasonTwo}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonThree"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工现场因文明施工、安全施工、内部管控等管控有力,被区内其他单位或政府表扬或上红榜,每发生一起,视情况加分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'3')">{{scope.row.reasonThree}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFour"
+        show-overflow-tooltip
+        sortable="custom"
+        label="因文明施工、安全施工、内部管控等组织不力,引发12345工单,每发生一起,视情况扣1-2分。若处理不善导致工单频发,视情况追加扣2-3分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'4')">{{scope.row.reasonFour}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFive"
+        show-overflow-tooltip
+        sortable="custom"
+        label="因文明施工、安全施工、内部管控等组织不力,引发95598意见工单,每发生一起情况不属实扣1分。每发生一起情况属实扣3分。若处理不善导致工单频发,视情况追加扣2-3分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'5')">{{scope.row.reasonFive}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonSix"
+        show-overflow-tooltip
+        sortable="custom"
+        label="因文明施工、安全施工、内部管控等组织不力,引发95598投诉工单,每发生一起情况不属实扣5分。每发生一起情况属实扣10分。若处理不善导致工单频发,视情况追加扣5-10分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'6')">{{scope.row.reasonSix}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonSen"
+        show-overflow-tooltip
+        sortable="custom"
+        label="因文明施工、安全施工、内部管控等组织不力,引发论坛、微博、来信等投诉、举报,每发生一起,视情况扣1-10分。若处理不善导致投诉、举报,追加扣1-5分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'7')">{{scope.row.reasonSen}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonEig"
+        show-overflow-tooltip
+        sortable="custom"
+        label="外协单位内部人员通过12345、95598、论坛、微博、来信等渠道进行投诉,视情况扣5-10分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'8')">{{scope.row.reasonEig}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonNin"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工现场不服从管理,对工程质量、工程进度造成较大影响,每发生一起,扣5-10分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'9')">{{scope.row.reasonNin}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="sumScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="汇总评分">
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      @size-change="sizeChangeHandle"
+      @current-change="currentChangeHandle"
+      :current-page="pageNo"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="pageSize"
+      :total="total"
+      background
+      layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DeductionShowDetailsForm  ref="deductionShowDetailsForm" @refreshDataList="refreshList"></DeductionShowDetailsForm>
+    <DeductionDetailsForm  ref="deductionDetailsForm" @refreshDataList="refreshList"></DeductionDetailsForm>
+  </div>
+</template>
+
+<script>
+  import DeductionShowDetailsForm from './DeductionShowDetailsForm'
+  import DeductionDetailsForm from '../deductiondetails/DeductionDetailsForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          yearOfEvaluation: new Date().getFullYear().toString(),
+          id: '',
+          unitId: '',
+          classId: ''
+        },
+        columns: [],
+        dataList: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orderBy: '',
+        subClass: '',
+        dataListSelections: [],
+        isSearchCollapse: false,
+        isImportCollapse: false,
+        loading: false
+      }
+    },
+    components: {
+      DeductionShowDetailsForm,
+      DeductionDetailsForm
+    },
+    activated () {
+      this.refreshList()
+    },
+
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.$http({
+          url: '/deductionShowDetails/deductionShowDetails/qualityCivilizedList',
+          method: 'get',
+          params: {
+            'pageNo': this.pageNo,
+            'pageSize': this.pageSize,
+            'orderBy': this.orderBy,
+            ...this.searchForm
+          }
+        }).then(({data}) => {
+          if (data && data.success) {
+            console.log(data)
+            this.dataList = data.page.list
+            this.total = data.page.count
+            this.loading = false
+          }
+        })
+      },
+
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+
+    // 排序
+      sortChangeHandle (obj) {
+        if (obj.order === 'ascending') {
+          this.orderBy = obj.prop + ' asc'
+        } else if (obj.order === 'descending') {
+          this.orderBy = obj.prop + ' desc'
+        } else {
+          this.orderBy = ''
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.deductionShowDetailsForm.init('add', '')
+      },
+      edit (id, type) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        console.log(id)
+        switch (type) {
+          case '1':
+            this.subClass = '06d7938f26454e15a9acae90096ae22e'
+            break
+          case '2':
+            this.subClass = 'fc2a636927124952a2f1d08e0b15a0ee'
+            break
+          case '3':
+            this.subClass = 'd14955b9c9b744d9ad10b1379c1815d9'
+            break
+          case '4':
+            this.subClass = 'af5800c001514d21be011b1826029d99'
+            break
+          case '5':
+            this.subClass = 'daabb42eb3174605996db0bede6def63'
+            break
+          case '6':
+            this.subClass = '922e9d5cf8e1465ba929836749b8b309'
+            break
+          case '7':
+            this.subClass = '578c1507c2984143abb78377b248a672'
+            break
+          case '8':
+            this.subClass = '8cadcc3844dc4ef485964b2bc43abcfb'
+            break
+          case '9':
+            this.subClass = '70ed4b0c8a0443d586f9f9c97a044c41'
+            break
+        }
+        this.$router.push({path: './DeductionShowDetailsList', query: {unitId: id, subClass: this.subClass}})
+      },
+      sub (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        this.$refs.deductionDetailsForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.deductionShowDetailsForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.dataListSelections.map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.$http({
+            url: '/deductionshowdetails/deductionShowDetails/delete',
+            method: 'delete',
+            params: {'ids': ids}
+          }).then(({data}) => {
+            if (data && data.success) {
+              this.$message.success(data.msg)
+              this.refreshList()
+            }
+            this.loading = false
+          })
+        })
+      },
+      // 导入成功
+      uploadSuccess (res, file) {
+        if (res.success) {
+          this.$message.success({dangerouslyUseHTMLString: true,
+            message: res.msg})
+        } else {
+          this.$message.error(res.msg)
+        }
+      },
+      // 下载模板
+      downloadTpl () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/import/template')
+      },
+      exportExcel () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/export')
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>

+ 334 - 0
src/views/modules/deductionshowdetails/SiteQualityList.vue

@@ -0,0 +1,334 @@
+<template>
+  <div>
+      <el-form :inline="true" v-show="isSearchCollapse" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+        <el-col :span="8">
+          <el-form-item label="评价年份" prop="yearOfEvaluation">
+            <el-date-picker
+              v-model="searchForm.yearOfEvaluation"
+              type="year"
+              size="small"
+              value-format="yyyy"
+              placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单位名称" prop="unitName">
+            <el-input size="small" v-model="searchForm.unitName" placeholder="单位名称" clearable></el-input>
+          </el-form-item>
+        </el-col>
+        <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small">查询</el-button>
+            <el-button @click="resetSearch()" size="small">重置</el-button>
+          </el-form-item>
+      </el-form>
+    <el-row>
+      <!--        <el-button v-if="hasPermission('deductiondetails:deductionDetails:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">扣分</el-button>-->
+      <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="sub()"
+                 :disabled="dataListSelections.length != 1" plain>扣分</el-button>
+    </el-row>
+    <el-table
+      :data="dataList"
+      border
+      size="medium"
+      @selection-change="selectionChangeHandle"
+      @sort-change="sortChangeHandle"
+      v-loading="loading"
+      class="table">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+      <el-table-column
+        prop="yearOfEvaluation"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位年份">
+      </el-table-column>
+      <el-table-column
+        prop="unitName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位名称">
+      </el-table-column>
+      <el-table-column
+        prop="basicScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="基础分数">
+      </el-table-column>
+      <el-table-column
+        prop="reasonOne"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场工作被发现存在违章行为并被处以黄牌,每发生一起,扣1分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'1')">{{scope.row.reasonOne}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonTwo"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场工作被发现存在违章行为并被处以橙牌,每发生一起,扣2分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'2')">{{scope.row.reasonTwo}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonThree"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场工作被发现存在违章行为并被处以红牌,每发生一起,扣3分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'3')">{{scope.row.reasonThree}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFour"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场工作被市公司发现存在违章行为并被亮牌,按1.1、1.2、1.3中扣分值2倍扣减;现场工作被省公司发现存在违章行为并被亮牌,按1.1、1.2、1.3中扣分值3倍扣减;">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'4')">{{scope.row.reasonFour}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFive"
+        show-overflow-tooltip
+        sortable="custom"
+        label="违章行为被发现后,未按要求反馈整改报告、或未按要求缴纳罚款,每发生一起,扣5分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'5')">{{scope.row.reasonFive}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonSix"
+        show-overflow-tooltip
+        sortable="custom"
+        label="违章行为被发现后,拒不整改或整改态度较差,每发生一起,视情况扣3-10分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'6')">{{scope.row.reasonSix}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonSen"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工现场因安全管控不力,被勒令停工,每发生一起,视情况扣5-20分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'7')">{{scope.row.reasonSen}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonEig"
+        show-overflow-tooltip
+        sortable="custom"
+        label="未按要求上报工作计划,每发生一起,扣6分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'8')">{{scope.row.reasonEig}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="sumScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="汇总评分">
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      @size-change="sizeChangeHandle"
+      @current-change="currentChangeHandle"
+      :current-page="pageNo"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="pageSize"
+      :total="total"
+      background
+      layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DeductionShowDetailsForm  ref="deductionShowDetailsForm" @refreshDataList="refreshList"></DeductionShowDetailsForm>
+    <DeductionDetailsForm  ref="deductionDetailsForm" @refreshDataList="refreshList"></DeductionDetailsForm>
+  </div>
+</template>
+
+<script>
+  import DeductionShowDetailsForm from './DeductionShowDetailsForm'
+  import DeductionDetailsForm from '../deductiondetails/DeductionDetailsForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          yearOfEvaluation: new Date().getFullYear().toString(),
+          id: '',
+          unitId: '',
+          classId: ''
+        },
+        columns: [],
+        dataList: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orderBy: '',
+        subClass: '',
+        dataListSelections: [],
+        isSearchCollapse: false,
+        isImportCollapse: false,
+        loading: false
+      }
+    },
+    components: {
+      DeductionShowDetailsForm,
+      DeductionDetailsForm
+    },
+    activated () {
+      this.refreshList()
+    },
+
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.$http({
+          url: '/deductionShowDetails/deductionShowDetails/SiteQualityList',
+          method: 'get',
+          params: {
+            'pageNo': this.pageNo,
+            'pageSize': this.pageSize,
+            'orderBy': this.orderBy,
+            ...this.searchForm
+          }
+        }).then(({data}) => {
+          if (data && data.success) {
+            console.log(data)
+            this.dataList = data.page.list
+            this.total = data.page.count
+            this.loading = false
+          }
+        })
+      },
+
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+
+    // 排序
+      sortChangeHandle (obj) {
+        if (obj.order === 'ascending') {
+          this.orderBy = obj.prop + ' asc'
+        } else if (obj.order === 'descending') {
+          this.orderBy = obj.prop + ' desc'
+        } else {
+          this.orderBy = ''
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.deductionShowDetailsForm.init('add', '')
+      },
+      edit (id, type) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        console.log(id)
+        switch (type) {
+          case '1':
+            this.subClass = '40d3781b833d4aa1b71e554540a2f343'
+            break
+          case '2':
+            this.subClass = '272732b61c3e4433a7ea995c3c380d3f'
+            break
+          case '3':
+            this.subClass = '508908a274c14a70a16897ae54aca5d7'
+            break
+          case '4':
+            this.subClass = 'b268162d96be428d9426f17559143658'
+            break
+          case '5':
+            this.subClass = 'bee7ec8b8eaa4303bd08b22b040906fe'
+            break
+          case '6':
+            this.subClass = 'aba0d89ce70c4dbdb1ab027d5b20182d'
+            break
+          case '7':
+            this.subClass = 'aadfb12bb0b549c6bee44c5695c11e2f'
+            break
+          case '8':
+            this.subClass = '7e9cdf43a4ba4db490ae03a23844b2f3'
+            break
+        }
+        this.$router.push({path: './DeductionShowDetailsList', query: {unitId: id, subClass: this.subClass}})
+      },
+      sub (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        this.$refs.deductionDetailsForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.deductionShowDetailsForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.dataListSelections.map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.$http({
+            url: '/deductionshowdetails/deductionShowDetails/delete',
+            method: 'delete',
+            params: {'ids': ids}
+          }).then(({data}) => {
+            if (data && data.success) {
+              this.$message.success(data.msg)
+              this.refreshList()
+            }
+            this.loading = false
+          })
+        })
+      },
+      // 导入成功
+      uploadSuccess (res, file) {
+        if (res.success) {
+          this.$message.success({dangerouslyUseHTMLString: true,
+            message: res.msg})
+        } else {
+          this.$message.error(res.msg)
+        }
+      },
+      // 下载模板
+      downloadTpl () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/import/template')
+      },
+      exportExcel () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/export')
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>

+ 310 - 0
src/views/modules/deductionshowdetails/SiteSafetyList.vue

@@ -0,0 +1,310 @@
+<template>
+  <div>
+      <el-form :inline="true" v-show="isSearchCollapse" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <!-- 搜索框-->
+        <el-col :span="8">
+          <el-form-item label="评价年份" prop="yearOfEvaluation">
+            <el-date-picker
+              v-model="searchForm.yearOfEvaluation"
+              type="year"
+              size="small"
+              value-format="yyyy"
+              placeholder="选择年份">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="单位名称" prop="unitName">
+            <el-input size="small" v-model="searchForm.unitName" placeholder="单位名称" clearable></el-input>
+          </el-form-item>
+        </el-col>
+        <el-form-item>
+            <el-button type="primary" @click="refreshList()" size="small">查询</el-button>
+            <el-button @click="resetSearch()" size="small">重置</el-button>
+          </el-form-item>
+      </el-form>
+    <el-row>
+      <!--        <el-button v-if="hasPermission('deductiondetails:deductionDetails:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">扣分</el-button>-->
+      <el-button v-if="hasPermission('deductiondetails:deductionDetails:edit')" type="warning" size="small" icon="el-icon-edit-outline" @click="sub()"
+                 :disabled="dataListSelections.length != 1" plain>扣分</el-button>
+    </el-row>
+    <el-table
+      :data="dataList"
+      border
+      size="medium"
+      @selection-change="selectionChangeHandle"
+      @sort-change="sortChangeHandle"
+      v-loading="loading"
+      class="table">
+      <el-table-column
+        type="selection"
+        header-align="center"
+        align="center"
+        width="50">
+      </el-table-column>
+      <el-table-column
+        prop="yearOfEvaluation"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位年份">
+      </el-table-column>
+      <el-table-column
+        prop="unitName"
+        show-overflow-tooltip
+        sortable="custom"
+        label="施工单位名称">
+      </el-table-column>
+      <el-table-column
+        prop="basicScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="基础分数">
+      </el-table-column>
+      <el-table-column
+        prop="reasonOne"
+        show-overflow-tooltip
+        sortable="custom"
+        label="停电计划上报准确性存在偏差,每发生一起,视情况扣1-2分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'1')">{{scope.row.reasonOne}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonTwo"
+        show-overflow-tooltip
+        sortable="custom"
+        label="未进行现场勘察,未填写现场勘察单,未开展作业风险识别、评估,未按要求编制施工三措或三措质量较差、预控措施,每发生一起,视情况扣1-3分;被查处后拒不整改或整改态度较差,视情况追加扣3-5分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'2')">{{scope.row.reasonTwo}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonThree"
+        show-overflow-tooltip
+        sortable="custom"
+        label="现场施工进度与计划偏差较大,每发生一起,视情况扣1-3分;被通报后整改不力,仍与计划存在较大偏差,每发生一起,视情况追加扣3-5分。★">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'3')">{{scope.row.reasonThree}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFour"
+        show-overflow-tooltip
+        sortable="custom"
+        label="工程质量存在问题(如隐蔽工程、土建施工、电气安装等环节),每发生一起,视情况扣1-10分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'4')">{{scope.row.reasonFour}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonFive"
+        show-overflow-tooltip
+        sortable="custom"
+        label="工程在质保期内发生故障、缺陷,每发生一起,视情况扣2-10分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'5')">{{scope.row.reasonFive}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reasonSix"
+        show-overflow-tooltip
+        sortable="custom"
+        label="工程竣工结束30天内,未按要求完成拆旧物资、结余物资退料的,每发生一起,扣5分。">
+        <template slot-scope="scope">
+          <el-link  type="primary" :underline="false"  @click="edit(scope.row.id,'6')">{{scope.row.reasonSix}}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="sumScore"
+        show-overflow-tooltip
+        sortable="custom"
+        label="汇总评分">
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      @size-change="sizeChangeHandle"
+      @current-change="currentChangeHandle"
+      :current-page="pageNo"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="pageSize"
+      :total="total"
+      background
+      layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+        <!-- 弹窗, 新增 / 修改 -->
+    <DeductionShowDetailsForm  ref="deductionShowDetailsForm" @refreshDataList="refreshList"></DeductionShowDetailsForm>
+    <DeductionDetailsForm  ref="deductionDetailsForm" @refreshDataList="refreshList"></DeductionDetailsForm>
+  </div>
+</template>
+
+<script>
+  import DeductionShowDetailsForm from './DeductionShowDetailsForm'
+  import DeductionDetailsForm from '../deductiondetails/DeductionDetailsForm'
+  export default {
+    data () {
+      return {
+        searchForm: {
+          yearOfEvaluation: new Date().getFullYear().toString(),
+          id: '',
+          unitId: '',
+          classId: ''
+        },
+        columns: [],
+        dataList: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orderBy: '',
+        subClass: '',
+        dataListSelections: [],
+        isSearchCollapse: false,
+        isImportCollapse: false,
+        loading: false
+      }
+    },
+    components: {
+      DeductionShowDetailsForm,
+      DeductionDetailsForm
+    },
+    activated () {
+      this.refreshList()
+    },
+
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.$http({
+          url: '/deductionShowDetails/deductionShowDetails/siteSafetyList',
+          method: 'get',
+          params: {
+            'pageNo': this.pageNo,
+            'pageSize': this.pageSize,
+            'orderBy': this.orderBy,
+            ...this.searchForm
+          }
+        }).then(({data}) => {
+          if (data && data.success) {
+            console.log(data)
+            this.dataList = data.page.list
+            this.total = data.page.count
+            this.loading = false
+          }
+        })
+      },
+
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+
+    // 排序
+      sortChangeHandle (obj) {
+        if (obj.order === 'ascending') {
+          this.orderBy = obj.prop + ' asc'
+        } else if (obj.order === 'descending') {
+          this.orderBy = obj.prop + ' desc'
+        } else {
+          this.orderBy = ''
+        }
+        this.refreshList()
+      },
+      // 新增
+      add () {
+        this.$refs.deductionShowDetailsForm.init('add', '')
+      },
+      edit (id, type) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        console.log(id)
+        switch (type) {
+          case '1':
+            this.subClass = '3cf0f96a99df425ca59ce47250e12ced'
+            break
+          case '2':
+            this.subClass = '82f1190c768546adad98417a51d8e3c5'
+            break
+          case '3':
+            this.subClass = '03e5702ed8f648278f24d2eed9f85cef'
+            break
+          case '4':
+            this.subClass = '52a13affc3c54a19a35acf12e608e33d'
+            break
+          case '5':
+            this.subClass = 'e944386523f648f4b219db02aec3186b'
+            break
+          case '6':
+            this.subClass = 'b88060ddd070461dbc0b27ca22b599a7'
+            break
+        }
+        this.$router.push({path: './DeductionShowDetailsList', query: {unitId: id, subClass: this.subClass}})
+      },
+      sub (id) {
+        id = id || this.dataListSelections.map(item => {
+          return item.id
+        })[0]
+        this.$refs.deductionDetailsForm.init('edit', id)
+      },
+      // 查看
+      view (id) {
+        this.$refs.deductionShowDetailsForm.init('view', id)
+      },
+      // 删除
+      del (id) {
+        let ids = id || this.dataListSelections.map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定删除所选项吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          this.$http({
+            url: '/deductionshowdetails/deductionShowDetails/delete',
+            method: 'delete',
+            params: {'ids': ids}
+          }).then(({data}) => {
+            if (data && data.success) {
+              this.$message.success(data.msg)
+              this.refreshList()
+            }
+            this.loading = false
+          })
+        })
+      },
+      // 导入成功
+      uploadSuccess (res, file) {
+        if (res.success) {
+          this.$message.success({dangerouslyUseHTMLString: true,
+            message: res.msg})
+        } else {
+          this.$message.error(res.msg)
+        }
+      },
+      // 下载模板
+      downloadTpl () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/import/template')
+      },
+      exportExcel () {
+        this.$utils.download('/deductionshowdetails/deductionShowDetails/export')
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      }
+    }
+  }
+</script>