shuishen
2024-01-18 7cc2cf7be54f1a6303a49e9a81dd26d5a96d2322
Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/jczz_web
5 files modified
1 files added
1082 ■■■■■ changed files
src/api/answerRecord/answerRecord.js 49 ●●●●● patch | view | raw | blame | history
src/views/property/components/propertyEdit.vue 92 ●●●● patch | view | raw | blame | history
src/views/property/propertyCompany.vue 8 ●●●● patch | view | raw | blame | history
src/views/propertySupervision/houseHoldSupervision.vue 92 ●●●●● patch | view | raw | blame | history
src/views/propertySupervision/residentSupervision.vue 102 ●●●●● patch | view | raw | blame | history
src/views/work/process/maintenanceFundApply/handle.vue 739 ●●●● patch | view | raw | blame | history
src/api/answerRecord/answerRecord.js
New file
@@ -0,0 +1,49 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-answerRecord/answerRecord/list',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/blade-answerRecord/answerRecord/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/blade-answerRecord/answerRecord/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const save = (row) => {
  return request({
    url: '/api/blade-answerRecord/answerRecord/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/blade-answerRecord/answerRecord/submit',
    method: 'post',
    data: row
  })
}
src/views/property/components/propertyEdit.vue
@@ -1,6 +1,6 @@
<template>
  <el-dialog title="" append-to-body :visible.sync="infoVisible" top="10vh" width="70%">
  <el-dialog title="" append-to-body :visible.sync="infoVisible" top="10vh" width="70%" :before-close="handleClose">
    <el-tabs v-model="activeName" @tab-click="handleClick">
      <!-- <el-tab-pane label="物业信息" name="first"></el-tab-pane> -->
      <el-tab-pane label="基础信息" name="info1"></el-tab-pane>
@@ -22,28 +22,37 @@
        <div>
          {{index+1}} .{{ item.subjectName }}
        </div>
        <div v-for="(item1, index1) in item.subjectOptionList" :key="index1">
          <!-- <div>
        <!-- <div v-for="(item1, index1) in item.subjectOptionList" :key="index1"> -->
        <!-- <div>
            {{ item1.optionName }}
          </div> -->
          <el-radio-group v-model="item1.ids" v-if="item.choicesType == 0">
            <el-radio :label="item1.id">{{item1.optionName}}</el-radio>
          </el-radio-group>
        <!-- <el-radio-group v-model="item.ids" v-if="item.choicesType == 0"> -->
          <div v-if="item.choicesType == 3">
            <div>{{item1.optionName}}</div>
        <div v-if="item.choicesType == 0">
          <div v-for="(item1, index1) in item.subjectOptionList" :key="index1">
            <el-radio v-model="item1.ids" :label="item1.id">{{item1.optionName}}-----------{{item1.score}}</el-radio>
          </div>
        </div>
        <!-- </el-radio-group> -->
        <div v-if="item.choicesType == 3">
          <!-- <div>{{item1.optionName}}</div> -->
          <div v-for="(item1, index1) in item.subjectOptionList" :key="index1">
            <el-input-number v-model="item1.numbers" @change="handleChange" :min="0" :max="25"
              :label="item1.optionName"></el-input-number>
            <!-- <el-input v-model="item1.numbers" type="number" :placeholder="item1.optionName"></el-input> -->
          </div>
          <!-- <el-input v-model="item1.numbers" type="number" :placeholder="item1.optionName"></el-input> -->
        </div>
        <!-- </div> -->
      </div>
    </div>
    <div slot="footer" class="dialog-footer">
      <el-button @click="payInfoVisible = false">取 消</el-button>
      <el-button @click="infoVisible = false">取 消</el-button>
      <el-button type="primary" @click="submit">提 交</el-button>
    </div>
@@ -56,6 +65,10 @@
    getList,
    remove
  } from "@/api/subjectChoices/subjectChoices";
  import {
    save
  } from "@/api/answerRecord/answerRecord";
  import {
    add
  } from "@/api/property/propertyCompany"
