|
@@ -1,71 +1,154 @@
|
|
|
<template>
|
|
|
<basic-container>
|
|
|
<div>
|
|
|
- <el-tabs v-model="activeType" :before-leave="beforeLeave">
|
|
|
- <el-tab-pane label="合同段信息" name="1">
|
|
|
+ <el-tabs
|
|
|
+ v-model="activeType"
|
|
|
+ :before-leave="beforeLeave"
|
|
|
+ >
|
|
|
+ <el-tab-pane
|
|
|
+ label="合同段信息"
|
|
|
+ name="1"
|
|
|
+ >
|
|
|
<div>
|
|
|
- <el-form :model="contractForm" :rules="contractRules" ref="contractForm" label-width="120px">
|
|
|
+ <el-form
|
|
|
+ :model="contractForm"
|
|
|
+ :rules="contractRules"
|
|
|
+ ref="contractForm"
|
|
|
+ label-width="120px"
|
|
|
+ >
|
|
|
<el-form-item label="项目名称">
|
|
|
- <el-input v-model="projectInfo.projectName" disabled></el-input>
|
|
|
+ <el-input
|
|
|
+ v-model="projectInfo.projectName"
|
|
|
+ disabled
|
|
|
+ ></el-input>
|
|
|
</el-form-item>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="合同段类型" prop="contractType">
|
|
|
- <el-select v-model="contractForm.contractType" placeholder="请选择" class="w-100p">
|
|
|
- <el-option v-for="item in contractTypeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
|
|
|
+ <el-form-item
|
|
|
+ label="合同段类型"
|
|
|
+ prop="contractType"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model="contractForm.contractType"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="w-100p"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in contractTypeList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.dictValue"
|
|
|
+ :value="item.dictKey"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="合同段编号" prop="contractNumber">
|
|
|
+ <el-form-item
|
|
|
+ label="合同段编号"
|
|
|
+ prop="contractNumber"
|
|
|
+ >
|
|
|
<el-input v-model="contractForm.contractNumber"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="合同段名称" prop="contractName">
|
|
|
+ <el-form-item
|
|
|
+ label="合同段名称"
|
|
|
+ prop="contractName"
|
|
|
+ >
|
|
|
<el-input v-model="contractForm.contractName"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="参与方进场日期" prop="contractorJoinTime">
|
|
|
- <el-date-picker v-model="contractForm.contractorJoinTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
|
|
|
+ <el-form-item
|
|
|
+ label="参与方进场日期"
|
|
|
+ prop="contractorJoinTime"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model="contractForm.contractorJoinTime"
|
|
|
+ type="date"
|
|
|
+ format="yyyy 年 MM 月 dd 日"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期"
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="计划开工日期" prop="planStartTime">
|
|
|
- <el-date-picker v-model="contractForm.planStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
|
|
|
+ <el-form-item
|
|
|
+ label="计划开工日期"
|
|
|
+ prop="planStartTime"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model="contractForm.planStartTime"
|
|
|
+ type="date"
|
|
|
+ format="yyyy 年 MM 月 dd 日"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期"
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="计划完工日期" prop="planEndTime">
|
|
|
- <el-date-picker v-model="contractForm.planEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
|
|
|
+ <el-form-item
|
|
|
+ label="计划完工日期"
|
|
|
+ prop="planEndTime"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model="contractForm.planEndTime"
|
|
|
+ type="date"
|
|
|
+ format="yyyy 年 MM 月 dd 日"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期"
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="实际开工日期" prop="actualStartTime">
|
|
|
- <el-date-picker v-model="contractForm.actualStartTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
|
|
|
+ <el-form-item
|
|
|
+ label="实际开工日期"
|
|
|
+ prop="actualStartTime"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model="contractForm.actualStartTime"
|
|
|
+ type="date"
|
|
|
+ format="yyyy 年 MM 月 dd 日"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期"
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="实际完工日期" prop="actualEndTime">
|
|
|
- <el-date-picker v-model="contractForm.actualEndTime" type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
|
|
|
+ <el-form-item
|
|
|
+ label="实际完工日期"
|
|
|
+ prop="actualEndTime"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model="contractForm.actualEndTime"
|
|
|
+ type="date"
|
|
|
+ format="yyyy 年 MM 月 dd 日"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期"
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="业主单位名称" prop="contractorUnitName">
|
|
|
+ <el-form-item
|
|
|
+ label="业主单位名称"
|
|
|
+ prop="contractorUnitName"
|
|
|
+ >
|
|
|
<el-input v-model="contractForm.contractorUnitName"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="合同金额" prop="contractAmount">
|
|
|
+ <el-form-item
|
|
|
+ label="合同金额"
|
|
|
+ prop="contractAmount"
|
|
|
+ >
|
|
|
<el-input v-model="contractForm.contractAmount">
|
|
|
<template slot="append">万元</template>
|
|
|
</el-input>
|
|
@@ -74,25 +157,45 @@
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="施工单位名称" prop="constructionUnitName">
|
|
|
+ <el-form-item
|
|
|
+ label="施工单位名称"
|
|
|
+ prop="constructionUnitName"
|
|
|
+ >
|
|
|
<el-input v-model="contractForm.constructionUnitName"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="上传开工令" prop="startFileUrl">
|
|
|
+ <el-form-item
|
|
|
+ label="上传开工令"
|
|
|
+ prop="startFileUrl"
|
|
|
+ >
|
|
|
<template v-if="isBackShow">
|
|
|
- <el-link type="primary" @click="downloadFile">开工令</el-link>
|
|
|
- <el-button @click="delFile" class="mg-l-10" style="color:red" type="text" icon="el-icon-circle-close"></el-button>
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ @click="downloadFile"
|
|
|
+ >开工令</el-link>
|
|
|
+ <el-button
|
|
|
+ @click="delFile"
|
|
|
+ class="mg-l-10"
|
|
|
+ style="color:red"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-circle-close"
|
|
|
+ ></el-button>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<el-upload
|
|
|
action="/api/blade-resource/oss/endpoint/put-file-attach"
|
|
|
:on-remove="handleRemove"
|
|
|
- :limit="1" :headers=headers
|
|
|
+ :limit="1"
|
|
|
+ :headers=headers
|
|
|
:on-exceed="handleExceed"
|
|
|
:on-success="handleSuccess"
|
|
|
- :file-list="fileList">
|
|
|
- <el-button size="small" type="primary">点击上传</el-button>
|
|
|
+ :file-list="fileList"
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ >点击上传</el-button>
|
|
|
</el-upload>
|
|
|
</template>
|
|
|
|
|
@@ -101,132 +204,270 @@
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="监理单位名称" prop="supervisionUnitName">
|
|
|
+ <el-form-item
|
|
|
+ label="监理单位名称"
|
|
|
+ prop="supervisionUnitName"
|
|
|
+ >
|
|
|
<el-input v-model="contractForm.supervisionUnitName"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="试验室名称"
|
|
|
+ prop="laboratoryName"
|
|
|
+ >
|
|
|
+ <el-input v-model="contractForm.laboratoryName"></el-input>
|
|
|
+ </el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-divider></el-divider>
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<div class="head-font">组卷归档默认信息</div>
|
|
|
- <el-row>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="立卷人" prop="filer">
|
|
|
- <el-input v-model="contractForm.filer"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="保管期限" prop="storagePeriod">
|
|
|
- <el-select v-model="contractForm.storagePeriod" placeholder="请选择" class="w-100p">
|
|
|
- <el-option label="10年" value="10年"></el-option>
|
|
|
- <el-option label="30年" value="30年"></el-option>
|
|
|
- <el-option label="永久" value="永久"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="审核人" prop="reviewer">
|
|
|
- <el-input v-model="contractForm.reviewer"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="保管密级" prop="securityLevel">
|
|
|
- <el-select v-model="contractForm.securityLevel" placeholder="请选择" class="w-100p">
|
|
|
- <el-option label="机密" value="机密"></el-option>
|
|
|
- <el-option label="绝密" value="绝密"></el-option>
|
|
|
- <el-option label="秘密" value="秘密"></el-option>
|
|
|
- <el-option label="公开" value="公开"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="档案前缀" prop="prefix">
|
|
|
- <el-input v-model="contractForm.prefix"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
-
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="立卷人"
|
|
|
+ prop="filer"
|
|
|
+ >
|
|
|
+ <el-input v-model="contractForm.filer"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="保管期限"
|
|
|
+ prop="storagePeriod"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model="contractForm.storagePeriod"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="w-100p"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in storagePeriodList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.dictValue"
|
|
|
+ :value="item.dictKey"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="审核人"
|
|
|
+ prop="reviewer"
|
|
|
+ >
|
|
|
+ <el-input v-model="contractForm.reviewer"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="保管密级"
|
|
|
+ prop="securityLevel"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model="contractForm.securityLevel"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="w-100p"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in securityLevelList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.dictValue"
|
|
|
+ :value="item.dictKey"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="档案前缀"
|
|
|
+ prop="prefix"
|
|
|
+ >
|
|
|
+ <el-input v-model="contractForm.prefix"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<div class="head-font">附加信息</div>
|
|
|
- <el-form-item label="项目地址" prop="projectPlace">
|
|
|
- <!-- <el-input v-model="contractForm.projectPlace" placeholder="点击后面地图选取地址">
|
|
|
+ <el-form-item
|
|
|
+ label="项目地址"
|
|
|
+ prop="projectPlace"
|
|
|
+ >
|
|
|
+ <!-- <el-input v-model="contractForm.projectPlace" placeholder="点击后面地图选取地址">
|
|
|
<el-button slot="append" icon="el-icon-map-location" @click="mapDialogVisible = true"></el-button>
|
|
|
</el-input> -->
|
|
|
- <avue-input-map :params="params" placeholder="请选择地图" v-model="flageData" @change="mapChange"></avue-input-map>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="起始桩号" prop="startStation">
|
|
|
- <el-input v-model="contractForm.startStation"></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="结束桩号" prop="endStation">
|
|
|
- <el-input v-model="contractForm.endStation"></el-input>
|
|
|
- </el-form-item>
|
|
|
+ <avue-input-map
|
|
|
+ :params="params"
|
|
|
+ placeholder="请选择地图"
|
|
|
+ v-model="flageData"
|
|
|
+ @change="mapChange"
|
|
|
+ ></avue-input-map>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="起始桩号"
|
|
|
+ prop="startStation"
|
|
|
+ >
|
|
|
+ <el-input v-model="contractForm.startStation"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="结束桩号"
|
|
|
+ prop="endStation"
|
|
|
+ >
|
|
|
+ <el-input v-model="contractForm.endStation"></el-input>
|
|
|
+ </el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
- <el-tab-pane label="分配WBS" name="2">
|
|
|
+ <el-tab-pane
|
|
|
+ label="分配WBS"
|
|
|
+ name="2"
|
|
|
+ >
|
|
|
<div>
|
|
|
- <div v-if="!wbsId" class="text-align-c">项目暂未分配wbs树</div>
|
|
|
- <tree-tree :left-tree-data="leftTreeData" ref="treetotree" @onAddTree="treeChang" @onDelTree="treeChang" ></tree-tree>
|
|
|
+ <div
|
|
|
+ v-if="!wbsId"
|
|
|
+ class="text-align-c"
|
|
|
+ >项目暂未分配wbs树</div>
|
|
|
+ <tree-tree
|
|
|
+ :left-tree-data="leftTreeData"
|
|
|
+ ref="treetotree"
|
|
|
+ @onAddTree="treeChang"
|
|
|
+ @onDelTree="treeChang"
|
|
|
+ ></tree-tree>
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
- <el-tab-pane label="分配项目人员" name="3">
|
|
|
+ <el-tab-pane
|
|
|
+ label="分配项目人员"
|
|
|
+ name="3"
|
|
|
+ >
|
|
|
<div>
|
|
|
<div class="flex jc-al-c">
|
|
|
<span class="mg-r-10">项目名称</span>
|
|
|
- <el-input v-model="projectInfo.projectName" disabled style="width:300px;margin-right:30px;"></el-input>
|
|
|
+ <el-input
|
|
|
+ v-model="projectInfo.projectName"
|
|
|
+ disabled
|
|
|
+ style="width:300px;margin-right:30px;"
|
|
|
+ ></el-input>
|
|
|
<span class="mg-r-10">合同段名称</span>
|
|
|
- <el-input v-model="contractForm.contractName" disabled style="width:300px;"></el-input>
|
|
|
+ <el-input
|
|
|
+ v-model="contractForm.contractName"
|
|
|
+ disabled
|
|
|
+ style="width:300px;"
|
|
|
+ ></el-input>
|
|
|
</div>
|
|
|
<el-divider></el-divider>
|
|
|
<div class="flex jc-al-c mg-b-10">
|
|
|
<div>
|
|
|
<span class="mg-r-10">角色方</span>
|
|
|
<el-radio-group v-model="rId">
|
|
|
- <el-radio-button v-for="(item) in roleList" :label="item.id" :key="item.key">{{item.title}}</el-radio-button>
|
|
|
+ <el-radio-button
|
|
|
+ v-for="(item,key) in roleList"
|
|
|
+ :label="item.id"
|
|
|
+ :key="key"
|
|
|
+ >{{item.title}}</el-radio-button>
|
|
|
</el-radio-group>
|
|
|
</div>
|
|
|
<div>
|
|
|
<span class="mg-r-10 mg-l-20">请选择岗位</span>
|
|
|
- <el-select v-model="postId" filterable placeholder="请输入搜索">
|
|
|
- <el-option v-for="item in postList" :key="item.id" :label="item.postName" :value="item.id"></el-option>
|
|
|
+ <el-select
|
|
|
+ v-model="postId"
|
|
|
+ filterable
|
|
|
+ placeholder="请输入搜索"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in postList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.postName"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div>
|
|
|
- <el-table :data="contractUserList" border height="500" style="width: 100%">
|
|
|
- <el-table-column prop="name" label="姓名" align="center"></el-table-column>
|
|
|
- <el-table-column prop="account" label="登录账号" align="center"></el-table-column>
|
|
|
- <el-table-column prop="password" label="密码" align="center"></el-table-column>
|
|
|
- <el-table-column label="操作" align="center">
|
|
|
+ <el-table
|
|
|
+ :data="contractUserList"
|
|
|
+ border
|
|
|
+ height="500"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ prop="name"
|
|
|
+ label="姓名"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="account"
|
|
|
+ label="登录账号"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="password"
|
|
|
+ label="密码"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="操作"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
<template slot-scope="scope">
|
|
|
- <el-link class="mg-r-20" type="primary" @click="copyAccPas(scope.row)">复制</el-link>
|
|
|
- <el-link class="mg-r-20" type="primary" @click="resetPassword(scope.row)">重置密码</el-link>
|
|
|
- <el-link type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-link>
|
|
|
+ <el-link
|
|
|
+ class="mg-r-20"
|
|
|
+ type="primary"
|
|
|
+ @click="copyAccPas(scope.row)"
|
|
|
+ >复制</el-link>
|
|
|
+ <el-link
|
|
|
+ class="mg-r-20"
|
|
|
+ type="primary"
|
|
|
+ @click="resetPassword(scope.row)"
|
|
|
+ >重置密码</el-link>
|
|
|
+ <el-link
|
|
|
+ type="danger"
|
|
|
+ @click="handleDelete(scope.$index, scope.row)"
|
|
|
+ >删除</el-link>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
- <el-input v-model="copyText" ref="copyInput" type="textarea" style='opacity: 0;position: absolute;height:1px;overflow:hidden;'></el-input>
|
|
|
+ <el-input
|
|
|
+ v-model="copyText"
|
|
|
+ ref="copyInput"
|
|
|
+ type="textarea"
|
|
|
+ style='opacity: 0;position: absolute;height:1px;overflow:hidden;'
|
|
|
+ ></el-input>
|
|
|
</div>
|
|
|
<div class="flex jc-al-c mg-t-20">
|
|
|
<span>添加项目人员</span>
|
|
|
- <el-select v-model="userId" filterable placeholder="请输入搜索">
|
|
|
- <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ <el-select
|
|
|
+ v-model="userId"
|
|
|
+ filterable
|
|
|
+ placeholder="请输入搜索"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in userList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
- <el-button type="success" @click="addUserToProject">添加</el-button>
|
|
|
+ <el-button
|
|
|
+ class="marleft10"
|
|
|
+ type="success"
|
|
|
+ @click="addUserToProject"
|
|
|
+ >添加</el-button>
|
|
|
<el-button type="primary">创建新用户</el-button>
|
|
|
- <el-button type="danger" @click="handleDeletes">全部删除</el-button>
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ @click="handleDeletes"
|
|
|
+ >全部删除</el-button>
|
|
|
</div>
|
|
|
<el-divider></el-divider>
|
|
|
</div>
|
|
@@ -236,9 +477,26 @@
|
|
|
<div class="flex jc-sb">
|
|
|
<div></div>
|
|
|
<div>
|
|
|
- <el-button type="success" size="medium" :loading="btnLoad" @click="saveQuit">保存并退出</el-button>
|
|
|
- <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 1" @click="saveNext('p')">保存并返回上一步</el-button>
|
|
|
- <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 3" @click="saveNext('n')">保存并进入下一步</el-button>
|
|
|
+ <el-button
|
|
|
+ type="success"
|
|
|
+ size="medium"
|
|
|
+ :loading="btnLoad"
|
|
|
+ @click="saveQuit"
|
|
|
+ >保存并退出</el-button>
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ size="medium"
|
|
|
+ :loading="btnLoad"
|
|
|
+ v-if="activeType != 1"
|
|
|
+ @click="saveNext('p')"
|
|
|
+ >保存并返回上一步</el-button>
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ size="medium"
|
|
|
+ :loading="btnLoad"
|
|
|
+ v-if="activeType != 3"
|
|
|
+ @click="saveNext('n')"
|
|
|
+ >保存并进入下一步</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -247,587 +505,601 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
- import {getProjectDeatil,findProjectTree} from "@/api/manager/projectinfo";
|
|
|
- import {submitContractInfo,getContractInfo,delFileFromUrl,
|
|
|
- findJobByRoleId,findAllUserByCondition,findUserByName,
|
|
|
- saveUserInfoByProject,removeUsersByIds,resetPasswordByUserId,
|
|
|
- submitWbsTreeInContract,getContractInfoTree} from "@/api/manager/contractinfo";
|
|
|
- import {getRoleTree} from "@/api/system/role";
|
|
|
- import {getDictionary} from "@/api/system/dict";
|
|
|
- import {remove as removeFile} from "@/api/resource/attach";
|
|
|
- import website from '@/config/website';
|
|
|
- import {Base64} from 'js-base64';
|
|
|
- import {getToken} from '@/util/auth';
|
|
|
- import {mapGetters} from "vuex";
|
|
|
-
|
|
|
- import treeTree from "@/components/tree-tree/main"
|
|
|
- export default {
|
|
|
- components: {
|
|
|
- treeTree
|
|
|
- },
|
|
|
- data() {
|
|
|
- var checkPlace = (rule, value, callback) => {
|
|
|
- if (this.flageData && this.flageData.length >2 && this.flageData[2]) {
|
|
|
- callback();
|
|
|
- } else {
|
|
|
- callback(new Error('请选取项目地址'));
|
|
|
- }
|
|
|
- }
|
|
|
- var checkDate = (rule, value, callback) => {
|
|
|
- if (value && this.contractForm.planStartTime) {
|
|
|
- if(Date.parse(value) < Date.parse(this.contractForm.planStartTime)){
|
|
|
- callback(new Error('计划完工日期不能小于开工日期'));
|
|
|
- }
|
|
|
- }
|
|
|
+import { getProjectDeatil, findProjectTree } from "@/api/manager/projectinfo";
|
|
|
+import {
|
|
|
+ submitContractInfo, getContractInfo, delFileFromUrl,
|
|
|
+ findPostByType, findAllUserByCondition, findUserByName,
|
|
|
+ saveUserInfoByProjectTow, removeUsersByIds, resetPasswordByUserId,
|
|
|
+ submitWbsTreeInContract, getContractInfoTree
|
|
|
+} from "@/api/manager/contractinfo";
|
|
|
+import { getDictionary } from "@/api/system/dict";
|
|
|
+import { getDictionary as getDictbiz } from "@/api/system/dictbiz";
|
|
|
+import { remove as removeFile } from "@/api/resource/attach";
|
|
|
+import website from '@/config/website';
|
|
|
+import { Base64 } from 'js-base64';
|
|
|
+import { getToken } from '@/util/auth';
|
|
|
+import { mapGetters } from "vuex";
|
|
|
+
|
|
|
+import treeTree from "@/components/tree-tree/main"
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ treeTree
|
|
|
+ },
|
|
|
+ data () {
|
|
|
+ var checkPlace = (rule, value, callback) => {
|
|
|
+ if (this.flageData && this.flageData.length > 2 && this.flageData[2]) {
|
|
|
callback();
|
|
|
- };
|
|
|
- var checkDate2 = (rule, value, callback) => {
|
|
|
- if (value && this.contractForm.actualStartTime) {
|
|
|
- if(Date.parse(value) < Date.parse(this.contractForm.actualStartTime)){
|
|
|
- callback(new Error('实际完工日期不能小于开工日期'));
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ callback(new Error('请选取项目地址'));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var checkDate = (rule, value, callback) => {
|
|
|
+ if (value && this.contractForm.planStartTime) {
|
|
|
+ if (Date.parse(value) < Date.parse(this.contractForm.planStartTime)) {
|
|
|
+ callback(new Error('计划完工日期不能小于开工日期'));
|
|
|
}
|
|
|
- callback();
|
|
|
- };
|
|
|
- var checkIsNumber = (rule, value, callback) => {
|
|
|
- if (value != Number(value)) {
|
|
|
- callback(new Error('金额必须是数字'));
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ };
|
|
|
+ var checkDate2 = (rule, value, callback) => {
|
|
|
+ if (value && this.contractForm.actualStartTime) {
|
|
|
+ if (Date.parse(value) < Date.parse(this.contractForm.actualStartTime)) {
|
|
|
+ callback(new Error('实际完工日期不能小于开工日期'));
|
|
|
}
|
|
|
- callback();
|
|
|
- };
|
|
|
-
|
|
|
- return {
|
|
|
- activeType:'1',
|
|
|
- typeChang:{
|
|
|
- 1:false,
|
|
|
- 2:false,
|
|
|
- 3:false,
|
|
|
- },
|
|
|
- btnLoad:false,
|
|
|
-
|
|
|
- pid:'',
|
|
|
- cid:'',
|
|
|
- projectInfo:{},
|
|
|
-
|
|
|
- contractTypeList:[],
|
|
|
- fileList:[],
|
|
|
- headers:{},
|
|
|
- isBackShow:false,
|
|
|
-
|
|
|
- contractForm:{
|
|
|
- contractAmount:0
|
|
|
- },
|
|
|
- contractRules:{
|
|
|
- contractName: [
|
|
|
- { required: true, message: '请输入合同段名称', trigger: 'blur' },
|
|
|
- ],
|
|
|
- contractType: [
|
|
|
- { required: true, message: '请选择合同段类型', trigger: 'change' }
|
|
|
- ],
|
|
|
- contractNumber: [
|
|
|
- { required: true, message: '请输入合同段编号', trigger: 'blur' },
|
|
|
- ],
|
|
|
- contractorUnitName: [
|
|
|
- { required: true, message: '请输入业主单位名称', trigger: 'blur' },
|
|
|
- ],
|
|
|
- constructionUnitName: [
|
|
|
- { required: true, message: '请输入施工单位名称', trigger: 'blur' },
|
|
|
- ],
|
|
|
- supervisionUnitName: [
|
|
|
- { required: true, message: '请输入监理单位名称', trigger: 'blur' },
|
|
|
- ],
|
|
|
- startStation: [
|
|
|
- { required: true, message: '请输入起始桩号', trigger: 'blur' },
|
|
|
- ],
|
|
|
- endStation: [
|
|
|
- { required: true, message: '请输入结束桩号', trigger: 'blur' },
|
|
|
- ],
|
|
|
- projectPlace: [
|
|
|
- { required: true,validator: checkPlace, trigger: 'blur' },
|
|
|
- ],
|
|
|
- planEndTime:[
|
|
|
- {validator: checkDate,trigger: 'blur'},
|
|
|
- ],
|
|
|
- actualEndTime:[
|
|
|
- {validator: checkDate2,trigger: 'blur'},
|
|
|
- ],
|
|
|
- contractAmount:[
|
|
|
- {validator: checkIsNumber,trigger: 'blur'}
|
|
|
- ]
|
|
|
- },
|
|
|
-
|
|
|
- mapDialogVisible:false,
|
|
|
- params:{
|
|
|
- zoom: 10,
|
|
|
- // zoomEnable: false,
|
|
|
- // dragEnable: false,
|
|
|
- },
|
|
|
- flageData:[],
|
|
|
-
|
|
|
- rId:'',
|
|
|
- roleList:[],
|
|
|
- postId:'',
|
|
|
- postList:[],
|
|
|
- contractUserList:[],
|
|
|
- userId:'',
|
|
|
- userList:[],
|
|
|
- copyText:'',
|
|
|
-
|
|
|
- wbsId:'',
|
|
|
- leftTreeData:[],
|
|
|
}
|
|
|
- },
|
|
|
- computed: {
|
|
|
- ...mapGetters(["userInfo"]),
|
|
|
- },
|
|
|
- watch:{
|
|
|
- contractForm:{
|
|
|
- handler: function() { // 此处注意,handler函数不能为箭头函数,this会取上下文,而不是组件里的this,此外,深度监听,必须为handler函数名,否则会无效果
|
|
|
- this.typeChang['1'] = true;
|
|
|
- },
|
|
|
- deep: true
|
|
|
+ callback();
|
|
|
+ };
|
|
|
+ var checkIsNumber = (rule, value, callback) => {
|
|
|
+ if (value != Number(value)) {
|
|
|
+ callback(new Error('金额必须是数字'));
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ };
|
|
|
+
|
|
|
+ return {
|
|
|
+ activeType: '1',
|
|
|
+ typeChang: {
|
|
|
+ 1: false,
|
|
|
+ 2: false,
|
|
|
+ 3: false,
|
|
|
},
|
|
|
- activeType: async function (newValue) {
|
|
|
- if(newValue == '3'){
|
|
|
- this.getRoleList();
|
|
|
- this.getUserByName();
|
|
|
- }else if(newValue == '2'){
|
|
|
- await this.getLeftTree();
|
|
|
- this.getRightTree();
|
|
|
- }
|
|
|
+ btnLoad: false,
|
|
|
+
|
|
|
+ pid: '',
|
|
|
+ cid: '',
|
|
|
+ projectInfo: {},
|
|
|
+
|
|
|
+ contractTypeList: [],
|
|
|
+ storagePeriodList: [],//保管期限
|
|
|
+ securityLevelList: [],//保管密级
|
|
|
+ fileList: [],
|
|
|
+ headers: {},
|
|
|
+ isBackShow: false,
|
|
|
+
|
|
|
+ contractForm: {
|
|
|
+ contractAmount: 0
|
|
|
},
|
|
|
- rId:function(newValue){
|
|
|
- findJobByRoleId(newValue).then((res)=>{
|
|
|
- this.postList = res.data.data;
|
|
|
- }).catch(()=>{
|
|
|
- this.postList = [];
|
|
|
- }).finally(()=>{
|
|
|
- this.postId = '';
|
|
|
- })
|
|
|
+ contractRules: {
|
|
|
+ contractName: [
|
|
|
+ { required: true, message: '请输入合同段名称', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ contractType: [
|
|
|
+ { required: true, message: '请选择合同段类型', trigger: 'change' }
|
|
|
+ ],
|
|
|
+ contractNumber: [
|
|
|
+ { required: true, message: '请输入合同段编号', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ contractorUnitName: [
|
|
|
+ { required: true, message: '请输入业主单位名称', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ constructionUnitName: [
|
|
|
+ { required: true, message: '请输入施工单位名称', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ supervisionUnitName: [
|
|
|
+ { required: true, message: '请输入监理单位名称', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ laboratoryName: [
|
|
|
+ { required: true, message: '请输入实验室名称', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ startStation: [
|
|
|
+ { required: true, message: '请输入起始桩号', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ endStation: [
|
|
|
+ { required: true, message: '请输入结束桩号', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ projectPlace: [
|
|
|
+ { required: true, validator: checkPlace, trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ planEndTime: [
|
|
|
+ { validator: checkDate, trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ actualEndTime: [
|
|
|
+ { validator: checkDate2, trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ contractAmount: [
|
|
|
+ { validator: checkIsNumber, trigger: 'blur' }
|
|
|
+ ]
|
|
|
},
|
|
|
- postId:function(newValue){
|
|
|
- if(newValue){
|
|
|
- this.findAllUserByCondition();
|
|
|
- }else{
|
|
|
- this.contractUserList = [];
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ mapDialogVisible: false,
|
|
|
+ params: {
|
|
|
+ zoom: 10,
|
|
|
+ // zoomEnable: false,
|
|
|
+ // dragEnable: false,
|
|
|
+ },
|
|
|
+ flageData: [],
|
|
|
+
|
|
|
+ rId: '',
|
|
|
+ roleList: [
|
|
|
+ { title: '施工方人员', id: '1', },
|
|
|
+ { title: '监理方人员', id: '2', },
|
|
|
+ { title: '业主方人员', id: '3', }
|
|
|
+ ],
|
|
|
+ postId: '',
|
|
|
+ postList: [],
|
|
|
+ contractUserList: [],
|
|
|
+ userId: '',
|
|
|
+ userList: [],
|
|
|
+ copyText: '',
|
|
|
+
|
|
|
+ wbsId: '',
|
|
|
+ leftTreeData: [],
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapGetters(["userInfo"]),
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ contractForm: {
|
|
|
+ handler: function () { // 此处注意,handler函数不能为箭头函数,this会取上下文,而不是组件里的this,此外,深度监听,必须为handler函数名,否则会无效果
|
|
|
+ this.typeChang['1'] = true;
|
|
|
+ },
|
|
|
+ deep: true
|
|
|
},
|
|
|
- created() {
|
|
|
- this.init();
|
|
|
- //console.log(this.userInfo)
|
|
|
+ activeType: async function (newValue) {
|
|
|
+ if (newValue == '3') {
|
|
|
+ this.getUserByName();
|
|
|
+ } else if (newValue == '2') {
|
|
|
+ await this.getLeftTree();
|
|
|
+ this.getRightTree();
|
|
|
+ }
|
|
|
},
|
|
|
- mounted(){
|
|
|
- this.$nextTick(()=>{
|
|
|
- this.typeChang = {
|
|
|
- 1:false,
|
|
|
- 2:false,
|
|
|
- 3:false,
|
|
|
- }
|
|
|
+ rId: function (newValue) {
|
|
|
+ findPostByType(newValue).then((res) => {
|
|
|
+ this.postList = res.data.data;
|
|
|
+ }).catch(() => {
|
|
|
+ this.postList = [];
|
|
|
+ }).finally(() => {
|
|
|
+ this.postId = '';
|
|
|
})
|
|
|
},
|
|
|
- methods: {
|
|
|
- async init(){
|
|
|
- this.pid = this.$route.query.pid;
|
|
|
- this.cid = this.$route.query.cid;
|
|
|
- if(!this.cid){
|
|
|
- this.contractForm.pid = this.pid;
|
|
|
- }else{
|
|
|
- await this.getContractInfo();
|
|
|
- }
|
|
|
- await this.getProjectDeatil();
|
|
|
- if(this.$route.query.type){
|
|
|
- this.activeType = this.$route.query.type;
|
|
|
- }
|
|
|
+ postId: function (newValue) {
|
|
|
+ if (newValue) {
|
|
|
+ this.findAllUserByCondition();
|
|
|
+ } else {
|
|
|
+ this.contractUserList = [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created () {
|
|
|
+ this.rId = '1'
|
|
|
+ this.init();
|
|
|
+ //console.log(this.userInfo)
|
|
|
+ },
|
|
|
+ mounted () {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.typeChang = {
|
|
|
+ 1: false,
|
|
|
+ 2: false,
|
|
|
+ 3: false,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async init () {
|
|
|
+ this.pid = this.$route.query.pid;
|
|
|
+ this.cid = this.$route.query.cid;
|
|
|
+ if (!this.cid) {
|
|
|
+ this.contractForm.pid = this.pid;
|
|
|
+ } else {
|
|
|
+ await this.getContractInfo();
|
|
|
+ }
|
|
|
+ await this.getProjectDeatil();
|
|
|
+ if (this.$route.query.type) {
|
|
|
+ this.activeType = this.$route.query.type;
|
|
|
+ }
|
|
|
|
|
|
- this.getContractTypeList();
|
|
|
- this.setHeaders();
|
|
|
- },
|
|
|
- beforeLeave(activeName, oldActiveName){
|
|
|
- return new Promise((resolve,reject)=>{
|
|
|
- if(oldActiveName == '1' && !this.contractForm.id){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "请先保存合同段后,再进行合同段的分配"
|
|
|
- });
|
|
|
- reject();
|
|
|
- }
|
|
|
+ this.getContractTypeList();
|
|
|
+ this.getStoragePeriodList();
|
|
|
+ this.getSecurityLevelList();
|
|
|
+ this.setHeaders();
|
|
|
+ },
|
|
|
+ beforeLeave (activeName, oldActiveName) {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ if (oldActiveName == '1' && !this.contractForm.id) {
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "请先保存合同段后,再进行合同段的分配"
|
|
|
+ });
|
|
|
+ reject();
|
|
|
+ }
|
|
|
|
|
|
- if(this.typeChang[oldActiveName]){
|
|
|
- this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '不用',
|
|
|
- type: 'warning'
|
|
|
- }).then(() => {
|
|
|
- switch (oldActiveName) {
|
|
|
- case '1':
|
|
|
- this.savecontract().then((res)=>{
|
|
|
- this.contractForm.id = res.data.data.id;
|
|
|
- resolve();
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "保存成功!"
|
|
|
- });
|
|
|
+ if (this.typeChang[oldActiveName]) {
|
|
|
+ this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '不用',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ switch (oldActiveName) {
|
|
|
+ case '1':
|
|
|
+ this.savecontract().then((res) => {
|
|
|
+ this.contractForm.id = res.data.data.id;
|
|
|
+ resolve();
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "保存成功!"
|
|
|
});
|
|
|
- break;
|
|
|
- case '2':
|
|
|
- this.saveWbsTree().then(()=>{
|
|
|
- resolve();
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "保存成功!"
|
|
|
- });
|
|
|
- })
|
|
|
- break;
|
|
|
- }
|
|
|
- }).catch(()=>{
|
|
|
- this.typeChang[oldActiveName] = false;
|
|
|
- resolve();
|
|
|
- })
|
|
|
- }else{
|
|
|
- resolve();
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- getProjectDeatil(){
|
|
|
- return new Promise((resolve)=>{
|
|
|
- getProjectDeatil(this.pid).then((res)=>{
|
|
|
- this.projectInfo = res.data.data;
|
|
|
- this.wbsId = this.projectInfo.referenceWbsTemplateId;
|
|
|
- resolve();
|
|
|
- }).finally(()=>{
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ case '2':
|
|
|
+ this.saveWbsTree().then(() => {
|
|
|
+ resolve();
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "保存成功!"
|
|
|
+ });
|
|
|
+ })
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }).catch(() => {
|
|
|
+ this.typeChang[oldActiveName] = false;
|
|
|
resolve();
|
|
|
})
|
|
|
+ } else {
|
|
|
+ resolve();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ getProjectDeatil () {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ getProjectDeatil(this.pid).then((res) => {
|
|
|
+ this.projectInfo = res.data.data;
|
|
|
+ this.wbsId = this.projectInfo.referenceWbsTemplateId;
|
|
|
+ resolve();
|
|
|
+ }).finally(() => {
|
|
|
+ resolve();
|
|
|
})
|
|
|
- },
|
|
|
- getContractInfo(){
|
|
|
- return new Promise((resolve)=>{
|
|
|
- getContractInfo(this.cid).then((res)=>{
|
|
|
- this.contractForm = res.data.data;
|
|
|
- if(this.contractForm.startFileUrl){
|
|
|
- this.isBackShow = true;
|
|
|
- }
|
|
|
- if(this.contractForm.projectPlace){
|
|
|
- this.flageData = ['','',this.contractForm.projectPlace]
|
|
|
- }
|
|
|
- if(Number(this.contractForm.contractAmount) < 0){
|
|
|
- this.contractForm.contractAmount = 0;
|
|
|
- }
|
|
|
- this.$nextTick(()=>{
|
|
|
- this.typeChang['1'] = false;
|
|
|
- })
|
|
|
- }).finally(()=>{
|
|
|
- resolve();
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getContractInfo () {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ getContractInfo(this.cid).then((res) => {
|
|
|
+ this.contractForm = res.data.data;
|
|
|
+ if (this.contractForm.startFileUrl) {
|
|
|
+ this.isBackShow = true;
|
|
|
+ }
|
|
|
+ if (this.contractForm.projectPlace) {
|
|
|
+ this.flageData = ['', '', this.contractForm.projectPlace]
|
|
|
+ }
|
|
|
+ if (Number(this.contractForm.contractAmount) < 0) {
|
|
|
+ this.contractForm.contractAmount = 0;
|
|
|
+ }
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.typeChang['1'] = false;
|
|
|
})
|
|
|
+ }).finally(() => {
|
|
|
+ resolve();
|
|
|
})
|
|
|
- },
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- async saveQuit(){
|
|
|
- this.btnLoad = true;
|
|
|
- try {
|
|
|
- if(this.activeType == '1'){
|
|
|
- await this.savecontract();
|
|
|
- }else if(this.activeType == '2'){
|
|
|
- await this.saveWbsTree();
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- this.btnLoad = false;
|
|
|
- return;
|
|
|
+ async saveQuit () {
|
|
|
+ this.btnLoad = true;
|
|
|
+ try {
|
|
|
+ if (this.activeType == '1') {
|
|
|
+ await this.savecontract();
|
|
|
+ } else if (this.activeType == '2') {
|
|
|
+ await this.saveWbsTree();
|
|
|
}
|
|
|
-
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "保存成功!"
|
|
|
- });
|
|
|
+ } catch (error) {
|
|
|
this.btnLoad = false;
|
|
|
- this.$router.go(-1);
|
|
|
- },
|
|
|
- async saveNext(type){
|
|
|
- this.btnLoad = true;
|
|
|
- try {
|
|
|
- if(this.activeType == '1'){
|
|
|
- let res = await this.savecontract();
|
|
|
- this.contractForm.id = res.data.data.id;
|
|
|
- }else if(this.activeType == '2'){
|
|
|
- await this.saveWbsTree();
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- this.btnLoad = false;
|
|
|
- return;
|
|
|
- }
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "保存成功!"
|
|
|
- });
|
|
|
- this.typeChang[this.activeType] = false;
|
|
|
- let num = Number(this.activeType);
|
|
|
- if(type == 'n'){
|
|
|
- num++;
|
|
|
- }else if(type == 'p'){
|
|
|
- num--;
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "保存成功!"
|
|
|
+ });
|
|
|
+ this.btnLoad = false;
|
|
|
+ this.$router.go(-1);
|
|
|
+ },
|
|
|
+ async saveNext (type) {
|
|
|
+ this.btnLoad = true;
|
|
|
+ try {
|
|
|
+ if (this.activeType == '1') {
|
|
|
+ let res = await this.savecontract();
|
|
|
+ this.contractForm.id = res.data.data.id;
|
|
|
+ } else if (this.activeType == '2') {
|
|
|
+ await this.saveWbsTree();
|
|
|
}
|
|
|
-
|
|
|
- this.activeType = num.toString();
|
|
|
+ } catch (error) {
|
|
|
this.btnLoad = false;
|
|
|
- },
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- savecontract(){
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- this.$refs['contractForm'].validate((valid) => {
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "保存成功!"
|
|
|
+ });
|
|
|
+ this.typeChang[this.activeType] = false;
|
|
|
+ let num = Number(this.activeType);
|
|
|
+ if (type == 'n') {
|
|
|
+ num++;
|
|
|
+ } else if (type == 'p') {
|
|
|
+ num--;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.activeType = num.toString();
|
|
|
+ this.btnLoad = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ savecontract () {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ this.$refs['contractForm'].validate((valid) => {
|
|
|
if (valid) {
|
|
|
- if(this.flageData.length ==3){
|
|
|
+ if (this.flageData.length == 3) {
|
|
|
this.contractForm.projectPlace = this.flageData[2];
|
|
|
}
|
|
|
resolve(submitContractInfo(this.contractForm))
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
reject('验证失败')
|
|
|
}
|
|
|
})
|
|
|
- })
|
|
|
- },
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- handleRemove(file) {
|
|
|
- //console.log(file, fileList);
|
|
|
- removeFile(file.response.data.attachId).then(()=>{
|
|
|
+ handleRemove (file) {
|
|
|
+ //console.log(file, fileList);
|
|
|
+ removeFile(file.response.data.attachId).then(() => {
|
|
|
+ this.contractForm.startFileUrl = '';
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleExceed () {
|
|
|
+ this.$message.warning(`当前限制选择 1 个文件,请先移除后,再次上传`);
|
|
|
+ },
|
|
|
+ handleSuccess (res) {
|
|
|
+ this.contractForm.startFileUrl = res.data.link;
|
|
|
+ },
|
|
|
+ setHeaders () {
|
|
|
+ this.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
|
|
|
+ this.headers[website.tokenHeader] = 'bearer ' + getToken()
|
|
|
+ },
|
|
|
+
|
|
|
+ downloadFile () {
|
|
|
+ window.open(this.contractForm.startFileUrl);
|
|
|
+ },
|
|
|
+ delFile () {
|
|
|
+ this.$confirm('是否删除该文件?', '删除开工令', {
|
|
|
+ distinguishCancelAndClose: true,
|
|
|
+ confirmButtonText: '删除',
|
|
|
+ cancelButtonText: '取消'
|
|
|
+ }).then(() => {
|
|
|
+ delFileFromUrl(this.contractForm.startFileUrl).then(() => {
|
|
|
+ this.isBackShow = false;
|
|
|
this.contractForm.startFileUrl = '';
|
|
|
})
|
|
|
- },
|
|
|
- handleExceed() {
|
|
|
- this.$message.warning(`当前限制选择 1 个文件,请先移除后,再次上传`);
|
|
|
- },
|
|
|
- handleSuccess(res){
|
|
|
- this.contractForm.startFileUrl = res.data.link;
|
|
|
- },
|
|
|
- setHeaders(){
|
|
|
- this.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
|
|
|
- this.headers[website.tokenHeader] = 'bearer ' + getToken()
|
|
|
- },
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- downloadFile(){
|
|
|
- window.open(this.contractForm.startFileUrl);
|
|
|
- },
|
|
|
- delFile(){
|
|
|
- this.$confirm('是否删除该文件?', '删除开工令', {
|
|
|
- distinguishCancelAndClose: true,
|
|
|
- confirmButtonText: '删除',
|
|
|
- cancelButtonText: '取消'
|
|
|
- }).then(() => {
|
|
|
- delFileFromUrl(this.contractForm.startFileUrl).then(()=>{
|
|
|
- this.isBackShow = false;
|
|
|
- this.contractForm.startFileUrl = '';
|
|
|
- })
|
|
|
- })
|
|
|
- },
|
|
|
+ addUserToProject () {
|
|
|
+ if (!this.userId) {
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "请先选择用户再进行添加"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.postId) {
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "请先选择岗位再进行添加"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let list = [{
|
|
|
+ projectId: this.pid,
|
|
|
+ contractId: this.contractForm.id,
|
|
|
+ userId: this.userId,
|
|
|
+ postId: this.postId,
|
|
|
+ }];
|
|
|
+ saveUserInfoByProjectTow(list).then(() => {
|
|
|
+ // this.findAllUserByCondition();
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- addUserToProject(){
|
|
|
- if(!this.userId){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "请先选择用户再进行添加"
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- if(!this.postId){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "请先选择岗位再进行添加"
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- if(!this.rId){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "请先选择角色再进行添加"
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- let list = [{
|
|
|
- projectId:this.pid,
|
|
|
- contractId:this.contractForm.id,
|
|
|
- userId:this.userId,
|
|
|
- postId:this.postId,
|
|
|
- roleId:this.rId
|
|
|
- }];
|
|
|
- saveUserInfoByProject(list).then(()=>{
|
|
|
- this.findAllUserByCondition();
|
|
|
- })
|
|
|
- },
|
|
|
+ findAllUserByCondition () {
|
|
|
|
|
|
- findAllUserByCondition(){
|
|
|
- findAllUserByCondition({
|
|
|
- "cId": this.contractForm.id,
|
|
|
- "pId": this.pid,
|
|
|
- "postId": this.postId,
|
|
|
- "rId": this.rId
|
|
|
- }).then((res)=>{
|
|
|
- this.contractUserList = res.data.data;
|
|
|
- })
|
|
|
- },
|
|
|
+ findAllUserByCondition({
|
|
|
+ "cId": this.contractForm.id,
|
|
|
+ "pId": this.pid,
|
|
|
+ "postId": this.postId,
|
|
|
+ "rId": this.rId
|
|
|
+ }).then((res) => {
|
|
|
+ this.contractUserList = res.data.data;
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- handleDelete(index,row){
|
|
|
- this.$confirm('是否将该用户移除出合同段', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning'
|
|
|
- }).then(() => {
|
|
|
- removeUsersByIds(row.id).then(()=>{
|
|
|
- this.contractUserList.splice(index,1);
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "删除成功!"
|
|
|
- });
|
|
|
- })
|
|
|
+ handleDelete (index, row) {
|
|
|
+ this.$confirm('是否将该用户移除出合同段', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ removeUsersByIds(row.id).then(() => {
|
|
|
+ this.contractUserList.splice(index, 1);
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "删除成功!"
|
|
|
+ });
|
|
|
})
|
|
|
- },
|
|
|
- handleDeletes(){
|
|
|
- this.$confirm('是否将所有用户移除出合同段', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning'
|
|
|
- }).then(() => {
|
|
|
- let ids = [];
|
|
|
- this.contractUserList.forEach((element)=>{
|
|
|
- ids.push(element.id);
|
|
|
- })
|
|
|
- removeUsersByIds(ids.join(',')).then(()=>{
|
|
|
- this.contractUserList = [];
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "删除成功!"
|
|
|
- });
|
|
|
- })
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleDeletes () {
|
|
|
+ this.$confirm('是否将所有用户移除出合同段', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ let ids = [];
|
|
|
+ this.contractUserList.forEach((element) => {
|
|
|
+ ids.push(element.id);
|
|
|
})
|
|
|
- },
|
|
|
-
|
|
|
- copyAccPas(row){
|
|
|
- this.copyText = `姓名:${row.name}
|
|
|
-账号:${row.account}
|
|
|
-密码:${row.password}`;
|
|
|
- this.$nextTick(()=>{
|
|
|
- this.$refs.copyInput.select()
|
|
|
- document.execCommand('copy')
|
|
|
+ removeUsersByIds(ids.join(',')).then(() => {
|
|
|
+ this.contractUserList = [];
|
|
|
this.$message({
|
|
|
type: "success",
|
|
|
- message: "成功复制在剪贴板!"
|
|
|
+ message: "删除成功!"
|
|
|
});
|
|
|
})
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- },
|
|
|
+ copyAccPas (row) {
|
|
|
+ this.copyText = `姓名:${row.name}
|
|
|
+账号:${row.account}
|
|
|
+密码:${row.password}`;
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.copyInput.select()
|
|
|
+ document.execCommand('copy')
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "成功复制在剪贴板!"
|
|
|
+ });
|
|
|
+ })
|
|
|
|
|
|
- resetPassword(row){
|
|
|
- this.$confirm('是否将用户【'+row.name+'】密码重置为123456', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning'
|
|
|
- }).then(() => {
|
|
|
- resetPasswordByUserId(row.uId).then(()=>{
|
|
|
- row.password = '123456';
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "重置成功!"
|
|
|
- });
|
|
|
- })
|
|
|
- })
|
|
|
- },
|
|
|
+ },
|
|
|
|
|
|
- getContractTypeList(){
|
|
|
- if(this.contractTypeList.length >1){
|
|
|
- return;
|
|
|
- }
|
|
|
- getDictionary({
|
|
|
- code:'contract_type'
|
|
|
- }).then((res)=>{
|
|
|
- res.data.data.forEach(element => {
|
|
|
- element.dictKey = Number(element.dictKey)
|
|
|
+ resetPassword (row) {
|
|
|
+ this.$confirm('是否将用户【' + row.name + '】密码重置为123456', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ resetPasswordByUserId(row.uid).then(() => {
|
|
|
+ row.password = '123456';
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "重置成功!"
|
|
|
});
|
|
|
- this.contractTypeList = res.data.data;
|
|
|
})
|
|
|
- },
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- getRoleList(){
|
|
|
- if(this.roleList.length > 1){
|
|
|
- return;
|
|
|
- }
|
|
|
+ getContractTypeList () {
|
|
|
+ if (this.contractTypeList.length > 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ getDictionary({
|
|
|
+ code: 'contract_type'
|
|
|
+ }).then((res) => {
|
|
|
+ res.data.data.forEach(element => {
|
|
|
+ element.dictKey = Number(element.dictKey)
|
|
|
+ });
|
|
|
+ this.contractTypeList = res.data.data;
|
|
|
+ })
|
|
|
+ },
|
|
|
|
|
|
- getRoleTree().then((res)=>{
|
|
|
- let list = [];
|
|
|
- res.data.data.forEach((element)=>{
|
|
|
- if(element.title == '监理方'||
|
|
|
- element.title == '业主方'){
|
|
|
- list.push(element);
|
|
|
- }else if(element.title == '施工方'){
|
|
|
- //给个默认
|
|
|
- this.rId = element.id;
|
|
|
- list.push(element);
|
|
|
- }
|
|
|
- })
|
|
|
- this.roleList = list;
|
|
|
- })
|
|
|
- },
|
|
|
- getUserByName(){
|
|
|
- findUserByName('').then((res)=>{
|
|
|
- this.userList = res.data.data;
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- getLeftTree(){
|
|
|
- return new Promise((resolve)=>{
|
|
|
- if(!this.leftTreeData.length){
|
|
|
- findProjectTree(this.projectInfo.id,this.wbsId).then((res)=>{
|
|
|
- if(Array.isArray(res.data.data)){
|
|
|
+
|
|
|
+ getUserByName () {
|
|
|
+ findUserByName('').then((res) => {
|
|
|
+ this.userList = res.data.data;
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ getLeftTree () {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ if (!this.leftTreeData.length) {
|
|
|
+ findProjectTree(this.projectInfo.id, this.wbsId).then((res) => {
|
|
|
+ if (Array.isArray(res.data.data)) {
|
|
|
this.leftTreeData = res.data.data;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
this.leftTreeData = [];
|
|
|
}
|
|
|
resolve();
|
|
|
- }).finally(()=>{
|
|
|
+ }).finally(() => {
|
|
|
resolve();
|
|
|
})
|
|
|
}
|
|
|
resolve();
|
|
|
})
|
|
|
},
|
|
|
- getRightTree(){
|
|
|
- getContractInfoTree(this.wbsId,this.projectInfo.id,this.contractForm.id).then((res)=>{
|
|
|
- if(Array.isArray(res.data.data)){
|
|
|
+ getRightTree () {
|
|
|
+ getContractInfoTree(this.wbsId, this.projectInfo.id, this.contractForm.id).then((res) => {
|
|
|
+ if (Array.isArray(res.data.data)) {
|
|
|
this.$refs.treetotree.setRightTree(res.data.data);
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
|
|
|
- saveWbsTree(){
|
|
|
+ saveWbsTree () {
|
|
|
let obj = {};
|
|
|
let ids = this.$refs.treetotree.getTreeAllId('rightTree');
|
|
|
obj = {
|
|
|
- wbsId:this.wbsId,
|
|
|
- projectId:this.projectInfo.id,
|
|
|
- contractId:this.contractForm.id,
|
|
|
- wbsTreeIds:ids
|
|
|
+ wbsId: this.wbsId,
|
|
|
+ projectId: this.projectInfo.id,
|
|
|
+ contractId: this.contractForm.id,
|
|
|
+ wbsTreeIds: ids
|
|
|
}
|
|
|
return submitWbsTreeInContract(obj);
|
|
|
- },
|
|
|
+ },
|
|
|
|
|
|
- treeChang(){
|
|
|
+ treeChang () {
|
|
|
this.typeChang[2] = true;
|
|
|
},
|
|
|
|
|
|
- mapChange(){
|
|
|
+ mapChange () {
|
|
|
this.$refs['contractForm'].validateField('projectPlace');
|
|
|
- }
|
|
|
+ },
|
|
|
|
|
|
+ getStoragePeriodList () {
|
|
|
+ if (this.storagePeriodList.length > 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ getDictbiz({
|
|
|
+ code: 'storage_period'
|
|
|
+ }).then((res) => {
|
|
|
+ res.data.data.forEach(element => {
|
|
|
+ element.dictKey = Number(element.dictKey)
|
|
|
+ });
|
|
|
+ this.storagePeriodList = res.data.data;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getSecurityLevelList () {
|
|
|
+ if (this.securityLevelList.length > 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ getDictbiz({
|
|
|
+ code: 'security_level'
|
|
|
+ }).then((res) => {
|
|
|
+ res.data.data.forEach(element => {
|
|
|
+ element.dictKey = Number(element.dictKey)
|
|
|
+ });
|
|
|
+ this.securityLevelList = res.data.data;
|
|
|
+ })
|
|
|
}
|
|
|
- };
|
|
|
+
|
|
|
+ }
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
- .bm-view {
|
|
|
- width: 100%;
|
|
|
- height: 300px;
|
|
|
- }
|
|
|
- .head-font{
|
|
|
- font-size: 20px;
|
|
|
- font-weight:bold;
|
|
|
- }
|
|
|
+.bm-view {
|
|
|
+ width: 100%;
|
|
|
+ height: 300px;
|
|
|
+}
|
|
|
+.head-font {
|
|
|
+ font-size: 20px;
|
|
|
+ font-weight: bold;
|
|
|
+}
|
|
|
</style>
|