Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/jczz_web
5 files modified
1 files added
| New file |
| | |
| | | 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 |
| | | }) |
| | | } |
| | |
| | | <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> |
| | |
| | | <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> |
| | | |
| | |
| | | getList, |
| | | remove |
| | | } from "@/api/subjectChoices/subjectChoices"; |
| | | |
| | | import { |
| | | save |
| | | } from "@/api/answerRecord/answerRecord"; |
| | | import { |
| | | add |
| | | } from "@/api/property/propertyCompany" |
| | |
| | | export default { |
| | | data() { |
| | | return { |
| | | property: {}, |
| | | activeName: 'info1', |
| | | infoVisible: false, |
| | | page: { |
| | |
| | | ...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); |
| | | }, |
| | |
| | | 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 |
| | | }) |
| | | }); |
| | | }, |
| | | |
| | |
| | | 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 = { |
| | |
| | | @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> |
| | | |
| | |
| | | methods: { |
| | | |
| | | |
| | | addProperty() { |
| | | this.$refs.propertyEdit.init(); |
| | | addProperty(row) { |
| | | this.$refs.propertyEdit.init(row); |
| | | }, |
| | | |
| | | aliSubmit(form, done) { |
| | |
| | | @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"> |
| | |
| | | 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 |
| | |
| | | formslot: true, |
| | | span: 24, |
| | | } |
| | | ] |
| | | ], |
| | | labelCountList:[] |
| | | } |
| | | } |
| | | }, |
| | |
| | | } |
| | | } |
| | | }, |
| | | mounted() {}, |
| | | mounted() { |
| | | this.getLabelCount() |
| | | }, |
| | | methods: { |
| | | |
| | | onsubmit() { |
| | |
| | | }, |
| | | 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> |
| | |
| | | .box .el-scrollbar__wrap { |
| | | overflow: scroll; |
| | | } |
| | | .echarts-wrap{ |
| | | display: flex; |
| | | padding:0 30px; |
| | | justify-content: center |
| | | } |
| | | .echarts-item{ |
| | | width:100%; |
| | | height:300px; |
| | | } |
| | | </style> |
| | |
| | | <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)">标签 |
| | |
| | | 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 { |
| | |
| | | currentLabel: {}, |
| | | currentRow: {}, |
| | | householdLabelList: [], |
| | | |
| | | labelCountList:[] |
| | | |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | } |
| | | } |
| | | }, |
| | | mounted() {}, |
| | | mounted() { |
| | | this.getLabelCount(); |
| | | |
| | | }, |
| | | methods: { |
| | | init(row) { |
| | | console.log(JSON.stringify(row)) |
| | |
| | | |
| | | 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) |
| | | }) |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | .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> |
| | |
| | | <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> |