@@ -65,6 +78,7 @@
  export default {
    data() {
      return {
        property: {},
        activeName: 'info1',
        infoVisible: false,
        page: {
@@ -196,6 +210,29 @@
      ...mapGetters(["permission", "userInfo"]),
    },
    methods: {
      handleClose() {
        this.infoVisible = false
        // this.$refs.DisCussFrom && this.$refs.DisCussFrom.resetForm()
      },
      submit() {
        console.log("============>", this.questionBankData)
        save(this.questionBankData).then(
          () => {
            // this.onLoad(this.page)
            this.$message({
              type: "success",
              message: "操作成功!",
            })
            done()
          },
          (error) => {
            window.console.log(error)
            loading()
          }
        )
      },
      handleChange(value) {
        console.log(value);
      },
@@ -230,7 +267,9 @@
          const data = res.data.data;
          this.page.total = data.total;
          this.questionBankData = data.records;
          // this.questionBankLoading = false;
          this.questionBankData.forEach(item => {
            item.propertyId = this.property.id
          })
        });
      },
@@ -239,25 +278,26 @@
        let param = {
          subclassName: '基础信息'
        }
        this.property = row
        this.questionBankOnLoad(this.page, param)
      },
      handleClick(tab, event) {
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
          })
          .then(() => {
            return remove(row.id)
          })
          .then(() => {
            this.onLoad(this.page)
            this.$message({
              type: "success",
              message: "操作成功!",
            })
          })
        // this.$confirm("确定将选择数据删除?", {
        //     confirmButtonText: "确定",
        //     cancelButtonText: "取消",
        //     type: "warning",
        //   })
        //   .then(() => {
        //     return remove(row.id)
        //   })
        //   .then(() => {
        //     this.onLoad(this.page)
        //     this.$message({
        //       type: "success",
        //       message: "操作成功!",
        //     })
        //   })
        // console.log(tab, event);
        console.log('============>', JSON.stringify(this.questionBankData))
        let param = {
src/views/property/propertyCompany.vue
@@ -18,8 +18,8 @@
          @click="openPayConfig(row)">商户配置
        </el-button>
        <!-- <el-button :size="size" icon="el-icon-circle-plus-outline" type="text" @click="addProperty()">物业评定
        </el-button> -->
        <el-button :size="size" icon="el-icon-circle-plus-outline" type="text" @click="addProperty(row)">物业评定
        </el-button>
      </template>
    </avue-crud>
@@ -350,8 +350,8 @@
    methods: {
      addProperty() {
        this.$refs.propertyEdit.init();
      addProperty(row) {
        this.$refs.propertyEdit.init(row);
      },
      aliSubmit(form, done) {
src/views/propertySupervision/houseHoldSupervision.vue
@@ -24,7 +24,13 @@
              @click="manageLabel(row)">标签
            </el-button>
          </template> -->
          <template  slot="menuLeft">
            <div  class="echarts-wrap">
                <div  class="echarts-item"   id="echarts"></div>
            </div>
          </template>
          <template slot-scope="{row, size}" slot="phone">
@@ -130,6 +136,11 @@
  import func from "@/util/func"
  // import householdManager from "./components/householdManager"
  import Qs from "qs"
  import * as echarts from 'echarts';
  import {
    getTreeList
} from '@/api/label/label'
  export default {
    components: {
      // householdManager
@@ -476,7 +487,8 @@
              formslot: true,
              span: 24,
            }
          ]
          ],
          labelCountList:[]
        }
      }
    },
