luobisheng
2022-11-29 15de314310f14ebd37b820c99a7da81bbbd1cdfd
src/views/operate/management/myIndex/components/closure/index.vue
@@ -1,71 +1,92 @@
<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>
@@ -73,262 +94,321 @@
                    <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>