| 123456789101112131415161718192021222324252627282930313233 |
- <template>
- <section class="panel">
- <div class="toolbar"><el-input v-model="query.indicatorName" placeholder="指标名称" clearable/><el-input v-model="query.indicatorCode" placeholder="指标编码" clearable/><el-select v-model="query.indicatorType" placeholder="指标类型" clearable><el-option label="自动采集" :value="1"/><el-option label="人工巡检" :value="2"/></el-select><el-select v-model="query.status" placeholder="状态" clearable><el-option label="启用" :value="1"/><el-option label="停用" :value="0"/></el-select><el-button type="primary" @click="load">查询</el-button><el-button @click="reset">重置</el-button><span class="grow"></span><el-button type="success" plain @click="checkWeight">权重校验</el-button><el-button type="primary" @click="open()">新增指标</el-button></div>
- <el-table :data="rows" border stripe><el-table-column prop="sort" label="排序" width="70"/><el-table-column prop="indicatorCode" label="指标编码" width="140"/><el-table-column prop="indicatorName" label="指标名称" min-width="150"/><el-table-column label="类型" width="100"><template slot-scope="s"><el-tag size="mini" :type="s.row.indicatorType===1?'primary':'warning'">{{typeText(s.row.indicatorType)}}</el-tag></template></el-table-column><el-table-column prop="dataSource" label="数据来源" min-width="150"/><el-table-column prop="maxScore" label="满分" width="80"/><el-table-column prop="passScore" label="及格分" width="80"/><el-table-column prop="weight" label="权重%" width="90"/><el-table-column label="状态" width="90"><template slot-scope="s"><el-switch v-model="s.row.status" :active-value="1" :inactive-value="0" @change="changeStatus(s.row)"/></template></el-table-column><el-table-column label="操作" width="140"><template slot-scope="s"><el-button type="text" @click="open(s.row)">编辑</el-button><el-button type="text" class="danger" @click="remove(s.row)">删除</el-button></template></el-table-column></el-table>
- <div class="weight-bar" :class="weightValid ? 'ok' : 'warn'">
- {{ weightValid ? '✓' : '⚠' }} 启用指标权重合计:<b>{{ weightSum }}</b>%({{ weightValid ? '校验通过' : '需等于100%才可发布' }})
- </div>
- <el-dialog title="考核指标配置" :visible.sync="dialog" width="640px"><el-form :model="form" label-width="100px"><el-form-item label="指标编码"><el-input v-model="form.indicatorCode"/></el-form-item><el-form-item label="指标名称"><el-input v-model="form.indicatorName"/></el-form-item><el-form-item label="指标类型"><el-radio-group v-model="form.indicatorType"><el-radio :label="1">自动采集</el-radio><el-radio :label="2">人工巡检</el-radio></el-radio-group></el-form-item><el-form-item label="数据来源"><el-input v-model="form.dataSource" placeholder="ORDER_COOK_TIME / EVALUATE_GOOD_RATE 等"/></el-form-item><el-form-item label="满分"><el-input-number v-model="form.maxScore" :min="0"/></el-form-item><el-form-item label="及格分"><el-input-number v-model="form.passScore" :min="0"/></el-form-item><el-form-item label="权重"><el-input-number v-model="form.weight" :min="0" :max="100"/></el-form-item><el-form-item label="排序"><el-input-number v-model="form.sort" :min="0"/></el-form-item><el-form-item label="评分规则JSON"><el-input v-model="form.scoreRule" type="textarea" :rows="6" placeholder='{"type":"range","ranges":[...]}'/></el-form-item><el-form-item label="备注"><el-input v-model="form.rmk"/></el-form-item></el-form><span slot="footer"><el-button @click="dialog=false">取消</el-button><el-button type="primary" @click="save">保存</el-button></span></el-dialog>
- </section>
- </template>
- <script>
- import querystring from 'querystring'
- export default {
- name:'InspectIndicatorIndex',
- data(){return{query:{},rows:[],dialog:false,form:{},weightSum:0}},
- computed:{ weightValid(){return Math.round(this.weightSum)===100} },
- created(){this.load()},
- methods:{
- post(u,d){return this.$axios.post(u,querystring.stringify(d||{}))},
- list(r){return r.data&&r.data.list||[]},
- load(){return this.post('/inspectManage/indicator/page',Object.assign({pageSize:50,currentPage:1},this.query)).then(r=>{this.rows=this.list(r);this.loadWeight()})},
- loadWeight(){return this.post('/inspectManage/indicator/checkWeight').then(r=>{this.weightSum=Number((r.data&&r.data.obj)||0)})},
- reset(){this.query={};this.load()},
- open(row){this.form=Object.assign({indicatorType:2,maxScore:100,passScore:60,weight:0,sort:0,status:1},row||{});this.dialog=true},
- save(){const payload=Object.assign({},this.form);delete payload.createDate;delete payload.updateDate;this.post(this.form.indicatorId?'/inspectManage/indicator/update':'/inspectManage/indicator/save',payload).then(()=>{this.dialog=false;this.load();this.$message.success('保存完成')})},
- changeStatus(row){this.post('/inspectManage/indicator/changeStatus',{id:row.indicatorId,status:row.status}).then(()=>{this.$message.success('状态已更新');this.loadWeight()})},
- remove(row){this.$confirm('确认删除该指标?','提示').then(()=>this.post('/inspectManage/indicator/delete',{id:row.indicatorId}).then(r=>{const rtn=(r.data&&r.data.rtnBean)||{};if(String(rtn.rtnCode)==='0'){this.load();this.$message.success(rtn.rtnMsg||'删除完成')}else{this.$message.error(rtn.rtnMsg||'删除失败')}}))},
- checkWeight(){this.post('/inspectManage/indicator/checkWeight').then(r=>this.$message.info('启用指标权重合计:'+(r.data.obj||0)+'%'))},
- typeText(v){return v===1?'自动采集':'人工巡检'}
- }
- }
- </script>
- <style scoped>.panel{background:#fff;border:1px solid #ebeef5;border-radius:4px;padding:18px}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px}.toolbar .el-input,.toolbar .el-select{width:170px}.grow{flex:1}.danger{color:#f56c6c}.weight-bar{margin-top:16px;padding:10px 16px;border-radius:4px;font-size:13px;display:flex;align-items:center;gap:6px}.weight-bar.ok{background:#f6ffed;border:1px solid #b7eb8f;color:#67c23a}.weight-bar.warn{background:#fff7e6;border:1px solid #ffd591;color:#e6a23c}.weight-bar b{font-size:16px}</style>
|