zhgdyun/src/views/companyAdmin/material/materialContract.vue

1598 lines
52 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 该页面用于企业后台也用于项目的材料合同 -->
<div class="fullHeight" :class="pageType">
<div class="fullHeight">
<div class="areaTreeBox fullHeight" id="videoTreeBox">
<div class="areaTreeInner whiteBlock fullHeight">
<p class="pageTitle">组织机构</p>
<div class="treeBox">
<vue-scroll v-if="level1CompanyData.length > 0">
<p
class="parentTitle"
:class="searchSn == $store.state.userInfo.sn ? 'active' : ''"
@click="clickFirstLevel"
>
{{ currentCompanyName ? currentCompanyName : '总公司' }}
</p>
<el-tree
ref="companyTree"
:data="level1CompanyData"
@node-click="handleNodeClick"
:props="defaultProps"
node-key="companySn"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span
:class="
data.videoName
? 'videoName'
: data.projectName
? 'projectName'
: data.companyType == 2
? 'companyName2'
: ''
"
>{{ node.label }}</span
>
</span>
</el-tree>
</vue-scroll>
<div class="placeholderBox" v-else>
<img src="@/assets/images/noData2.png" alt="" srcset="" />
<p>{{ $t('message.videoManage.empty') }}</p>
</div>
</div>
</div>
</div>
<div class="rightPanel whiteBlock">
<p class="pageTitle">材料合同</p>
<el-form
:inline="true"
ref="searchForm"
:model="searchForm"
size="medium"
>
<el-form-item label="合同名称" prop="contractName">
<el-input
v-model="searchForm.contractName"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item label="合同编号" prop="contractNumber">
<el-input
v-model="searchForm.contractNumber"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item label="乙方" prop="secondPartyName">
<el-input
v-model="searchForm.secondPartyName"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" plain @click="getContractList"
>查询</el-button
>
<el-button type="warning" plain @click="refreshFn">刷新</el-button>
<el-button type="primary" size="medium" @click="showAddOrEditDialog"
>添加合同</el-button
>
</el-form-item>
</el-form>
<div class="table_wrap whiteBlock">
<el-table class="tables" :data="contractList">
<el-table-column
type="index"
width="50"
align="center"
:label="$t('message.personnelPosition.beaconManage.table.index')"
></el-table-column>
<el-table-column
prop="contractName"
:label="'合同名称'"
align="center"
></el-table-column>
<el-table-column
prop="contractNumber"
:label="'合同编号'"
align="center"
></el-table-column>
<el-table-column
prop="contractAmount"
:label="'合同金额(万元)'"
align="center"
></el-table-column>
<el-table-column
prop="firstPartyName"
:label="'甲方'"
align="center"
></el-table-column>
<el-table-column
prop="secondPartyName"
:label="'乙方'"
align="center"
></el-table-column>
<el-table-column
prop="signTime"
:label="'签约日期'"
align="center"
></el-table-column>
<el-table-column
prop="contractType"
:label="'合同分类'"
align="center"
></el-table-column>
<el-table-column
prop="state"
:label="'状态'"
align="center"
></el-table-column>
<el-table-column
prop="remarks"
:label="'备注'"
align="center"
></el-table-column>
<el-table-column
width="180"
:label="$t('message.deviceManage.operation')"
align="center"
>
<template slot-scope="scope">
<div class="tableBtns">
<div @click="editContractFn(scope.row)" class="operationText">
<img
src="@/assets/images/icon-edit.png"
width="15px"
height="15px"
/>
<span>{{ $t('message.deviceManage.edit') }}</span>
</div>
<div
@click="deleteContractFn(scope.row)"
class="operationText"
>
<img
src="@/assets/images/icon-delete.png"
width="15px"
height="15px"
/>
<span>{{ $t('message.deviceManage.delete') }}</span>
</div>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pagerBox"
@size-change="SizeChange"
@current-change="CurrentChange"
:current-page="pagInfo.pageNo"
:page-sizes="$store.state.PAGESIZRS"
:page-size="pagInfo.pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(pagInfo.total)"
background
></el-pagination>
</div>
</div>
</div>
<!-- 分三步添加合同弹框 1、添加合同基本信息 2、选择合同材料 3、添加合同附加费用 -->
<el-dialog
:title="dialogTitle"
:modal-append-to-body="false"
:visible.sync="addOrEditDialog"
width="1167px"
>
<div class="dialog_content">
<el-steps
class="dialogSteps"
v-if="isAdd"
:space="200"
:active="dialogSteps"
finish-status="success"
align-center
>
<el-step title="合同信息"></el-step>
<el-step title="材料信息"></el-step>
<el-step title="附加费用"></el-step>
</el-steps>
<el-tabs
style="margin-bottom: 5px"
v-model="dialogSteps"
@tab-click="handleTabClick"
v-else
>
<el-tab-pane label="合同信息" name="0"></el-tab-pane>
<el-tab-pane label="材料信息" name="1"></el-tab-pane>
<el-tab-pane label="附加费用" name="2"></el-tab-pane>
</el-tabs>
<div class="contractInfo" v-show="dialogSteps == 0">
<el-form
size="medium"
:model="contractForm"
ref="contractForm"
:rules="contractFormRules"
label-width="150px"
:inline="true"
>
<el-form-item :label="'合同金额(万元)'" prop="contractAmount">
<el-input
v-model="contractForm.contractAmount"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
type="number"
oninput="if(value.length>11)value=value.slice(0,11)"
></el-input>
</el-form-item>
<el-form-item :label="'合同形式'" prop="contractForm">
<el-input
v-model="contractForm.contractForm"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'合同名称'" prop="contractName">
<el-input
v-model="contractForm.contractName"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'合同编号'" prop="contractNumber">
<el-input
v-model="contractForm.contractNumber"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
onkeyup="value=value.replace(/[^\x00-\xff]/g, '')"
></el-input>
</el-form-item>
<el-form-item :label="'合同状态'" prop="contractState">
<el-input
v-model="contractForm.contractState"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'合同分类'" prop="contractType">
<el-input
v-model="contractForm.contractType"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'甲方'" prop="firstPartyName">
<el-input
v-model="contractForm.firstPartyName"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'乙方'" prop="secondPartyName">
<el-input
v-model="contractForm.secondPartyName"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'支付方式'" prop="paymentMethod">
<el-input
v-model="contractForm.paymentMethod"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'签约日期'" prop="signTime">
<el-date-picker
style="width: 200px"
v-model="contractForm.signTime"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item :label="'供货方式'" prop="supplyMaterialType">
<el-input
v-model="contractForm.supplyMaterialType"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'备注信息'" prop="remarks">
<el-input
v-model="contractForm.remarks"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
</el-form>
<div class="dialog-footer">
<el-button
v-show="!isAdd"
class="cancleBtn"
@click="addOrEditDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t('message.companyDiagram.cancel') }}
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveContractInfoFn"
size="medium"
>{{ isAdd ? '下一步' : $t('message.companyDiagram.determine') }}
</el-button>
</div>
</div>
<div class="importMaterialBox" v-show="dialogSteps == 1">
<el-button
style="margin-bottom: 15px"
type="primary"
size="medium"
@click="importMaterial(1)"
>选择本项目材料</el-button
>
<el-table
class="tables"
:data="contractMaterialList"
height="360"
style="min-height: auto"
>
<el-table-column
type="index"
width="50"
align="center"
:label="$t('message.personnelPosition.beaconManage.table.index')"
></el-table-column>
<el-table-column
prop="materialName"
:label="'材料名称'"
align="center"
></el-table-column>
<el-table-column
prop="contractNum"
:label="'合同数量'"
align="center"
></el-table-column>
<el-table-column
prop="taxAmount"
:label="'含税金额(万元)'"
align="center"
></el-table-column>
<el-table-column
prop="taxRate"
:label="'税率(%)'"
align="center"
></el-table-column>
<el-table-column
prop="taxUnitPrice"
:label="'含税单价(元)'"
align="center"
></el-table-column>
<el-table-column
prop="taxlessAmount"
:label="'无税金额(万元)'"
align="center"
></el-table-column>
<el-table-column
prop="taxlessUnitPrice"
:label="'无税单价(元)'"
align="center"
></el-table-column>
<el-table-column
prop="state"
:label="'状态'"
align="center"
></el-table-column>
<el-table-column
prop="remarks"
:label="'备注'"
align="center"
></el-table-column>
<el-table-column
width="180"
:label="$t('message.deviceManage.operation')"
align="center"
>
<template slot-scope="scope">
<div class="tableBtns">
<div @click="editMaterailFn(scope.row)" class="operationText">
<img
src="@/assets/images/icon-edit.png"
width="15px"
height="15px"
/>
<span>{{ $t('message.deviceManage.edit') }}</span>
</div>
<div
@click="deleteMaterailFn(scope.row)"
class="operationText"
>
<img
src="@/assets/images/icon-delete.png"
width="15px"
height="15px"
/>
<span>{{ $t('message.deviceManage.delete') }}</span>
</div>
</div>
</template>
</el-table-column>
</el-table>
<div class="dialog-footer" v-if="isAdd">
<el-button
type="primary"
icon="el-icon-circle-check"
@click="dialogSteps = 2"
size="medium"
>{{ '下一步' }}
</el-button>
</div>
</div>
<div class="importMaterialBox" v-show="dialogSteps == 2">
<el-button
style="margin-bottom: 15px"
type="primary"
size="medium"
@click="addOrEditAdditionCost(true)"
>添加附加费用</el-button
>
<el-table
class="tables"
:data="additionalCostList"
height="360"
style="min-height: auto"
>
<el-table-column
type="index"
width="50"
align="center"
:label="$t('message.personnelPosition.beaconManage.table.index')"
></el-table-column>
<el-table-column
prop="costName"
:label="'费用名称'"
align="center"
></el-table-column>
<el-table-column
prop="costCode"
:label="'费用编号'"
align="center"
></el-table-column>
<el-table-column
prop="costNum"
:label="'数量'"
align="center"
></el-table-column>
<el-table-column
prop="taxAmount"
:label="'含税金额(万元)'"
align="center"
></el-table-column>
<el-table-column
prop="taxRate"
:label="'税率(%)'"
align="center"
></el-table-column>
<el-table-column
prop="taxUnitPrice"
:label="'含税单价(元)'"
align="center"
></el-table-column>
<el-table-column
prop="taxlessAmount"
:label="'无税金额(万元)'"
align="center"
></el-table-column>
<el-table-column
prop="taxlessUnitPrice"
:label="'无税单价(元)'"
align="center"
></el-table-column>
<!-- <el-table-column
prop="state"
:label="'状态'"
align="center"
></el-table-column> -->
<el-table-column
prop="remarks"
:label="'备注'"
align="center"
></el-table-column>
<el-table-column
width="180"
:label="$t('message.deviceManage.operation')"
align="center"
>
<template slot-scope="scope">
<div class="tableBtns">
<div
@click="addOrEditAdditionCost(false, scope.row)"
class="operationText"
>
<img
src="@/assets/images/icon-edit.png"
width="15px"
height="15px"
/>
<span>{{ $t('message.deviceManage.edit') }}</span>
</div>
<div
@click="deleteAdditionCostFn(scope.row)"
class="operationText"
>
<img
src="@/assets/images/icon-delete.png"
width="15px"
height="15px"
/>
<span>{{ $t('message.deviceManage.delete') }}</span>
</div>
</div>
</template>
</el-table-column>
</el-table>
<div class="dialog-footer" v-if="isAdd">
<el-button
type="primary"
icon="el-icon-circle-check"
@click="
addOrEditDialog = false
getContractList()
"
size="medium"
>{{ '完成' }}
</el-button>
</div>
</div>
</div>
</el-dialog>
<!-- 用于为合同选择材料 -->
<el-dialog
title="选择合同材料"
:modal-append-to-body="false"
:visible.sync="selectMaterialDialog"
width="1167px"
>
<div class="dialog_content">
<el-tabs v-model="dialogTabActiveName" @tab-click="showSelectCheck">
<el-tab-pane label="全部材料" name="first">
<div class="" style="overflow: hidden">
<div class="system-left" style="padding: 0; height: 520px">
<vue-scroll class="treeList" style="height: 100% !important">
<div style="padding-top: 10px">
<ul v-for="(name, index) in companyCateList" :key="index">
<li
@click="changeCompanyCate(index, name, 1)"
:class="{
active:
index == dialogCateIndex && dialogCateIndex2 == -1
}"
>
<div class="clickName" style="width: 100%">
<div class="imgbox">
<i
v-if="dialogCateIndex != index"
class="el-icon-caret-right"
></i>
<i v-else class="el-icon-caret-bottom"></i>
</div>
<el-popover
placement="top-start"
v-model="name.visible"
:content="name.categoryName"
>
<span
slot="reference"
@mouseenter="
name.visible =
name.categoryName.length > 9 ? true : false
"
@mouseleave="name.visible = false"
>{{
name.categoryName.length > 9
? name.categoryName.substring(0, 8) + '...'
: name.categoryName
}}</span
>
</el-popover>
</div>
</li>
<ul
v-for="(item, i) in name.children"
id="child"
v-if="dialogCateIndex == index"
:key="i"
>
<li
:class="{
active:
i == dialogCateIndex2 && dialogCateIndex != -1
}"
@click="changeCompanyCate(i, item, 2)"
>
<el-popover
placement="top-start"
v-model="item.visible"
:content="item.categoryName"
>
<div
slot="reference"
@mouseenter="
item.visible =
item.categoryName.length > 9 ? true : false
"
@mouseleave="item.visible = false"
style="display: inline-block; width: 60%"
>
{{
item.categoryName.length > 10
? item.categoryName.substring(0, 9) + '...'
: item.categoryName
}}
</div>
</el-popover>
</li>
</ul>
</ul>
<li
class="title"
style="text-align: center; line-height: 140px"
v-show="companyCateList.length == 0"
>
暂无数据
</li>
</div>
</vue-scroll>
</div>
<div class="system-right">
<el-table
ref="multipleTable"
style="min-height: auto"
height="520px"
:data="companyMaterialList"
class="tables"
@select="handleSelectionChange"
@select-all="handleSelectionChange"
>
<el-table-column
type="selection"
label=""
width="55"
align="center"
></el-table-column>
<el-table-column
prop="materialName"
label="材料名称"
align="center"
>
</el-table-column>
<el-table-column
prop="materialCode"
label="材料编码"
align="center"
></el-table-column>
<el-table-column
prop="computeUnit"
label="计算单位"
align="center"
></el-table-column>
<el-table-column
prop="materialSpecifications"
label="规格型号"
align="center"
></el-table-column>
<el-table-column
prop="materialSpecifications"
label="正负差"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.deviationType">
{{ scope.row.adjustStartValue
}}{{ scope.row.deviationType == 1 ? '%' : '' }} ~
{{ scope.row.adjustEndValue
}}{{ scope.row.deviationType == 1 ? '%' : '' }}
</span>
</template>
</el-table-column>
</el-table>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="已选材料" name="second">
<el-table height="552px" :data="multipleSelection" class="tables">
<el-table-column
type="index"
label="序号"
width="100"
align="center"
></el-table-column>
<el-table-column
prop="materialName"
label="材料名称"
align="center"
>
</el-table-column>
<el-table-column
prop="materialCode"
label="材料编码"
align="center"
></el-table-column>
<el-table-column
prop="computeUnit"
label="计算单位"
align="center"
></el-table-column>
<el-table-column
prop="materialSpecifications"
label="规格型号"
align="center"
></el-table-column>
<el-table-column
prop="materialSpecifications"
label="正负差"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.deviationType">
{{ scope.row.adjustStartValue
}}{{ scope.row.deviationType == 1 ? '%' : '' }} ~
{{ scope.row.adjustEndValue
}}{{ scope.row.deviationType == 1 ? '%' : '' }}
</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button
@click="removeSelect(scope.$index)"
type="text"
size="small"
style="color: red"
icon="el-icon-delete"
>
<span style="font-size: 14px">移除</span>
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<div class="dialog-footer">
<el-button
@click="selectMaterialDialog = false"
size="medium"
icon="el-icon-circle-close"
> </el-button
>
<el-button
type="primary"
@click="saveImportMaterial()"
size="medium"
icon="el-icon-circle-check"
> </el-button
>
</div>
</div>
</el-dialog>
<!-- 修改材料信息 -->
<el-dialog
title="修改材料信息"
:modal-append-to-body="false"
:visible.sync="editMaterialDialog"
width="667px"
>
<div class="dialog_content">
<el-form
size="medium"
:model="materialInfoForm"
ref="materialInfoForm"
:rules="materialInfoFormRules"
label-width="100px"
>
<el-form-item :label="'材料名称'" prop="materialName">
<el-input
disabled
v-model="materialInfoForm.materialName"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'合同数量'" prop="contractNum">
<el-input
v-model="materialInfoForm.contractNum"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'含税金额(万元)'" prop="taxAmount">
<el-input
v-model="materialInfoForm.taxAmount"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'税率(%)'" prop="taxRate">
<el-input
v-model="materialInfoForm.taxRate"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'含税单价(元)'" prop="taxUnitPrice">
<el-input
v-model="materialInfoForm.taxUnitPrice"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'无税金额(万元)'" prop="taxlessAmount">
<el-input
v-model="materialInfoForm.taxlessAmount"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'无税单价(元)'" prop="taxlessUnitPrice">
<el-input
v-model="materialInfoForm.taxlessUnitPrice"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'状态'" prop="state">
<el-input
v-model="materialInfoForm.state"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'备注信息'" prop="remarks">
<el-input
v-model="materialInfoForm.remarks"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
</el-form>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="editMaterialDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t('message.companyDiagram.cancel') }}
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveMaterailInfoFn"
size="medium"
>{{ $t('message.companyDiagram.determine') }}
</el-button>
</div>
</div>
</el-dialog>
<!-- 添加或编辑合同的附加费用 -->
<el-dialog
:modal-append-to-body="false"
:title="isAddAdditionalCost ? '添加附加费用' : '编辑附加费用'"
:visible.sync="additionalCostDialog"
width="667px"
>
<div class="dialog_content">
<el-form
size="medium"
:model="additionalCostForm"
ref="additionalCostForm"
:rules="additionalCostFormRules"
label-width="100px"
>
<el-form-item :label="'费用名称'" prop="costName">
<el-input
v-model="additionalCostForm.costName"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'费用编码'" prop="costCode">
<el-input
v-model="additionalCostForm.costCode"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
<el-form-item :label="'数量'" prop="costNum">
<el-input
v-model="additionalCostForm.costNum"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
type="number"
></el-input>
</el-form-item>
<el-form-item :label="'含税金额(万元)'" prop="taxAmount">
<el-input
v-model="additionalCostForm.taxAmount"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
type="number"
></el-input>
</el-form-item>
<el-form-item :label="'税率(%)'" prop="taxRate">
<el-input
v-model="additionalCostForm.taxRate"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
type="number"
oninput="if(value > 100) value = 100; if(value < 0 || value == '' || value == null) value = ''; if(value.length>3)value=value.slice(0,3);"
></el-input>
</el-form-item>
<el-form-item :label="'含税单价(元)'" prop="taxUnitPrice">
<el-input
v-model="additionalCostForm.taxUnitPrice"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
type="number"
></el-input>
</el-form-item>
<el-form-item :label="'无税金额(万元)'" prop="taxlessAmount">
<el-input
v-model="additionalCostForm.taxlessAmount"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
type="number"
></el-input>
</el-form-item>
<el-form-item :label="'无税单价(元)'" prop="taxlessUnitPrice">
<el-input
v-model="additionalCostForm.taxlessUnitPrice"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
type="number"
></el-input>
</el-form-item>
<!-- <el-form-item :label="'状态'" prop="state">
<el-input
v-model="additionalCostForm.state"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item> -->
<el-form-item :label="'备注信息'" prop="remarks">
<el-input
v-model="additionalCostForm.remarks"
:placeholder="$t('message.companyDiagram.PleaseEnter')"
></el-input>
</el-form-item>
</el-form>
<div class="dialog-footer">
<el-button
class="cancleBtn"
@click="additionalCostDialog = false"
icon="el-icon-circle-close"
size="medium"
>{{ $t('message.companyDiagram.cancel') }}
</el-button>
<el-button
type="primary"
icon="el-icon-circle-check"
@click="saveContractAdditionalInfoFn"
size="medium"
>{{ $t('message.companyDiagram.determine') }}
</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import { getComapnyStatisticsListApi } from '@/assets/js/api/company/project'
import {
addprocurementContractInfoApi,
editprocurementContractInfoApi,
deleteprocurementContractInfoApi,
procurementContractInfoListApi,
addprocurementContractMaterialApi,
editprocurementContractMaterialApi,
deleteprocurementContractMaterialApi,
procurementContractMaterialListApi,
addprocurementContractSurchargeApi,
editprocurementContractSurchargeApi,
deleteprocurementContractSurchargeApi,
procurementContractSurchargeListApi,
materialCategoryListApi,
materialRecordListApi
} from '@/assets/js/api/materialManage'
export default {
data() {
return {
level1CompanyData: [],
defaultProps: {
children: 'list',
label: 'name'
},
searchSn: '',
isAdd: true,
dialogTitle: '添加合同',
addOrEditDialog: false,
dialogSteps: 0,
contractForm: {
contractAmount: '',
contractFile: '',
contractForm: '',
contractName: '',
contractNumber: '',
contractState: '',
contractType: '',
firstPartyName: '',
paymentMethod: '',
remarks: '',
secondPartyName: '',
signTime: '',
sn: '',
supplyMaterialType: '',
type: 1
},
// additionalCostForm: {
// costCode: "",
// costName: "",
// costNum: 0,
// remarks: "",
// state: 0,
// taxAmount: 0,
// taxRate: 0,
// taxUnitPrice: 0,
// taxlessAmount: 0,
// taxlessUnitPrice: 0,
// },
contractFormRules: {
contractAmount: [{ required: true, message: '必填', trigger: 'blur' }],
contractName: [{ required: true, message: '必填', trigger: 'blur' }],
contractNumber: [{ required: true, message: '必填', trigger: 'blur' }],
firstPartyName: [{ required: true, message: '必填', trigger: 'blur' }],
secondPartyName: [{ required: true, message: '必填', trigger: 'blur' }],
signTime: [{ required: true, message: '必选', trigger: 'blur' }]
},
//选择材料所用变量 --- start
dialogCateIndex: 0,
dialogCateIndex2: -1,
dialogTabActiveName: 'first',
selectMaterialDialog: false,
companyCateList: [],
companyMaterialList: [],
multipleSelection: [],
//选择材料所用变量 --- end
contractList: [],
pagInfo: {
pageNo: 1, //页数
pageSize: 10, //条数
total: 0 //总条数
},
searchForm: {
contractName: '',
contractNumber: '',
secondPartyName: ''
},
// 材料信息
contractMaterialList: [],
editMaterialDialog: false,
materialInfoForm: {},
materialInfoFormRules: {},
//附加费用
additionalCostList: [],
additionalCostDialog: false,
additionalCostForm: {
contractId: 0,
costCode: '',
costName: '',
costNum: 0,
remarks: '',
state: 0,
taxAmount: 0,
taxRate: 0,
taxUnitPrice: 0,
taxlessAmount: 0,
taxlessUnitPrice: 0
},
isAddAdditionalCost: true,
additionalCostFormRules: {
costName: [{ required: true, message: '必填', trigger: 'blur' }],
costCode: [{ required: true, message: '必填', trigger: 'blur' }],
costNum: [{ required: true, message: '必填', trigger: 'blur' }]
},
currentCompanyName: '',
pageType: 'companyAdmin' //该页面用于企业后台和项目层级 companyAdmin代表是企业后台 project代表是项目层级
}
},
mounted() {
this.searchSn = this.$store.state.userInfo.sn
if (this.$route.path.indexOf('/project/') != -1) {
this.pageType = 'project'
} else {
this.loadData()
}
this.getContractList()
},
methods: {
//显示选择材料弹框
importMaterial(type) {
this.multipleSelection = []
this.dialogCateIndex = 0
;(this.dialogCateIndex2 = -1), (this.dialogTabActiveName = 'first')
this.loadCompanyCateList(type)
this.selectMaterialDialog = true
this.$nextTick(() => {
this.$refs.multipleTable.clearSelection()
})
},
//企业类别切换
changeCompanyCate(index, data, type) {
if (type == 1) {
this.dialogCateIndex2 = -1
this.dialogCateIndex = index
} else {
this.dialogCateIndex2 = index
}
this.loadCompanyMaterialList(data.id)
},
//获取企业的材料分类
loadCompanyCateList(type) {
let param = {
sn:
this.pageType == 'companyAdmin'
? this.$store.state.userInfo.headquartersSn
: this.searchSn
}
materialCategoryListApi(param).then((res) => {
this.companyCateList = res.result
if (this.companyCateList.length > 0) {
this.loadCompanyMaterialList(this.companyCateList[0].id)
}
})
},
//按企业分类获取材料列表
loadCompanyMaterialList(id) {
let param = {
categoryId: id
}
materialRecordListApi(param).then((res) => {
this.companyMaterialList = res.result
this.showSelectCheck()
})
},
handleSelectionChange(val) {
console.log('此次选中', val)
this.duplicateRemoval(val, this.multipleSelection)
},
//表格选中去重
duplicateRemoval(arr, arr2) {
let selectId = 0
if (this.dialogCateIndex2 == -1) {
selectId = this.companyCateList[this.dialogCateIndex].id
} else {
selectId =
this.companyCateList[this.dialogCateIndex].children[
this.dialogCateIndex2
].id
}
this.multipleSelection = []
for (let index2 = 0; index2 < arr2.length; index2++) {
const element2 = arr2[index2]
if (selectId == element2.categoryId) {
} else {
this.multipleSelection.push(element2)
}
}
this.multipleSelection = this.multipleSelection.concat(arr)
},
//表格checkbox选中
showSelectCheck() {
this.$nextTick(() => {
//
if (this.multipleSelection.length > 0) {
this.multipleSelection.forEach((row) => {
this.companyMaterialList.forEach((element) => {
if (element.id == row.id) {
this.$refs.multipleTable.toggleRowSelection(element)
}
})
})
} else {
this.$refs.multipleTable.clearSelection()
}
})
},
//移除已选的材料
removeSelect(index) {
this.multipleSelection.splice(index, 1)
},
//保存已选的材料到合同去
saveImportMaterial() {
let arr = []
if (this.multipleSelection.length == 0) {
this.$message.error('请选择材料')
return
} else {
this.multipleSelection.forEach((element) => {
arr.push(element.id)
})
}
let json = {
materialIds: arr.join(','),
contractId: this.contractForm.id
}
addprocurementContractMaterialApi(json).then((res) => {
this.selectMaterialDialog = false
this.$message.success('保存成功')
this.getContractMaterialList()
})
},
//显示添加合同弹框
showAddOrEditDialog() {
this.dialogTitle = '添加合同'
this.contractMaterialList = []
this.additionalCostList = []
this.addOrEditDialog = true
this.dialogSteps = 0
this.isAdd = true
this.$nextTick(() => {
this.$refs['contractForm'].resetFields()
})
},
loadData() {
getComapnyStatisticsListApi({
sn: this.searchSn
}).then((res) => {
this.level1CompanyData = res.result.companyList
? res.result.companyList
: res.result.projectList
if (res.result.companyInfo) {
this.currentCompanyName = res.result.companyInfo.companyName
}
})
},
//树的点击
handleNodeClick(data) {
if (data.projectSn) {
this.searchSn = data.projectSn
} else {
this.searchSn = data.companySn
}
this.getContractList()
},
//总公司层级点击
clickFirstLevel() {
this.$refs.companyTree.setCurrentKey(null)
this.searchSn = this.$store.state.userInfo.sn
this.getContractList()
},
//保存合同基本信息
saveContractInfoFn() {
this.$refs['contractForm'].validate((valid) => {
if (valid) {
if (this.isAdd) {
this.contractForm.sn = this.searchSn
addprocurementContractInfoApi(this.contractForm).then((res) => {
this.dialogSteps = 1
this.contractForm = res.result
})
} else {
editprocurementContractInfoApi(this.contractForm).then((res) => {
this.$message.success(res.message)
})
}
} else {
console.log('error submit!!')
return false
}
})
},
SizeChange(val) {
this.pagInfo.pageSize = val
this.getContractList()
},
CurrentChange(val) {
this.pagInfo.pageNo = val
this.getContractList()
},
//重置合同列表的搜索参数
refreshFn() {
this.$refs['searchForm'].resetFields()
this.pagInfo.pageNo = 1
this.getContractList()
},
//获取合同列表
getContractList() {
let json = this.searchForm
json.pageNo = this.pagInfo.pageNo
json.pageSize = this.pagInfo.pageSize
json.sn = this.searchSn
procurementContractInfoListApi(json).then((result) => {
this.contractList = result.result.records
this.pagInfo.total = result.result.total
})
},
//获取合同的材料列表
getContractMaterialList() {
procurementContractMaterialListApi({
contractId: this.contractForm.id
}).then((result) => {
this.contractMaterialList = result.result
})
},
//显示编辑合同信息弹框
editContractFn(item) {
this.isAdd = false
this.contractForm = JSON.parse(JSON.stringify(item))
this.addOrEditDialog = true
this.dialogTitle = '编辑合同'
this.dialogSteps = '0'
},
//删除合同信息
deleteContractFn(obj) {
this.$confirm(
this.$t('message.personnelPosition.beaconManage.table.confirmText') +
'【' +
obj.contractName +
'】?',
this.$t('message.personnelPosition.beaconManage.table.Tips'),
{
confirmButtonText: this.$t(
'message.personnelPosition.confirmButtonText'
),
cancelButtonText: this.$t(
'message.personnelPosition.cancelButtonText'
),
type: 'warning'
}
).then(() => {
deleteprocurementContractInfoApi({ id: obj.id }).then((result) => {
this.$message.success(result.message)
this.getContractList()
})
})
},
//编辑合同时tab切换
handleTabClick() {
if (this.dialogSteps == '1') {
this.getContractMaterialList()
} else if (this.dialogSteps == '2') {
this.getContractAdditionalCostList()
}
},
//显示编辑材料弹框
editMaterailFn(item) {
console.log(item)
this.editMaterialDialog = true
this.materialInfoForm = JSON.parse(JSON.stringify(item))
},
//保存材料信息
saveMaterailInfoFn() {
editprocurementContractMaterialApi(this.materialInfoForm).then(
(result) => {
this.$message.success(result.message)
this.editMaterialDialog = false
this.getContractMaterialList()
}
)
},
//删掉材料
deleteMaterailFn(obj) {
this.$confirm(
this.$t('message.personnelPosition.beaconManage.table.confirmText') +
'【' +
obj.materialName +
'】?',
this.$t('message.personnelPosition.beaconManage.table.Tips'),
{
confirmButtonText: this.$t(
'message.personnelPosition.confirmButtonText'
),
cancelButtonText: this.$t(
'message.personnelPosition.cancelButtonText'
),
type: 'warning'
}
).then(() => {
deleteprocurementContractMaterialApi({ id: obj.id }).then((result) => {
this.$message.success(result.message)
this.getContractMaterialList()
})
})
},
//显示添加或编辑附加费用弹框
addOrEditAdditionCost(type, item) {
this.isAddAdditionalCost = type
if (!type) {
this.additionalCostForm = JSON.parse(JSON.stringify(item))
}
this.additionalCostDialog = true
},
//保存合同附加费用
saveContractAdditionalInfoFn() {
this.$refs['additionalCostForm'].validate((valid) => {
if (valid) {
if (this.isAddAdditionalCost) {
this.additionalCostForm.contractId = this.contractForm.id
addprocurementContractSurchargeApi(this.additionalCostForm).then(
(res) => {
this.additionalCostDialog = false
this.$message.success(res.message)
this.getContractAdditionalCostList()
}
)
} else {
editprocurementContractSurchargeApi(this.additionalCostForm).then(
(res) => {
this.additionalCostDialog = false
this.$message.success(res.message)
this.getContractAdditionalCostList()
}
)
}
} else {
console.log('error submit!!')
return false
}
})
},
// 获取合同的附加费用列表
getContractAdditionalCostList() {
procurementContractSurchargeListApi({
contractId: this.contractForm.id
}).then((result) => {
this.additionalCostList = result.result
})
},
//删掉附加费用
deleteAdditionCostFn(obj) {
this.$confirm(
this.$t('message.personnelPosition.beaconManage.table.confirmText') +
'【' +
obj.costName +
'】?',
this.$t('message.personnelPosition.beaconManage.table.Tips'),
{
confirmButtonText: this.$t(
'message.personnelPosition.confirmButtonText'
),
cancelButtonText: this.$t(
'message.personnelPosition.cancelButtonText'
),
type: 'warning'
}
).then(() => {
deleteprocurementContractSurchargeApi({ id: obj.id }).then((result) => {
this.$message.success(result.message)
this.getContractAdditionalCostList()
})
})
}
}
}
</script>
<style lang="less" scoped>
.parentTitle {
padding: 5px 30px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
&.active {
background-color: rgba(81, 129, 246, 0.14);
color: #5181f6;
}
}
.areaTreeBox {
float: left;
position: relative;
/deep/.el-tree {
font-size: 15px;
width: 100%;
background-color: transparent;
.el-tree-node {
white-space: normal;
&:focus > .el-tree-node__content {
background-color: transparent;
}
&.is-current > .el-tree-node__content {
background-color: rgba(81, 129, 246, 0.14);
color: #5181f6;
}
}
.el-tree-node__content {
// height: 32px;
padding: 7px 0;
height: auto;
line-height: 16px;
position: relative;
// margin-bottom: 7px;
&:hover {
background-color: rgba(81, 129, 246, 0.14);
color: #5181f6;
}
.videoName {
font-size: 14px;
}
.projectName {
font-size: 14px;
// width: calc(100% - 55px);
display: inline-block;
}
.companyName2 {
font-size: 16px;
font-weight: bold;
}
}
.el-tree-node__expand-icon {
font-size: 16px;
padding: 0 6px;
&.is-leaf {
color: transparent !important;
}
}
.treeTitle {
background-color: #f7f7f7;
margin-bottom: 10px;
}
}
}
.areaTreeInner {
// background-color: rgba(0, 0, 0, 0.7);
width: 300px;
padding: 20px 15px;
height: calc(100% - 40px);
}
.treeBox {
height: calc(100% - 42px);
background-color: rgba(216, 216, 216, 0.2);
padding-top: 10px;
}
.rightPanel {
float: left;
width: calc(100% - 330px - 20px - 30px);
margin-left: 20px;
padding: 20px 15px;
height: calc(100% - 40px);
}
.dialogSteps {
justify-content: center;
margin-bottom: 30px;
}
.system-left {
float: left;
width: 330px;
padding: 20px 15px;
height: calc(100% - 40px);
background-color: white;
.treeList {
background-color: rgba(216, 216, 216, 0.2);
height: calc(100% - 42px) !important;
}
li {
cursor: pointer;
font-size: 16px;
line-height: 32px;
letter-spacing: 1px;
font-weight: bold;
.clickName {
width: calc(100% - 176px);
.imgbox {
display: inline-block;
margin: 0 6px 0 13px;
font-size: 16px;
}
}
}
li:hover,
.active {
// background: linear-gradient(270deg, white, #b7d8ff 100%);
background-color: rgba(81, 129, 246, 0.14);
color: @--color-primary;
}
#child {
li {
font-size: 15px;
padding-left: 39px;
font-weight: normal;
}
}
}
.system-right {
float: right;
// margin-right: 1.5%;
margin-left: 20px;
width: calc(100% - 360px - 20px - 30px);
// min-height: 620px;
height: calc(100% - 40px);
// border: 1px solid #e9e9e9;
background-color: white;
padding: 20px 15px;
}
.project {
.areaTreeBox {
display: none;
}
.rightPanel {
width: 100%;
margin-left: 0;
}
}
</style>