@@ -512,7 +524,9 @@
        }
      }
    },
    mounted() {},
    mounted() {
      this.getLabelCount()
    },
    methods: {
      onsubmit() {
@@ -795,7 +809,72 @@
      },
      showStringDispose(row, type) {
        row[type] = !row[type]
      },
      getLabelCount(){
        getTreeList().then(res => {
            const data = res.data.data
            let list = data[1].children;
            this.labelCountList = list;
            this.$nextTick(()=>{
              this.setEchartsOption(list)
            })
        })
      },
      setEchartsOption(data){
        let  option = {
                  // title: {
                  //     text:"房屋",
                  //     left: 'center',
                  //     top:20,
                  // },
                  tooltip: {
                      trigger: 'item'
                  },
                 legend: {
                  orient: 'horizontal',
          left: 'right',
          top: 'bottom',
                  },
      //             labelLine: {
      //   length: 15,
      //   length2: 0,
      //   maxSurfaceAngle: 80
      // },
                series: [
                      {
                    type: 'pie',
                    radius: '50%',
                    data: [],
                    emphasis: {
                      itemStyle: {
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                      }
                   }
                 }
               ]
           };
          let myEchart = document.getElementById('echarts'); //获取类名
          let myCharts =  echarts.init(myEchart);
         for(let i = 0,ii = data.length;i<ii;i++){
            option.series[0].data.push({
              name:data[i].name,
              value:data[i].count,
              id:data[i].id
            });
            option && myCharts.setOption(option);
            myCharts.on('click',(params)=>{
                     console.log(params)
                     this.query.labelId = params.data.id;
                this.onLoad(this.page, this.query)
            })
         }
      }
    }
  }
</script>
@@ -812,4 +891,13 @@
  .box .el-scrollbar__wrap {
    overflow: scroll;
  }
  .echarts-wrap{
    display: flex;
    padding:0 30px;
    justify-content: center
  }
  .echarts-item{
    width:100%;
    height:300px;
  }
</style>
src/views/propertySupervision/residentSupervision.vue
@@ -2,12 +2,21 @@
  <el-row>
    <el-col :span="24">
      <basic-container>
        <avue-crud :option="option" :search.sync="search" :table-loading="loading" :data="data" ref="crud"
          v-model="form" :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave"
          :before-open="beforeOpen" :page.sync="page" @search-change="searchChange" @search-reset="searchReset"
          @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
          @refresh-change="refreshChange" @on-load="onLoad">
          <template  slot="menuLeft">
            <div  class="echarts-wrap">
                <div  class="echarts-item"  v-for="(i,k) in labelCountList"  :key="k"></div>
            </div>
          </template>
          <template slot-scope="{row, size}" slot="menu">
            <el-button :size="size" type="text" icon="el-icon-circle-plus-outline" v-if="permission.househould_manager"
              @click="manageLabel(row)">标签
@@ -108,6 +117,10 @@
  import NProgress from 'nprogress'
  import 'nprogress/nprogress.css'
  import Qs from "qs"
  import * as echarts from 'echarts';
  import {
    getTreeList
} from '@/api/label/label'
  export default {
@@ -743,6 +756,9 @@
        currentLabel: {},
        currentRow: {},
        householdLabelList: [],
        labelCountList:[]
      }
    },
    watch: {
@@ -836,7 +852,10 @@
        }
      }
    },
    mounted() {},
    mounted() {
       this.getLabelCount();
    },
    methods: {
      init(row) {
        console.log(JSON.stringify(row))
@@ -1078,6 +1097,76 @@
      showStringDispose(row, type) {
        row[type] = !row[type]
      },
      getLabelCount(){
        getTreeList().then(res => {
            const data = res.data.data
            let list = data[0].children;
            this.labelCountList = list;
            this.$nextTick(()=>{
              this.setEchartsOption(list)
            })
        })
      },
      setEchartsOption(data){
        let  option = {
                  title: {
                      text:"",
                      left: 'center',
                      top:20,
                  },
                  tooltip: {
                      trigger: 'item'
                  },
                 legend: {
                  orient: 'horizontal',
          left: 'center',
          top: 70,
                  },
                  labelLine: {
        length: 15,
        length2: 0,
        maxSurfaceAngle: 80
      },
                series: [
                      {
                    type: 'pie',
                    radius: '35%',
                    data: [],
                    emphasis: {
                      itemStyle: {
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                      }
                   }
                 }
               ]
           };
          let myEchart = document.getElementsByClassName('echarts-item'); //获取类名
         for(let i = 0,ii = data.length;i<ii;i++){
           let myCharts =  echarts.init(myEchart[i]);
            option.title.text = data[i].name;
            let series = [];
            for(let k = 0,kk = data[i].children.length;k<kk;k++){
              series.push({
                value:data[i].children[k].count,
                name:data[i].children[k].name,
                id:data[i].children[k].id,
              })
            }
            option.legend.type = series.length > 4?"scroll":"plain"
            option.series[0].data = series;
            option && myCharts.setOption(option);
            myCharts.on('click',(params)=>{
                     console.log(params)
                this.query.labelId = params.data.id;
                this.onLoad(this.page, this.query)
            })
         }
      }
    }
  }
