1793 lines
80 KiB
Vue
1793 lines
80 KiB
Vue
<template>
|
|
<div>
|
|
<el-form
|
|
:model="addAndEditForm"
|
|
:rules="addAndEditRules"
|
|
ref="addAndEditFormRef"
|
|
label-width="0px"
|
|
label-position="top"
|
|
:disabled="formType === 2"
|
|
>
|
|
<el-row :gutter="20">
|
|
<el-col :span="12">
|
|
<el-form-item label="标书名称" prop="name">
|
|
<el-input
|
|
clearable
|
|
maxlength="30"
|
|
show-word-limit
|
|
placeholder="请输入标书名称"
|
|
v-model="addAndEditForm.name"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<div class="card-box">
|
|
<div class="title-box">
|
|
<div> 公司业绩 </div>
|
|
<el-button
|
|
type="text"
|
|
v-if="formType !== 2"
|
|
icon="el-icon-circle-plus"
|
|
@click="addCompanyPerformance"
|
|
>添加</el-button
|
|
>
|
|
</div>
|
|
|
|
<!-- 公司业绩 -->
|
|
<el-table stripe style="width: 100%" :data="companyPerformanceList">
|
|
<el-table-column label="序号" width="55" type="index" />
|
|
<el-table-column align="center" label="工程名称" prop="proName" show-overflow-tooltip />
|
|
<el-table-column align="center" label="电压等级" prop="voltage" show-overflow-tooltip />
|
|
<el-table-column align="center" label="变电站座数" prop="stationNum" show-overflow-tooltip />
|
|
<el-table-column
|
|
align="center"
|
|
label="线路建设规模(折单公里)"
|
|
prop="lineScale"
|
|
show-overflow-tooltip
|
|
/>
|
|
<el-table-column align="center" label="竣工日期" prop="stopTime" show-overflow-tooltip />
|
|
<el-table-column align="center" label="承包范围" prop="contractRang" show-overflow-tooltip />
|
|
<el-table-column align="center" label="业主单位" prop="ownerUnit" show-overflow-tooltip />
|
|
<el-table-column align="center" label="业主单位联系方式" prop="ownerPhone" show-overflow-tooltip />
|
|
<el-table-column align="center" label="操作" v-if="formType !== 2" width="80">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
style="color: #f56c6c"
|
|
icon="el-icon-delete"
|
|
@click="deleteCompanyPerformance(scope.$index)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
|
|
<div class="card-box">
|
|
<div class="title-box">
|
|
<div> 公司关键人员 </div>
|
|
<el-button
|
|
icon="el-icon-circle-plus"
|
|
type="text"
|
|
@click="addCompanyKeyPerson"
|
|
v-if="formType !== 2"
|
|
>
|
|
添加
|
|
</el-button>
|
|
</div>
|
|
|
|
<!-- 公司关键人员 -->
|
|
<el-table :data="companyKeyPersonList" stripe style="width: 100%">
|
|
<el-table-column label="序号" width="55" type="index" />
|
|
<el-table-column align="center" label="姓名">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
size="mini"
|
|
v-if="scope.row.userName === ''"
|
|
@click="selectCompanyKeyPerson(scope.$index)"
|
|
>
|
|
选择
|
|
</el-button>
|
|
|
|
<span v-else>
|
|
{{ scope.row.userName }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="职称" prop="title" show-overflow-tooltip />
|
|
<el-table-column align="center" label="职业资格证书/身份证" width="200">
|
|
<template slot-scope="{ row }">
|
|
<span>
|
|
{{ row.diploma }}
|
|
</span>
|
|
<br />
|
|
<span>
|
|
{{ row.idCard }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="在本施工队伍中的职责分工" width="160">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
clearable
|
|
maxlength="20"
|
|
show-word-limit
|
|
placeholder="请输入"
|
|
v-if="formType !== 2"
|
|
v-model="scope.row.postName"
|
|
:ref="`comKeyPostName_${scope.$index}`"
|
|
/>
|
|
<span v-else>
|
|
{{ scope.row.postName }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="计划入场时间" width="160">
|
|
<template slot-scope="scope">
|
|
<el-date-picker
|
|
type="date"
|
|
clearable
|
|
style="width: 100%"
|
|
placeholder="选择日期"
|
|
v-if="formType !== 2"
|
|
value-format="yyyy-MM-dd"
|
|
v-model="scope.row.einDate"
|
|
:ref="`comKeyEinDate_${scope.$index}`"
|
|
@change="onChangeEinDate(scope.$index, $event)"
|
|
/>
|
|
<span v-else>
|
|
{{ scope.row.einDate }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="计划退场时间" width="160">
|
|
<template slot-scope="scope">
|
|
<el-date-picker
|
|
type="date"
|
|
clearable
|
|
style="width: 100%"
|
|
v-if="formType !== 2"
|
|
placeholder="选择日期"
|
|
value-format="yyyy-MM-dd"
|
|
v-model="scope.row.exitDate"
|
|
:ref="`comKeyExitDate_${scope.$index}`"
|
|
@change="onChangeExitDate(scope.$index, $event)"
|
|
/>
|
|
<span v-else>
|
|
{{ scope.row.exitDate }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="近年同类工程业绩">
|
|
<template slot-scope="{ row }">
|
|
{{ row.proPerf }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="操作" show-overflow-tooltip v-if="formType !== 2" width="80">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
style="color: #f56c6c"
|
|
icon="el-icon-delete"
|
|
@click="deleteCompanyKeyPerson(scope.$index, scope.row.key)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
|
|
<div class="card-box">
|
|
<!-- 公司其他人员 -->
|
|
<div class="title-box">
|
|
<div> 公司其他人员 </div>
|
|
<el-button
|
|
type="text"
|
|
v-if="formType !== 2"
|
|
icon="el-icon-circle-plus"
|
|
@click="addCompanyOtherPerson"
|
|
>
|
|
添加
|
|
</el-button>
|
|
</div>
|
|
|
|
<el-table :data="companyOtherPersonList" stripe style="width: 100%">
|
|
<el-table-column label="序号" width="55" type="index" />
|
|
<el-table-column align="center" label="在本次标书中的职务">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
clearable
|
|
maxlength="20"
|
|
show-word-limit
|
|
placeholder="请输入"
|
|
v-if="formType !== 2"
|
|
v-model="scope.row.postName"
|
|
:ref="`comOtherPostName_${scope.$index}`"
|
|
/>
|
|
<span v-else>
|
|
{{ scope.row.postName }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="姓名">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
size="mini"
|
|
v-if="scope.row.userName === ''"
|
|
@click="selectCompanyOtherPerson(scope.$index)"
|
|
>
|
|
选择
|
|
</el-button>
|
|
<span v-else>
|
|
{{ scope.row.userName }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="职称" show-overflow-tooltip prop="title" />
|
|
<el-table-column align="center" label="证书名称" show-overflow-tooltip prop="diploma" />
|
|
<el-table-column align="center" label="级别" show-overflow-tooltip prop="level" />
|
|
<el-table-column align="center" label="证书编号" show-overflow-tooltip prop="diplomaNum" />
|
|
<el-table-column align="center" label="专业" show-overflow-tooltip prop="major" />
|
|
<el-table-column align="center" label="操作" v-if="formType !== 2" width="80">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
style="color: #f56c6c"
|
|
icon="el-icon-delete"
|
|
@click="deleteCompanyOtherPerson(scope.$index)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
|
|
<div class="card-box">
|
|
<!-- 分包商 -->
|
|
<div class="title-box">
|
|
<div> 分包商 </div>
|
|
<el-button icon="el-icon-circle-plus" type="text" @click="addSubcontractor" v-if="formType !== 2">
|
|
添加
|
|
</el-button>
|
|
</div>
|
|
|
|
<div class="subcontractor-box" v-if="subcontractorList.length > 0">
|
|
<div v-for="(item, index) in subcontractorList" :key="item.id" class="subcontractor-item-box">
|
|
<div class="subcontractor-item">
|
|
<span>
|
|
{{ item.subName }}
|
|
</span>
|
|
<el-button
|
|
type="text"
|
|
style="color: #f56c6c"
|
|
v-if="formType !== 2"
|
|
icon="el-icon-delete"
|
|
@click="deleteSubcontractor(index)"
|
|
/>
|
|
</div>
|
|
<!-- 分包商业绩添加 -->
|
|
<div class="title-box-subcontractor">
|
|
<div> 公司业绩 </div>
|
|
<el-button
|
|
type="text"
|
|
v-if="formType !== 2"
|
|
icon="el-icon-circle-plus"
|
|
@click="addSubcontractorPerformance(index, item.id)"
|
|
>
|
|
添加
|
|
</el-button>
|
|
</div>
|
|
<!-- 分包商公司业绩列表 -->
|
|
<el-table :data="item.companyPerformanceList" stripe style="width: 100%">
|
|
<el-table-column label="序号" width="55" type="index" />
|
|
<el-table-column
|
|
align="center"
|
|
prop="proName"
|
|
label="项目名称(按合同)"
|
|
show-overflow-tooltip
|
|
/>
|
|
<el-table-column align="center" label="电压等级" prop="voltage" show-overflow-tooltip />
|
|
<el-table-column align="center" label="建设单位" prop="consUnit" show-overflow-tooltip />
|
|
<el-table-column
|
|
align="center"
|
|
label="分包合同额(万元)"
|
|
prop="money"
|
|
show-overflow-tooltip
|
|
/>
|
|
<el-table-column align="center" label="开竣工日期" prop="startDate">
|
|
<template slot-scope="{ row }"> {{ row.startTime }} 至{{ row.endTime }} </template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="操作" v-if="formType !== 2" width="80">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
icon="el-icon-delete"
|
|
style="color: #f56c6c"
|
|
@click="deleteSubcontractorPerformance(index, scope.$index, scope.row.id)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<div class="title-box-subcontractor">
|
|
<div> 拟派人员 </div>
|
|
<el-button
|
|
type="text"
|
|
v-if="formType !== 2"
|
|
icon="el-icon-circle-plus"
|
|
@click="addSubcontractorPerson(index, item.id)"
|
|
>
|
|
添加
|
|
</el-button>
|
|
</div>
|
|
|
|
<!-- 分包人员 -->
|
|
<el-table :data="item.subcontractorPersonList" stripe style="width: 100%">
|
|
<el-table-column label="序号" width="55" type="index" />
|
|
<el-table-column align="center" label="姓名">
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
size="mini"
|
|
v-if="scope.row.userName === ''"
|
|
@click="selectSubcontractorPerson(index, scope.$index)"
|
|
>
|
|
选择
|
|
</el-button>
|
|
|
|
<span v-else>
|
|
{{ scope.row.userName }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="职称" prop="title" show-overflow-tooltip />
|
|
<el-table-column align="center" label="执业资格证书/身份证" width="200">
|
|
<template slot-scope="{ row }">
|
|
<span>
|
|
{{ row.diploma }}
|
|
</span>
|
|
<br />
|
|
<span>
|
|
{{ row.idCard }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="在本施工队伍中的职责分工" width="160">
|
|
<template slot-scope="scope">
|
|
<el-input
|
|
clearable
|
|
maxlength="20"
|
|
show-word-limit
|
|
placeholder="请输入"
|
|
v-if="formType !== 2"
|
|
v-model="scope.row.postName"
|
|
:ref="`comSubcontractorPostName_${index}_${scope.$index}`"
|
|
/>
|
|
<span v-else>
|
|
{{ scope.row.postName }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="近年同类工程业绩">
|
|
<template slot-scope="{ row }">
|
|
{{ row.proPerf }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column
|
|
align="center"
|
|
label="操作"
|
|
show-overflow-tooltip
|
|
v-if="formType !== 2"
|
|
width="80"
|
|
>
|
|
<template slot-scope="scope">
|
|
<el-button
|
|
type="text"
|
|
style="color: #f56c6c"
|
|
icon="el-icon-delete"
|
|
@click="deleteSubcontractorPerson(index, scope.$index)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-form>
|
|
|
|
<!-- 操作按钮 -->
|
|
<el-row style="text-align: right; border-top: 1px solid #e5e5e5; padding-top: 10px">
|
|
<el-button @click="onCancel" style="margin-right: 10px">{{ formType !== 2 ? '取消' : '关闭' }}</el-button>
|
|
<el-button type="primary" @click="onConfirm" v-if="formType !== 2">确定</el-button>
|
|
</el-row>
|
|
|
|
<!-- 选择业绩等业务弹框 -->
|
|
<DialogModel :dialogConfig="dialogConfig" @closeDialogOuter="closeDialogOuter">
|
|
<template slot="outerContent">
|
|
<!-- 关键人员和公司业绩选择 -->
|
|
<template
|
|
v-if="dialogConfig.outerTitle === '关键人员选择' || dialogConfig.outerTitle === '公司业绩选择'"
|
|
>
|
|
<div class="title" v-if="dialogConfig.outerTitle === '关键人员选择'"> 拟派人员 </div>
|
|
<el-row :gutter="20">
|
|
<el-col :span="5">
|
|
<el-select
|
|
clearable
|
|
filterable
|
|
@change="onChangePerson"
|
|
placeholder="请选择人员"
|
|
v-if="dialogConfig.outerTitle === '关键人员选择'"
|
|
v-model="companyPerformanceQueryParams.personId"
|
|
>
|
|
<el-option
|
|
:key="item.id"
|
|
:value="item.id + ''"
|
|
:label="item.userName"
|
|
v-for="item in keyPersonList"
|
|
/>
|
|
</el-select>
|
|
</el-col>
|
|
</el-row>
|
|
<div class="title" v-if="dialogConfig.outerTitle === '关键人员选择'"> 人员业绩选择 </div>
|
|
<el-form
|
|
inline
|
|
label-width="0"
|
|
ref="companyPerformanceFormRef"
|
|
:model="companyPerformanceQueryParams"
|
|
>
|
|
<el-row :gutter="20">
|
|
<el-col :span="5">
|
|
<el-form-item prop="proName">
|
|
<el-input
|
|
clearable
|
|
placeholder="工程名称"
|
|
v-model="companyPerformanceQueryParams.proName"
|
|
>
|
|
</el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="5">
|
|
<el-form-item prop="voltage">
|
|
<el-input
|
|
clearable
|
|
placeholder="电压等级"
|
|
v-model="companyPerformanceQueryParams.voltage"
|
|
>
|
|
</el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="5">
|
|
<el-form-item prop="age">
|
|
<el-select
|
|
placeholder="请选择"
|
|
v-model="companyPerformanceQueryParams.age"
|
|
clearable
|
|
>
|
|
<el-option label="近三年" value="3" />
|
|
<el-option label="近五年" value="5" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item prop="timeValue">
|
|
<el-date-picker
|
|
type="daterange"
|
|
range-separator="~"
|
|
style="width: 100%"
|
|
value-format="yyyy-MM-dd"
|
|
end-placeholder="结束时间"
|
|
start-placeholder="开始时间"
|
|
v-model="companyPerformanceQueryParams.timeValue"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="3">
|
|
<el-form-item>
|
|
<el-button type="primary" icon="el-icon-search" @click="searchPersonPerformance">
|
|
查询
|
|
</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<div>
|
|
<el-transfer
|
|
v-model="selectData"
|
|
:data="waitSelectData"
|
|
:titles="['待选列表', '已选列表']"
|
|
:props="{
|
|
key: 'perfId',
|
|
label: 'proName',
|
|
}"
|
|
>
|
|
<div slot-scope="{ option }" class="transfer-item">
|
|
<span>
|
|
{{ option.proName }}
|
|
</span>
|
|
<span style="margin-left: 18px">
|
|
{{ option.voltage }}
|
|
</span>
|
|
<span style="margin-left: 6px"> {{ option.startTime }} 至{{ option.endTime }} </span>
|
|
</div>
|
|
</el-transfer>
|
|
</div>
|
|
</template>
|
|
<!-- 其他人员选择 -->
|
|
<template v-else-if="dialogConfig.outerTitle === '其他人员选择'">
|
|
<el-form :model="otherPersonQueryParams" label-width="0" inline>
|
|
<el-row :gutter="20">
|
|
<el-col :span="6">
|
|
<el-input
|
|
clearable
|
|
placeholder="姓名"
|
|
style="width: 100%"
|
|
v-model="otherPersonQueryParams.userName"
|
|
/>
|
|
</el-col>
|
|
|
|
<el-col :span="6">
|
|
<el-form-item>
|
|
<el-button type="primary" icon="el-icon-search" @click="searchOtherPerson">
|
|
查询
|
|
</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
|
|
<el-table
|
|
stripe
|
|
ref="singleTable"
|
|
:data="otherPersonList"
|
|
@selection-change="onSelectionChange"
|
|
:header-cell-class-name="cellClass"
|
|
>
|
|
<el-table-column label="序号" width="55" type="index" align="center" />
|
|
<el-table-column
|
|
type="selection"
|
|
width="55"
|
|
align="center"
|
|
:selectable="
|
|
(row) => {
|
|
return !row.disabled
|
|
}
|
|
"
|
|
/>
|
|
<el-table-column label="姓名" prop="userName" align="center" />
|
|
<el-table-column label="身份证号" prop="idCard" align="center" />
|
|
</el-table>
|
|
|
|
<pagination
|
|
:total="otherPersonTotal"
|
|
@pagination="searchOtherPerson"
|
|
:page.sync="otherPersonQueryParams.pageNum"
|
|
:limit.sync="otherPersonQueryParams.pageSize"
|
|
/>
|
|
</template>
|
|
|
|
<!-- 分包商选择 -->
|
|
<template v-else-if="dialogConfig.outerTitle === '分包商选择'">
|
|
<div>
|
|
<el-transfer
|
|
filterable
|
|
v-model="selectSubcontractorData"
|
|
:data="waitSubcontractorSelectData"
|
|
:titles="['待选列表', '已选列表']"
|
|
:props="{
|
|
key: 'id',
|
|
label: 'subName',
|
|
}"
|
|
/>
|
|
</div>
|
|
</template>
|
|
|
|
<!-- 分包商业绩选择 -->
|
|
<template
|
|
v-else-if="
|
|
dialogConfig.outerTitle === '分包商业绩选择' || dialogConfig.outerTitle === '分包人员选择'
|
|
"
|
|
>
|
|
<div class="title" v-if="dialogConfig.outerTitle === '分包人员选择'"> 拟派人员 </div>
|
|
<el-row :gutter="20">
|
|
<el-col :span="5">
|
|
<el-select
|
|
clearable
|
|
filterable
|
|
placeholder="请选择人员"
|
|
@change="onChangeSubcontractorPerson"
|
|
v-if="dialogConfig.outerTitle === '分包人员选择'"
|
|
v-model="personPerformanceForm.personId"
|
|
>
|
|
<el-option
|
|
:key="item.id"
|
|
:value="item.id + ''"
|
|
:label="item.userName"
|
|
v-for="item in subcontractorPersonSelectList"
|
|
/>
|
|
</el-select>
|
|
</el-col>
|
|
</el-row>
|
|
<div class="title" v-if="dialogConfig.outerTitle === '分包人员选择'"> 人员业绩选择 </div>
|
|
<el-form inline label-width="0" :model="personPerformanceForm">
|
|
<el-row :gutter="20">
|
|
<el-col :span="5">
|
|
<el-form-item prop="proName">
|
|
<el-input clearable placeholder="工程名称" v-model="personPerformanceForm.proName">
|
|
</el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="5">
|
|
<el-form-item prop="voltage">
|
|
<el-input clearable placeholder="电压等级" v-model="personPerformanceForm.voltage">
|
|
</el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="5">
|
|
<el-form-item prop="age">
|
|
<el-select placeholder="请选择" v-model="personPerformanceForm.age" clearable>
|
|
<el-option label="近三年" value="3" />
|
|
<el-option label="近五年" value="5" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item prop="timeValue">
|
|
<el-date-picker
|
|
type="daterange"
|
|
range-separator="~"
|
|
style="width: 100%"
|
|
value-format="yyyy-MM-dd"
|
|
end-placeholder="结束时间"
|
|
start-placeholder="开始时间"
|
|
v-model="personPerformanceForm.timeValue"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="3">
|
|
<el-form-item>
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-search"
|
|
@click="searchSubcontractorPerformanceData"
|
|
>
|
|
查询
|
|
</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
|
|
<div>
|
|
<!-- 分包商业绩选择框 -->
|
|
<el-transfer
|
|
:data="waitSubcontractorPerformanceData"
|
|
v-model="selectSubcontractorPerformanceData"
|
|
:titles="['待选列表', '已选列表']"
|
|
:props="{
|
|
key: 'perfId',
|
|
label: 'proName',
|
|
}"
|
|
>
|
|
<div slot-scope="{ option }" class="transfer-item">
|
|
<span>
|
|
{{ option.proName }}
|
|
</span>
|
|
<span style="margin-left: 18px">
|
|
{{ option.voltage }}
|
|
</span>
|
|
<span style="margin-left: 6px"> {{ option.startTime }} 至{{ option.endTime }} </span>
|
|
</div>
|
|
</el-transfer>
|
|
</div>
|
|
</template>
|
|
|
|
<el-row style="text-align: right; border-top: 1px solid #e5e5e5; padding-top: 10px">
|
|
<el-button @click="onCancelInner" style="margin-right: 10px">取消</el-button>
|
|
<el-button type="primary" @click="onConfirmInner">确定</el-button>
|
|
</el-row>
|
|
</template>
|
|
</DialogModel>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import moment from 'moment'
|
|
import UploadImg from '@/components/UploadImg'
|
|
import DialogModel from '@/components/DialogModel/index'
|
|
import { getKeyPersonListAPI, getSubKeyPersonListAPI } from '@/api/common'
|
|
import { getSubManageListAPI } from '@/api/sub-manage/sub-manage'
|
|
import { getOtherPersonListAPI } from '@/api/company-manage/other-person'
|
|
import { getSubPersonManageListAPI } from '@/api/sub-manage/sub-person-manage'
|
|
import {
|
|
getSubPerformanceManageListAPI,
|
|
getSubPerformanceManageListByPersonIdAPI,
|
|
} from '@/api/sub-manage/sub-performance-manage'
|
|
import {
|
|
getCompanyPerformanceListAPI,
|
|
getCompanyPerformanceListByPersonIdAPI,
|
|
} from '@/api/company-manage/performance-manage'
|
|
|
|
import { addGwTemplateAPI, getGwTemplateByIdAPI, editGwTemplateAPI } from '@/api/data-create/gw-template'
|
|
|
|
export default {
|
|
components: {
|
|
UploadImg,
|
|
DialogModel,
|
|
},
|
|
props: {
|
|
// 1新增 2详情 3编辑
|
|
formType: {
|
|
type: Number,
|
|
default: 1,
|
|
},
|
|
// 详情或编辑的id
|
|
queryId: {
|
|
type: [String, Number],
|
|
default: '',
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
dialogConfig: {
|
|
outerTitle: '新增',
|
|
innerTitle: false,
|
|
outerWidth: '80%',
|
|
outerVisible: false,
|
|
innerVisible: false,
|
|
},
|
|
addAndEditForm: {
|
|
name: '', // 标书名称
|
|
},
|
|
addAndEditRules: {
|
|
name: [
|
|
{
|
|
required: true,
|
|
message: '请输入标书名称',
|
|
trigger: 'blur',
|
|
},
|
|
],
|
|
},
|
|
|
|
waitSelectData: [], // 待选列表 公共 ---- 公司业绩选择 和 关键人员选择 的待选列表
|
|
selectData: [], // 已选列表 公共 ---- 公司业绩选择 和 关键人员选择 的已选列表
|
|
|
|
/**
|
|
* 公司业绩需要的数据源----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
companyPerformanceList: [], // 公司业绩列表 ---- 外层表格
|
|
// 公司业绩待选列表查询条件
|
|
companyPerformanceQueryParams: {
|
|
age: '3',
|
|
proName: '',
|
|
voltage: '',
|
|
pageNum: 1,
|
|
pageSize: 10000,
|
|
timeValue: [],
|
|
personId: '',
|
|
},
|
|
|
|
/**
|
|
* 公司关键人员需要的数据源-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
companyKeyPersonList: [], // 公司关键人员列表
|
|
keyTableCurrentIndex: 0, // 公司关键人员当前操作行的索引
|
|
keyPersonList: [], // 关键人员列表
|
|
|
|
/**
|
|
* 公司其他人员需要的数据源-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
companyOtherPersonList: [], // 公司其他人员列表
|
|
otherTableCurrentIndex: 0, // 公司其他人员当前操作行的索引
|
|
// 其他人员列表查询条件
|
|
otherPersonQueryParams: {
|
|
userName: '',
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
},
|
|
otherPersonList: [], // 其他人员列表
|
|
otherPersonTotal: 0, // 其他人员列表总条数
|
|
selectedOtherPerson: null, // 其他人员列表选中项
|
|
|
|
/**
|
|
* 分包商模块需要的数据源---------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
subcontractorList: [], // 分包商列表
|
|
selectSubcontractorData: [], // 穿梭框内分包商已选列表
|
|
waitSubcontractorSelectData: [], // 穿梭框内分包商待选列表
|
|
subcontractorPerformanceCurrentIndex: 0, // 分包商业绩当前操作的index
|
|
// 分包商业绩查询条件
|
|
personPerformanceForm: {
|
|
proName: '', //项目名称
|
|
startTime: '',
|
|
endTime: '',
|
|
pageNum: 1,
|
|
pageSize: 10000,
|
|
timeValue: [],
|
|
personId: '',
|
|
age: '3',
|
|
subId: '',
|
|
},
|
|
selectSubcontractorPerformanceData: [], // 分包商业绩已选列表 ---- 内层穿梭框选择后只有ID数据源
|
|
waitSubcontractorPerformanceData: [], // 分包商业绩待选列表 ---- 内层穿梭框显示的
|
|
subcontractorPersonCurrentIndex: 0, // 分包商索引
|
|
subcontractorPersonSelectIndex: 0, // 分包商人员当前操作的index
|
|
subcontractorPersonSelectList: [], // 分包商人员下拉数据
|
|
}
|
|
},
|
|
methods: {
|
|
cellClass(row) {
|
|
return 'disabledCheck'
|
|
},
|
|
// 关闭弹框
|
|
async onCancel() {
|
|
this.$emit('closeDialogOuter')
|
|
},
|
|
// 最终确定按钮
|
|
async onConfirm() {
|
|
this.$refs.addAndEditFormRef.validate(async (valid) => {
|
|
if (valid) {
|
|
// 组装参数
|
|
const params = {
|
|
...this.addAndEditForm,
|
|
comPerfList: [], // 公司业绩列表
|
|
comCoreList: [], // 关键人员列表
|
|
comOtherList: [], // 其他人员列表
|
|
subList: [], // 分包商列表
|
|
}
|
|
|
|
let isError = false
|
|
|
|
// 添加校验 ---- 公司关键人员
|
|
if (this.companyKeyPersonList.length > 0) {
|
|
this.companyKeyPersonList.forEach((item, index) => {
|
|
if (!item.userId) {
|
|
this.$modal.msgError(`公司关键人员第${index + 1}行未选择人员`)
|
|
// 并使其获得焦点
|
|
isError = true
|
|
return false
|
|
}
|
|
|
|
if (!item.postName) {
|
|
// this.$modal.msgError(`公司关键人员第${index + 1}行未填写在本施工队伍中的职责分工`)
|
|
// this.$refs[`comKeyPostName_${index}`].focus()
|
|
this.$modal.msgError(`公司关键人员第${index + 1}行未填写在本施工队伍中的职责分工`)
|
|
const inputRef = this.$refs[`comKeyPostName_${index}`]
|
|
inputRef.focus()
|
|
// 添加红框样式
|
|
inputRef.$el.querySelector('.el-input__inner').style.border = '1px solid red'
|
|
// 可选:监听 blur 事件移除红框
|
|
inputRef.$el.querySelector('.el-input__inner').addEventListener('blur', function () {
|
|
this.style.border = ''
|
|
})
|
|
isError = true
|
|
return false
|
|
}
|
|
|
|
if (!item.einDate && item.exitDate) {
|
|
// this.$modal.msgError(`公司关键人员第${index + 1}行未填写计划入场时间`)
|
|
// this.$refs[`comKeyEinDate_${index}`].focus()
|
|
this.$modal.msgError(`公司关键人员第${index + 1}行未填写计划入场时间`)
|
|
const inputRef = this.$refs[`comKeyEinDate_${index}`]
|
|
inputRef.focus()
|
|
// 添加红框样式
|
|
inputRef.$el.querySelector('.el-input__inner').style.border = '1px solid red'
|
|
// 可选:监听 blur 事件移除红框
|
|
inputRef.$el.querySelector('.el-input__inner').addEventListener('blur', function () {
|
|
this.style.border = ''
|
|
})
|
|
isError = true
|
|
return false
|
|
}
|
|
|
|
if (!item.exitDate && item.einDate) {
|
|
// this.$modal.msgError(`公司关键人员第${index + 1}行未填写计划退场时间`)
|
|
// this.$refs[`comKeyExitDate_${index}`].focus()
|
|
this.$modal.msgError(`公司关键人员第${index + 1}行未填写计划退场时间`)
|
|
const inputRef = this.$refs[`comKeyExitDate_${index}`]
|
|
inputRef.focus()
|
|
// 添加红框样式
|
|
inputRef.$el.querySelector('.el-input__inner').style.border = '1px solid red'
|
|
// 可选:监听 blur 事件移除红框
|
|
inputRef.$el.querySelector('.el-input__inner').addEventListener('blur', function () {
|
|
this.style.border = ''
|
|
})
|
|
isError = true
|
|
return false
|
|
}
|
|
})
|
|
}
|
|
|
|
// 添加校验 ---- 公司其他人员
|
|
if (this.companyOtherPersonList.length > 0) {
|
|
this.companyOtherPersonList.forEach((item, index) => {
|
|
if (!item.userId) {
|
|
this.$modal.msgError(`公司其他人员第${index + 1}行未选择人员`)
|
|
isError = true
|
|
return false
|
|
}
|
|
|
|
if (!item.postName) {
|
|
this.$modal.msgError(`公司其他人员第${index + 1}行未填写在本次标书中的职务`)
|
|
const inputRef = this.$refs[`comOtherPostName_${index}`]
|
|
inputRef.focus()
|
|
// 添加红框样式
|
|
inputRef.$el.querySelector('.el-input__inner').style.border = '1px solid red'
|
|
// 可选:监听 blur 事件移除红框
|
|
inputRef.$el.querySelector('.el-input__inner').addEventListener('blur', function () {
|
|
this.style.border = ''
|
|
})
|
|
isError = true
|
|
return false
|
|
}
|
|
})
|
|
}
|
|
|
|
// 添加校验 ---- 分包商
|
|
if (this.subcontractorList.length > 0) {
|
|
try {
|
|
this.subcontractorList.forEach((item, index) => {
|
|
if (item.subcontractorPersonList.length > 0) {
|
|
item.subcontractorPersonList.forEach((subcontractorPersonItem, subIndex) => {
|
|
if (!subcontractorPersonItem.userId) {
|
|
this.$modal.msgError(
|
|
`" ${item.subName} "中拟派人员第${subIndex + 1}行未选择人员`,
|
|
)
|
|
isError = true
|
|
throw new Error()
|
|
}
|
|
|
|
if (!subcontractorPersonItem.postName) {
|
|
this.$modal.msgError(
|
|
`" ${item.subName} "中拟派人员第${
|
|
subIndex + 1
|
|
}行未填写在本次施工队伍中的职责分工`,
|
|
)
|
|
|
|
this.$nextTick(() => {
|
|
const inputRef =
|
|
this.$refs[`comSubcontractorPostName_${index}_${subIndex}`][0]
|
|
inputRef.focus()
|
|
// 添加红框样式
|
|
inputRef.$el.querySelector('.el-input__inner').style.border =
|
|
'1px solid red'
|
|
// 可选:监听 blur 事件移除红框
|
|
inputRef.$el
|
|
.querySelector('.el-input__inner')
|
|
.addEventListener('blur', function () {
|
|
this.style.border = ''
|
|
})
|
|
})
|
|
|
|
isError = true
|
|
throw new Error()
|
|
}
|
|
})
|
|
}
|
|
})
|
|
} catch (error) {
|
|
isError = true
|
|
}
|
|
}
|
|
|
|
if (isError) return false
|
|
|
|
// 1. 组装公司业绩列表
|
|
if (this.companyPerformanceList.length > 0) {
|
|
this.companyPerformanceList.forEach((item) => {
|
|
params.comPerfList.push({
|
|
id: item.perfId,
|
|
})
|
|
})
|
|
}
|
|
|
|
// 2. 组装关键人员列表
|
|
if (this.companyKeyPersonList.length > 0) {
|
|
this.companyKeyPersonList.forEach((item) => {
|
|
params.comCoreList.push({
|
|
id: item.userId,
|
|
postName: item.postName,
|
|
proPerf: item.proPerf,
|
|
einDate: item.einDate || null,
|
|
exitDate: item.exitDate || null,
|
|
perfId: item.perfId,
|
|
})
|
|
})
|
|
}
|
|
|
|
// 3. 组装其他人员列表
|
|
if (this.companyOtherPersonList.length > 0) {
|
|
this.companyOtherPersonList.forEach((item) => {
|
|
params.comOtherList.push({
|
|
id: item.userId,
|
|
postName: item.postName,
|
|
})
|
|
})
|
|
}
|
|
|
|
// 4. 组装分包商列表
|
|
if (this.subcontractorList.length > 0) {
|
|
this.subcontractorList.forEach((item, index) => {
|
|
params.subList.push({
|
|
id: item.id,
|
|
subPerfList: [], // 分包商业绩列表
|
|
subPersonList: [], // 分包商人员列表
|
|
})
|
|
|
|
if (item.companyPerformanceList && item.companyPerformanceList.length > 0) {
|
|
item.companyPerformanceList.forEach((companyPerformanceItem) => {
|
|
params.subList[index].subPerfList.push({
|
|
id: companyPerformanceItem.perfId,
|
|
subId: companyPerformanceItem.subId,
|
|
})
|
|
})
|
|
}
|
|
if (item.subcontractorPersonList && item.subcontractorPersonList.length > 0) {
|
|
item.subcontractorPersonList.forEach((subcontractorPersonItem) => {
|
|
params.subList[index].subPersonList.push({
|
|
id: subcontractorPersonItem.userId,
|
|
postName: subcontractorPersonItem.postName,
|
|
proPerf: subcontractorPersonItem.proPerf,
|
|
})
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
const API = this.formType === 1 ? addGwTemplateAPI : editGwTemplateAPI
|
|
if (this.formType === 3) {
|
|
params.id = this.queryId
|
|
}
|
|
|
|
const res = await API(params)
|
|
|
|
if (res.code === 200) {
|
|
this.$modal.msgSuccess(this.formType === 1 ? '新增成功' : '修改成功')
|
|
this.$emit('closeDialogOuter', true)
|
|
} else {
|
|
this.$modal.msgError(res.message)
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
// 公共查询 ---- 公司业绩选择 和 关键人员选择 的查询
|
|
async searchPersonPerformance() {
|
|
if (this.dialogConfig.outerTitle === '公司业绩选择') {
|
|
this.getCompanyPerformanceData()
|
|
} else {
|
|
if (this.companyPerformanceQueryParams.personId) {
|
|
this.getCompanyPerformanceListByPersonIdData()
|
|
} else {
|
|
this.$modal.msgError('请选择人员')
|
|
}
|
|
}
|
|
},
|
|
// 关闭弹窗
|
|
async closeDialogOuter() {
|
|
this.dialogConfig.outerVisible = false
|
|
},
|
|
// 关闭弹框
|
|
async onCancelInner() {
|
|
this.dialogConfig.outerVisible = false
|
|
},
|
|
// 穿梭框内的确定按钮
|
|
async onConfirmInner() {
|
|
// 公司业绩选择确定时
|
|
if (this.dialogConfig.outerTitle === '公司业绩选择') {
|
|
this.companyPerformanceList = this.waitSelectData.filter((item) =>
|
|
this.selectData.includes(item.perfId),
|
|
)
|
|
}
|
|
|
|
if (this.dialogConfig.outerTitle === '关键人员选择') {
|
|
if (this.companyPerformanceQueryParams.personId) {
|
|
const rowInfo = this.keyPersonList.find(
|
|
(item) => item.id == this.companyPerformanceQueryParams.personId,
|
|
)
|
|
const index = this.keyTableCurrentIndex
|
|
this.companyKeyPersonList[index].userId = rowInfo.id
|
|
this.companyKeyPersonList[index].title = rowInfo.title
|
|
this.companyKeyPersonList[index].userName = rowInfo.userName
|
|
this.companyKeyPersonList[index].diploma = rowInfo.diploma
|
|
this.companyKeyPersonList[index].idCard = rowInfo.idCard
|
|
const keyPersonPerformanceInnerSelectList = this.waitSelectData.filter((item) =>
|
|
this.selectData.includes(item.perfId),
|
|
)
|
|
this.companyKeyPersonList[this.keyTableCurrentIndex].proPerf = keyPersonPerformanceInnerSelectList
|
|
.map((item) => item.proName)
|
|
.join(',')
|
|
this.companyKeyPersonList[this.keyTableCurrentIndex].perfId = keyPersonPerformanceInnerSelectList
|
|
.map((item) => item.id)
|
|
.join(',')
|
|
} else {
|
|
this.$modal.msgError('请选择人员')
|
|
return false
|
|
}
|
|
}
|
|
|
|
if (this.dialogConfig.outerTitle === '其他人员选择') {
|
|
if (!this.selectedOtherPerson) {
|
|
this.$modal.msgError('请选择其他人员')
|
|
return false
|
|
} else {
|
|
// 选取需要的数据
|
|
const { id, userName, title, diploma, diplomaNum, major, level } = this.selectedOtherPerson
|
|
Object.assign(this.companyOtherPersonList[this.otherTableCurrentIndex], {
|
|
userId: id,
|
|
userName,
|
|
title,
|
|
diploma,
|
|
diplomaNum,
|
|
major,
|
|
level,
|
|
})
|
|
}
|
|
}
|
|
|
|
if (this.dialogConfig.outerTitle === '分包商选择') {
|
|
if (this.subcontractorList.length < 1) {
|
|
this.subcontractorList = this.waitSubcontractorSelectData.filter((item) =>
|
|
this.selectSubcontractorData.includes(item.id),
|
|
)
|
|
} else {
|
|
const newSubcontractorList = this.waitSubcontractorSelectData.filter(
|
|
(item) =>
|
|
this.selectSubcontractorData.includes(item.id) &&
|
|
!this.subcontractorList.some((subItem) => subItem.id == item.id),
|
|
)
|
|
|
|
this.subcontractorList.push(...newSubcontractorList)
|
|
}
|
|
|
|
this.subcontractorList.forEach((item) => {
|
|
if (!item.companyPerformanceList) {
|
|
this.$set(item, 'companyPerformanceList', [])
|
|
}
|
|
|
|
if (!item.subcontractorPersonList) {
|
|
this.$set(item, 'subcontractorPersonList', [])
|
|
}
|
|
// if (!item.companyPerformanceList) {
|
|
// // this.$set(item, 'companyPerformanceList', [])
|
|
// item.companyPerformanceList = []
|
|
// }
|
|
|
|
// if (!item.subcontractorPersonList) {
|
|
// // this.$set(item, 'subcontractorPersonList', [])
|
|
// item.subcontractorPersonList = []
|
|
// }
|
|
})
|
|
}
|
|
|
|
if (this.dialogConfig.outerTitle === '分包商业绩选择') {
|
|
const subcontractorPerformanceInnerList = this.waitSubcontractorPerformanceData.filter((item) =>
|
|
this.selectSubcontractorPerformanceData.includes(item.perfId),
|
|
)
|
|
|
|
this.subcontractorList[this.subcontractorPerformanceCurrentIndex].companyPerformanceList = JSON.parse(
|
|
JSON.stringify(subcontractorPerformanceInnerList),
|
|
)
|
|
}
|
|
|
|
// 添加近年同类工程业绩
|
|
if (this.dialogConfig.outerTitle === '分包人员选择') {
|
|
if (this.personPerformanceForm.personId) {
|
|
const rowInfo = this.subcontractorPersonSelectList.find(
|
|
(item) => item.id == this.personPerformanceForm.personId,
|
|
)
|
|
const index = this.subcontractorPersonCurrentIndex
|
|
const personIndex = this.subcontractorPersonSelectIndex
|
|
this.subcontractorList[index].subcontractorPersonList[personIndex].userId = rowInfo.id
|
|
this.subcontractorList[index].subcontractorPersonList[personIndex].userName = rowInfo.userName
|
|
this.subcontractorList[index].subcontractorPersonList[personIndex].title = rowInfo.title
|
|
this.subcontractorList[index].subcontractorPersonList[personIndex].diploma = rowInfo.diploma
|
|
this.subcontractorList[index].subcontractorPersonList[personIndex].idCard = rowInfo.idCard
|
|
} else {
|
|
this.$modal.msgError('请选择人员')
|
|
return false
|
|
}
|
|
const subcontractorPerformanceInnerList = this.waitSubcontractorPerformanceData.filter((item) =>
|
|
this.selectSubcontractorPerformanceData.includes(item.perfId),
|
|
)
|
|
|
|
this.subcontractorList[this.subcontractorPerformanceCurrentIndex].subcontractorPersonList[
|
|
this.subcontractorPersonSelectIndex
|
|
].proPerf = subcontractorPerformanceInnerList.map((item) => item.proName).join(',')
|
|
}
|
|
|
|
this.dialogConfig.outerVisible = false
|
|
},
|
|
|
|
/**
|
|
* 公司业绩模块方法逻辑----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
// 添加公司业绩
|
|
async addCompanyPerformance() {
|
|
this.dialogConfig.outerTitle = '公司业绩选择'
|
|
this.initQueryForm()
|
|
this.getCompanyPerformanceData()
|
|
// 获取已选择过的数据 赋值给穿梭框 作回显
|
|
},
|
|
// 获取公司业绩
|
|
async getCompanyPerformanceData() {
|
|
const { age, proName, voltage, pageNum, pageSize, timeValue } = this.companyPerformanceQueryParams
|
|
|
|
const queryParams = {
|
|
proName,
|
|
voltage,
|
|
pageNum,
|
|
pageSize,
|
|
startTime: '',
|
|
endTime: '',
|
|
}
|
|
|
|
if (age == 3) {
|
|
queryParams.startTime = moment().subtract(3, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
if (age == 5) {
|
|
queryParams.startTime = moment().subtract(5, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
|
|
if (timeValue && timeValue.length > 0) {
|
|
queryParams.startTime = timeValue[0]
|
|
queryParams.endTime = timeValue[1]
|
|
}
|
|
const res = await getCompanyPerformanceListAPI(queryParams)
|
|
|
|
this.waitSelectData = res.rows.map((item) => ({
|
|
...item,
|
|
disabled: false,
|
|
perfId: item.id,
|
|
}))
|
|
|
|
if (this.companyPerformanceList.length > 0) {
|
|
this.selectData = this.companyPerformanceList.map((item) => item.perfId)
|
|
} else {
|
|
// this.selectData = []
|
|
}
|
|
this.dialogConfig.outerVisible = true
|
|
},
|
|
// 删除公司业绩
|
|
async deleteCompanyPerformance(index) {
|
|
this.companyPerformanceList.splice(index, 1)
|
|
},
|
|
/**
|
|
* 添加公司关键人员模块方法逻辑----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
// 添加公司关键人员
|
|
async addCompanyKeyPerson() {
|
|
this.companyKeyPersonList.push({
|
|
userId: '', // 人员id
|
|
perfId: '', // 人员业绩id
|
|
userName: '', // 人员名称
|
|
title: '', // 人员职称
|
|
diploma: '', // 执业资格证书
|
|
idCard: '', // 身份证号
|
|
postName: '', // 本施工队伍中的职责分工
|
|
proPerf: '', // 人员业绩
|
|
einDate: '', // 计划入场事件
|
|
exitDate: '', // 计划退场事件
|
|
})
|
|
},
|
|
// 选择公司关键人员
|
|
async selectCompanyKeyPerson(index) {
|
|
this.getKeyPersonList()
|
|
this.initQueryForm()
|
|
this.keyTableCurrentIndex = index
|
|
this.dialogConfig.outerTitle = '关键人员选择'
|
|
this.waitSelectData = []
|
|
this.selectData = []
|
|
this.dialogConfig.outerVisible = true
|
|
},
|
|
|
|
// 删除公司关键人员
|
|
async deleteCompanyKeyPerson(index) {
|
|
this.companyKeyPersonList.splice(index, 1)
|
|
},
|
|
// 获取关键人员列表
|
|
async getKeyPersonList() {
|
|
const { rows: res } = await getKeyPersonListAPI()
|
|
this.keyPersonList = res
|
|
},
|
|
|
|
// 获取人员业绩数据
|
|
async getCompanyPerformanceListByPersonIdData() {
|
|
const { age, proName, voltage, pageNum, pageSize, timeValue, personId } = this.companyPerformanceQueryParams
|
|
|
|
const queryParams = {
|
|
proName,
|
|
voltage,
|
|
pageNum,
|
|
pageSize,
|
|
startTime: '',
|
|
endTime: '',
|
|
personId,
|
|
}
|
|
|
|
if (age == 3) {
|
|
queryParams.startTime = moment().subtract(3, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
if (age == 5) {
|
|
queryParams.startTime = moment().subtract(5, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
|
|
if (timeValue && timeValue.length > 0) {
|
|
queryParams.startTime = timeValue[0]
|
|
queryParams.endTime = timeValue[1]
|
|
}
|
|
const res = await getCompanyPerformanceListByPersonIdAPI(queryParams)
|
|
if (res && res.length > 0) {
|
|
this.waitSelectData = res.map((item) => ({
|
|
...item,
|
|
disabled: false,
|
|
perfId: item.id,
|
|
}))
|
|
} else {
|
|
this.waitSelectData = []
|
|
}
|
|
},
|
|
|
|
// 人员下拉选的change事件
|
|
async onChangePerson(value) {
|
|
if (
|
|
this.companyKeyPersonList.length > 0 &&
|
|
this.companyKeyPersonList.some((item) => item.userId == value)
|
|
) {
|
|
this.$modal.msgError('当前人员已选择,不可重复添加')
|
|
this.companyPerformanceQueryParams.personId = ''
|
|
this.waitSelectData = []
|
|
this.selectData = []
|
|
return false
|
|
} else {
|
|
// 查询人员信息
|
|
this.getCompanyPerformanceListByPersonIdData()
|
|
}
|
|
},
|
|
|
|
// 计划入场时间change事件
|
|
async onChangeEinDate(index, value) {
|
|
// 使用moment.js 判断入场时间不能大于退场时间 否则提示错误
|
|
if (moment(value).isAfter(moment(this.companyKeyPersonList[index].exitDate))) {
|
|
this.$modal.msgError('计划入场时间不能大于计划退场时间')
|
|
this.companyKeyPersonList[index].einDate = ''
|
|
return false
|
|
}
|
|
},
|
|
// 计划退场时间change事件
|
|
async onChangeExitDate(index, value) {
|
|
// 使用moment.js 判断退场时间不能小于入场时间 否则提示错误
|
|
if (moment(value).isBefore(moment(this.companyKeyPersonList[index].einDate))) {
|
|
this.$modal.msgError('计划退场时间不能小于计划入场时间')
|
|
this.companyKeyPersonList[index].exitDate = ''
|
|
return false
|
|
}
|
|
},
|
|
// 初始化查询表单
|
|
async initQueryForm() {
|
|
this.companyPerformanceQueryParams = {
|
|
age: '3',
|
|
proName: '',
|
|
voltage: '',
|
|
pageNum: 1,
|
|
pageSize: 10000,
|
|
timeValue: [],
|
|
personId: '',
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 添加公司其他人员模块方法逻辑----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
// 添加公司其他人员
|
|
async addCompanyOtherPerson() {
|
|
this.companyOtherPersonList.push({
|
|
userId: '', // 人员id
|
|
userName: '', // 人员名称
|
|
postName: '', // 本次标书中的职务职责分工
|
|
title: '', // 职称
|
|
diploma: '', // 证书名称
|
|
diplomaNum: '', // 证书编号
|
|
major: '', // 专业
|
|
level: '', // 级别
|
|
})
|
|
},
|
|
// 选择公司其他人员
|
|
async selectCompanyOtherPerson(index) {
|
|
this.otherTableCurrentIndex = index
|
|
this.dialogConfig.outerTitle = '其他人员选择'
|
|
this.otherPersonQueryParams.pageNum = 1
|
|
this.otherPersonQueryParams.pageSize = 10
|
|
this.otherPersonQueryParams.userName = ''
|
|
this.searchOtherPerson()
|
|
this.dialogConfig.outerVisible = true
|
|
},
|
|
// 查询其他人员
|
|
async searchOtherPerson() {
|
|
const res = await getOtherPersonListAPI(this.otherPersonQueryParams)
|
|
this.otherPersonList = res.rows
|
|
this.otherPersonTotal = res.total
|
|
this.selectedOtherPerson = null
|
|
|
|
// 根据已选的人员 将已选人员的数据增加一个标识 让表格复选框禁用
|
|
if (this.companyOtherPersonList.length > 0) {
|
|
this.otherPersonList.forEach((item) => {
|
|
if (this.companyOtherPersonList.some((otherItem) => otherItem.userId == item.id)) {
|
|
item.disabled = true
|
|
} else {
|
|
item.disabled = false
|
|
}
|
|
})
|
|
}
|
|
},
|
|
// 其他人员列表复选框
|
|
async onSelectionChange(selection) {
|
|
if (selection.length > 1) {
|
|
const lastSelected = selection[selection.length - 1]
|
|
this.$refs.singleTable.clearSelection() // 清空所有选中
|
|
this.$refs.singleTable.toggleRowSelection(lastSelected, true) // 重新选中最后一个
|
|
}
|
|
this.selectedOtherPerson = selection[0] || null // 存储当前选中项
|
|
},
|
|
// 删除公司其他人员
|
|
async deleteCompanyOtherPerson(index) {
|
|
this.companyOtherPersonList.splice(index, 1)
|
|
},
|
|
|
|
/**
|
|
* 添加分包商模块方法逻辑----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
// 添加分包商
|
|
async addSubcontractor() {
|
|
this.dialogConfig.outerTitle = '分包商选择'
|
|
this.getSubcontractorList()
|
|
this.dialogConfig.outerVisible = true
|
|
},
|
|
|
|
// 获取分包商列表
|
|
async getSubcontractorList() {
|
|
const res = await getSubManageListAPI({ pageNum: 1, pageSize: 10000 })
|
|
this.waitSubcontractorSelectData = res.rows
|
|
|
|
if (this.subcontractorList.length > 0) {
|
|
this.selectSubcontractorData = this.subcontractorList.map((item) => item.id)
|
|
} else {
|
|
this.selectSubcontractorData = []
|
|
}
|
|
},
|
|
|
|
// 添加分包商业绩
|
|
async addSubcontractorPerformance(index, subId) {
|
|
this.initSubcontractorPerformanceQueryParams()
|
|
this.subcontractorPerformanceCurrentIndex = index
|
|
this.subcontractorPersonCurrentIndex = index
|
|
this.personPerformanceForm.subId = subId
|
|
this.dialogConfig.outerTitle = '分包商业绩选择'
|
|
this.getSubcontractorPerformanceData()
|
|
this.dialogConfig.outerVisible = true
|
|
},
|
|
// 删除分包商
|
|
async deleteSubcontractor(index) {
|
|
this.subcontractorList.splice(index, 1)
|
|
},
|
|
// 获取分包商业绩数据
|
|
async getSubcontractorPerformanceData() {
|
|
const { age, proName, voltage, pageNum, pageSize, timeValue, subId } = this.personPerformanceForm
|
|
const queryParams = {
|
|
proName,
|
|
voltage,
|
|
pageNum,
|
|
pageSize,
|
|
startTime: '',
|
|
endTime: '',
|
|
subId,
|
|
}
|
|
|
|
if (age == 3) {
|
|
queryParams.startTime = moment().subtract(3, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
if (age == 5) {
|
|
queryParams.startTime = moment().subtract(5, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
|
|
if (timeValue && timeValue.length > 0) {
|
|
queryParams.startTime = timeValue[0]
|
|
queryParams.endTime = timeValue[1]
|
|
}
|
|
const res = await getSubPerformanceManageListAPI(queryParams)
|
|
|
|
if (res.rows.length > 0) {
|
|
this.waitSubcontractorPerformanceData = res.rows.map((item) => ({
|
|
...item,
|
|
disabled: false,
|
|
perfId: item.id,
|
|
}))
|
|
|
|
const index = this.subcontractorPerformanceCurrentIndex
|
|
const companyPerformanceList = this.subcontractorList[index].companyPerformanceList
|
|
|
|
if (companyPerformanceList.length > 0) {
|
|
this.selectSubcontractorPerformanceData = companyPerformanceList.map((item) => item.perfId)
|
|
}
|
|
} else {
|
|
this.waitSubcontractorPerformanceData = []
|
|
}
|
|
},
|
|
// 初始化分包商业绩查询条件
|
|
async initSubcontractorPerformanceQueryParams() {
|
|
this.personPerformanceForm = {
|
|
age: '3',
|
|
proName: '',
|
|
voltage: '',
|
|
pageNum: 1,
|
|
pageSize: 10000,
|
|
timeValue: [],
|
|
personId: '',
|
|
subId: '',
|
|
}
|
|
},
|
|
// 查询分包商业绩
|
|
async searchSubcontractorPerformanceData() {
|
|
if (this.dialogConfig.outerTitle === '分包商业绩选择') {
|
|
this.getSubcontractorPerformanceData()
|
|
} else {
|
|
if (this.personPerformanceForm.personId) {
|
|
this.getSubcontractorPerformanceDataByPersonId()
|
|
} else {
|
|
this.$modal.msgError('请选择人员')
|
|
return false
|
|
}
|
|
}
|
|
},
|
|
|
|
// 删除分包商业绩
|
|
async deleteSubcontractorPerformance(index, performanceIndex, id) {
|
|
this.subcontractorList[index].companyPerformanceList.splice(performanceIndex, 1)
|
|
|
|
this.selectSubcontractorPerformanceData = this.selectSubcontractorPerformanceData.filter(
|
|
(item) => item != id,
|
|
)
|
|
},
|
|
|
|
// 添加分包商人员
|
|
async addSubcontractorPerson(index, subId) {
|
|
this.initSubcontractorPerformanceQueryParams()
|
|
this.personPerformanceForm.subId = subId
|
|
this.subcontractorPerformanceCurrentIndex = index
|
|
this.subcontractorPersonCurrentIndex = index
|
|
this.subcontractorList[index].subcontractorPersonList.push({
|
|
userId: '',
|
|
userName: '',
|
|
title: '',
|
|
diploma: '',
|
|
idCard: '',
|
|
postName: '',
|
|
proPerf: '',
|
|
})
|
|
},
|
|
|
|
// 选择分包商人员
|
|
async selectSubcontractorPerson(index, personIndex) {
|
|
this.dialogConfig.outerTitle = '分包人员选择'
|
|
this.personPerformanceForm.personId = ''
|
|
this.dialogConfig.outerVisible = true
|
|
this.getSubcontractorPersonSelectList()
|
|
this.waitSubcontractorPerformanceData = []
|
|
this.selectSubcontractorPerformanceData = []
|
|
this.subcontractorPersonCurrentIndex = index
|
|
this.subcontractorPersonSelectIndex = personIndex
|
|
},
|
|
// 获取分包商人员下拉列表
|
|
async getSubcontractorPersonSelectList() {
|
|
const res = await getSubKeyPersonListAPI({ subId: this.personPerformanceForm.subId })
|
|
this.subcontractorPersonSelectList = res.rows
|
|
},
|
|
// 删除分包商人员
|
|
async deleteSubcontractorPerson(index, personIndex) {
|
|
this.subcontractorList[index].subcontractorPersonList.splice(personIndex, 1)
|
|
},
|
|
// 分包人员下拉选的change事件
|
|
async onChangeSubcontractorPerson(value) {
|
|
if (
|
|
this.subcontractorList[this.subcontractorPersonCurrentIndex].subcontractorPersonList.length > 0 &&
|
|
this.subcontractorList[this.subcontractorPersonCurrentIndex].subcontractorPersonList.some(
|
|
(item) => item.userId == value,
|
|
)
|
|
) {
|
|
this.$modal.msgError('当前人员已选择,不可重复添加')
|
|
this.personPerformanceForm.personId = ''
|
|
this.waitSubcontractorPerformanceData = []
|
|
this.selectSubcontractorPerformanceData = []
|
|
return false
|
|
} else {
|
|
this.getSubcontractorPerformanceDataByPersonId()
|
|
}
|
|
},
|
|
|
|
// 根据人员id获取分包商业绩数据
|
|
async getSubcontractorPerformanceDataByPersonId() {
|
|
const { age, proName, voltage, pageNum, pageSize, timeValue, subId, personId } = this.personPerformanceForm
|
|
const queryParams = {
|
|
proName,
|
|
voltage,
|
|
pageNum,
|
|
pageSize,
|
|
startTime: '',
|
|
endTime: '',
|
|
subId,
|
|
personId,
|
|
}
|
|
|
|
if (age == 3) {
|
|
queryParams.startTime = moment().subtract(3, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
if (age == 5) {
|
|
queryParams.startTime = moment().subtract(5, 'years').format('YYYY-MM-DD')
|
|
queryParams.endTime = moment().format('YYYY-MM-DD')
|
|
}
|
|
|
|
if (timeValue && timeValue.length > 0) {
|
|
queryParams.startTime = timeValue[0]
|
|
queryParams.endTime = timeValue[1]
|
|
}
|
|
const res = await getSubPerformanceManageListByPersonIdAPI(queryParams)
|
|
|
|
if (res.length > 0) {
|
|
this.waitSubcontractorPerformanceData = res.map((item) => ({
|
|
...item,
|
|
disabled: false,
|
|
perfId: item.id,
|
|
}))
|
|
} else {
|
|
this.waitSubcontractorPerformanceData = []
|
|
}
|
|
},
|
|
|
|
// 根据id获取国网模板详情
|
|
async getGwTemplateById(id) {
|
|
const res = await getGwTemplateByIdAPI({ id })
|
|
if (res.code === 200) {
|
|
const { name, comCoreList, comOtherList, comPerfList, subList } = res.data
|
|
this.addAndEditForm.name = name
|
|
// 根据详情回显数据
|
|
// 1. 回显公司业绩数据
|
|
this.companyPerformanceList = comPerfList
|
|
// 2. 回显公司关键人员数据
|
|
this.companyKeyPersonList = comCoreList
|
|
// 3. 回显公司其他人员数据
|
|
this.companyOtherPersonList = comOtherList
|
|
// 4. 回显分包商数据
|
|
if (subList.length > 0) {
|
|
subList.forEach((item) => {
|
|
this.subcontractorList.push(
|
|
JSON.parse(
|
|
JSON.stringify({
|
|
...item,
|
|
companyPerformanceList: item.subPerfList,
|
|
subcontractorPersonList: item.subPersonList,
|
|
}),
|
|
),
|
|
)
|
|
})
|
|
}
|
|
} else {
|
|
this.$modal.closeDialogOuter()
|
|
this.$modal.msgError('详情获取失败' + res.message)
|
|
}
|
|
},
|
|
},
|
|
|
|
watch: {
|
|
queryId: {
|
|
handler(newVal) {
|
|
if (newVal && newVal != '') {
|
|
this.getGwTemplateById(newVal)
|
|
}
|
|
},
|
|
immediate: true,
|
|
deep: true,
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.card-box {
|
|
margin-bottom: 10px;
|
|
border: 1px solid #e5e5e5;
|
|
border-radius: 5px;
|
|
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
|
|
padding: 10px;
|
|
}
|
|
.title {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
margin: 10px 0;
|
|
text-align: left !important;
|
|
}
|
|
.title-box {
|
|
padding: 8px 0;
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
div {
|
|
margin-right: 10px;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
|
|
.title-box-subcontractor {
|
|
padding-left: 10px;
|
|
display: flex;
|
|
align-items: center;
|
|
div {
|
|
padding: 6px 0;
|
|
margin-right: 10px;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
|
|
.subcontractor-item-box {
|
|
padding: 10px;
|
|
margin-bottom: 10px;
|
|
border: 1px solid #e5e5e5;
|
|
border-radius: 5px;
|
|
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.subcontractor-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 10px;
|
|
color: #000;
|
|
font-weight: 600;
|
|
font-size: 16px;
|
|
|
|
span {
|
|
margin-right: 10px;
|
|
}
|
|
}
|
|
|
|
::v-deep .el-transfer {
|
|
width: 100%;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
text-align: left;
|
|
}
|
|
|
|
::v-deep .el-transfer-panel {
|
|
width: 48%;
|
|
}
|
|
|
|
::v-deep .el-transfer__buttons {
|
|
width: 4%;
|
|
padding: 0 6px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
::v-deep .el-button + .el-button {
|
|
margin: 0;
|
|
}
|
|
|
|
// 深度选择器 去掉全选按钮
|
|
::v-deep .disabledCheck .cell .el-checkbox {
|
|
display: none !important;
|
|
}
|
|
</style>
|