| | |
| | | <el-col :span="24" style="position: relative"> |
| | | <el-menu :default-active="activeIndex" class="el-menu" mode="horizontal" @select="handleSelect"> |
| | | <el-menu-item index="0" @click="changeUnit(null, '全部')"> |
| | | 全部单位(430) |
| | | 全部单位({{ totalWorkOrders }}) |
| | | </el-menu-item> |
| | | <el-menu-item index="1"> |
| | | 自流井运维单位(70) |
| | | <el-menu-item :index="index + 1" v-for="(item, index) in unitList" :key="index" @click="changeUnit(item.id, item.value)"> |
| | | {{ item.unitName }}({{ item.workOrderCount }}) |
| | | </el-menu-item> |
| | | <el-menu-item index="2"> |
| | | 大安运维(50) |
| | | </el-menu-item> |
| | | <el-menu-item index="3">富顺运维单位(70)</el-menu-item> |
| | | <el-menu-item index="4">高新运维单位(15)</el-menu-item> |
| | | <el-menu-item index="5">荣县运维单位(90)</el-menu-item> |
| | | <el-menu-item index="6">贡井运维单位(45)</el-menu-item> |
| | | <el-menu-item index="7">沿滩运维单位(70)</el-menu-item> |
| | | </el-menu> |
| | | <el-popover |
| | | placement="right" |
| | | width="400" |
| | | trigger="click"> |
| | | <el-form :model="settingForm" :rules="settingRules" ref="settingForm" label-width="120px"> |
| | | <el-form-item label="录像质量" prop="videoQuality"> |
| | | <el-select style="width: 100%" v-model="settingForm.videoQuality" placeholder="最低录像质量"> |
| | | <el-option label="全录像" value="全录像"/> |
| | | <el-option label="部分录像" value="部分录像"/> |
| | | <el-option label="无录像" value="无录像"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="点位离线时长" prop="outLine"> |
| | | <el-input type="number" v-model="settingForm.outLine" placeholder="不能超过多久"> |
| | | <template slot="append">分钟</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="视频标注准确率" prop="videoLabel"> |
| | | <el-input type="number" v-model="settingForm.videoLabel" placeholder="最低准确率"> |
| | | <template slot="append">%</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="submitSetting">保存</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-button title="自动生成工单设置" slot="reference" class="setting" style="" type="success" icon="el-icon-s-tools" circle></el-button> |
| | | </el-popover> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row class="op-warp" type="flex" justify="left" > |
| | | <el-col :span="24"> |
| | | <el-button size="small" type="info" @click="selectedDistribute" class="op">下发选中工单</el-button> |
| | | <el-row class="op-warp"> |
| | | <el-row v-show="showSearch"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> |
| | | <el-form-item label="关键词" prop="keyword"> |
| | | <el-input |
| | | v-model="queryParams.keyword" |
| | | placeholder="关键词搜索" |
| | | clearable |
| | | @keyup.enter.native="page" |
| | | @clear="page" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="故障类型" prop="errorTypeList"> |
| | | <el-select v-model="queryParams.errorTypeList" multiple placeholder="故障类型" clearable @change="page" @clear="page"> |
| | | <el-option v-for="dict in dict.type.error_type" |
| | | :value="dict.value" |
| | | :label="dict.label"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="下发状态" prop="status"> |
| | | <el-select v-model="queryParams.status" @change="page" placeholder="下发状态" clearable> |
| | | <el-option label="未下发" value="WAIT_DISTRIBUTE"/> |
| | | <el-option label="已下发" value="DISTRIBUTED"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="small" @click="page">搜索</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <el-button size="mini" plain type="info" @click="selectedDistribute" class="op">下发选中工单</el-button> |
| | | <el-popconfirm |
| | | @confirm="allDistribute" |
| | | title="确定要下发所有工单吗?" |
| | | > |
| | | <el-button size="small" type="danger" class="op" slot="reference">全部下发</el-button> |
| | | <el-button size="mini" plain type="danger" class="op" slot="reference">全部下发</el-button> |
| | | </el-popconfirm> |
| | | |
| | | <el-popover |
| | |
| | | <span style="font-weight: bold;font-size: 16px">快捷下发</span> |
| | | <el-form ref="fastDistributeForm" :model="fastDistributeForm" :rules="fastDistributeRules" label-width="80px"> |
| | | <el-form-item label="快捷方式" prop="fastWay"> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="0">最近30分钟</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="01">最近1小时</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="10">最近2小时</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="11">最近1天</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="101">自定义</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="LAST_HALF_HOUR">最近30分钟</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="LAST_HOUR">最近1小时</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="LAST_TWO_HOUR">最近2小时</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="LAST_DAY">最近1天</el-radio> |
| | | <el-radio v-model="fastDistributeForm.fastWay" label="CUSTOM">自定义</el-radio> |
| | | </el-form-item> |
| | | <el-form-item v-if="fastDistributeForm.fastWay === '101'" label="时间范围"> |
| | | <el-form-item v-if="fastDistributeForm.fastWay === 'CUSTOM'" label="时间范围"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="fastTimeRange" |
| | | type="datetimerange" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | end-placeholder="结束日期"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="故障类型" prop="errorType"> |
| | | <el-select v-model="fastDistributeForm.errorType" multiple> |
| | | <el-option v-for="dict in dict.type.error_type" |
| | | :value="dict.value" |
| | | :key="dict.value" |
| | | :label="dict.label"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="数量限制" prop="fastNumLimit"> |
| | | <el-input v-model="fastDistributeForm.fastNumLimit" size="small" type="number" placeholder="此次工单下发最大数量"></el-input> |
| | | <el-input v-model="fastDistributeForm.fastNumLimit" type="number" placeholder="此次工单下发最大数量"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" size="small" @click="fastDistribute">立即下发</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-button slot="reference" type="primary" size="small">快捷下发</el-button> |
| | | <el-button slot="reference" type="primary" size="mini" plain>快捷下发</el-button> |
| | | </el-popover> |
| | | <el-button size="small" type="primary" @click="page" class="op">刷新</el-button> |
| | | </el-col> |
| | | <el-button size="mini" plain type="success" @click="handleAdd">手动新增工单</el-button> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="page"></right-toolbar> |
| | | </el-row> |
| | | </el-row> |
| | | |
| | | <el-row class="content-warp" type="flex" justify="left"> |
| | |
| | | <el-table v-loading="loading" :data="workOrderList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="工单号" align="center" prop="workOrderNo"/> |
| | | <el-table-column label="运维单位" align="center" prop="unitName"/> |
| | | <el-table-column label="工单来源" align="center" prop="source"/> |
| | | <el-table-column label="故障点位" align="center" prop="source"> |
| | | <template slot-scope="scope"> |
| | | <el-popover |
| | | placement="right" |
| | | :title="scope.row.important ? '重点点位': '正常点位'" |
| | | width="200" |
| | | trigger="hover"> |
| | | <span :class="{important: scope.row.important}" slot="reference">{{ scope.row.source }}</span> |
| | | </el-popover> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="故障类型" align="center" prop="errorType"/> |
| | | <el-table-column label="运维单位" align="center" prop="unitName"/> |
| | | <el-table-column label="产生时间" align="center" prop="createTime"/> |
| | | <el-table-column v-if="queryParams.status === 'DISTRIBUTED'" label="下发人" align="center" prop="realName"/> |
| | | <el-table-column v-if="queryParams.status === 'DISTRIBUTED'" label="下发时间" align="center" prop="distributeTime"/> |
| | | </el-table> |
| | | |
| | | <pagination |
| | |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | |
| | | <!-- 添加或修改【请填写功能名称】对话框 --> |
| | | <el-dialog :title="detailName" :visible.sync="open" width="500px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-form-item label="运维单位" prop="unitId"> |
| | | <el-select v-model="form.unitId" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | | :key="item.id" |
| | | :label="item.unitName" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="工单来源" prop="source"> |
| | | <el-select |
| | | v-model="form.source" |
| | | filterable |
| | | remote |
| | | reserve-keyword |
| | | placeholder="请选择来源" |
| | | :remote-method="remoteGetPoints" |
| | | @change="setPointId" |
| | | :loading="selectLoading"> |
| | | <el-option |
| | | v-for="item in pointList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="故障类型" prop="errorType"> |
| | | <el-select v-model="form.errorType" multiple> |
| | | <el-option v-for="dict in dict.type.error_type" |
| | | :value="dict.value" |
| | | :key="dict.value" |
| | | :label="dict.label"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import {distributeWorkOrder, fastDistribute} from '@/api/platform/work-order' |
| | | import {distributeWorkOrder, fastDistribute, addWorkOrder, updateWorkOrder, selectedIdsDistribute} from '@/api/platform/work-order' |
| | | import {workList} from "@/api/platform/unit"; |
| | | import { pointSelectData } from "@/api/platform/point"; |
| | | export default { |
| | | dicts: ['error_type'], |
| | | name: 'index', |
| | | data() { |
| | | return { |
| | | showSearch: true, |
| | | selectedIdsDistributeForm: { |
| | | ids: [], |
| | | unitId: null |
| | | }, |
| | | unitList: [], |
| | | settingForm: { |
| | | // 离线 |
| | | outLine: null, |
| | |
| | | // 下发表单验证 |
| | | fastDistributeRules: { |
| | | fastWay: [ |
| | | { required: true, message: "请选择快速分发方式", trigger: "change" } |
| | | { required: true, message: "请选择快速分发方式", trigger: "blur" } |
| | | ], |
| | | fastNumLimit: [ |
| | | { required: true, message: "请输入快速分发数量限制", trigger: "change" } |
| | | { required: true, message: "请输入快速分发数量限制", trigger: "blur" } |
| | | ], |
| | | errorType: [ |
| | | { required: true, message: "请故障类型", trigger: "blur" } |
| | | ], |
| | | }, |
| | | queryParams: { |
| | | unitId: null, |
| | | keyword: '', |
| | | status: 'WAIT_DISTRIBUTE', |
| | | pageNum: 1, |
| | | pageSize: 20, |
| | | pageSize: 10, |
| | | }, |
| | | // 总条数 |
| | | total: 0, |
| | |
| | | activeIndex: '0', |
| | | loading: false, |
| | | workOrderList: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 表单参数 |
| | | form: { |
| | | }, |
| | | // 下拉加载 |
| | | selectLoading: false, |
| | | // 点位list |
| | | pointList: [], |
| | | // 表单校验 |
| | | rules: { |
| | | source: [ |
| | | { required: true, message: "工单来源不能为空", trigger: "blur" } |
| | | ], |
| | | workOrderNo: [ |
| | | { required: true, message: "工单号不能为空", trigger: "blur" } |
| | | ], |
| | | unitId: [ |
| | | { required: true, message: "运维单位不能为空", trigger: "blur" } |
| | | ], |
| | | errorType: [ |
| | | { required: true, message: "请选择故障类型", trigger: "blur" } |
| | | ], |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.page(); |
| | | }, |
| | | computed: { |
| | | totalWorkOrders() { |
| | | return this.unitList.reduce((total, item) => total + item.workOrderCount, 0); |
| | | }, |
| | | }, |
| | | methods: { |
| | | setPointId(selectedValue) { |
| | | const selectedItem = this.pointList.find(item => item.value === selectedValue); |
| | | this.form.serialNumber = selectedItem.id |
| | | }, |
| | | submitSetting() { |
| | | this.$refs['settingForm'].validate((valid) => { |
| | | if (valid) { |
| | |
| | | }, |
| | | page() { |
| | | this.loading = true; |
| | | this.selectUnit(); |
| | | distributeWorkOrder(this.queryParams).then(res => { |
| | | this.workOrderList = res.data; |
| | | this.workOrderList = res.data.records; |
| | | this.total = res.total; |
| | | this.loading = false; |
| | | }) |
| | |
| | | this.fastDistributeForm.end = null |
| | | this.fastDistributeForm.fastNumLimit = null |
| | | this.fastTimeRange = [] |
| | | this.fastDistributeForm.errorType = null |
| | | }, |
| | | // 全部下发 |
| | | allDistribute() { |
| | | this.fastDistribute(); |
| | | this.selectedIdsDistributeForm.unitId = this.unitId |
| | | selectedIdsDistribute(this.selectedIdsDistributeForm).then(res => { |
| | | this.$message.success("工单下发成功") |
| | | this.page(); |
| | | }) |
| | | }, |
| | | // 快速下发 |
| | | fastDistribute() { |
| | | // this.$refs['fastDistributeForm'].validate((valid) => { |
| | | // if (valid) { |
| | | // 如果是自定义方式,那么时间段必填 |
| | | if (this.fastDistributeForm.fastWay === '101' && !this.fastTimeRange.length > 0) { |
| | | this.$message.warning("请选择时间范围") |
| | | return false |
| | | } |
| | | if (this.fastTimeRange.length > 0) { |
| | | this.fastDistributeForm.start = this.fastTimeRange[0] |
| | | this.fastDistributeForm.end = this.fastTimeRange[1] |
| | | } |
| | | this.$refs['fastDistributeForm'].validate((valid) => { |
| | | if (valid) { |
| | | this.fastDistributeForm.start = this.fastTimeRange[0] |
| | | this.fastDistributeForm.end = this.fastTimeRange[1] |
| | | this.fastDistributeForm.unitId = this.unitId |
| | | fastDistribute(this.fastDistributeForm).then(res => { |
| | | // this.clearFastDistributeForm(); |
| | | res.code == 200 ? this.$message.success(res.msg) : this.$message.warning(res.msg) |
| | | this.clearFastDistributeForm(); |
| | | this.page(); |
| | | }) |
| | | // } else { |
| | | // return false |
| | | // } |
| | | // }) |
| | | } |
| | | }) |
| | | }, |
| | | // 选中工单下发 |
| | | selectedDistribute() { |
| | |
| | | this.$message.warning("请先选择要下发的工单") |
| | | return |
| | | } |
| | | this.fastDistribute(); |
| | | this.selectedIdsDistributeForm.unitId = this.unitId; |
| | | this.selectedIdsDistributeForm.ids = this.multipleSelection; |
| | | selectedIdsDistribute(this.selectedIdsDistributeForm).then(res => { |
| | | this.$message.success("工单下发成功") |
| | | this.selectedIdsDistributeForm.ids = []; |
| | | this.page(); |
| | | }) |
| | | }, |
| | | handleSelect(key, keyPath) { |
| | | console.log(key, keyPath); |
| | |
| | | handleSelectionChange(selection) { |
| | | this.multipleSelection = selection.map(item => item.id) |
| | | }, |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加合同"; |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | | this.form = {}; |
| | | this.resetForm("form"); |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | if (this.form.id != null) { |
| | | updateWorkOrder(this.form).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.page(); |
| | | }); |
| | | } else { |
| | | addWorkOrder(this.form).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.page(); |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | // 运维公司下拉数据 |
| | | selectUnit() { |
| | | workList().then(res => { |
| | | this.unitList = res.data; |
| | | }) |
| | | }, |
| | | // 远程搜索点位 |
| | | remoteGetPoints(query) { |
| | | if (query !== '') { |
| | | this.selectLoading = true; |
| | | let data = { |
| | | "keyword": query |
| | | } |
| | | pointSelectData(data).then(res => { |
| | | this.pointList = res.data; |
| | | this.selectLoading = false; |
| | | }) |
| | | } else { |
| | | this.pointList = []; |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .important { |
| | | color: red; |
| | | } |
| | | /deep/ .el-popover__title { |
| | | margin-bottom: 0px; |
| | | } |
| | | .row { |
| | | padding: 0 20px; |
| | | } |