@@ -1118,4 +1207,15 @@
  .box .el-scrollbar__wrap {
    overflow: scroll;
  }
  .echarts-wrap{
    display: flex;
    flex-wrap: wrap;
    padding:0 30px;
  }
  .echarts-item{
    width:320px;
    height:400px;
    margin:0 30px 30px 0;
  }
</style>
src/views/work/process/maintenanceFundApply/handle.vue
@@ -1,413 +1,420 @@
<template>
  <basic-container>
    <el-form ref="form" :model="form" :rules="rules" label-width="80px">
      <el-row type="flex" class="row-bg" justify="end">
        <el-form-item>
          <el-button @click="handleCancel">关闭</el-button>
        </el-form-item>
      </el-row>
    <basic-container>
        <el-form ref="form" :model="form" :rules="rules" label-width="80px">
            <el-row type="flex" class="row-bg" justify="end">
                <el-form-item>
                    <el-button @click="handleCancel">关闭</el-button>
                </el-form-item>
            </el-row>
      <el-card shadow="hover">
        <div slot="header">
          <span>审批信息</span>
        </div>
        <avue-form :option="option" v-model="form"></avue-form>
      </el-card>
            <el-card shadow="hover">
                <div slot="header">
                    <span>审批信息</span>
                </div>
                <avue-form :option="option" v-model="form"></avue-form>
            </el-card>
      <el-card shadow="hover">
        <div slot="header">
          <span>流程信息</span>
        </div>
        <el-row type="flex" class="row-bg">
          <el-timeline>
            <el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" placement="top">
              <el-card shadow="hover">
                <p>{{flow.assigneeName}} 在 [{{flow.createTime}}] 开始处理 [{{flow.historyActivityName}}] 环节</p>
                <p v-if="flow.historyActivityDurationTime!==''">任务历时 [{{flow.historyActivityDurationTime}}]</p>
                <p v-if="flow.comment!==''">批复意见: [{{flow.comment}}]</p>
                <p v-if="flow.endTime!==''">结束时间: [{{flow.endTime}}]</p>
              </el-card>
            </el-timeline-item>
          </el-timeline>
        </el-row>
      </el-card>
      <el-card shadow="hover">
        <div slot="header">
          <span>流程跟踪</span>
        </div>
        <el-row class="row-bg">
          <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design>
        </el-row>
      </el-card>
    </el-form>
            <el-card shadow="hover">
                <div slot="header">
                    <span>流程信息</span>
                </div>
                <el-row type="flex" class="row-bg">
                    <el-timeline>
                        <el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList"
                            placement="top">
                            <el-card shadow="hover">
                                <p>{{ flow.assigneeName }} 在 [{{ flow.createTime }}] 开始处理 [{{ flow.historyActivityName }}]
                                    环节</p>
                                <p v-if="flow.historyActivityDurationTime !== ''">任务历时 [{{ flow.historyActivityDurationTime
                                }}]
                                </p>
                                <p v-if="flow.comment !== ''">批复意见: [{{ flow.comment }}]</p>
                                <p v-if="flow.endTime !== ''">结束时间: [{{ flow.endTime }}]</p>
                            </el-card>
                        </el-timeline-item>
                    </el-timeline>
                </el-row>
            </el-card>
            <el-card shadow="hover">
                <div slot="header">
                    <span>流程跟踪</span>
                </div>
                <el-row class="row-bg">
                    <flow-design :is-display="true" :process-instance-id="processInstanceId"></flow-design>
                </el-row>
            </el-card>
        </el-form>
    <!-- <div style="">
        <!-- <div style="">
      <el-button type="primary" @click="handleAgree">同意</el-button>
      <el-button type="danger" @click="handleDisagree">驳回</el-button>
    </div> -->
    <div style="text-align: center;
        <div style="text-align: center;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 10px;">
      <el-button type="primary" @click="handleAgree">同意</el-button>
      <el-button type="danger" @click="handleDisagree">驳回</el-button>
    </div>
            <el-button type="primary" @click="handleAgree">同意</el-button>
            <el-button type="danger" @click="handleDisagree">驳回</el-button>
        </div>
  </basic-container>
    </basic-container>
