Merge branch 'master' into dev-threejs
20个文件已修改
2个文件已添加
1 文件已重命名
| | |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 获取工单运维情况 |
| | | export function getYwCondition(data) { |
| | | return request({ |
| | | url: '/work-order/yw-condition/' + data, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | |
| | | // 获取工单运维审核记录 |
| | | export function getYwAuditingList(data) { |
| | | return request({ |
| | | url: '/work-order/yw-auditing-list/' + data, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | |
| | | // 获取工单运维情况记录 |
| | | export function getYwConditionList(data) { |
| | | return request({ |
| | | url: '/work-order/yw-condition-list/' + data, |
| | | method: 'get' |
| | | }) |
| | | } |
| | |
| | | <!-- 文件列表 --> |
| | | <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul"> |
| | | <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList"> |
| | | <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank"> |
| | | <el-link @click="handleDownload(file.url)" :underline="false" target="_blank"> |
| | | <span class="el-icon-document"> {{ getFileName(file.name) }} </span> |
| | | </el-link> |
| | | <!-- <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank"> |
| | | <span class="el-icon-document"> {{ getFileName(file.name) }} </span> |
| | | </el-link> --> |
| | | <div class="ele-upload-list__item-content-action"> |
| | | <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link> |
| | | </div> |
| | |
| | | strs += list[i].url + separator; |
| | | } |
| | | return strs != '' ? strs.substr(0, strs.length - 1) : ''; |
| | | }, |
| | | /** 下载按钮操作 */ |
| | | handleDownload (data) { |
| | | this.$download.resource(data); |
| | | } |
| | | } |
| | | }; |
| | |
| | | Vue.prototype.download = download |
| | | Vue.prototype.handleTree = handleTree |
| | | Vue.prototype.getToken = getToken |
| | | Vue.prototype.$uploadUrl = process.env.VUE_APP_BASE_API + "/common/upload" |
| | | |
| | | // 全局组件挂载 |
| | | Vue.component('DictTag', DictTag) |
| | |
| | | ] |
| | | }, |
| | | { |
| | | path: '/contract/score', |
| | | component: Layout, |
| | | hidden: true, |
| | | children: [ |
| | | { |
| | | path: 'index', |
| | | name: 'score', |
| | | component: () => import('@/views/system/score/default/index'), |
| | | meta: { title: '合同积分', activeMenu: '/system/score' } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/check-result/contract', |
| | | component: Layout, |
| | | hidden: true, |
| | |
| | | <el-card class="box-card" v-for="(item) in checkResultList"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>{{ checkUnitName }}</span> |
| | | <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">详情</el-button> |
| | | <el-button style="float: right; padding: 3px 6px" type="text" @click="handleDetail(item)">详情</el-button> |
| | | <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">打分</el-button> |
| | | </div> |
| | | <div class="text item">考核<span class="time">{{ examineName }}</span></div> |
| | | <div class="text item">考核频率<span class="time">{{ "季度考核" }}</span></div> |
| | | <div class="text item">考核分数<span class="time">{{ item.checkScore }}</span></div> |
| | | <div class="text item">考核时间 |
| | | <span class="time">{{ item.checkTime }}</span> |
| | | <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish != 1" v-hasPermi="['result:contract:publish']">确认发布</el-button> |
| | | <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish == 1" v-hasPermi="['result:contract:publish']">已发布</el-button> |
| | | </div> |
| | | </el-card> |
| | | |
| | |
| | | handleDetail(row) { |
| | | this.detail = row; |
| | | this.detail.carOnlineRate = '97%'; |
| | | this.detailTitle = row.checkUnitName + '考核结果'; |
| | | this.detailTitle = '考核结果'; |
| | | this.detailOpen = true; |
| | | |
| | | }, |
| | |
| | | this.download('system/checkResult/export', { |
| | | ...this.queryParams |
| | | }, `checkResult_${new Date().getTime()}.xlsx`) |
| | | } |
| | | }, |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | size="mini" |
| | | :disabled="single" |
| | | @click="handleUpdate" |
| | | v-hasPermi="['system:record:edit']" |
| | | >修改</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | |
| | | size="mini" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['system:record:remove']" |
| | | >删除</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | |
| | | icon="el-icon-download" |
| | | size="mini" |
| | | @click="handleExport" |
| | | v-hasPermi="['system:record:export']" |
| | | >导出</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:record:edit']" |
| | | >修改</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:record:remove']" |
| | | >删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">核算</el-button> |
| | | </div> |
| | | <div class="text item">合同<span class="time">{{ checkUnitName }}</span></div> |
| | | <div class="text item">总金额<span class="time">{{ "1000元" }}</span></div> |
| | | <div class="text item">扣减金额<span class="time">{{ "10元" }}</span></div> |
| | | <div class="text item">剩余金额<span class="time">{{ "990元" }}</span></div> |
| | | <div class="text item">最新核算时间 |
| | | <span class="time">{{ item.checkTime }}</span> |
| | | </div> |
| | |
| | | <el-table-column |
| | | prop="score" |
| | | label="考核分数" |
| | | width="180" |
| | | doNotSum |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-link @click="toScorePage(scope.row)">{{scope.row.score}}</el-link> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="ruleName" |
| | | label="适用规则" |
| | | doNotSum> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="score" |
| | | label="扣分系数" |
| | | width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-tooltip class="item" effect="dark" :content="'考核规则:' + scope.row.description" placement="top"> |
| | | <span>{{ scope.row.value }}</span> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="扣减金额(元)" |
| | | <el-table-column |
| | | prop="score" |
| | | label="扣分系数" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip class="item" effect="dark" :content="'考核规则:' + scope.row.description" placement="top"> |
| | | <span>{{ scope.row.value }}</span> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="扣减金额(元)" |
| | | prop="money" |
| | | width="180"> |
| | | <template slot-scope="scope"> |
| | | width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-input type="number" |
| | | :precision="2" :step="0.1" |
| | | :min="0" :max="1000000" |
| | | v-model="scope.row.money" |
| | | placeholder="请输入扣减金额"> |
| | | </el-input> |
| | | </template> |
| | | </el-table-column> |
| | | disabled |
| | | placeholder="请输入扣减金额"> |
| | | </el-input> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | |
| | | tableData: [{ |
| | | time: '2024-03-03', |
| | | score: '94', |
| | | value: '0.01', |
| | | money: '', |
| | | value: '1%', |
| | | ruleName: '<95', |
| | | money: '10', |
| | | description: '每少1分扣当月总服务费的1%。例如:当月考核得分91.5分,扣除当月服务费3.5%的金额', |
| | | }, { |
| | | time: '2024-04-03', |
| | | score: '95', |
| | | value: '0', |
| | | money: '', |
| | | description: '每少1分扣当月总服务费的1%。例如:当月考核得分91.5分,扣除当月服务费3.5%的金额', |
| | | ruleName: '≥95', |
| | | money: '0', |
| | | description: '不扣款', |
| | | }, ], |
| | | manualScoreOpen: false, |
| | | manualScoreForm: {}, |
| | |
| | | ...this.queryParams |
| | | }, `checkResult_${new Date().getTime()}.xlsx`) |
| | | }, |
| | | /** 合计行 */ |
| | | getSummaries(param) { |
| | | const { columns, data } = param; |
| | | const sums = []; |
| | |
| | | sums[index] = '-'; // 或者其他你想要显示的内容 |
| | | } |
| | | } else { |
| | | sums[index] = 'N/A'; |
| | | sums[index] = '-'; |
| | | } |
| | | }); |
| | | |
| | | return sums; |
| | | } |
| | | }, |
| | | toScorePage() { |
| | | // 使用Vue Router进行页面跳转 |
| | | this.$router.push('/contract/score/index'); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | icon="el-icon-plus" |
| | | size="mini" |
| | | @click="handleAdd" |
| | | v-hasPermi="['system:rule:add']" |
| | | >新增</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:rule:edit']" |
| | | >修改</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-plus" |
| | | @click="handleAdd(scope.row)" |
| | | v-hasPermi="['system:rule:add']" |
| | | >新增</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:rule:remove']" |
| | | >删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <p>设备总数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #5C9BF8">{{ count.totalPosts }}</h3> |
| | | <p>人脸设备数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #5C9BF8">{{ count.totalPosts }}</h3> |
| | | <p>车辆设备数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #5C9BF8">{{ count.totalPosts }}</h3> |
| | | <p>视频设备数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #3eba45">{{ count.totalMembers }}</h3> |
| | | <p>正常数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #fe640d">{{ count.postsPercentage }}</h3> |
| | | <p>异常数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ count.totalViews }}</h3> |
| | | <p>生成异常工单数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ count.noStore }}</h3> |
| | | <p>无存储</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ count.partStore }}</h3> |
| | | <p>部分存储</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ count.viewsPercentage }}%</h3> |
| | | <p>设备运行率</p > |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="是否生成异常工单" prop="defaultOrder" label-width="130px"> |
| | | <el-select |
| | | v-model="queryParams.defaultOrder" |
| | | placeholder="是否生成异常工单" |
| | | clearable |
| | | style="width: 170px" |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.platform_yes_no" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| | |
| | | <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="是否生成异常工单" align="center" prop="defaultOrder" width="180" v-if="columns[3].visible"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.defaultOrder"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="数据时间" align="center" prop="installedTime" width="180" v-if="columns[4].visible"/> |
| | | <el-table-column label="管理单位" align="center" prop="managementUnit" width="180" v-if="columns[5].visible"/> |
| | | <el-table-column label="信令时延(ms)" align="center" prop="sipDelay" width="180" v-if="columns[6].visible"/> |
| | | <el-table-column label="视频时延(ms)" align="center" prop="videoDelay" width="180" v-if="columns[7].visible"/> |
| | | <el-table-column label="关键帧时延(ms)" align="center" prop="iframeDelay" width="180" v-if="columns[8].visible"/> |
| | | <el-table-column label="数据时间" align="center" prop="installedTime" width="180" v-if="columns[3].visible"/> |
| | | <el-table-column label="管理单位" align="center" prop="managementUnit" width="180" v-if="columns[4].visible"/> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="地址:">{{ form.address }}</el-form-item> |
| | | <el-form-item label="是否生成异常工单:"> |
| | | <div v-if="form.defaultOrder === 1">是</div> |
| | | <div v-else-if="form.defaultOrder === 2">否</div> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="安装时间:">{{ form.installedTime }}</el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="管理单位:">{{ form.managementUnit }}</el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="信令时延(ms):"></el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="视频时延(ms):"></el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="关键帧时延(ms):"></el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | |
| | | { key: 0, label: `标签`, visible: true }, |
| | | { key: 1, label: `区域`, visible: true }, |
| | | { key: 2, label: `设备状态`, visible: true }, |
| | | { key: 3, label: `是否生成异常工单`, visible: true }, |
| | | { key: 4, label: `数据时间`, visible: true }, |
| | | { key: 5, label: `管理单位`, visible: true }, |
| | | { key: 6, label: `信令时延`, visible: true }, |
| | | { key: 7, label: `视频时延`, visible: true }, |
| | | { key: 8, label: `关键帧时延`, visible: true } |
| | | { key: 3, label: `数据时间`, visible: true }, |
| | | { key: 4, label: `管理单位`, visible: true }, |
| | | ], |
| | | count: { |
| | | totalPosts: 0, |
| | |
| | | <h3 style="color: #fe640d">{{ count.postsPercentage }}</h3> |
| | | <p>异常数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ count.totalViews }}</h3> |
| | | <p>生成异常工单数</p > |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="是否生成异常工单" prop="defaultOrder" label-width="130px"> |
| | | <el-select |
| | | v-model="queryParams.status" |
| | | placeholder="是否生成异常工单" |
| | | clearable |
| | | style="width: 170px" |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.platform_yes_no" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
| | |
| | | <dict-tag :options="dict.type.camera_state" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="是否生成异常工单" align="center" prop="defaultOrder" width="180"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column label="备注" align="center" prop="remark" /> --> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | |
| | | .dashboard-item { |
| | | text-align: center; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | |
| | | <el-table v-loading="loading" :data="pointList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="点位名称" align="center" prop="pointName" /> |
| | | <el-table-column label="点位类型" align="center" prop="pointType" /> |
| | | <el-table-column label="标签" align="center" prop="tag" > |
| | | <span>{{important}}</span> |
| | | </el-table-column> |
| | |
| | | <el-table-column label="点位" align="center" prop="pointName" /> |
| | | <el-table-column label="报备类型" align="center" prop="reportType" /> |
| | | <el-table-column label="报备内容" align="center" prop="reportContent" show-overflow-tooltip="true" /> |
| | | <el-table-column label="上报材料" align="center" prop="reportMaterials" /> |
| | | <el-table-column label="上报材料" align="center" prop="reportMaterials" show-overflow-tooltip="true"> |
| | | <template slot-scope="scope"> |
| | | <div v-for="(item, index) in scope.row.reportMaterials.split(',')" :key="index">{{ item.substring(item.lastIndexOf("/") + 1) }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="故障类型" align="center" prop="errorType" /> |
| | | <el-table-column label="审核时间" align="center" prop="auditingTime" width="180"> |
| | | <template slot-scope="scope"> |
| | |
| | | <el-option label="设备遗失" value="设备遗失"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="有效时间"> |
| | | <el-form-item label="报备时间" prop="expirTime"> |
| | | <el-date-picker |
| | | v-model="expirTime" |
| | | v-model="form.expirTime" |
| | | style="width: 240px" |
| | | value-format="yyyy-MM-dd" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="生效日期" |
| | | end-placeholder="失效日期" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | @change="handleExpirTimeChange" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="报备内容" prop="reportContent"> |
| | |
| | | <el-input type="textarea" v-html="auditingForm.reportContent" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="上报材料"> |
| | | <el-link :href="auditingForm.reportMaterials" :underline="false">{{ auditingForm.reportMaterials }}</el-link> |
| | | <el-link v-for="item in auditingForm.reportMaterials != null ? auditingForm.reportMaterials.split(',') : auditingForm.reportMaterials" :underline="false" :key="item" @click="handleDownload(item)">{{ item.substring(item.lastIndexOf("/") + 1) }}</el-link> |
| | | </el-form-item> |
| | | <el-form-item label="审核结果"> |
| | | <el-radio-group v-model="auditingForm.status"> |
| | |
| | | { required: true, message: "请选择故障类型", trigger: "blur" } |
| | | ], |
| | | expirTime: [ |
| | | { required: true, message: "请选择有效时间", trigger: "blur" } |
| | | { required: true, message: "请选择报备时间", trigger: "blur" } |
| | | ], |
| | | } |
| | | }; |
| | |
| | | this.auditingForm = {} |
| | | }); |
| | | }, |
| | | handleExpirTimeChange() { |
| | | if (null != this.form.expirTime && '' != this.form.expirTime) { |
| | | this.form["beginCreateTime"] = this.form.expirTime[0]; |
| | | this.form["endCreateTime"] = this.form.expirTime[1]; |
| | | } |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | |
| | | if (null != this.expirTime && '' != this.expirTime) { |
| | | this.form["beginCreateTime"] = this.expirTime[0]; |
| | | this.form["endCreateTime"] = this.expirTime[1]; |
| | | } |
| | | |
| | | // todo 判断是事前报备 |
| | | |
| | |
| | | this.download('report/export', { |
| | | ...this.queryParams |
| | | }, `report_${new Date().getTime()}.xlsx`) |
| | | }, |
| | | /** 下载按钮操作 */ |
| | | handleDownload (data) { |
| | | this.$download.resource(data); |
| | | } |
| | | } |
| | | }; |
| | |
| | | <el-card class="box-card" v-for="(item) in checkResultList"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>{{ item.checkUnitName }}</span> |
| | | |
| | | <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">详情</el-button> |
| | | </div> |
| | | <div class="text item">考核<span class="time">{{ item.examineName }}</span></div> |
New file |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-page-header @back="goBack" content="详情页面"> |
| | | </el-page-header> |
| | | |
| | | <el-container> |
| | | <el-main> |
| | | <h2>考核规则</h2> |
| | | <el-table v-loading="loading" :data="ruleList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="规则名称" align="center" prop="ruleName" /> |
| | | <el-table-column label="规则权重" align="center" prop="ruleWeight" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleRuleUpdate(scope.row)" |
| | | >修改</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getRuleList" |
| | | /> |
| | | </el-main> |
| | | </el-container> |
| | | |
| | | <el-container> |
| | | <el-main> |
| | | <h2>考核成绩</h2> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="mini" |
| | | @click="handleExport" |
| | | >导出</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getRuleList"></right-toolbar> |
| | | </el-row> |
| | | <el-table v-loading="loading" :data="checkResultList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="考核日期" align="center" prop="date" width="120px" fixed/> |
| | | <el-table-column label="考核对象" align="center" prop="target" width="120px"/> |
| | | <el-table-column label="平台在线率(权重:0.5)" align="center" prop="platformOnline" width="120px"/> |
| | | <el-table-column label="一机一档合格率(权重:0.5)" align="center" prop="monitorQualification" width="120px"/> |
| | | <el-table-column label="一机一档注册率(权重:0.5)" align="center" prop="monitorRegistration" width="120px"/> |
| | | <el-table-column label="档案考核比(权重:0.5)" align="center" prop="archivesRate" width="120px"/> |
| | | <el-table-column label="点位在线率(权重:1)" align="center" prop="siteOnline" width="120px"/> |
| | | <el-table-column label="录像可用率(权重:1)" align="center" prop="videoAvailable" width="120px"/> |
| | | <el-table-column label="标注正确率(权重:0.5)" align="center" prop="annotationAccuracy" width="120px"/> |
| | | <el-table-column label="校时正确率(权重:0.5)" align="center" prop="timingAccuracy" width="120px"/> |
| | | <el-table-column label="重点点位在线率(权重:0.5)" align="center" prop="keySiteOnline" width="120px"/> |
| | | <el-table-column label="重点点位录像可用率(权重:0.5)" align="center" prop="keyVideoAvailable" width="120px"/> |
| | | <el-table-column label="重点点位标注正确率(权重:0.5)" align="center" prop="keyAnnotationAccuracy" width="120px"/> |
| | | <el-table-column label="重点点位按时正确率(权重:0.5)" align="center" prop="keyTimingAccuracy" width="120px"/> |
| | | <el-table-column label="重点指挥图像公安部巡检结果(权重:0.2)" align="center" prop="keyCommandImageInspection" width="120px"/> |
| | | <el-table-column label="重点指挥图像目录树(权重:0.8)" align="center" prop="keyCommandImageDirectoryTree" width="120px"/> |
| | | <el-table-column label="在线检查平台部署及运行率(权重:0.075)" align="center" prop="onlineInspectionPlatform" width="120px"/> |
| | | <el-table-column label="视频传输网资产准确率(权重:0.075)" align="center" prop="videoTransmissionAssetsAccuracy" width="120px"/> |
| | | <el-table-column label="视频传输网资产弱口令得分比例(权重:0.075)" align="center" prop="videoTransmissionAssetsWeakPasswordScore" width="120px"/> |
| | | <el-table-column label="视频传输网危险资产得分比重(权重:0.075)" align="center" prop="videoTransmissionDangerousAssetsScore" width="120px"/> |
| | | <el-table-column label="视频传输网边界完整性检测扣分项(权重:0.2)" align="center" prop="videoTransmissionBoundaryIntegrityDetection" width="120px"/> |
| | | <el-table-column label="月运行率" align="center" prop="operatingRate"/> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row,scope.index)" |
| | | >修改</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-main> |
| | | </el-container> |
| | | |
| | | <!-- 添加或修改考核规则对话框 --> |
| | | <el-dialog :title="title" :visible.sync="ruleOpen" width="600px" append-to-body> |
| | | <el-form ref="form" :model="ruleForm" :rules="rules" label-width="80px"> |
| | | <el-form-item label="规则名称" prop="ruleName"> |
| | | <el-input v-model="ruleForm.ruleName" placeholder="请输入规则名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="规则类型" prop="category"> |
| | | <el-select v-model="ruleForm.category" placeholder="规则类型"> |
| | | <el-option |
| | | v-for="item in categoryList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="规则描述" prop="ruleDetail"> |
| | | <el-input v-model="ruleForm.ruleDetail" type="textarea" show-word-limit maxlength="150" placeholder="请输入规则描述"/> |
| | | </el-form-item> |
| | | <el-form-item label="参数配置" prop="ruleDetail"> |
| | | <div class="row-warp"> |
| | | <div class="row"> |
| | | <div class="row-left">参数名</div> |
| | | <div class="row-right">条件</div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="row-left">天网视频点位数</div> |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div> |
| | | <el-input class="input-w" type="number" v-model="ruleForm.videoPointNum"/>{{" %"}} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="row-left">车辆卡口点位数</div> |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div><el-input class="input-w" type="number" v-model="ruleForm.vehicleCheckpointNum"/></div>{{" %"}} |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="row-left">人脸卡口点位数</div> |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div> |
| | | <el-input class="input-w" type="number" v-model="ruleForm.faceChceckpointNum" /></div>{{" %"}} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 规则详情 --> |
| | | <el-dialog title="规则详情" :visible.sync="ruleDetailOpen" width="50%" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-form-item label="规则名称" prop="ruleName"> |
| | | <el-input class="input" disabled v-model="form.ruleName" placeholder="请输入规则名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="运维公司" prop="companyName"> |
| | | <el-input class="input" disabled :value ="companyName" placeholder="请输入运维公司名称"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="规则描述" prop="ruleDesc"> |
| | | <el-input class="input" disabled v-model="form.ruleDesc" placeholder="请输入规则描述" /> |
| | | </el-form-item> |
| | | <el-form-item label="规则设置"> |
| | | <div > |
| | | <div class="line"> |
| | | <div class="line-left">时钟同步(超过±3秒为不合格)24小时内未修复的:扣除相关镜头数量*</div> |
| | | <div class="line-right"><el-input disabled v-model="jsonRule.overTime" type="text"/></div>分 |
| | | </div> |
| | | <div class="line"> |
| | | <div class="line-left">OSD标识不满足《GAT 751-2008 视频图像文字标注规范》,24小时内未修复的:标扣除相关镜头数量*</div> |
| | | <div class="line-right"><el-input disabled v-model="jsonRule.failNum" type="text"/></div>分 |
| | | </div> |
| | | <div class="line"> |
| | | <div class="line-left">用户抽检,一机一档数据项不合格(提供虚假数据或错误数据为不合格),24小时内未修复的:扣除相关镜头数量*</div> |
| | | <div class="line-right"><el-input disabled v-model="jsonRule.failNum" type="text"/></div>分 |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="cancel">关闭</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 添加或修改考核计分对话框 --> |
| | | <el-dialog :title="title" :visible.sync="scoreOpen" width="500px" append-to-body> |
| | | <el-form ref="form" :model="scoreForm" :rules="rules" label-width="80px"> |
| | | <el-form-item label="分值" prop="score"> |
| | | <el-input v-model="scoreForm.score" placeholder="请输入分值" /> |
| | | </el-form-item> |
| | | <el-form-item label="考核名" prop="examineId"> |
| | | <el-select v-model="scoreForm.examineId" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in examineList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核对象" prop="unitId"> |
| | | <el-select v-model="scoreForm.unitId" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核规则" prop="ruleCategory"> |
| | | <el-select v-model="scoreForm.ruleCategory" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in ruleCategoryList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listCheckResult, getCheckResult, delCheckResult, addCheckResult, updateCheckResult,manualScore, publishCheckResult } from "@/api/platform/check-result"; |
| | | import { listCheckRule, getCheckRule, delCheckRule, addCheckRule, updateCheckRule } from "@/api/platform/check-rule"; |
| | | import { listScore, getScore, delScore, addScore, updateScore } from "@/api/platform/check-score"; |
| | | import {unitSelect} from "@/api/platform/unit"; |
| | | import {publishSelect} from "@/api/platform/check-publish"; |
| | | |
| | | export default { |
| | | name: "CheckResult", |
| | | dicts: ['platform_audit_state'], |
| | | data() { |
| | | return { |
| | | activeIndex: '1', |
| | | activeIndex2: '1', |
| | | activeNames: ['1'], |
| | | companyName: "成都x运维公司", |
| | | detailTitle: '', |
| | | detailOpen: false, |
| | | detail:{ |
| | | }, |
| | | examineList: [], |
| | | unitList: [ |
| | | {id:2,value: '成都x运维'}, |
| | | {id:3,value: '自流井区'}, |
| | | ], |
| | | ruleCategoryList: [ |
| | | { id: 1, value: '视频在线率' }, |
| | | { id: 2, value: '存储故障' }, |
| | | { id: 3, value: '视图库对接稳定性' }, |
| | | { id: 4, value: '一机一档24小时未修复' }, |
| | | { id: 5, value: '时钟不同步24小时未修复' }, |
| | | ], |
| | | tableData: [{ |
| | | name: '视频平均在线率', |
| | | content: '97%', |
| | | score: '-5' |
| | | }, { |
| | | name: '一机一档24小时未修复', |
| | | content: '5个', |
| | | score: '-0.5' |
| | | }, { |
| | | name: '存储故障', |
| | | content: '5小时', |
| | | score: '-0.3' |
| | | }, { |
| | | name: '时钟不同步24小时未修复', |
| | | content: '3个', |
| | | score: '-0.5' |
| | | }], |
| | | // 运维类型 |
| | | categoryList: [ |
| | | { id: 1, value: '视频监控' }, |
| | | { id: 2, value: '车辆识别' }, |
| | | { id: 3, value: '人脸识别' }, |
| | | ], |
| | | manualScoreOpen: false, |
| | | manualScoreForm: {}, |
| | | manualScoreTitle: '', |
| | | // 遮罩层 |
| | | loading: true, |
| | | // 选中数组 |
| | | ids: [], |
| | | // 非单个禁用 |
| | | single: true, |
| | | // 非多个禁用 |
| | | multiple: true, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 总条数 |
| | | total: 0, |
| | | // 考核结果表格数据 |
| | | checkResultList: [ |
| | | { |
| | | date: '2024-04-02', |
| | | target: '自流井区', |
| | | platformOnline: '97%', |
| | | monitorQualification: '97%', |
| | | monitorRegistration: '97%', |
| | | archivesRate: '97%', |
| | | siteOnline: '97%', |
| | | videoAvailable: '97%', |
| | | annotationAccuracy: '97%', |
| | | timingAccuracy: '97%', |
| | | keySiteOnline: '97%', |
| | | keyVideoAvailable: '97%', |
| | | keyAnnotationAccuracy: '97%', |
| | | keyTimingAccuracy: '97%', |
| | | keyCommandImageInspection: '97%', |
| | | keyCommandImageDirectoryTree: '97%', |
| | | onlineInspectionPlatform: '97%', |
| | | videoTransmissionAssetsAccuracy: '97%', |
| | | videoTransmissionAssetsWeakPasswordScore: '97%', |
| | | videoTransmissionDangerousAssetsScore: '97%', |
| | | videoTransmissionBoundaryIntegrityDetection: '97%', |
| | | operatingRate: '97%', |
| | | }, |
| | | { |
| | | date: '2024-04-03', |
| | | target: '自流井区', |
| | | platformOnline: '97%', |
| | | monitorQualification: '97%', |
| | | monitorRegistration: '97%', |
| | | archivesRate: '97%', |
| | | siteOnline: '97%', |
| | | videoAvailable: '97%', |
| | | annotationAccuracy: '97%', |
| | | timingAccuracy: '97%', |
| | | keySiteOnline: '97%', |
| | | keyVideoAvailable: '97%', |
| | | keyAnnotationAccuracy: '97%', |
| | | keyTimingAccuracy: '97%', |
| | | keyCommandImageInspection: '97%', |
| | | keyCommandImageDirectoryTree: '97%', |
| | | onlineInspectionPlatform: '97%', |
| | | videoTransmissionAssetsAccuracy: '97%', |
| | | videoTransmissionAssetsWeakPasswordScore: '97%', |
| | | videoTransmissionDangerousAssetsScore: '97%', |
| | | videoTransmissionBoundaryIntegrityDetection: '97%', |
| | | operatingRate: '97%', |
| | | } |
| | | |
| | | ], |
| | | scoreTotal: 3, |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | scoreOpen: false, |
| | | ruleOpen: false, |
| | | ruleDetailOpen: false, |
| | | // 逻辑删除时间范围 |
| | | daterangeCheckTime: [], |
| | | |
| | | // 表单参数 |
| | | form: {}, |
| | | scoreForm: {}, |
| | | ruleForm: {}, |
| | | jsonRule: {}, |
| | | // 考核规则列表 |
| | | ruleList: [ |
| | | {ruleName: '平台在线率',ruleWeight: 0.5}, |
| | | {ruleName: '一机一档合格率',ruleWeight: 0.5}, |
| | | {ruleName: '一机一档在线率',ruleWeight: 0.5}, |
| | | ], |
| | | // 考核计分表格数据 |
| | | scoreList: [], |
| | | //违约规则请求参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | ruleName: null, |
| | | ruleStatus: null, |
| | | createTime: null, |
| | | }, |
| | | //考核分数请求参数 |
| | | scoreQueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | examineCategory: 2, |
| | | }, |
| | | pickerOptions: { |
| | | disabledDate(time) { |
| | | return time.getTime() > Date.now(); |
| | | }, |
| | | shortcuts: [{ |
| | | text: '今天', |
| | | onClick(picker) { |
| | | picker.$emit('pick', new Date()); |
| | | } |
| | | }, { |
| | | text: '昨天', |
| | | onClick(picker) { |
| | | const date = new Date(); |
| | | date.setTime(date.getTime() - 3600 * 1000 * 24); |
| | | picker.$emit('pick', date); |
| | | } |
| | | }, { |
| | | text: '一周前', |
| | | onClick(picker) { |
| | | const date = new Date(); |
| | | date.setTime(date.getTime() - 3600 * 1000 * 24 * 7); |
| | | picker.$emit('pick', date); |
| | | } |
| | | }] |
| | | }, |
| | | value1: '', |
| | | value2: '', |
| | | // 表单校验 |
| | | rules: { |
| | | } |
| | | }; |
| | | }, |
| | | created() { |
| | | //考核成绩详情跳转参数接收 |
| | | if(this.$route.query.detail){ |
| | | this.detail = this.$route.query.detail |
| | | console.log(this.$route.query.detail,"detail------------") |
| | | } |
| | | // 考核规则列表 |
| | | // this.getRuleList(); |
| | | // 考核积分列表 |
| | | this.getScoreList(); |
| | | // this.selectUnit(); |
| | | this.selectExamine(); |
| | | }, |
| | | methods: { |
| | | handleChange(val) { |
| | | console.log(val); |
| | | }, |
| | | // 运维公司下拉数据 |
| | | // selectUnit() { |
| | | // unitSelect().then(res => { |
| | | // this.unitList = res.data; |
| | | // }) |
| | | // }, |
| | | // 考核下拉数据 |
| | | selectExamine() { |
| | | publishSelect().then(res => { |
| | | this.examineList = res.data; |
| | | }) |
| | | }, |
| | | /** 查询考核计分列表 */ |
| | | getScoreList() { |
| | | this.loading = true; |
| | | listScore(this.scoreQueryParams).then(response => { |
| | | this.scoreList = response.rows; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | /** 查询违约规则列表 */ |
| | | getRuleList() { |
| | | this.loading = true; |
| | | if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) { |
| | | this.queryParams["start"] = this.daterangeCreateTime[0]; |
| | | this.queryParams["end"] = this.daterangeCreateTime[1]; |
| | | } |
| | | listCheckRule(this.queryParams).then(response => { |
| | | this.ruleList = response.data; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | frequencyFormatter(row) { |
| | | if (row.frequency === "1") { |
| | | return "月度考核" |
| | | } |
| | | if (row.frequency === "2") { |
| | | return "季度考核" |
| | | } |
| | | }, |
| | | examineRangeFormatter(row) { |
| | | if (row.examineRange === "1") { |
| | | return "分局考核" |
| | | } |
| | | if (row.examineRange === "2") { |
| | | return "市局考核" |
| | | } |
| | | }, |
| | | /** 查询考核结果列表 */ |
| | | getCheckResult() { |
| | | this.loading = true; |
| | | getCheckResult(id).then(response => { |
| | | this.detail = response.data; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.scoreOpen = false; |
| | | this.ruleOpen = false; |
| | | this.ruleDetailOpen = false; |
| | | this.ruleDetailOpen = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | | this.form = { |
| | | id: null, |
| | | checkUnitId: null, |
| | | checkPublishId: null, |
| | | checkScore: null, |
| | | systemScore: null, |
| | | manualScore: null, |
| | | checkTime: null, |
| | | createTime: null, |
| | | updateTime: null, |
| | | deleted: null |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | cancelManualScore() { |
| | | this.manualScoreForm = {}; |
| | | this.manualScoreTitle = ""; |
| | | this.manualScoreOpen = false; |
| | | }, |
| | | submitManualScore() { |
| | | if (! this.manualScoreForm.manualScore) { |
| | | this.$modal.msgWarning("请填写分数"); |
| | | return |
| | | } |
| | | manualScore(this.manualScoreForm).then(res => { |
| | | this.$modal.msgSuccess("操作成功"); |
| | | this.cancelManualScore(); |
| | | this.getList(); |
| | | }) |
| | | }, |
| | | handleSetManualScore(row) { |
| | | this.manualScoreForm.id = row.id; |
| | | this.manualScoreForm.manualScore = parseInt(row.manualScore); |
| | | this.manualScoreTitle = row.checkUnitName + '人工打分' |
| | | this.manualScoreOpen = true; |
| | | }, |
| | | |
| | | handlePublish(row) { |
| | | let text = row.publish == 1 ? '取消发布' : '发布'; |
| | | const ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认' + text + '考核结果编号为"' + ids + '"的数据项?').then(function() { |
| | | return publishCheckResult(ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess(text + "成功"); |
| | | }).catch(() => {}); |
| | | |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.daterangeCheckTime = []; |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id) |
| | | this.single = selection.length!==1 |
| | | this.multiple = !selection.length |
| | | }, |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加考核结果"; |
| | | }, |
| | | /** 修改积分按钮操作 */ |
| | | handleScoreUpdate(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids |
| | | getScore(id).then(response => { |
| | | this.scoreForm = response.data; |
| | | this.scoreOpen = true; |
| | | this.title = "修改考核计分"; |
| | | }); |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleRuleUpdate(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids |
| | | getCheckRule(id).then(response => { |
| | | this.ruleForm = response.data; |
| | | this.ruleOpen = true; |
| | | this.title = "修改考核规则"; |
| | | |
| | | }); |
| | | }, |
| | | // 详情按钮 |
| | | handleRuleDetail(row) { |
| | | this.ruleDetailOpen = true; |
| | | this.form = row; |
| | | this.jsonRule = JSON.parse(this.form.ruleDetail); |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | if (this.form.id != null) { |
| | | updateCheckResult(this.form).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } else { |
| | | addCheckResult(this.form).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除考核结果编号为"' + ids + '"的数据项?').then(function() { |
| | | return delCheckResult(ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.download('system/checkResult/export', { |
| | | ...this.queryParams |
| | | }, `checkResult_${new Date().getTime()}.xlsx`) |
| | | }, |
| | | handleSelect(key, keyPath) { |
| | | console.log(key, keyPath); |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | |
| | | .line { |
| | | display: flex; |
| | | flex-direction: row; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | |
| | | .line-right { |
| | | width: 50px; |
| | | } |
| | | .input{ |
| | | width: 200px; |
| | | } |
| | | |
| | | .input-w { |
| | | margin-left: 5px; |
| | | width: 70px; |
| | | } |
| | | .row-warp { |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | text-align: center; |
| | | border: solid 1px gray; |
| | | /*padding: 3px;*/ |
| | | } |
| | | .row { |
| | | display: flex; |
| | | flex-direction: row; |
| | | justify-content: center; |
| | | align-items: center; |
| | | border-bottom: solid 1px gray; |
| | | padding: 3px; |
| | | } |
| | | .row:last-of-type { |
| | | border-bottom: none; |
| | | } |
| | | .row-left { |
| | | flex: 2; |
| | | border-right: solid 1px gray; |
| | | } |
| | | .row-right { |
| | | flex: 4; |
| | | display: flex; |
| | | flex-direction: row; |
| | | justify-content: center; |
| | | } |
| | | .header-container { |
| | | display: flex; |
| | | align-items: center; /* 垂直居中 */ |
| | | } |
| | | |
| | | .header-container h2 { |
| | | margin-right: 10px; /* 根据需要调整标题和菜单之间的间距 */ |
| | | } |
| | | |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div style="padding: 5px"> |
| | | <div> |
| | | <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect" style="margin-bottom: 10px"> |
| | | <el-menu-item index="1">省厅考核</el-menu-item> |
| | | <el-menu-item index="2">区域考核</el-menu-item> |
| | | </el-menu> |
| | | </div> |
| | | |
| | | <div class="data-chart-container"> |
| | | <el-card class="data-card" :body-style="{ height: '100%' }"> |
| | | <div class="card-content"> |
| | | <div class="title-container"> |
| | | <h1>考核成绩</h1> |
| | | </div> |
| | | <div class="chart-container"> |
| | | <div id="chartContent" ref="chartContent"></div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | |
| | | <div style="margin-top: 35px"> |
| | | <el-table |
| | | :data="tableData" |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | label="考核时间" |
| | | prop="time" |
| | | align="center"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="标签" |
| | | prop="tag" |
| | | align="center"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="考核类型" |
| | | prop="category" |
| | | align="center"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="考核频率" |
| | | prop="frequency" |
| | | align="center"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="分数" |
| | | prop="score" |
| | | align="center"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="状态" |
| | | prop="state" |
| | | align="center"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.platform_examine_use" :value="scope.row.state"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" v-show="scope.row.publish != 1">确认发布</el-button> |
| | | <el-button size="small" type="text" v-show="scope.row.publish == 1">取消发布</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handleDetail(scope.row,scope.index)" |
| | | >详细</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | |
| | | <div style="text-align: right; margin-top: 10px"> |
| | | <el-pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | :current-page="currentPage4" |
| | | :page-sizes="[5, 10, 20]" |
| | | :page-size="5" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="4"> |
| | | </el-pagination> |
| | | </div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import * as echarts from 'echarts'; |
| | | let lineChart = null; |
| | | let observer = null; |
| | | export default { |
| | | name: 'index', |
| | | dicts: ['platform_examine_use'], |
| | | data() { |
| | | return { |
| | | activeIndex: '1', |
| | | activeIndex2: '1', |
| | | dateRange: '', |
| | | company: '', |
| | | dataList: [ |
| | | { |
| | | name: '全部', |
| | | complete: { '4.5': 95.5, '4.6': 95.3, '4.7': 96.0, '4.8': 97.2, '4.9': 96.5 , |
| | | '4.10': 95.5, '4.11': 95.3, '4.12': 96.0, '4.13': 97.2, '4.14': 96.5 }, |
| | | waiting: { '4.5': 94.8, '4.6': 91.3, '4.7': 95.3, '4.8': 92.3, '4.9': 93.3, |
| | | '4.10': 94.8, '4.11': 91.3, '4.12': 95.3, '4.13': 92.3, '4.14': 93.3 }, |
| | | pending: { '4.5': 91.6, '4.6': 92.6, '4.7': 93.7, '4.8': 94.0, '4.9': 95.9 |
| | | ,'4.10': 91.6, '4.11': 92.6, '4.12': 93.7, '4.13': 94.0, '4.14': 95.9 } |
| | | } |
| | | ], |
| | | tableData: [ |
| | | { |
| | | time: '2024-04-15', |
| | | tag: '省厅考核', |
| | | category: '车辆考核', |
| | | frequency: '月度考核', |
| | | score: '96.5', |
| | | state: '0', |
| | | publish: '0' |
| | | }, |
| | | { |
| | | time: '2024-04-15', |
| | | tag: '省厅考核', |
| | | category: '人脸考核', |
| | | frequency: '月度考核', |
| | | score: '93.3', |
| | | state: '0', |
| | | publish: '0' |
| | | }, |
| | | { |
| | | time: '2024-04-15', |
| | | tag: '省厅考核', |
| | | category: '视频考核', |
| | | frequency: '月度考核', |
| | | score: '95.9', |
| | | state: '0', |
| | | publish: '0' |
| | | }, |
| | | { |
| | | time: '2024-04-14', |
| | | tag: '省厅考核', |
| | | category: '车辆考核', |
| | | frequency: '月度考核', |
| | | score: '96.5', |
| | | state: '1', |
| | | publish: '1' |
| | | }, |
| | | ], |
| | | searchForm: { |
| | | time: null, |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | |
| | | handleSizeChange(val) { |
| | | console.log(`每页 ${val} 条`); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | console.log(`当前页: ${val}`); |
| | | }, |
| | | handleDetail(index, row) { |
| | | console.log(index, row); |
| | | this.$router.push("/examine/detail/detail") |
| | | }, |
| | | handleDelete(index, row) { |
| | | console.log(index, row); |
| | | }, |
| | | initChart() { |
| | | const option = { |
| | | legend: { |
| | | right: 'right', |
| | | top: 'top', |
| | | icon: 'rect', |
| | | orient: "vertical", |
| | | data: [ |
| | | { |
| | | name: '车辆考核', |
| | | itemStyle: { |
| | | color: 'rgba(62, 144, 247, 1)' |
| | | } |
| | | }, |
| | | { |
| | | name: '人脸考核', |
| | | itemStyle: { |
| | | color: 'rgba(85, 192, 191, 1)' |
| | | } |
| | | }, |
| | | { |
| | | name: '视频考核', |
| | | itemStyle: { |
| | | color: 'rgba(255, 165, 0, 1)' |
| | | } |
| | | }, |
| | | ], |
| | | }, |
| | | grid: { |
| | | left: 0, |
| | | right: 0, |
| | | bottom: 0, |
| | | top: '20%', |
| | | containLabel: true |
| | | }, |
| | | tooltip: {}, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: Object.keys(this.acitveData.complete), |
| | | }, |
| | | yAxis: { |
| | | min: 90, |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '车辆考核', |
| | | data: Object.entries(this.acitveData.complete).map(([key, value]) => value), |
| | | type: 'line', |
| | | itemStyle: { |
| | | color: 'rgba(62, 144, 247, 1)' |
| | | } |
| | | }, |
| | | { |
| | | name: '人脸考核', |
| | | data: Object.entries(this.acitveData.waiting).map(([key, value]) => value), |
| | | type: 'line', |
| | | itemStyle: { |
| | | color: 'rgba(85, 192, 191, 1)' |
| | | } |
| | | }, |
| | | { |
| | | name: '视频考核', |
| | | data: Object.entries(this.acitveData.pending).map(([key, value]) => value), |
| | | type: 'line', |
| | | itemStyle: { |
| | | color: 'rgba(255, 165, 0, 1)' |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | lineChart.setOption(option, true); |
| | | }, |
| | | |
| | | |
| | | // 监听变化 |
| | | observe() { |
| | | if (!observer) { |
| | | observer = new ResizeObserver(entries => { |
| | | this.handleResize(); |
| | | }) |
| | | } |
| | | observer.observe(this.$refs.chartContent); |
| | | }, |
| | | // 窗口变换 |
| | | handleResize() { |
| | | if (lineChart) { |
| | | lineChart.resize(); |
| | | } |
| | | } |
| | | |
| | | }, |
| | | mounted() { |
| | | this.acitveData = this.dataList[0]; |
| | | this.company = this.acitveData.name; |
| | | lineChart = echarts.init(this.$refs.chartContent); |
| | | this.initChart(); |
| | | this.observe(); |
| | | }, |
| | | beforeDestroy() { |
| | | if (lineChart) { |
| | | lineChart.dispose(); |
| | | observer.unobserve(this.$refs.chartContent); |
| | | } |
| | | }, |
| | | handleSelect(key, keyPath) { |
| | | console.log(key, keyPath); |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .data-chart-container { |
| | | height: 400px; |
| | | margin-bottom: 20px; |
| | | |
| | | .data-card { |
| | | height: 100%; |
| | | |
| | | .card-content { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .title-container { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | z-index: 2; |
| | | |
| | | |
| | | .more-button { |
| | | cursor: pointer; |
| | | font-size: 16px; |
| | | padding: 0 10px; |
| | | } |
| | | } |
| | | |
| | | .chart-container { |
| | | |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | #chartContent { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | |
| | | .select-container { |
| | | margin: 0 20px; |
| | | width: 180px; |
| | | } |
| | | |
| | | </style> |
| | |
| | | <template> |
| | | <div id="warp"> |
| | | <el-row> |
| | | <div class="data-chart-container"> |
| | | <el-card class="data-card" :body-style="{ height: '100%' }"> |
| | | <div class="card-content"> |
| | | <div class="title-container"> |
| | | <h1>考核成绩</h1> |
| | | <div class="select-container"> |
| | | <el-date-picker v-model="date" type="date" placeholder="选择日期"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="echart-container"> |
| | | <div id="barChart" ref="barChart"></div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | <el-row :gutter="100"> |
| | | <el-col :span="6"> |
| | | <div class="city-warp"> |
| | | <div class="city"> |
| | |
| | | 自流井 |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>视频:</div> |
| | | <div class="score">99.5</div> |
| | |
| | | <div class="score">87</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>监控:</div> |
| | | <div>车辆:</div> |
| | | <div class="score">94</div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>视频:</div> |
| | | <div class="score">99.5</div> |
| | | </div> |
| | |
| | | <div class="score">87</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>监控:</div> |
| | | <div>车辆:</div> |
| | | <div class="score">94</div> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="bottom-publish"> |
| | | <el-button size="medium" type="success">发布</el-button> |
| | |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>视频:</div> |
| | | <div class="score">99.5</div> |
| | | </div> |
| | |
| | | <div class="score">87</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>监控:</div> |
| | | <div>车辆:</div> |
| | | <div class="score">94</div> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="bottom-publish"> |
| | | <el-button size="medium" type="success">发布</el-button> |
| | |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>视频:</div> |
| | | <div class="score">99.5</div> |
| | | </div> |
| | |
| | | <div class="score">87</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>监控:</div> |
| | | <div>车辆:</div> |
| | | <div class="score">94</div> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="bottom-publish"> |
| | | <el-button size="medium" type="success">发布</el-button> |
| | |
| | | |
| | | </el-row> |
| | | |
| | | <el-row style="margin-top: 30px"> |
| | | <el-row style="margin-top: 30px" :gutter="100"> |
| | | <el-col :span="6"> |
| | | <div class="city-warp"> |
| | | <div class="city"> |
| | |
| | | 高新区 |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>视频:</div> |
| | | <div class="score">99.5</div> |
| | |
| | | <div class="score">87</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>监控:</div> |
| | | <div>车辆:</div> |
| | | <div class="score">94</div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>视频:</div> |
| | | <div class="score">99.5</div> |
| | | </div> |
| | |
| | | <div class="score">87</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>监控:</div> |
| | | <div>车辆:</div> |
| | | <div class="score">94</div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px;margin-bottom: 15px">2024年4月12日</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>视频:</div> |
| | | <div class="score">99.5</div> |
| | | </div> |
| | |
| | | <div class="score">87</div> |
| | | </div> |
| | | <div class="score-item"> |
| | | <div>监控:</div> |
| | | <div>车辆:</div> |
| | | <div class="score">94</div> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="bottom-publish"> |
| | | <el-button size="medium" type="success">发布</el-button> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import * as echarts from 'echarts'; |
| | | let observer = null; |
| | | let chart = null; |
| | | export default { |
| | | name: 'index', |
| | | data() { |
| | | return { |
| | | |
| | | activeIndex: '1', |
| | | activeIndex2: '1', |
| | | date: '', |
| | | company: '', |
| | | dataList: { |
| | | name: ['富顺县', '荣县', '高新区', '自流井区', '贡井区', '大安区', '沿滩区'], |
| | | data1: [95, 96, 97, 95, 94.5, 93.6, 94.5], |
| | | data2: [93.7, 93.5, 94.3, 96.5, 95.3, 94.2, 93.3], |
| | | data3: [98.3, 94.3, 93.3, 95.5, 96.8, 96.1, 95.8], |
| | | }, |
| | | } |
| | | }, |
| | | methods: { |
| | | jumpDetail() { |
| | | this.$router.push("/examine/detail") |
| | | }, |
| | | initEchart() { |
| | | const option = { |
| | | grid: { |
| | | left: 0, |
| | | right: 0, |
| | | bottom: 0, |
| | | top: '20%', |
| | | containLabel: true |
| | | }, |
| | | legend: { |
| | | right: 'right', |
| | | top: 'top', |
| | | icon: 'rect', |
| | | orient: "vertical", |
| | | }, |
| | | tooltip: {}, |
| | | xAxis: { |
| | | type: 'category', |
| | | axisLabel: { |
| | | }, |
| | | data: this.dataList.name |
| | | }, |
| | | yAxis: { |
| | | min: 90, |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | name: '视频考核', |
| | | data: this.dataList.data1, |
| | | itemStyle: { |
| | | color: 'rgba(255, 165, 0, 1)' |
| | | } |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | name: '人脸考核', |
| | | data: this.dataList.data2, |
| | | itemStyle: { |
| | | color: 'rgba(85, 192, 191, 1)' |
| | | } |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | name: '车辆考核', |
| | | data: this.dataList.data3, |
| | | itemStyle: { |
| | | color: 'rgba(62, 144, 247, 1)' |
| | | } |
| | | }, |
| | | ] |
| | | } |
| | | chart.setOption(option, true); |
| | | |
| | | } |
| | | }, |
| | | mounted() { |
| | | chart = echarts.init(this.$refs.barChart); |
| | | this.initEchart(); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | <style lang = "scss" scoped> |
| | | .score-warp { |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | .score-item { |
| | | display: flex; |
| | | flex-direction: row; |
| | | |
| | | } |
| | | .score { |
| | | width: 60px; |
| | |
| | | } |
| | | .title { |
| | | font-size: larger; |
| | | margin-bottom: 25px; |
| | | margin-bottom: 5px; |
| | | } |
| | | .data-chart-container { |
| | | height: 400px; |
| | | margin-bottom: 20px; |
| | | |
| | | .data-card { |
| | | height: 100%; |
| | | |
| | | .card-content { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | } |
| | | } |
| | | } |
| | | .title-container { |
| | | position: absolute; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | z-index: 2; |
| | | |
| | | |
| | | .more-button { |
| | | cursor: pointer; |
| | | font-size: 16px; |
| | | padding: 0 10px; |
| | | } |
| | | } |
| | | |
| | | .echart-container { |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | #barChart { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | .select-container { |
| | | margin: 0 20px; |
| | | width: 180px; |
| | | } |
| | | </style> |
| | |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:rule:edit']" |
| | | >修改</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-plus" |
| | | @click="handleAdd(scope.row)" |
| | | v-hasPermi="['system:rule:add']" |
| | | >新增</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:rule:remove']" |
| | | >删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="row-right"> |
| | | <div>数值</div> |
| | | <div>扣分系数</div> |
| | | <div class="margin-5"> |
| | | <el-input type="number" v-model="form.weight"/> |
| | | </div> |
| | |
| | | |
| | | <el-card class="box-card" v-for="item in checkTemplateList" :key="item"> |
| | | <div class="text item">模板名称:{{ item.templateName }}</div> |
| | | <div class="text item">考核类型:{{ item.examineCategory == 0 ? '省厅考核' : '区域考核' }}</div> |
| | | <div class="text item">考核类型:{{ item.examineCategory == 0 ? '省厅考核' : '市局考核' }}</div> |
| | | <div class="text item">考核对象:{{ item.deptId }}</div> |
| | | <div class="text item">发布状态:{{ item.status == 0 ? '启用' : '停用' }}</div> |
| | | <div class="text item">使用状态:{{ item.status == 0 ? '启用' : '停用' }}</div> |
| | | <div class="bottom clearfix"> |
| | | <el-button type="text" class="button" @click="">审核</el-button> |
| | | <el-button type="text" class="button" @click="">发布</el-button> |
| | | <el-button type="text" class="button" @click="">启用</el-button> |
| | | <el-button type="text" class="button" @click="">复制</el-button> |
| | | <el-button type="text" class="button" @click="handleUpdate(item)">修改</el-button> |
| | | <el-button type="text" class="button" @click="handleDelete(item)">删除</el-button> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="mini" |
| | | @click="handleAdd" |
| | | v-hasPermi="['ycl:threshold:add']" |
| | | >新增 |
| | | </el-button> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- <el-row :gutter="10" class="mb8">--> |
| | | <!-- <el-col :span="1.5">--> |
| | | <!-- <el-button--> |
| | | <!-- type="primary"--> |
| | | <!-- plain--> |
| | | <!-- icon="el-icon-plus"--> |
| | | <!-- size="mini"--> |
| | | <!-- @click="handleAdd"--> |
| | | <!-- v-hasPermi="['ycl:threshold:add']"--> |
| | | <!-- >新增--> |
| | | <!-- </el-button>--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | |
| | | <el-table v-loading="loading" :data="thresholdList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center"/> |
| | |
| | | <el-table-column label="超时天数" align="center" prop="timeout"/> |
| | | <el-table-column label="工单阈值" align="center" prop="indicator"> |
| | | <template slot-scope="scope"> |
| | | <div v-for="item in JSON.parse(scope.row.indicator)" :key="item"> |
| | | {{ item.label }}:{{ item.value }} |
| | | <div v-for="item in JSON.parse(scope.row.indicator)" :key="item" style="display: flex;flex-direction: row"> |
| | | <div style="width: 120px;text-align: right">{{ item.label }}</div> |
| | | <div style="width: 60px;text-align: right">{{ item.value}}</div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="下发阈值" align="center" prop="indicator"> |
| | | <template slot-scope="scope"> |
| | | <div v-for="item in JSON.parse(scope.row.indicator)" :key="item"> |
| | | {{ item.label }}:{{ item.value2 }} |
| | | <div v-for="item in JSON.parse(scope.row.indicator)" :key="item" style="display: flex;flex-direction: row"> |
| | | <div style="width: 120px;text-align: right">{{ item.label }}</div> |
| | | <div style="width: 60px;text-align: right">{{ item.value2}}</div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | v-hasPermi="['ycl:threshold:edit']" |
| | | >修改 |
| | | </el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['ycl:threshold:remove']" |
| | | >删除 |
| | | </el-button> |
| | | <!-- <el-button--> |
| | | <!-- size="mini"--> |
| | | <!-- type="text"--> |
| | | <!-- icon="el-icon-delete"--> |
| | | <!-- @click="handleDelete(scope.row)"--> |
| | | <!-- v-hasPermi="['ycl:threshold:remove']"--> |
| | | <!-- >删除--> |
| | | <!-- </el-button>--> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | } |
| | | </script> |
| | | <style> |
| | | .el-input-half-width { |
| | | width: calc(50% - 6px); /* 减去一些间隔 */ |
| | | .el-input-half-width { |
| | | width: calc(50% - 6px); /* 减去一些间隔 */ |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <el-input v-model="form.unitName" placeholder="请输入单位名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="单位账号" prop="unitAdminAccount"> |
| | | <el-input v-model="form.unitAdminAccount" placeholder="请输入单位管理员账号" /> |
| | | <el-input v-model="form.unitAdminAccount" placeholder="请输入单位管理员账号" :disabled="account" /> |
| | | </el-form-item> |
| | | <el-form-item label="单位联系人" prop="unitContact"> |
| | | <el-input v-model="form.unitContact" placeholder="请输入单位联系人" /> |
| | |
| | | name: "Unit", |
| | | data() { |
| | | return { |
| | | // 账号不可修改 |
| | | account: true, |
| | | // 遮罩层 |
| | | loading: true, |
| | | // 选中数组 |
| | |
| | | }, |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.account = false; |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加运维单位"; |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | | this.account = true; |
| | | this.reset(); |
| | | const id = row.id || this.ids |
| | | getUnit(id).then(response => { |
| | |
| | | <el-option label="设备遗失" value="设备遗失"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="审核状态" prop="status"> |
| | | <el-select v-model="queryParams.status" placeholder="审核状态" clearable @clear="handleQuery"> |
| | | <el-option label="已下发" value="DISTRIBUTED"></el-option> |
| | | <el-option label="运维已处理" value="YW_HANDLE"></el-option> |
| | | <el-option label="审核通过" value="AUDITING_SUCCESS"></el-option> |
| | | <el-option label="审核不通过" value="AUDITING_FAIL"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="运维处理时间"> |
| | | <el-date-picker |
| | | clearable |
| | |
| | | type="text" |
| | | @click="handleYwCondition(item)" |
| | | >运维情况</el-button> |
| | | <!-- <el-button--> |
| | | <!-- size="mini"--> |
| | | <!-- type="text"--> |
| | | <!-- @click="handleYwResult(scope.row)"--> |
| | | <!-- >运维结果</el-button>--> |
| | | <!-- <el-button--> |
| | | <!-- size="mini"--> |
| | | <!-- type="text"--> |
| | | <!-- @click="handleCheckResult(item)"--> |
| | | <!-- v-hasPermi="['work:order:result']"--> |
| | | <!-- >检测结果</el-button>--> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | |
| | | <el-form-item label="运维人员" prop="ywPeopleName"> |
| | | <el-input v-model="auditingForm.ywPeopleName" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="现场情况" v-if="auditingForm.condition"> |
| | | <el-input type="textarea" v-html="auditingForm.condition" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="佐证材料" v-if="auditingForm.proofMaterials"> |
| | | <el-link v-for="item in auditingForm.proofMaterials != null ? auditingForm.proofMaterials.split(',') : auditingForm.proofMaterials" :underline="false" :key="item" @click="handleDownload(item)">{{ item.substring(item.lastIndexOf("/") + 1) }}</el-link> |
| | | </el-form-item> |
| | | <el-form-item label="审核结果" prop="auditingResult"> |
| | | <el-radio v-model="auditingForm.auditingResult" label="pass">通过</el-radio> |
| | | <el-radio v-model="auditingForm.auditingResult" label="return">驳回</el-radio> |
| | | <el-radio v-model="auditingForm.auditingResult" label="AUDITING_SUCCESS">通过</el-radio> |
| | | <el-radio v-model="auditingForm.auditingResult" label="AUDITING_FAIL">驳回</el-radio> |
| | | </el-form-item> |
| | | <el-form-item label="审核备注" prop="auditingRemark"> |
| | | <el-input v-model="auditingForm.auditingRemark" type="textarea" maxlength="30" show-word-limit/> |
| | |
| | | </el-dialog> |
| | | |
| | | <el-dialog title="运维情况记录" :visible.sync="ywConditionOpen" width="500px" append-to-body> |
| | | <el-form ref="ywConditionForm" :model="ywConditionForm" :rules="ywConditionRules" label-width="80px"> |
| | | <el-form ref="form" :model="form" :rules="ywConditionRules" label-width="80px"> |
| | | <el-form-item label="工单号" prop="workOrderNo"> |
| | | <el-input v-model="ywConditionForm.workOrderNo" disabled /> |
| | | </el-form-item> |
| | |
| | | <el-form-item label="运维人员" prop="ywPeopleName"> |
| | | <el-input v-model="ywConditionForm.ywPeopleName" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="现场图片" prop="picture"> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="/dev-api/common/upload" |
| | | name="file" |
| | | :headers="{'Authorization': 'Bearer ' + getToken()}" |
| | | :on-success="pictureUploadSuccess" |
| | | :on-remove="pictureRemove" |
| | | :file-list="pictureList" |
| | | list-type="picture"> |
| | | <el-button size="small" type="primary">点击上传</el-button> |
| | | <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> |
| | | </el-upload> |
| | | <el-form-item label="现场情况" prop="ywCondition"> |
| | | <editor v-model="form.ywCondition" :min-height="192"/> |
| | | </el-form-item> |
| | | <el-form-item label="佐证材料" prop="certificates"> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="/dev-api/common/upload" |
| | | name="file" |
| | | :headers="{'Authorization': 'Bearer ' + getToken()}" |
| | | :on-success="certificateUploadSuccess" |
| | | :on-remove="certificateRemove" |
| | | :file-list="certificateList" |
| | | list-type="picture"> |
| | | <el-button size="small" type="primary">点击上传</el-button> |
| | | <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> |
| | | </el-upload> |
| | | </el-form-item> |
| | | <el-form-item label="运维情况" prop="ywCondition"> |
| | | <el-input v-model="ywConditionForm.ywCondition" type="textarea" maxlength="150" show-word-limit/> |
| | | <el-form-item label="佐证材料" prop="ywProofMaterials"> |
| | | <file-upload v-model="form.ywProofMaterials"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | |
| | | </el-dialog> |
| | | |
| | | |
| | | <el-dialog title="运维结果记录" :visible.sync="ywResultOpen" width="500px" append-to-body> |
| | | <el-form ref="ywResultForm" :model="ywResultForm" :rules="ywResultRules" label-width="80px"> |
| | | <el-form-item label="工单号" prop="workOrderNo"> |
| | | <el-input v-model="ywResultForm.workOrderNo" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="运维单位" prop="unitName"> |
| | | <el-input v-model="ywResultForm.unitName" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="运维人员" prop="ywPeopleName"> |
| | | <el-input v-model="ywResultForm.ywPeopleName" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="运维结果" prop="ywResult"> |
| | | <el-input v-model="ywResultForm.ywResult" type="textarea" maxlength="150" show-word-limit/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitYwResult">确 定</el-button> |
| | | <el-button @click="cancelYwResult">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <el-dialog title="运维检测结果" :visible.sync="checkResultOpen" width="550px" append-to-body> |
| | | <el-form ref="ywResultForm" :model="checkResultForm" :rules="checkResultRules" label-width="120px"> |
| | | <el-form-item label="工单号" prop="workOrderNo"> |
| | | <el-input v-model="checkResultForm.workOrderNo" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="运维单位" prop="unitName"> |
| | | <el-input v-model="checkResultForm.unitName" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="运维人员" prop="ywPeopleName"> |
| | | <el-input v-model="checkResultForm.ywPeopleName" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="运维检测结果" prop="ywCheckResult"> |
| | | <file-upload v-model="checkResultForm.ywCheckResult"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitYwResult">确 定</el-button> |
| | | <el-button @click="cancelCheckResult">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 添加或修改运维工单对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="550px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-form-item label="工单号" prop="workOrderNo"> |
| | | <el-input v-model="form.workOrderNo" placeholder="请输入工单号" /> |
| | | </el-form-item> |
| | | <el-form-item label="运维处理时间" prop="ywHandleTime"> |
| | | <el-date-picker clearable |
| | | v-model="form.ywHandleTime" |
| | | type="date" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="请选择运维处理时间"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="运维情况" prop="ywCondition"> |
| | | <el-input v-model="form.ywCondition" type="textarea" placeholder="请输入内容" /> |
| | | </el-form-item> |
| | | <el-form-item label="运维检测结果" prop="ywCheckResult"> |
| | | <el-input v-model="form.ywCheckResult" type="textarea" placeholder="请输入内容" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | |
| | | <!-- 过程图 --> |
| | | <el-dialog title="过程图" :visible.sync="flowOpen" width="1200px" :close-on-click-modal="false" append-to-body> |
| | | <div> |
| | | <el-steps :active="2" :space="500"> |
| | | <el-steps :active="ywAuditingList.length != 0 ? 3 : ywHandleList.length != 0 ? 2 : 1" :space="500"> |
| | | <el-step title="产生工单"> |
| | | <template slot="description"> |
| | | <div> |
| | |
| | | <div class="flow-item-x"> |
| | | 创建时间:{{flowForm.createTime}} |
| | | </div> |
| | | <div class="flow-item-x"> |
| | | 处理期限:<el-tag type="danger" size="small">12小时</el-tag> |
| | | <div class="flow-item-x" v-if="flowForm.processingPeriod"> |
| | | 处理期限:<el-tag type="danger" size="small">{{ flowForm.processingPeriod }}</el-tag> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </el-step> |
| | | <el-step title="运维处理"> |
| | | <template slot="description"> |
| | | <div class="y-item"> |
| | | <div class="y-item" v-for="(item, index) in ywHandleList"> |
| | | <div class="y-item-1"> |
| | | <div class="flow-item-x"> |
| | | 运维状态:<el-tag type="danger" size="small">结果上报</el-tag> |
| | | 现场情况: |
| | | <el-tooltip class="item" effect="dark" :content="item.ywCondition" placement="top"> |
| | | <el-tag size="small" class="line-limit-length">{{ item.ywCondition }}</el-tag> |
| | | </el-tooltip> |
| | | </div> |
| | | <div class="flow-item-x"> |
| | | 运维人员:<el-tag type="danger" size="small">{{flowForm.ywPeopleName}}</el-tag> |
| | | </div> |
| | | <!-- <div class="flow-item-x"> |
| | | <el-tag size="small" v-for="file in item.ywProofMaterials != null ? item.ywProofMaterials.split(',') : item.ywProofMaterials" :key="file" @click="handleDownload(file)">{{ file.substring(file.lastIndexOf("/") + 1) }}</el-tag> |
| | | </div> --> |
| | | </div> |
| | | <div class="y-item-2"> |
| | | <div > |
| | | {{flowForm.ywHandleTime}} |
| | | {{ parseTime(item.createTime) }} |
| | | </div> |
| | | <div > |
| | | 第几次:1 |
| | | 第几次:{{ index + 1 }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="y-item"> |
| | | <div class="y-item-1"> |
| | | <div class="flow-item-x"> |
| | | 运维状态:<el-tag type="danger" size="small">结果上报</el-tag> |
| | | </div> |
| | | <div class="flow-item-x"> |
| | | 运维人员:<el-tag type="danger" size="small">{{flowForm.ywPeopleName}}</el-tag> |
| | | </div> |
| | | </div> |
| | | <div class="y-item-2"> |
| | | <div > |
| | | {{flowForm.ywHandleTime}} |
| | | </div> |
| | | <div > |
| | | 第几次:2 |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </template> |
| | | </el-step> |
| | | <el-step title="结果审核"> |
| | | <template slot="description"> |
| | | <div class="y-item"> |
| | | <div class="y-item" v-for="(item, index) in ywAuditingList"> |
| | | <div class="y-item-1"> |
| | | <div class="flow-item-x"> |
| | | 审核结果:<el-tag type="danger" size="small">驳回</el-tag> |
| | | 审核结果:<el-tag :type="item.result == '审核通过' ? 'success' : 'danger'" size="small">{{ item.result }}</el-tag> |
| | | </div> |
| | | <div class="flow-item-x"> |
| | | 审核说明:<el-tag type="danger" size="small">未成功处理</el-tag> |
| | | 审核说明:<el-tag size="small" v-if="item.remark">{{ item.remark }}</el-tag> |
| | | </div> |
| | | </div> |
| | | <div class="y-item-2"> |
| | | <div > |
| | | {{flowForm.ywHandleTime}} |
| | | {{ parseTime(item.createTime) }} |
| | | </div> |
| | | <div > |
| | | 第几次:1 |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="y-item"> |
| | | <div class="y-item-1"> |
| | | <div class="flow-item-x"> |
| | | 审核状态:<el-tag type="info" size="small">审核中</el-tag> |
| | | </div> |
| | | <div class="flow-item-x"> |
| | | 审核说明: |
| | | </div> |
| | | </div> |
| | | <div class="y-item-2"> |
| | | <div > |
| | | {{flowForm.ywHandleTime}} |
| | | </div> |
| | | <div > |
| | | 第几次:2 |
| | | 第几次:{{ index + 1 }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | } |
| | | </style> |
| | | <script> |
| | | import { listWorkOrder, getWorkOrder, delWorkOrder, addWorkOrder, updateWorkOrder,auditing, ywCondition } from "@/api/platform/work-order"; |
| | | import { listWorkOrder, getWorkOrder, delWorkOrder, addWorkOrder, updateWorkOrder,auditing, ywCondition, getYwCondition, getYwConditionList, getYwAuditingList } from "@/api/platform/work-order"; |
| | | import { addReport } from "@/api/platform/report"; |
| | | export default { |
| | | name: "Work-order", |
| | | components: { |
| | | }, |
| | | data() { |
| | | return { |
| | | ywHandleList: [], |
| | | ywAuditingList: [], |
| | | reportFormRules: { |
| | | reportContent: [ |
| | | { required: true, message: "报备内容不能为空", trigger: "blur" } |
| | |
| | | reportOpen: false, |
| | | reportForm: { |
| | | reportType: "事后报备", |
| | | pointId: "琼于镇3街1号摄像头", |
| | | pointId: "", |
| | | errorType: "", |
| | | reportContent: "", |
| | | reportMaterials: "" |
| | |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | /** 下载按钮操作 */ |
| | | handleDownload (data) { |
| | | this.$download.resource(data); |
| | | }, |
| | | // 报备 |
| | | submitReportForm() { |
| | | this.$refs["reportForm"].validate(valid => { |
| | | if (valid) { |
| | | addReport(this.form).then(response => { |
| | | addReport(this.reportForm).then(response => { |
| | | this.$modal.msgSuccess("成功提交报备"); |
| | | this.open = false; |
| | | this.getList(); |
| | |
| | | // 审核按钮 |
| | | handleAuditing(row) { |
| | | this.auditingForm = row; |
| | | this.auditingOpen = true; |
| | | getYwCondition(row.id).then(response => { |
| | | if (response.data) { |
| | | this.auditingForm.condition = response.data.ywCondition; |
| | | this.auditingForm.proofMaterials = response.data.ywProofMaterials; |
| | | } |
| | | this.auditingOpen = true; |
| | | }); |
| | | }, |
| | | // 运维情况按钮 |
| | | handleYwCondition(row) { |
| | | this.form = {}; |
| | | this.ywConditionForm = row; |
| | | this.ywConditionOpen = true; |
| | | this.form.id = row.id; |
| | | }, |
| | | // 运维结果按钮 |
| | | handleYwResult(row) { |
| | |
| | | }, |
| | | // 过程图查看 |
| | | handleFlow(row) { |
| | | this.flowOpen = true; |
| | | this.flowForm = row; |
| | | getYwAuditingList(row.id).then(response => { |
| | | if (response.data) { |
| | | this.ywAuditingList = response.data; |
| | | } |
| | | }); |
| | | getYwConditionList(row.id).then(response => { |
| | | if (response.data) { |
| | | this.ywHandleList = response.data; |
| | | } |
| | | this.flowOpen = true; |
| | | }); |
| | | }, |
| | | // 提交审核 |
| | | submitAuditing() { |
| | |
| | | auditing(this.auditingForm).then(res => { |
| | | this.auditingOpen = false; |
| | | this.$modal.msgSuccess("操作成功"); |
| | | this.getList(); |
| | | }) |
| | | } |
| | | }) |
| | |
| | | }, |
| | | // 提交运维情况 |
| | | submitYwCondition() { |
| | | this.$refs["ywConditionForm"].validate(valid => { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | ywCondition(this.ywConditionForm).then(res => { |
| | | ywCondition(this.form).then(res => { |
| | | this.ywConditionOpen = false; |
| | | this.$modal.msgSuccess("操作成功"); |
| | | this.getList(); |
| | | }) |
| | | } |
| | | }) |
| | |
| | | getList() { |
| | | this.loading = true; |
| | | this.queryParams.params = {}; |
| | | if (null != this.daterangeYwHandleTime && '' != this.daterangeYwHandleTime) { |
| | | this.queryParams["start"] = this.daterangeYwHandleTime[0]; |
| | | this.queryParams["end"] = this.daterangeYwHandleTime[1]; |
| | | } |
| | | this.queryParams["start"] = this.daterangeYwHandleTime[0]; |
| | | this.queryParams["end"] = this.daterangeYwHandleTime[1]; |
| | | if (this.queryParams["status"] == "") { this.queryParams["status"] = "DISTRIBUTED"; } |
| | | listWorkOrder(this.queryParams).then(response => { |
| | | this.workOrderList = response.data; |
| | | this.total = response.total; |
| | |
| | | height: 150px; |
| | | padding: 10px; |
| | | } |
| | | |
| | | .line-limit-length { |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | width: 200px; |
| | | } |
| | | </style> |