123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973 |
- <!--
- * @Author: ysh
- * @Date: 2024-04-30 09:03:14
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2024-05-08 17:54:13
- -->
- <template>
- <div class="app-container" v-loading="loading">
- <el-row :gutter="20">
- <el-col :span="19" :xs="24">
- <h2 class="text-center">项目结算表</h2>
- <div class="headers">
- 项目信息
- <div class="line"></div>
- </div>
- <el-form ref="settleForm" :model="form" :rules="rules" label-width="160px" :disabled="disabled">
- <el-form-item label="项目编号" prop="projectId">
- <el-select v-model="form.projectId" filterable placeholder="请选择" @change="handleSelectProject"
- :disabled="taskName != '结算发起'" clearable style="width: 100%">
- <el-option v-for="item in projectList" :key="item.value"
- :label="item.projectNumber + '-' + item.projectName" :value="item.projectId">
- </el-option>
- </el-select>
- <el-descriptions border v-if="isSelect" style="margin-top: 10px" :column="2">
- <el-descriptions-item label="项目编号" label-class-name="my-label">
- {{ chooseProject.projectNumber }}
- </el-descriptions-item>
- <el-descriptions-item label="项目名称" label-class-name="my-label">
- {{ chooseProject.projectName }}
- </el-descriptions-item>
- <el-descriptions-item label="合同编码" label-class-name="my-label">
- {{ chooseProject.contractCode }}
- </el-descriptions-item>
- <el-descriptions-item label="合同编号" label-class-name="my-label">
- {{ chooseProject.contractNumber }}
- </el-descriptions-item>
- <el-descriptions-item label="项目负责人" label-class-name="my-label">
- {{ chooseProject.projectLeaderUser ? chooseProject.projectLeaderUser.nickName : "" }}
- </el-descriptions-item>
- <el-descriptions-item label="甲方单位" label-class-name="my-label">
- {{ chooseProject.partyA }}
- </el-descriptions-item>
- <el-descriptions-item label="联系人" label-class-name="my-label">
- {{ chooseProject.contactPerson }}
- </el-descriptions-item>
- <el-descriptions-item label="联系电话" label-class-name="my-label">
- {{ chooseProject.telephone }}
- </el-descriptions-item>
- <el-descriptions-item label="项目类型" label-class-name="my-label">
- {{ chooseProject.projectType }}
- </el-descriptions-item>
- <el-descriptions-item label="项目级别" label-class-name="my-label">
- {{ chooseProject.projectLevel }}
- </el-descriptions-item>
- <el-descriptions-item label="承担部门" label-class-name="my-label">
- {{ chooseProject.undertakingDept }}
- </el-descriptions-item>
- <el-descriptions-item label="项目登记人" label-class-name="my-label">
- {{ chooseProject.projectRegistrant }}
- </el-descriptions-item>
- </el-descriptions>
- </el-form-item>
- <el-form-item label="工作量上报说明" prop="workloadReport">
- <el-input v-model="form.workloadReport" type="textarea" :disabled="taskName != '结算发起'"
- placeholder="请输入工作量上报说明" />
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="工作上报人:" prop="reporterName">
- <span class="auditor">
- {{ form.reporterName }}
- </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="上报日期:" prop="reportTime">
- <span> {{ form.reportTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- <el-form-item label="原始上报数据" prop="">
- <el-upload class="upload-demo" ref="upload" :file-list="fileList" :auto-upload="false" action="">
- <el-button slot="trigger" size="mini" type="primary" icon="el-icon-upload"
- :disabled="taskName != '结算发起'">选取文件</el-button>
- <div slot="tip" class="el-upload__tip">
- 只能上传docx/doc文件,且不超过500kb
- </div>
- </el-upload>
- </el-form-item>
- <el-form-item label="项目管理部审核结算单" prop="">
- <el-upload class="upload-demo" ref="upload" :file-list="fileList" action="" :auto-upload="false">
- <el-button slot="trigger" size="mini" type="primary" icon="el-icon-upload"
- :disabled="taskName != '项目管理部结算'">选取文件</el-button>
- <div slot="tip" class="el-upload__tip">
- 只能上传docx/doc文件,且不超过500kb
- </div>
- </el-upload>
- </el-form-item>
- <el-form-item label="分管领导审核结算单" prop="">
- <el-upload class="upload-demo" ref="upload" :file-list="fileList" action="" :auto-upload="false">
- <el-button slot="trigger" size="mini" type="primary" icon="el-icon-upload"
- :disabled="taskName != '分管审核'">选取文件</el-button>
- <div slot="tip" class="el-upload__tip">
- 只能上传docx/doc文件,且不超过500kb
- </div>
- </el-upload>
- </el-form-item>
- <div class="headers">
- 项目完成工作量及经费计算
- <div class="line"></div>
- </div>
- <el-form-item label-width="60px">
- <table border="1">
- <tr>
- <td style="width: 50px">序号</td>
- <td style="width: 180px">工作内容</td>
- <td style="width: 100px">等级或比例尺</td>
- <td style="width: 100px">单位</td>
- <td style="width: 100px">地类</td>
- <td style="width: 100px">单价</td>
- <td>工作量</td>
- <td>其他系数</td>
- <td style="width: 100px">项目经费</td>
- <td>备注</td>
- <td>操作</td>
- </tr>
- <tr v-for="(work, index) in settleWorkList" :key="index">
- <td>
- {{ index + 1 }}
- </td>
- <td>
- <el-input v-model="work.content" type="textarea" clearable
- :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
- </td>
- <td>
- {{ work.scale == "" ? "无" : work.scale }}
- </td>
- <td>
- {{ work.unit }}
- </td>
- <td>
- {{ work.groundType == "0" ? "一般地类" : "复杂地类" }}
- </td>
- <td>
- {{ work.price }}
- </td>
- <td>
- <el-input-number :precision="2" style="width: 100px" v-model="work.workload" clearable
- @blur="calculateSettle(work)" :controls="false"></el-input-number>
- </td>
- <td>
- <el-input-number :precision="2" style="width: 100px" v-model="work.coefficient" clearable
- @blur="calculateSettle(work)" :controls="false"></el-input-number>
- </td>
- <td>
- <!-- <el-input-number style="width:100px" v-model="work.settle" clearable :controls="false"></el-input-number> -->
- {{ work.settle }}
- </td>
- <td>
- <el-input v-model="work.remark" type="textarea" clearable
- :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
- </td>
- <td>
- <el-button size="mini" type="text" @click="handleChoosePrice(work, index)">选择单价</el-button>
- <el-button type="text" size="mini" style="color: #f56c6c"
- @click="deletWorkItem(index, settleWorkList)">删除行</el-button>
- </td>
- </tr>
- <tr>
- <td :colspan="8">结算费用合计</td>
- <td>{{ settleSumTr.amount }}</td>
- <td>
- <el-input v-model="settleSumTr.remark" type="textarea" clearable
- :autosize="{ minRows: 2, maxRows: 10 }"></el-input>
- </td>
- </tr>
- </table>
- <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addWorkList"></el-button>
- </el-form-item>
-
- <!-- 结算汇总 -->
- <div class="headers">
- 结算汇总
- <div class="line"></div>
- </div>
- <el-form-item label-width="60px">
- <h3>表1:扣除明细</h3>
- <table border="1">
- <tr>
- <td style="width: 50px">序号</td>
- <td style="width: 280px">结算内容</td>
- <td style="width: 200px">结算金额(元)</td>
- <td style="width: 280px">备注</td>
- <td style="width: 100px">操作</td>
- </tr>
- <tr v-for="(work, index) in settleSumList" :key="index">
- <td>
- {{ index + 1 }}
- </td>
- <td>
- <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
- </el-input>
- </td>
- <td>
- <el-input-number :min="0" :precision="2" style="width: 200px" v-model="work.amount" clearable
- :controls="false" @blur="calculateActualSumSettle()"></el-input-number>
- <!-- {{ work.amount }} -->
- </td>
- <td>
- <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
- </el-input>
- </td>
- <td>
- <el-button type="text" size="mini" style="color: #f56c6c"
- @click="deletWorkItem(index, settleSumList)">删除行</el-button>
- </td>
- </tr>
- </table>
- <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addSumWorkList"></el-button>
- <h3>表2:部门结算金额</h3>
- <table border="1">
- <tr>
- <td style="width: 50px">序号</td>
- <td style="width: 280px">部门名称</td>
- <td style="width: 200px">结算金额(元)</td>
- <td style="width: 280px">备注</td>
- <td style="width: 100px">操作</td>
- </tr>
- <tr v-for="(dept, index) in deptSettleList" :key="index">
- <td>
- {{ index + 1 }}
- </td>
- <td>
- <el-input v-model="dept.content" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
- </el-input>
- </td>
- <td>
- <el-input-number :precision="2" style="width: 200px" v-model="dept.amount" clearable
- :controls="false" @blur="calculateDeptAmount(index)"></el-input-number>
- </td>
- <td>
- <el-input v-model="dept.remark" type="textarea" clearable :autosize="{ minRows: 2, maxRows: 10 }">
- </el-input>
- </td>
- <td>
- <el-button type="text" size="mini" style="color: #f56c6c"
- @click="deletWorkItem(index, deptSettleList)">删除行</el-button>
- </td>
- </tr>
- <tr>
- <td :colspan="2">实际结算总金额</td>
- <td :colspan="3">
- <el-input-number :precision="2" style="width: 100%" v-model="actualSumSettle" clearable
- :controls="false"></el-input-number>
- </td>
- </tr>
- <tr>
- <td :colspan="2">结算说明</td>
- <td :colspan="3">
- <el-input v-model="form.settleComment" type="textarea" clearable
- :autosize="{ minRows: 2, maxRows: 10 }">
- </el-input>
- </td>
- </tr>
- </table>
- <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addDeptSettleList"></el-button>
- </el-form-item>
-
- <!-- 结算审核情况 -->
- <div v-if="taskName != '结算发起'">
- <div class="headers">
- 结算审核情况
- <div class="line"></div>
- </div>
- <el-form-item label="综合事务部(设备领用情况)">
- <el-input v-model="form.zhComment" type="textarea" :disabled="taskName != '综合事务部处理'" clearable
- :autosize="{ minRows: 4, maxRows: 10 }">
- </el-input>
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="签名:" label-width="120px">
- <span class="auditor"> {{ form.zhUserName }} </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="日期:" label-width="120px">
- <span> {{ form.zhTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- <el-form-item label="技术质量部(质量及工作量)">
- <el-input v-model="form.jsComment" type="textarea" :disabled="taskName != '技术质量部审核'" clearable
- :autosize="{ minRows: 4, maxRows: 10 }">
- </el-input>
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="签名:" label-width="120px">
- <span class="auditor"> {{ form.jsUserName }} </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="日期:" label-width="120px">
- <span> {{ form.jsTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- <el-form-item label="项目管理部(结算)">
- <el-input v-model="form.xmComment" type="textarea" :disabled="taskName != '项目管理部结算'" clearable
- :autosize="{ minRows: 4, maxRows: 10 }">
- </el-input>
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="签名:" label-width="120px">
- <span class="auditor"> {{ form.xmUserName }} </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="日期:" label-width="120px">
- <span> {{ form.xmTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- <el-form-item label="项目承担部门(确认)">
- <el-input v-model="form.deptComment" type="textarea" :disabled="taskName != '结算发起人确认'" clearable
- :autosize="{ minRows: 4, maxRows: 10 }">
- </el-input>
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="签名:" label-width="120px">
- <span class="auditor"> {{ form.deptUserName }} </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="日期:" label-width="120px">
- <span> {{ form.deptTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- <el-form-item label="经营发展部(校核)">
- <el-input v-model="form.jyComment" type="textarea" :disabled="taskName != '经营发展部校核'" clearable
- :autosize="{ minRows: 4, maxRows: 10 }">
- </el-input>
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="签名:" label-width="120px">
- <span class="auditor"> {{ form.jyUserName }} </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="日期:" label-width="120px">
- <span> {{ form.jyTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- <el-form-item label="分管领导(审核)">
- <el-input v-model="form.managerComment" type="textarea" :disabled="taskName != '分管审核'" clearable
- :autosize="{ minRows: 4, maxRows: 10 }">
- </el-input>
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="签名:" label-width="120px">
- <span class="auditor"> {{ form.managerUserName }} </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="日期:" label-width="120px">
- <span> {{ form.managerTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- <el-form-item label="总经理(审批)">
- <el-input v-model="form.gmComment" type="textarea" :disabled="taskName != '总经理审批'" clearable
- :autosize="{ minRows: 4, maxRows: 10 }">
- </el-input>
- </el-form-item>
- <el-row>
- <el-col :span="6" :xs="24" :offset="12">
- <el-form-item label="签名:" label-width="120px">
- <span class="auditor"> {{ form.gmUserName }} </span>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="日期:" label-width="120px">
- <span> {{ form.gmTime }} </span>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <div style="text-align: center" v-if="!disabled">
- <el-button type="warning" @click="preserve">保存</el-button>
- <el-button type="primary" @click="submitNextFlow">提交下一个流程</el-button>
- </div>
- </el-col>
- <el-col :span="5" :xs="24">
- <el-card>
- <h2 style="text-align: center">流程进度</h2>
- <div>
- <flow :flowData="flowData" />
- </div>
- </el-card>
- </el-col>
- </el-row>
-
- <el-drawer title="选择单价" :visible.sync="drawer" direction="rtl">
- <choose-price :row="clickWork" @getPrice="getPrice" @cancel="drawer = false"></choose-price>
- </el-drawer>
- </div>
- </template>
-
- <script>
- import flow from "@/views/flowable/task/todo/detail/flow";
- import { flowXmlAndNode } from "@/api/flowable/definition";
- import { parseTime } from "@/utils/ruoyi";
- import { listProject, getProject } from "@/api/oa/project/project";
- import { deepClone } from '@/utils'
- import { listSettle, getSettle, delSettle, addSettle, updateSettle } from "@/api/oa/settle/settle";
- import { listSettleSummary, getSettleSummary, addSettleSummary, delSettleSummary, updateSettleSummary } from "@/api/oa/settle/settleSummary";
- import { listSettleWork, getSettleWork, addSettleWork, updateSettleWork, delSettleWork } from "@/api/oa/settle/settleWork";
- import { listProjectContract, addProjectContract, } from "@/api/oa/contract/projectContract";
- import { getPrice } from "@/api/oa/price/price";
- import ChoosePrice from "./components/choosePrice.vue";
- import { getUser } from "@/api/system/user";
- import { complete, getNextFlowNode } from "@/api/flowable/todo";
- import { getUsersDeptLeader, getUsersDeptLeaderByDept, getUsersManageLeaderByDept } from '@/api/system/post.js'
- export default {
- components: {
- flow,
- ChoosePrice,
- },
- props: {
- taskName: {
- type: String,
- required: true,
- },
- taskForm: {
- type: Object,
- required: true,
- },
- disabled: {
- type: Boolean,
- default: false
- }
- },
- watch: {
-
- },
- data() {
- return {
- loading: true,
- drawer: false,
- flag: false,
- flowData: {},
- form: {},
- rules: {
- projectId: [
- { required: true, trigger: "change", message: "请选择项目编号" }]
- },
- projectList: [],
- isSelect: false,
- chooseProject: {},
- fileList: [],
- settleWorkList: [
- {
- content: "",
- priceId: "",
- scale: "无",
- unit: "",
- groundType: "0",
- price: "",
- workload: 0,
- coefficient: 1,
- settle: 0,
- remark: "",
- },
- ],
- oldSettleWorkList: [],
- settleSumTr: {
- content: "结算费用合计",
- amount: 0,
- remark: "",
- tableNumber: '2'
- },
- settleSumList: [
- {
- content: "",
- amount: 0,
- remark: "",
- tableNumber: '0'
- },
- ],
- deptSettleList: [
- {
- content: "",
- amount: 0,
- remark: "",
- tableNumber: '1'
- }
- ],
- oldSettleSumList: [],
- actualSumSettle: "",
- clickWork: {},
- deptId: undefined
- };
- },
- created() {
- this.getProjectList(); //获取项目列表
- this.getContractDataList(); //获取合同编码和编号
- this.initForm();
- if (this.$route.query.projectId) {
- }
- flowXmlAndNode({
- procInsId: this.taskForm.procInsId,
- deployId: this.taskForm.deployId,
- }).then(res => {
- this.flowData = res.data;
- });
- },
- mounted() { },
- methods: {
- initForm() {
- listSettle({ settleId: this.taskForm.formId }).then(res => {
- if (res.total == 1) {
- this.form = res.rows[0];
- this.flag = true;
- this.handleSelectProject(res.rows[0].projectId);
- this.listSettleWorkFn();
- this.listSettleSummaryFn();
- getUser(this.form.reporter).then(res => {
- if (res.data) {
- this.form.reporterName = res.data.nickName;
- this.deptId = res.data.deptId
- }
- })
- this.getCurrentUser();
- } else if (res.total == 0) {
- this.flag = false;
- if (this.taskName == "结算发起") {
- this.form.reporter = this.$store.state.user.id;
- this.form.reporterName = this.$store.state.user.name;
- this.form.reportTime = parseTime(new Date(), "{y}-{m}-{d}");
- }
- }
- setTimeout(() => {
- this.loading = false
- }, 500);
-
- });
- },
- getCurrentUser() {
- if (this.taskName == '综合事务部处理') {
- this.form.zhUserName = this.$store.state.user.name;
- this.form.zhUserId = this.$store.state.user.id;
- this.form.zhTime = parseTime(new Date(), "{y}-{m}-{d}");
- } else if (this.taskName == '技术质量部审核') {
- this.form.jsUserName = this.$store.state.user.name;
- this.form.jsUserId = this.$store.state.user.id;
- this.form.jsTime = parseTime(new Date(), "{y}-{m}-{d}");
- } else if (this.taskName == '项目管理部结算') {
- this.form.xmUserName = this.$store.state.user.name;
- this.form.xmUserId = this.$store.state.user.id;
- this.form.xmTime = parseTime(new Date(), "{y}-{m}-{d}");
- } else if (this.taskName == '结算发起人确认') {
- this.form.deptUserName = this.$store.state.user.name;
- this.form.deptUserId = this.$store.state.user.id;
- this.form.deptTime = parseTime(new Date(), "{y}-{m}-{d}");
- } else if (this.taskName == '经营发展部校核') {
- this.form.jyUserName = this.$store.state.user.name;
- this.form.jyUserId = this.$store.state.user.id;
- this.form.jyTime = parseTime(new Date(), "{y}-{m}-{d}");
- } else if (this.taskName == '分管审核') {
- this.form.managerUserName = this.$store.state.user.name;
- this.form.managerUserId = this.$store.state.user.id;
- this.form.managerTime = parseTime(new Date(), "{y}-{m}-{d}");
- } else if (this.taskName == '总经理审批') {
- this.form.gmUserName = this.$store.state.user.name;
- this.form.gmUserId = this.$store.state.user.id;
- this.form.gmTime = parseTime(new Date(), "{y}-{m}-{d}");
- }
- this.getReviewerName();
- },
- getReviewerName() {
- if (this.form.zhUserId) {
- getUser(this.form.zhUserId).then(res => {
- this.form.zhUserName = res.data.nickName;;
- })
- }
- if (this.form.jsUserId) {
- getUser(this.form.jsUserId).then(res => {
- this.form.jsUserName = res.data.nickName;;
- })
- }
- if (this.form.xmUserId) {
- getUser(this.form.xmUserId).then(res => {
- this.form.xmUserName = res.data.nickName;;
- })
- }
- if (this.form.deptUserId) {
- getUser(this.form.deptUserId).then(res => {
- this.form.deptUserName = res.data.nickName;;
- })
- }
- if (this.form.jyUserId) {
- getUser(this.form.jyUserId).then(res => {
- this.form.jyUserName = res.data.nickName;;
- })
- }
- if (this.form.managerUserId) {
- getUser(this.form.managerUserId).then(res => {
- this.form.managerUserName = res.data.nickName;;
- })
- }
- if (this.form.gmUserId) {
- getUser(this.form.gmUserId).then(res => {
- this.form.gmUserName = res.data.nickName;;
- })
- }
- },
- // 保存按钮
- preserve() {
- if (this.flag) {
- this.updateSettleFn();
- this.updateSettleSummaryFn();
- this.updateSettleWorkFn();
-
- } else {
- this.addSettleFn();
- }
- },
- submitNextFlow() {
- this.$refs["settleForm"].validate(vaild => {
- if (vaild) {
- this.preserve();
- if (this.taskName == '结算发起') {
- this.getNextFlowNodeFn(17);
- } else if (this.taskName == '综合事务部处理') {
- this.getNextFlowNodeFn(52);
- } else if (this.taskName == '技术质量部审核') {
- this.getNextFlowNodeFn(32);
- } else if (this.taskName == '项目管理部结算') {
- this.getNextFlowNodeFn();
- } else if (this.taskName == '结算发起人确认') {
- this.getNextFlowNodeFn(13);
- } else if (this.taskName == '经营发展部校核') {
- this.getNextFlowNodeFn(null, this.deptId);
- } else if (this.taskName == '分管审核') {
- this.getNextFlowNodeFn();
- } else if (this.taskName == '总经理审批') {
- this.getNextFlowNodeFn();
- }
- }
- })
- },
- getNextFlowNodeFn(userId, deptId) {
- const params = { taskId: this.taskForm.taskId };
- getNextFlowNode(params).then(res => {
- if (userId) {
- this.$set(this.taskForm.variables, "approval", userId);
- complete(this.taskForm).then(response => {
- this.$modal.msgSuccess(response.msg);
- this.$emit('goBack');
- });
- } else {
- if (deptId) {
- getUsersManageLeaderByDept({ deptId }).then(res => {
- let id = res.data.userId;
- this.$set(this.taskForm.variables, "approval", id);
- complete(this.taskForm).then(response => {
- this.$modal.msgSuccess(response.msg);
- this.$emit('goBack');
- });
- })
- } else {
- complete(this.taskForm).then(response => {
- this.$modal.msgSuccess(response.msg);
- this.$emit('goBack');
- });
- }
- }
- })
- },
- // 查询项目列表
- getProjectList() {
- listProject({
- pageNum: 1,
- pageSize: 99999999,
- }).then(response => {
- this.projectList = response.rows;
- });
- },
- // 选择项目
- handleSelectProject(val) {
- if (val != "" && val != undefined && val != null) {
- getProject(val).then(res => {
- this.chooseProject = res.data;
- this.isSelect = true;
- });
- } else {
- this.isSelect = false;
- }
- },
- isEmptyObject(obj) {
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- return false;
- }
- }
- return true;
- },
- getContractDataList() {
- listProjectContract({ projectId: this.taskForm.formId }).then(res => {
- if (res.rows) {
- for (let row of res.rows) {
- getContract(row.contractId).then(res => {
- if (res.data) {
- if (this.form.contractCode != "") {
- this.form.contractCode =
- this.form.contractCode + "、" + res.data.contractCode;
- } else {
- this.form.contractCode = res.data.contractCode;
- }
- if (this.form.contractNumber != "") {
- this.form.contractNumber =
- this.form.contractNumber + "、" + res.data.contractNumber;
- } else {
- this.form.contractNumber = res.data.contractNumber;
- }
- }
- });
- }
- }
- });
- },
- addWorkList() {
- this.settleWorkList.push({
- content: "",
- priceId: "",
- scale: "",
- unit: "",
- groundType: "0",
- price: "",
- workload: 0,
- coefficient: 1,
- settle: 0,
- remark: "",
- });
- },
- addSumWorkList() {
- this.settleSumList.push({
- content: "",
- amount: 0,
- remark: "",
- tableNumber: '0'
- });
- },
- addDeptSettleList() {
- this.deptSettleList.push({
- content: "",
- amount: 0,
- remark: "",
- tableNumber: '1'
- });
- },
- deletWorkItem(index, arr) {
- // let arr = this.settleWorkList;
- if (arr.length == 1) {
- return;
- }
- if (index >= 0 && index < arr.length) {
- arr.splice(index, 1);
- }
- },
- calculateSettle(work) {
- let sum = work.workload * work.coefficient * work.price;
- work.settle = Number(sum).toFixed(2);
- this.calculateSumSettle();
- this.calculateActualSumSettle();
- },
- calculateSumSettle() {
- let sum = 0;
- let arr = this.settleWorkList;
- for (let a of arr) {
- sum = sum + Number(a.settle);
- }
- this.settleSumTr.amount = sum.toFixed(2);
- },
- calculateActualSumSettle() {
- let sum = 0;
- let arr = this.settleSumList;
- for (let a of arr) {
- sum = sum + Number(a.amount);
- }
- this.actualSumSettle = Number(this.settleSumTr.amount) - sum;
- },
- calculateDeptAmount(index){
- debugger
- let num = 0
- let len = this.deptSettleList.length
- if (len > 1){
- if(index == len - 1){
- for(let i = 0; i< index ;i ++){
- num = num + this.deptSettleList[i].amount
- }
- this.deptSettleList[index].amount = this.actualSumSettle - num
- }
- }
- },
- handleChoosePrice(work, index) {
- this.clickWork = work;
- this.clickWork.index = index;
- this.drawer = true;
- },
- getPrice(val) {
- let index = this.clickWork.index;
- this.setValue(this.settleWorkList[index], "scale", val.scaleGrade);
- this.setValue(this.settleWorkList[index], "unit", val.unit);
- this.setValue(this.settleWorkList[index], "groundType", val.groundType);
- this.setValue(this.settleWorkList[index], "price", val.price);
- this.setValue(this.settleWorkList[index], "priceId", val.priceId);
- this.setValue(this.settleWorkList[index], "content", val.content);
- this.calculateSettle(this.settleWorkList[index]);
- this.drawer = false;
- },
- setValue(key, name, val) {
- this.$set(key, name, val);
- },
-
- // 增加数据
- addSettleFn() {
- let settleId = this.taskForm.formId;
- this.form.settleId = settleId;
- getSettle(this.taskForm.formId).then(res=>{
- if(res.data){
- updateSettle(this.form);
- this.addSettleWorkFn(settleId);
- this.addSettleSummaryFn(settleId);
- }else{
- addSettle(this.form).then(res => {
- this.addSettleWorkFn(settleId);
- this.addSettleSummaryFn(settleId);
- });
- }
-
- })
-
- },
- addSettleWorkFn(settleId) {
- for (let work of this.settleWorkList) {
- work.settleId = settleId;
- setTimeout(() => {
- addSettleWork(work);
- }, 500)
- }
- },
- addSettleSummaryFn(settleId) {
- this.settleSumTr.settleId = settleId
- addSettleSummary(this.settleSumTr);
- for (let item of this.settleSumList) {
- item.settleId = settleId;
- setTimeout(() => {
- addSettleSummary(item).then(res=>{
- console.log(item);
- });
- }, 1000)
- }
- for (let item of this.deptSettleList) {
- item.settleId = settleId;
- setTimeout(() => {
- addSettleSummary(item).then(res=>{
- console.log(item);
- });
- }, 1000)
- }
- },
- // 获取数据
- listSettleWorkFn() {
- listSettleWork({ settleId: this.taskForm.formId }).then(res => {
- this.settleWorkList = res.rows;
- for (let work of this.settleWorkList) {
- getPrice(work.priceId).then(res => {
- if (res.data) {
- this.setValue(work, "scale", res.data.scaleGrade);
- this.setValue(work, "unit", res.data.unit);
- if (work.groundType == "0") {
- work.price = res.data.commonPrice;
- } else {
- work.price = res.data.complexPrice;
- }
- }
- });
- }
- });
- },
- listSettleSummaryFn() {
- listSettleSummary({ settleId: this.taskForm.formId }).then(res => {
- this.oldSettleSumList = res.rows;
- for (let s of res.rows) {
- if (s.content == "结算费用合计") {
- this.settleSumTr = s;
- break;
- }
- }
- this.settleSumList = res.rows.filter(
- item => item.tableNumber == "0"
- );
- this.deptSettleList = res.rows.filter(
- item => item.tableNumber == "1"
- );
- this.calculateActualSumSettle();
- });
- },
- // 更新数据
- updateSettleFn() {
- updateSettle(this.form).then(res => {
- if (res.code == 200)
- this.$message.success('保存成功')
- })
- },
- updateSettleWorkFn() {
- delSettleWork([this.taskForm.formId]).then(res => {
- this.addSettleWorkFn(this.taskForm.formId);
- })
- },
- updateSettleSummaryFn() {
- delSettleSummary([this.taskForm.formId]).then(res => {
- this.addSettleSummaryFn(this.taskForm.formId)
- })
- },
- },
- };
- </script>
-
- <style lang="scss" scoped>
- @import "@/assets/styles/element-reset.scss";
-
- .headers {
- position: relative;
- font-weight: bold;
- font-size: 18px;
- padding-left: 40px;
- padding-bottom: 40px;
-
- .line {
- position: absolute;
- left: 22px;
- top: 5px;
- width: 5px;
- height: 14px;
- border-radius: 10px;
- background-color: #2893e5;
- }
- }
-
- table {
- /*边框*/
- /* border: 1px solid black; */
- text-align: center;
- border-collapse: collapse;
- /*设置背景颜色*/
- /* background-color: #bfa; */
- }
-
- h3 {
- font-family: '黑体';
- font-weight: bold;
- }
- </style>
|