</template>
<script>
  import {
import {
    historyFlowList,
    leaveDetail
  } from "@/api/work/process";
} from "@/api/work/process"
  import {
import {
    getList,
    remove,
    update,
    add,
    getPropertyCapitalApply
  } from "@/api/property/propertyCapitalApply";
  import {
} from "@/api/property/propertyCapitalApply"
import {
    completeTask
  } from "@/api/work/work";
} from "@/api/work/work"
import website from '@/config/website'
  export default {
    data() {
      return {
        taskId: '',
        businessId: '',
        processInstanceId: '',
        src: '',
        flowList: [],
        form: {
          flow: {
            assigneeName: '',
          },
          startTime: '',
          endTime: '',
          reason: '',
        },
        option: {
          height: "auto",
          calcHeight: 54,
          dialogWidth: 1150,
          tip: false,
          searchShow: true,
          searchMenuSpan: 3,
          menuWidth: 350,
          border: true,
          //stripe:true,
          submitBtn: false,
          emptyBtn: false,
          index: true,
          viewBtn: true,
          selection: true,
          dialogClickModal: false,
          column: [{
              label: "小区",
              prop: "districtId",
              searchSpan: 5,
              search: true,
              type: 'tree',
              dicUrl: `/api/blade-district/district/getDistrictTree`,
              props: {
                label: "name",
                value: "id"
              },
              defaultExpandedKeys: ["361102003"],
              span: 12,
              labelWidth: 120,
              width: 220,
              overHidden: true,
              rules: [{
                required: true,
                message: "请选择小区",
                trigger: "blur",
              }, ],
              disabled: true
export default {
    data () {
        return {
            taskId: '',
            businessId: '',
            processInstanceId: '',
            src: '',
            flowList: [],
            form: {
                flow: {
                    assigneeName: '',
                },
                startTime: '',
                endTime: '',
                reason: '',
            },
            {
              label: '维修项目名称',
              prop: 'name',
              searchLabelWidth: 120,
              searchSpan: 5,
              search: true,
              span: 12,
              labelWidth: 140,
              rules: [{
                required: true,
                message: "请输入维修项目名称",
                trigger: "blur",
              }, ],
              disabled: true
            },
            {
              label: "预计开工时间",
              prop: "runTime",
              span: 12,
              labelWidth: 140,
              type: "date",
              format: "yyyy-MM-dd",
              valueFormat: "yyyy-MM-dd",
              rules: [{
                required: true,
                message: "请选择合同开始时间",
                trigger: "blur",
              }, ],
              disabled: true
            },
            {
              label: "预计竣工时间",
              prop: "completedTime",
              labelWidth: 140,
              span: 12,
              type: "date",
              format: "yyyy-MM-dd",
              valueFormat: "yyyy-MM-dd",
              rules: [{
                required: true,
                message: "请选择合同结束时间",
                trigger: "blur",
              }, ],
              disabled: true
            },
            {
              label: "项目分摊方式",
              prop: "allocationWay",
              labelWidth: 140,
              value: '按建筑面积分摊',
              span: 14,
              row: true,
              disabled: true
            },
            {
              label: '联系人',
              prop: 'linkman',
              span: 12,
              labelWidth: 120,
              search: true,
              searchSpan: 4,
              rules: [{
                required: true,
                message: "请输入联系人",
                trigger: "blur",
              }, ],
              disabled: true
            },
            {
              label: '联系方式',
              prop: 'linkPhone',
              span: 12,
              labelWidth: 140,
              rules: [{
                required: true,
                message: "请输入联系方式",
                trigger: "blur",
              }, ],
              disabled: true
            },
            {
              label: "项目预算总金额(元)",
              prop: "budgetAmount",
              span: 12,
              hide: true,
              labelWidth: 140,
              type: 'number',
              precision: 2,
              value: '0.00',
              disabled: true
            },
            {
              label: "实际预算金额(元)",
              prop: "actualAmount",
              span: 12,
              hide: true,
              labelWidth: 140,
              type: 'number',
              precision: 2,
              value: '0.00',
              disabled: true
            },
            {
              label: "自筹金额(元)",
              prop: "selfAmount",
              span: 12,
              hide: true,
              labelWidth: 140,
              type: 'number',
              precision: 2,
              value: '0.00',
              disabled: true
            },
            {
              label: "预算应拨付金额(元)",
              prop: "budgetAppropriateAmount",
              span: 12,
              hide: true,
              labelWidth: 140,
              type: 'number',
              precision: 2,
              value: '0.00',
              disabled: true
            },
            {
              label: "项目摘要",
              span: 24,
              hide: true,
              prop: "projectDigest",
              placeholder: "例如:“XX小区XX栋XX设施设备维修,总的预算金额是X,是否含有审价,本次维修涉及范围共XX户,总面积的建筑面积为XX平方米”",
              labelWidth: 140,
              type: "textarea",
              disabled: true
            },
            {
              label: "项目进度描述",
              span: 24,
              hide: true,
              prop: "projectDescribe",
              labelWidth: 140,
              type: "textarea",
              disabled: true
            }, {
              label: "批复意见",
              span: 24,
              hide: true,
              prop: "comment",
              labelWidth: 140,
              type: "textarea",
              rules: [{
                required: true,
                message: "请输入批复意见",
                trigger: "blur",
              }, ],
            },
            {
              label: '施工方案附件',
              prop: 'constructionSchemeUrls',
              type: 'upload',
              span: 24,
              hide: true,
              labelWidth: 140,
              multiple: true,
              // showFileList: true,
              propsHttp: {
                res: 'data',
                name: "originalName",
                url: "link"
              },
              action: '/api/blade-resource/oss/endpoint/put-file-attach',
              rules: [{
                required: true,
                message: "请上传施工方案",
                trigger: "blur",
              }, ],
            option: {
                height: "auto",
                calcHeight: 54,
                dialogWidth: 1150,
                tip: false,
                searchShow: true,
                searchMenuSpan: 3,
                menuWidth: 350,
                border: true,
                //stripe:true,
                submitBtn: false,
                emptyBtn: false,
                index: true,
                viewBtn: true,
                selection: true,
                dialogClickModal: false,
                column: [{
                    label: "小区",
                    prop: "districtId",
                    searchSpan: 5,
                    search: true,
                    type: 'tree',
                    dicUrl: `/api/blade-district/district/getDistrictTree`,
                    props: {
                        label: "name",
                        value: "id"
                    },
                    defaultExpandedKeys: ["361102003"],
                    span: 12,
                    labelWidth: 120,
                    width: 220,
                    overHidden: true,
                    rules: [{
                        required: true,
                        message: "请选择小区",
                        trigger: "blur",
                    },],
                    disabled: true
                },
                {
                    label: '维修项目名称',
                    prop: 'name',
                    searchLabelWidth: 120,
                    searchSpan: 5,
                    search: true,
                    span: 12,
                    labelWidth: 140,
                    rules: [{
                        required: true,
                        message: "请输入维修项目名称",
                        trigger: "blur",
                    },],
                    disabled: true
                },
                {
                    label: "预计开工时间",
                    prop: "runTime",
                    span: 12,
                    labelWidth: 140,
                    type: "date",
                    format: "yyyy-MM-dd",
                    valueFormat: "yyyy-MM-dd",
                    rules: [{
                        required: true,
                        message: "请选择合同开始时间",
                        trigger: "blur",
                    },],
                    disabled: true
                },
                {
                    label: "预计竣工时间",
                    prop: "completedTime",
                    labelWidth: 140,
                    span: 12,
                    type: "date",
                    format: "yyyy-MM-dd",
                    valueFormat: "yyyy-MM-dd",
                    rules: [{
                        required: true,
                        message: "请选择合同结束时间",
                        trigger: "blur",
                    },],
                    disabled: true
                },
                {
                    label: "项目分摊方式",
                    prop: "allocationWay",
                    labelWidth: 140,
                    value: '按建筑面积分摊',
                    span: 14,
                    row: true,
                    disabled: true
                },
                {
                    label: '联系人',
                    prop: 'linkman',
                    span: 12,
                    labelWidth: 120,
                    search: true,
                    searchSpan: 4,
                    rules: [{
                        required: true,
                        message: "请输入联系人",
                        trigger: "blur",
                    },],
                    disabled: true
                },
                {
                    label: '联系方式',
                    prop: 'linkPhone',
                    span: 12,
                    labelWidth: 140,
                    rules: [{
                        required: true,
                        message: "请输入联系方式",
                        trigger: "blur",
                    },],
                    disabled: true
                },
                {
                    label: "项目预算总金额(元)",
                    prop: "budgetAmount",
                    span: 12,
                    hide: true,
                    labelWidth: 140,
                    type: 'number',
                    precision: 2,
                    value: '0.00',
                    disabled: true
                },
                {
                    label: "实际预算金额(元)",
                    prop: "actualAmount",
                    span: 12,
                    hide: true,
                    labelWidth: 140,
                    type: 'number',
                    precision: 2,
                    value: '0.00',
                    disabled: true
                },
                {
                    label: "自筹金额(元)",
                    prop: "selfAmount",
                    span: 12,
                    hide: true,
                    labelWidth: 140,
                    type: 'number',
                    precision: 2,
                    value: '0.00',
                    disabled: true
                },
                {
                    label: "预算应拨付金额(元)",
                    prop: "budgetAppropriateAmount",
                    span: 12,
                    hide: true,
                    labelWidth: 140,
                    type: 'number',
                    precision: 2,
                    value: '0.00',
                    disabled: true
                },
                {
                    label: "项目摘要",
                    span: 24,
                    hide: true,
                    prop: "projectDigest",
                    placeholder: "例如:“XX小区XX栋XX设施设备维修,总的预算金额是X,是否含有审价,本次维修涉及范围共XX户,总面积的建筑面积为XX平方米”",
                    labelWidth: 140,
                    type: "textarea",
                    disabled: true
                },
                {
                    label: "项目进度描述",
                    span: 24,
                    hide: true,
                    prop: "projectDescribe",
                    labelWidth: 140,
                    type: "textarea",
                    disabled: true
                }, {
                    label: "批复意见",
                    span: 24,
                    hide: true,
                    prop: "comment",
                    labelWidth: 140,
                    type: "textarea",
                    rules: [{
                        required: true,
                        message: "请输入批复意见",
                        trigger: "blur",
                    },],
                },
                {
                    label: '施工方案附件',
                    prop: 'constructionSchemeUrls',
                    type: 'upload',
                    listType: 'picture-img',
                    span: 24,
                    hide: true,
                    labelWidth: 140,
                    multiple: true,
                    // showFileList: true,
                    propsHttp: {
                        res: 'data',
                        name: "originalName",
                        url: "link"
                    },
                    action: '/api/blade-resource/oss/endpoint/put-file-attach',
                    rules: [{
                        required: true,
                        message: "请上传施工方案",
                        trigger: "blur",
                    },],
                }
                ],
            }
          ],
        }
      }
    },
    created() {
      this.init();
    created () {
        this.init()
    },
    beforeRouteUpdate(to, from, next) {
      // 在当前路由改变,但是该组件被复用时调用
      // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候
      // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用
      // 可以访问组件实例 `this`
      if (to.fullPath !== from.fullPath) {
        next();
        this.init();
      }
    beforeRouteUpdate (to, from, next) {
        // 在当前路由改变,但是该组件被复用时调用
        // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候
        // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用
        // 可以访问组件实例 `this`
        if (to.fullPath !== from.fullPath) {
            next()
            this.init()
        }
    },
    methods: {
      init() {
        this.taskId = this.$route.params.taskId;
        this.processInstanceId = this.$route.params.processInstanceId;
        this.businessId = this.$route.params.businessId;
        historyFlowList(this.processInstanceId).then(res => {
          const data = res.data;
          if (data.success) {
            this.flowList = data.data;
          }
        })
        getPropertyCapitalApply(this.businessId).then(res => {
          const data = res.data;
          if (data.success) {
            this.form = data.data;
          }
        })
      },
      handleAgree() {
        if (!this.form.comment) {
          this.$message.warning('请先填写批复意见');
          return;
        }
        const params = {
          taskId: this.taskId,
          processInstanceId: this.processInstanceId,
          flag: 'ok',
          comment: this.form.comment,
        };
        completeTask(params).then(res => {
          const data = res.data;
          if (data.success) {
            this.$message.success(data.msg);
            this.$router.$avueRouter.closeTag();
        init () {
            this.taskId = this.$route.params.taskId
            this.processInstanceId = this.$route.params.processInstanceId
            this.businessId = this.$route.params.businessId
            historyFlowList(this.processInstanceId).then(res => {
                const data = res.data
                if (data.success) {
                    this.flowList = data.data
                }
            })
            getPropertyCapitalApply(this.businessId).then(res => {
                const data = res.data
                if (data.success) {
                    data.data.constructionSchemeUrls = website.minioUrl + data.data.constructionSchemeUrls
                    this.form = data.data
                }
            })
        },
        handleAgree () {
            if (!this.form.comment) {
                this.$message.warning('请先填写批复意见')
                return
            }
            const params = {
                taskId: this.taskId,
                processInstanceId: this.processInstanceId,
                flag: 'ok',
                comment: this.form.comment,
            }
            completeTask(params).then(res => {
                const data = res.data
                if (data.success) {
                    this.$message.success(data.msg)
                    this.$router.$avueRouter.closeTag()
                    this.$router.push({
                        path: `/work/todo`
                    })
                } else {
                    this.$message.error(data.msg || '提交失败')
                }
            })
        },
        handleDisagree () {
            if (!this.form.comment) {
                this.$message.warning('请先填写批复意见')
                return
            }
            const params = {
                taskId: this.taskId,
                processInstanceId: this.processInstanceId,
                comment: this.form.comment,
            }
            completeTask(params).then(res => {
                const data = res.data
                if (data.success) {
                    this.$message.success(data.msg)
                    this.$router.$avueRouter.closeTag()
                    this.$router.push({
                        path: `/work/todo`
                    })
                } else {
                    this.$message.error(data.msg || '提交失败')
                }
            })
        },
        handleCancel () {
            this.$router.$avueRouter.closeTag()
            this.$router.push({
              path: `/work/todo`
            });
          } else {
            this.$message.error(data.msg || '提交失败');
          }
        })
      },
      handleDisagree() {
        if (!this.form.comment) {
          this.$message.warning('请先填写批复意见');
          return;
                path: `/work/todo`
            })
        }
        const params = {
          taskId: this.taskId,
          processInstanceId: this.processInstanceId,
          comment: this.form.comment,
        };
        completeTask(params).then(res => {
          const data = res.data;
          if (data.success) {
            this.$message.success(data.msg);
            this.$router.$avueRouter.closeTag();
            this.$router.push({
              path: `/work/todo`
            });
          } else {
            this.$message.error(data.msg || '提交失败');
          }
        })
      },
      handleCancel() {
        this.$router.$avueRouter.closeTag();
        this.$router.push({
          path: `/work/todo`
        });
      }
    }
  }
}
</script>
<style scoped>
  .container {
.container {
    position: relative;
    /* 确保按钮相对于该元素定位 */
  }
}
  #myButton {
#myButton {
    position: fixed;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
  }
}
</style>