| | |
| | | <template> |
| | | <div class="view"> |
| | | <div class="view-data"> |
| | | <el-form :model="baseCase" label-position="right" ref="viewForm" :rules="Rules" label-width="100px"> |
| | | <div class="data-item"> |
| | | <el-form-item label="问题来源:"> |
| | | <span class="data-detail">{{baseCase.eventSource === 2 ? '人工上报' : '视频巡查'}}</span> |
| | | </el-form-item> |
| | | <el-form-item label="登记人员:"> |
| | | <span class="data-detail">{{baseCase.createUser}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="问题类型:"> |
| | | <span class="data-detail">{{baseCase.category === 1 ? '违规' : '违建'}}</span> |
| | | </el-form-item> |
| | | <el-form-item label="事件等级:"> |
| | | <span class="data-detail">{{baseCase.violations.gradeText}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="大类名称:"> |
| | | <span class="data-detail">{{baseCase.violations.categoryText}}</span> |
| | | </el-form-item> |
| | | <el-form-item label="小类名称:"> |
| | | <span class="data-detail">{{baseCase.violations.categoryText}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="所属区县:"> |
| | | <span class="data-detail"></span> |
| | | </el-form-item> |
| | | <el-form-item label="所属街道:"> |
| | | <span class="data-detail">{{baseCase.streetText}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="所属社区:"> |
| | | <span class="data-detail">{{baseCase.communityText}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="事发地点:"> |
| | | <span class="data-detail">{{baseCase.site}}</span> |
| | | </el-form-item> |
| | | <el-form-item label="车牌号:"> |
| | | <span class="data-detail">{{baseCase.violations.carNumber}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="关联商铺名称:"> |
| | | <span class="data-detail">{{baseCase.violations.shopName}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="问题描述:"> |
| | | <span class="data-detail">{{baseCase.violations.description}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="反映人:"> |
| | | <span class="data-detail">{{baseCase.violations.informant}}</span> |
| | | </el-form-item> |
| | | <el-form-item label="联系方式:"> |
| | | <span class="data-detail">{{baseCase.violations.informantPhoneCode}}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <!-- 审核意见 |
| | | <div class="view"> |
| | | <div class="view-data"> |
| | | <el-form |
| | | :model="baseCase" |
| | | label-position="right" |
| | | ref="viewForm" |
| | | :rules="Rules" |
| | | label-width="100px" |
| | | > |
| | | <div class="data-item"> |
| | | <el-form-item label="问题来源:"> |
| | | <span class="data-detail">{{ |
| | | baseCase.eventSource === 2 ? "人工上报" : "视频巡查" |
| | | }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="登记人员:"> |
| | | <span class="data-detail">{{ baseCase.createUser }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="问题类型:"> |
| | | <span class="data-detail">{{ |
| | | baseCase.category === 1 ? "违规" : "违建" |
| | | }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="事件等级:"> |
| | | <span class="data-detail">{{ baseCase.violations.gradeText }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="大类名称:"> |
| | | <span class="data-detail">{{ |
| | | baseCase.violations.categoryText |
| | | }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="小类名称:"> |
| | | <span class="data-detail">{{ |
| | | baseCase.violations.categoryText |
| | | }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="所属区县:"> |
| | | <span class="data-detail"></span> |
| | | </el-form-item> |
| | | <el-form-item label="所属街道:"> |
| | | <span class="data-detail">{{ baseCase.streetText }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="所属社区:"> |
| | | <span class="data-detail">{{ baseCase.communityText }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="事发地点:"> |
| | | <span class="data-detail">{{ baseCase.site }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="车牌号:"> |
| | | <span class="data-detail">{{ baseCase.violations.carNumber }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="关联商铺名称:"> |
| | | <span class="data-detail">{{ baseCase.violations.shopName }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="问题描述:"> |
| | | <span class="data-detail">{{ |
| | | baseCase.violations.description |
| | | }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="data-item"> |
| | | <el-form-item label="反映人:"> |
| | | <span class="data-detail">{{ baseCase.violations.informant }}</span> |
| | | </el-form-item> |
| | | <el-form-item label="联系方式:"> |
| | | <span class="data-detail">{{ |
| | | baseCase.violations.informantPhoneCode |
| | | }}</span> |
| | | </el-form-item> |
| | | </div> |
| | | <el-form-item label="审核意见" prop="auditOpinion"> |
| | | <span class="data-detail">{{ baseCase.auditOpinion }}</span> |
| | | </el-form-item> |
| | | <!-- 审核意见 |
| | | <el-form-item label="审核意见" prop="auditOpinion"> |
| | | <el-input type="textarea" placeholder="请输入审核意见" v-model="baseCase.auditOpinion"></el-input> |
| | | </el-form-item> |
| | |
| | | <el-button @click.native.prevent="handleSubmit(0)">驳回</el-button> |
| | | <el-button type="primary" @click.native.prevent="handleSubmit(1)">通过</el-button> |
| | | </div> --> |
| | | </el-form> |
| | | </div> |
| | | <div class="view-process"> |
| | | <div class="process-header"> |
| | | <div class="process-title-item" v-for="item in titleList" :key="item.title" |
| | | @click="changeComponent(item.index)"> |
| | | <div :class="['process-title',activeIndex===item.index ? 'title-active' : '' ]">{{item.title}}</div> |
| | | <div :class="['under-line',activeIndex===item.index ? 'line-active' : '' ]"></div> |
| | | </div> |
| | | </div> |
| | | <div class="show-item"> |
| | | <div class="show-wrap"> |
| | | <div class="closure-info" v-if="activeIndex === 0"> |
| | | <el-form :model="baseCase" label-position="right" ref="opinionForm" :rules="Rules" |
| | | label-width="100px"> |
| | | <el-form-item label="审核意见" class="op-item" prop="auditOpinion"> |
| | | <el-input type="textarea" placeholder="请输入审核意见" v-model="baseCase.auditOpinion" disabled> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="结案意见" class="op-item" prop="finalOpinion"> |
| | | <el-input type="textarea" placeholder="请输入结案意见" v-model="baseCase.finalOpinion"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div class="form-footer"> |
| | | <el-button type="primary" @click.native.prevent="handleSubmit">结案</el-button> |
| | | <el-button @click.native.prevent="handleBack">返回</el-button> |
| | | </div> |
| | | </div> |
| | | <MyProcess v-else-if="activeIndex === 1" :handlePassVo="handlePassVo" :baseCase="baseCase"></MyProcess> |
| | | <MyFilePicture v-else-if="activeIndex === 2" :baseCase="baseCase" :filesPictureVo="filesPictureVo"></MyFilePicture> |
| | | <MySovleProblem v-else-if="activeIndex === 3" :handlePassVo="handlePassVo" :baseCase="baseCase"></MySovleProblem> |
| | | <MyScene v-else :baseCase="baseCase" :currentSitVo="currentSitVo"></MyScene> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | <div class="view-process"> |
| | | <div class="process-header"> |
| | | <div |
| | | class="process-title-item" |
| | | v-for="item in titleList" |
| | | :key="item.title" |
| | | @click="changeComponent(item.index)" |
| | | > |
| | | <div |
| | | :class="[ |
| | | 'process-title', |
| | | activeIndex === item.index ? 'title-active' : '', |
| | | ]" |
| | | > |
| | | {{ item.title }} |
| | | </div> |
| | | <div |
| | | :class="[ |
| | | 'under-line', |
| | | activeIndex === item.index ? 'line-active' : '', |
| | | ]" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div class="show-item"> |
| | | <div class="show-wrap"> |
| | | <div class="closure-info" v-if="activeIndex === 0"> |
| | | <el-form |
| | | :model="baseCase" |
| | | label-position="right" |
| | | ref="opinionForm" |
| | | :rules="Rules" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item |
| | | label="审核意见" |
| | | class="op-item" |
| | | prop="auditOpinion" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | placeholder="请输入审核意见" |
| | | v-model="baseCase.auditOpinion" |
| | | disabled |
| | | > |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="结案意见" |
| | | class="op-item" |
| | | prop="finalOpinion" |
| | | > |
| | | <el-input |
| | | type="textarea" |
| | | placeholder="请输入结案意见" |
| | | v-model="baseCase.finalOpinion" |
| | | > |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div class="form-footer"> |
| | | <el-button type="primary" @click.native.prevent="handleSubmit" |
| | | >结案</el-button |
| | | > |
| | | <el-button @click.native.prevent="handleBack">返回</el-button> |
| | | </div> |
| | | </div> |
| | | <MyProcess |
| | | v-else-if="activeIndex === 1" |
| | | :handlePassVo="handlePassVo" |
| | | :baseCase="baseCase" |
| | | ></MyProcess> |
| | | <MyFilePicture |
| | | v-else-if="activeIndex === 2" |
| | | :baseCase="baseCase" |
| | | :filesPictureVo="filesPictureVo" |
| | | ></MyFilePicture> |
| | | <MySovleProblem |
| | | v-else-if="activeIndex === 3" |
| | | :handlePassVo="handlePassVo" |
| | | :baseCase="baseCase" |
| | | ></MySovleProblem> |
| | | <MyScene |
| | | v-else |
| | | :baseCase="baseCase" |
| | | :currentSitVo="currentSitVo" |
| | | ></MyScene> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import MyProcess from '@/components/process' |
| | | import MyFilePicture from '@/components/filePictrue' |
| | | import MySovleProblem from '@/components/solveProblem' |
| | | import MyScene from '@/components/scene' |
| | | import MyProcess from "@/components/process"; |
| | | import MyFilePicture from "@/components/filePictrue"; |
| | | import MySovleProblem from "@/components/solveProblem"; |
| | | import MyScene from "@/components/scene"; |
| | | export default { |
| | | components: { |
| | | MyProcess, MyFilePicture, MySovleProblem, MyScene |
| | | }, |
| | | data() { |
| | | const checkOpinion = (rule, value, callback) => { |
| | | if (value) { |
| | | callback(); |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | const checkFinal = (rule, value, callback) => { |
| | | if (value) { |
| | | callback(); |
| | | } else { |
| | | callback(new Error('结案意见不能为空')) |
| | | } |
| | | } |
| | | return { |
| | | myInfo: { |
| | | |
| | | }, |
| | | activeIndex: 0, |
| | | titleList: [ |
| | | { |
| | | title: '结案信息', |
| | | index: 0, |
| | | }, |
| | | { |
| | | title: '办理经过', |
| | | index: 1, |
| | | }, |
| | | { |
| | | title: '案卷图片', |
| | | index: 2, |
| | | }, |
| | | { |
| | | title: '问题处理', |
| | | index: 3, |
| | | }, |
| | | { |
| | | title: '现场情况', |
| | | index: 4, |
| | | }, |
| | | ], |
| | | Rules: { |
| | | auditOpinion: [ |
| | | { trigger: 'blur', validator: checkOpinion } |
| | | ], |
| | | finalOpinion:[ |
| | | { |
| | | trigger:'blur',validator:checkFinal |
| | | } |
| | | ] |
| | | |
| | | }, |
| | | baseCase: {}, |
| | | handlePassVo: {}, |
| | | currentSitVo: {}, |
| | | problemProVo: {}, |
| | | filesPictureVo: {} |
| | | |
| | | } |
| | | }, |
| | | created() { |
| | | const { info } = this; |
| | | this.baseCase = info.baseCase; |
| | | this.handlePassVo = info.handlePassVo; |
| | | this.currentSitVo = info.currentSitVo; |
| | | this.problemProVo = info.problemProVo; |
| | | this.filesPictureVo = info.filesPictureVo; |
| | | }, |
| | | methods: { |
| | | changeComponent(index) { |
| | | this.activeIndex = index; |
| | | components: { |
| | | MyProcess, |
| | | MyFilePicture, |
| | | MySovleProblem, |
| | | MyScene, |
| | | }, |
| | | data() { |
| | | const checkOpinion = (rule, value, callback) => { |
| | | if (value) { |
| | | callback(); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | const checkFinal = (rule, value, callback) => { |
| | | if (value) { |
| | | callback(); |
| | | } else { |
| | | callback(new Error("结案意见不能为空")); |
| | | } |
| | | }; |
| | | return { |
| | | myInfo: {}, |
| | | activeIndex: 0, |
| | | titleList: [ |
| | | { |
| | | title: "结案信息", |
| | | index: 0, |
| | | }, |
| | | handleBack(){ |
| | | this.$emit('closeDialog', { flag: false }); |
| | | { |
| | | title: "办理经过", |
| | | index: 1, |
| | | }, |
| | | // 提交审核意见 |
| | | handleSubmit() { |
| | | const { baseCase } = this; |
| | | this.$refs.opinionForm.validate((valid) => { |
| | | if (valid) { |
| | | this.$axios({ |
| | | method: 'put', |
| | | url: 'sccg/base_case/end_case?caseId='+baseCase.id +'&opinion='+baseCase.finalOpinion +'&result='+'结案成功', |
| | | }) |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '结案成功' |
| | | }) |
| | | this.$emit('closeDialog', { flag: false }); |
| | | }else{ |
| | | this.$message({ |
| | | type:'error', |
| | | message:'结案失败', |
| | | }) |
| | | } |
| | | |
| | | }) |
| | | .catch(err => { console.log(err) }); |
| | | } else { |
| | | return false; |
| | | } |
| | | { |
| | | title: "案卷图片", |
| | | index: 2, |
| | | }, |
| | | { |
| | | title: "问题处理", |
| | | index: 3, |
| | | }, |
| | | { |
| | | title: "现场情况", |
| | | index: 4, |
| | | }, |
| | | ], |
| | | Rules: { |
| | | auditOpinion: [{ trigger: "blur", validator: checkOpinion }], |
| | | finalOpinion: [ |
| | | { |
| | | trigger: "blur", |
| | | validator: checkFinal, |
| | | }, |
| | | ], |
| | | }, |
| | | baseCase: {}, |
| | | handlePassVo: {}, |
| | | currentSitVo: {}, |
| | | problemProVo: {}, |
| | | filesPictureVo: {}, |
| | | }; |
| | | }, |
| | | created() { |
| | | const { info } = this; |
| | | this.baseCase = info.baseCase; |
| | | this.handlePassVo = info.handlePassVo; |
| | | this.currentSitVo = info.currentSitVo; |
| | | this.problemProVo = info.problemProVo; |
| | | this.filesPictureVo = info.filesPictureVo; |
| | | }, |
| | | methods: { |
| | | changeComponent(index) { |
| | | this.activeIndex = index; |
| | | }, |
| | | handleBack() { |
| | | this.$emit("closeDialog", { flag: false }); |
| | | }, |
| | | // 提交审核意见 |
| | | handleSubmit() { |
| | | const { baseCase } = this; |
| | | this.$refs.opinionForm.validate((valid) => { |
| | | if (valid) { |
| | | this.$axios({ |
| | | method: "put", |
| | | url: |
| | | "sccg/base_case/end_case?caseId=" + |
| | | baseCase.id + |
| | | "&opinion=" + |
| | | baseCase.finalOpinion + |
| | | "&result=" + |
| | | "结案成功", |
| | | }) |
| | | .then((res) => { |
| | | if (res.code === 200) { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "结案成功", |
| | | }); |
| | | this.$emit("closeDialog", { flag: false }); |
| | | } else { |
| | | this.$message({ |
| | | type: "error", |
| | | message: "结案失败", |
| | | }); |
| | | } |
| | | }) |
| | | }, |
| | | // 获取当前用户登录信息 |
| | | getUserLoginInfo() { |
| | | // 获取登录名; |
| | | const username = sessionStorage.getItem('name'); |
| | | this.$axios({ |
| | | method: 'get', |
| | | url: 'sccg/admin/info', |
| | | data: { |
| | | name: 'username' |
| | | } |
| | | }) |
| | | .then(res => { |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | } else { |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | props: ['info', 'closeDialog'] |
| | | } |
| | | // 获取当前用户登录信息 |
| | | getUserLoginInfo() { |
| | | // 获取登录名; |
| | | const username = sessionStorage.getItem("name"); |
| | | this.$axios({ |
| | | method: "get", |
| | | url: "sccg/admin/info", |
| | | data: { |
| | | name: "username", |
| | | }, |
| | | }).then((res) => {}); |
| | | }, |
| | | }, |
| | | props: ["info", "closeDialog"], |
| | | }; |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .view { |
| | | display: flex; |
| | | display: flex; |
| | | padding: 20px; |
| | | |
| | | .view-data { |
| | | color: #4b9bb7; |
| | | flex: 4; |
| | | padding: 20px; |
| | | |
| | | .view-data { |
| | | color: #4b9bb7; |
| | | flex: 4; |
| | | padding: 20px; |
| | | |
| | | .data-item { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | :deep(.el-form-item__label) { |
| | | color: #4b9bb7; |
| | | } |
| | | |
| | | :deep(.el-textarea__inner) { |
| | | background-color: #17324c; |
| | | color: #4b9bb7; |
| | | } |
| | | |
| | | .el-form-footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | border: 1px solid #17324c; |
| | | .data-item { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | line-height: 40px; |
| | | } |
| | | :deep(.el-textarea__inner){ |
| | | background-color: #17324c; |
| | | color: #4b9bb7; |
| | | |
| | | :deep(.el-form-item__label) { |
| | | color: #4b9bb7; |
| | | } |
| | | .closure-info{ |
| | | padding: 20px; |
| | | .op-item{ |
| | | padding-top: 20px; |
| | | } |
| | | .form-footer{ |
| | | display: flex; |
| | | margin-top: 50px; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | :deep(.el-textarea__inner) { |
| | | background-color: #17324c; |
| | | color: #4b9bb7; |
| | | } |
| | | .view-process { |
| | | flex: 6; |
| | | margin-left: 20px; |
| | | |
| | | .process-header { |
| | | display: flex; |
| | | line-height: 40px; |
| | | |
| | | .process-title-item { |
| | | width: 120px; |
| | | text-align: center; |
| | | |
| | | .under-line { |
| | | height: 2px; |
| | | width: 100%; |
| | | } |
| | | |
| | | .title-active { |
| | | color: #4b9bb7; |
| | | } |
| | | |
| | | .line-active { |
| | | background-color: #4b9bb7; |
| | | border-radius: 20px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .show-item { |
| | | overflow: hidden; |
| | | height: 600px; |
| | | position: relative; |
| | | |
| | | .show-wrap { |
| | | overflow: scroll; |
| | | height: 600px; |
| | | } |
| | | } |
| | | .el-form-footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | border: 1px solid #17324c; |
| | | } |
| | | :deep(.el-textarea__inner) { |
| | | background-color: #17324c; |
| | | color: #4b9bb7; |
| | | } |
| | | .closure-info { |
| | | padding: 20px; |
| | | .op-item { |
| | | padding-top: 20px; |
| | | } |
| | | .form-footer { |
| | | display: flex; |
| | | margin-top: 50px; |
| | | justify-content: flex-end; |
| | | } |
| | | } |
| | | .view-process { |
| | | flex: 6; |
| | | margin-left: 20px; |
| | | |
| | | .process-header { |
| | | display: flex; |
| | | line-height: 40px; |
| | | |
| | | .process-title-item { |
| | | width: 120px; |
| | | text-align: center; |
| | | |
| | | .under-line { |
| | | height: 2px; |
| | | width: 100%; |
| | | } |
| | | |
| | | .title-active { |
| | | color: #4b9bb7; |
| | | } |
| | | |
| | | .line-active { |
| | | background-color: #4b9bb7; |
| | | border-radius: 20px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .show-item { |
| | | overflow: hidden; |
| | | height: 600px; |
| | | position: relative; |
| | | |
| | | .show-wrap { |
| | | overflow: scroll; |
| | | height: 600px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |