opt:优化项目,客户相关代码

This commit is contained in:
zhangzq
2026-03-18 11:30:58 +08:00
parent 3a9e6df891
commit b6080e9d4b
10 changed files with 448 additions and 276 deletions

View File

@@ -1,4 +1,4 @@
<p align="center"> npm<p align="center">
<img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg"> <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
</p> </p>

View File

@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Warehouse Management System</title> <title>上海诺力智能科技有限公司</title>
</head> </head>
<body> <body>
<script src=<%= BASE_URL %>/tinymce4.7.5/tinymce.min.js></script> <script src=<%= BASE_URL %>/tinymce4.7.5/tinymce.min.js></script>

View File

@@ -45,6 +45,13 @@ export default {
data: param data: param
}) })
}, },
getStaffPage(param) {
return request({
url: `/Hr/GetStaffPage`,
method: "post",
data: param
});
},
GetStaffTypeList() { GetStaffTypeList() {
return request({ return request({
url: `/Hr/GetStaffTypeList`, url: `/Hr/GetStaffTypeList`,
@@ -73,7 +80,7 @@ export default {
data: param data: param
}) })
}, },
GetOperationDeptStaff() GetOperationDeptStaff()
{ {
return request({ return request({

View File

@@ -5,39 +5,62 @@
<el-collapse-item name="base-info"> <el-collapse-item name="base-info">
<template slot="title"> <template slot="title">
<span class="custom-title">项目基础信息</span> <span class="custom-title">项目基础信息</span>
<el-button style="margin_left:20px" size="mini" class="el-icon-edit" type="text" @click="editProjectInfo" <el-button
v-if="edit_support == true">编辑</el-button> v-if="edit_support == true"
style="margin_left:20px"
size="mini"
class="el-icon-edit"
type="text"
@click="editProjectInfo">编辑</el-button>
</template> </template>
<span style="border: 1px solid #dcdcdc; padding: 8px; display: inline-block;width: 100%;">项目介绍{{ <span style="border: 1px solid #dcdcdc; padding: 8px; display: inline-block;width: 100%;">项目介绍{{
project_info.project_intro }} project_info.project_intro }}
</span> </span>
<el-descriptions :column="2" border class="resume-label-width" style="margin-top: 5px;"> <el-descriptions :column="2" border class="resume-label-width" style="margin-top: 5px;">
<el-descriptions-item label="客户名称" :span="1">{{ project_info.company_name }}</el-descriptions-item> <el-descriptions-item :span="1" label="客户名称">{{ project_info.company_name }}</el-descriptions-item>
<el-descriptions-item label="项目名称" :span="1">{{ project_info.project_name }}</el-descriptions-item> <el-descriptions-item :span="1" label="项目名称">{{ project_info.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目状态" :span="1">{{ project_info.project_state_desp }} <el-descriptions-item :span="1" label="项目状态">{{ project_info.project_state_desp }}
<el-button v-if="project_info.project_state == 1 && edit_support == true" type="text" <el-button
icon="el-icon-video-play" @click="dialogVisibleStartProject = true" style="margin-left: 20px;" v-if="project_info.project_state == 1 && edit_support == true"
size="mini">启动</el-button> type="text"
icon="el-icon-video-play"
style="margin-left: 20px;"
size="mini"
@click="dialogVisibleStartProject = true">启动</el-button>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="创建时间" :span="1">{{ project_info.create_time }}</el-descriptions-item> <el-descriptions-item :span="1" label="创建时间">{{ project_info.create_time }}</el-descriptions-item>
<el-descriptions-item label="销售经理" :span="1">{{ project_info.sale_manager }} <el-descriptions-item :span="1" label="销售经理">{{ project_info.sale_name }}
<el-button type="text" icon="el-icon-edit" @click="setSaleManager()" style="margin-left: 20px;" <el-button
size="mini" v-if="edit_support == true && allow_change_manager == true">编辑</el-button> v-if="edit_support == true && allow_change_manager == true"
type="text"
icon="el-icon-edit"
style="margin-left: 20px;"
size="mini"
@click="setSaleManager()">编辑</el-button>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="交付经理" :span="1">{{ project_info.project_manager }} <el-descriptions-item :span="1" label="交付经理">{{ project_info.project_manager }}
<el-button type="text" icon="el-icon-edit" @click="setProjectManager()" style="margin-left: 20px;" <el-button
size="mini" v-if="edit_support == true && allow_change_manager == true">编辑</el-button> v-if="edit_support == true && allow_change_manager == true"
type="text"
icon="el-icon-edit"
style="margin-left: 20px;"
size="mini"
@click="setProjectManager()">编辑</el-button>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="项目成员" :span="1">{{ project_info.project_members }} <el-descriptions-item :span="1" label="项目成员">{{ project_info.project_members }}
<el-button type="text" icon="el-icon-edit" @click="addProjectMember()" style="margin-left: 20px;" <el-button
size="mini" v-if="edit_support == true">编辑</el-button> v-if="edit_support == true"
type="text"
icon="el-icon-edit"
style="margin-left: 20px;"
size="mini"
@click="addProjectMember()">编辑</el-button>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="外部成员" :span="1"> <el-descriptions-item :span="1" label="外部成员">
<el-button class="el-icon-view" @click="showExternalMember()" type="text" size="mini">查看</el-button> <el-button class="el-icon-view" type="text" size="mini" @click="showExternalMember()">查看</el-button>
</el-descriptions-item> </el-descriptions-item>
<!--el-descriptions-item label="项目合同" :span="1" v-if="project_info.project_state > 1 && edit_support == true"> <!--el-descriptions-item label="项目合同" :span="1" v-if="project_info.project_state > 1 && edit_support == true">
<el-button class="el-icon-view" @click="showContract()" type="text" size="mini">查看</el-button> <el-button class="el-icon-view" @click="showContract()" type="text" size="mini">查看</el-button>
@@ -47,29 +70,37 @@
<el-button class="el-icon-view" @click="showProtocol()" type="text" size="mini">查看</el-button> <el-button class="el-icon-view" @click="showProtocol()" type="text" size="mini">查看</el-button>
</el-descriptions-item--> </el-descriptions-item-->
<el-descriptions-item label="项目计划" :span="1" v-if="project_info.project_state > 1"> <el-descriptions-item v-if="project_info.project_state > 1" :span="1" label="项目计划">
<el-button class="el-icon-view" @click="showPlan()" type="text" size="mini">查看</el-button> <el-button class="el-icon-view" type="text" size="mini" @click="showPlan()">查看</el-button>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="项目资料" :span="1"> <el-descriptions-item :span="1" label="项目资料">
<el-button class="el-icon-view" @click="showContract()" type="text" size="mini" <el-button
v-if="project_info.project_state > 1 && edit_support == true">项目合同</el-button> v-if="project_info.project_state > 1 && edit_support == true"
<el-button class="el-icon-view" @click="showEquipment()" type="text" size="mini">设备资料</el-button> class="el-icon-view"
<el-button class="el-icon-view" @click="showProtocol()" type="text" size="mini">技术协议</el-button> type="text"
<el-button class="el-icon-view" @click="showSummary()" type="text" size="mini">会议纪要</el-button> size="mini"
<el-button class="el-icon-view" @click="showBid()" type="text" size="mini" @click="showContract()">项目合同</el-button>
v-if="edit_support == true">投标文件</el-button> <el-button class="el-icon-view" type="text" size="mini" @click="showEquipment()">设备资料</el-button>
<el-button class="el-icon-view" type="text" size="mini" @click="showProtocol()">技术协议</el-button>
<el-button class="el-icon-view" type="text" size="mini" @click="showSummary()">会议纪要</el-button>
<el-button
v-if="edit_support == true"
class="el-icon-view"
type="text"
size="mini"
@click="showBid()">投标文件</el-button>
</el-descriptions-item> </el-descriptions-item>
<!--el-descriptions-item label="会议纪要" :span="1"> <!--el-descriptions-item label="会议纪要" :span="1">
<el-button class="el-icon-view" @click="showSummary()" type="text" size="mini">查看</el-button> <el-button class="el-icon-view" @click="showSummary()" type="text" size="mini">查看</el-button>
</el-descriptions-item--> </el-descriptions-item-->
<el-descriptions-item label="验收报告" :span="1" v-if="project_info.project_state > 8"> <el-descriptions-item v-if="project_info.project_state > 8" :span="1" label="验收报告">
<el-button class="el-icon-view" @click="showReport()" type="text" size="mini">查看</el-button> <el-button class="el-icon-view" type="text" size="mini" @click="showReport()">查看</el-button>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="供应商" :span="1"> <el-descriptions-item :span="1" label="供应商">
<el-button class="el-icon-view" @click="showSupplier()" type="text" size="mini">查看</el-button> <el-button class="el-icon-view" type="text" size="mini" @click="showSupplier()">查看</el-button>
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
@@ -77,92 +108,162 @@
</el-collapse> </el-collapse>
<!-- 问题单对话框 --> <!-- 问题单对话框 -->
<el-dialog title="项目合同" :visible.sync="dialogVisibleShowContract" :close-on-click-modal="false" width="95%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowContract"
:close-on-click-modal="false"
title="项目合同"
width="95%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<Contract :project_id="project_info.project_id" :contract_category="1" :edid_authority="false" <Contract
v-if="update_view == false" /> v-if="update_view == false"
:project_id="project_info.project_id"
:contract_category="1"
:edid_authority="false" />
</div> </div>
</el-dialog> </el-dialog>
<!-- 外部客户对话框 --> <!-- 外部客户对话框 -->
<el-dialog title="外部客户" :visible.sync="dialogVisibleShowExternalMember" :close-on-click-modal="false" width="55%" <el-dialog
style="position: fixed;" append-to-body> :visible.sync="dialogVisibleShowExternalMember"
:close-on-click-modal="false"
title="外部客户"
width="55%"
style="position: fixed;"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<ExternalMember :project_id="project_info.project_id" :edit_support="edit_support" <ExternalMember
v-if="update_view == false" /> v-if="update_view == false"
:project_id="project_info.project_id"
:edit_support="edit_support" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="技术协议" :visible.sync="dialogVisibleShowProtocol" :close-on-click-modal="false" width="95%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowProtocol"
:close-on-click-modal="false"
title="技术协议"
width="95%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<Contract :project_id="project_info.project_id" :contract_category="2" :edid_authority="edit_support" <Contract
v-if="update_view == false" /> v-if="update_view == false"
:project_id="project_info.project_id"
:contract_category="2"
:edid_authority="edit_support" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="设备资料" :visible.sync="dialogVisibleShowEquipment" :close-on-click-modal="false" width="95%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowEquipment"
:close-on-click-modal="false"
title="设备资料"
width="95%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<Materials :materials_class="1" :materials_owner="project_info.project_id" :materials_type="[18, 19]" <Materials
:edid_authority="true" v-if="update_view == false" /> v-if="update_view == false"
:materials_class="1"
:materials_owner="project_info.project_id"
:materials_type="[18, 19]"
:edid_authority="true" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="会议纪要" :visible.sync="dialogVisibleShowSummary" :close-on-click-modal="false" width="95%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowSummary"
:close-on-click-modal="false"
title="会议纪要"
width="95%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<Materials :materials_class="1" :materials_owner="project_info.project_id" :materials_type="2" <Materials
:edid_authority="true" v-if="update_view == false" /> v-if="update_view == false"
:materials_class="1"
:materials_owner="project_info.project_id"
:materials_type="2"
:edid_authority="true" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="项目计划" :visible.sync="dialogVisibleShowPlan" :close-on-click-modal="false" width="95%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowPlan"
:close-on-click-modal="false"
title="项目计划"
width="95%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<ProjectPlan v-if="update_view == false" :project_id="project_info.project_id" /> <ProjectPlan v-if="update_view == false" :project_id="project_info.project_id" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="验收报告" :visible.sync="dialogVisibleShowReport" :close-on-click-modal="false" width="95%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowReport"
:close-on-click-modal="false"
title="验收报告"
width="95%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<Materials :materials_class="1" :materials_owner="project_info.project_id" :materials_type="4" <Materials
:edid_authority="true" v-if="update_view == false" /> v-if="update_view == false"
:materials_class="1"
:materials_owner="project_info.project_id"
:materials_type="4"
:edid_authority="true" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="供应商信息" :visible.sync="dialogVisibleShowSupplier" :close-on-click-modal="false" width="60%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowSupplier"
:close-on-click-modal="false"
title="供应商信息"
width="60%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<SupplierInfo :project_id="project_info.project_id" :edid_authority="edit_support" /> <SupplierInfo :project_id="project_info.project_id" :edid_authority="edit_support" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="投标文件" :visible.sync="dialogVisibleShowBid" :close-on-click-modal="false" width="95%" <el-dialog
style="position: fixed;top:-10%" append-to-body> :visible.sync="dialogVisibleShowBid"
:close-on-click-modal="false"
title="投标文件"
width="95%"
style="position: fixed;top:-10%"
append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<BidInfo :project_id="project_info.project_id" :contract_category="5" :edid_authority="edit_support" <BidInfo
v-if="update_view == false" /> v-if="update_view == false"
:project_id="project_info.project_id"
:contract_category="5"
:edid_authority="edit_support" />
</div> </div>
</el-dialog> </el-dialog>
<!-- 对话框 --> <!-- 对话框 -->
<el-dialog title="文件信息" :visible.sync="dialogVisibleShowFile" width="80%" append-to-body> <el-dialog :visible.sync="dialogVisibleShowFile" title="文件信息" width="80%" append-to-body>
<img v-if="isImage" :src="previewUrl" alt="Preview" style="max-width: 40%; max-height: 30%;"> <img v-if="isImage" :src="previewUrl" alt="Preview" style="max-width: 40%; max-height: 30%;">
<iframe v-else-if="isPDF" :src="previewUrl" frameborder="0" style="width: 100%; height: 600px;"></iframe> <iframe v-else-if="isPDF" :src="previewUrl" frameborder="0" style="width: 100%; height: 600px;"/>
<p v-else>不支持的文件类型</p> <p v-else>不支持的文件类型</p>
</el-dialog> </el-dialog>
<!-- 设置项目经理对话框 --> <!-- 设置项目经理对话框 -->
<el-dialog title="设置交付负责人" :visible.sync="dialogVisibleSetManager" width="30%" append-to-body> <el-dialog :visible.sync="dialogVisibleSetManager" title="设置交付负责人" width="30%" append-to-body>
<el-form :model="editProject" label-width="100px"> <el-form :model="editProject" label-width="100px">
<el-form-item label="项目成员"> <el-form-item label="项目成员">
<el-select v-model="editProject.project_manager" placeholder="请选择" style="width: 100%;"> <el-select v-model="editProject.project_manager" placeholder="请选择" style="width: 100%;">
<el-option v-for="item in dept_member_list" :key="item.staff_id" :label="item.staff_name" <el-option
:value="item.staff_id"> v-for="item in dept_member_list"
</el-option> :key="item.staff_id"
:label="item.staff_name"
:value="item.staff_id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -173,13 +274,15 @@
</el-dialog> </el-dialog>
<!-- 设置项目经理对话框 --> <!-- 设置项目经理对话框 -->
<el-dialog title="设置销售负责人" :visible.sync="dialogVisibleSetSaleManager" width="30%" append-to-body> <el-dialog :visible.sync="dialogVisibleSetSaleManager" title="设置销售负责人" width="30%" append-to-body>
<el-form :model="editProject" label-width="100px"> <el-form :model="editProject" label-width="100px">
<el-form-item label="项目成员"> <el-form-item label="项目成员">
<el-select v-model="editProject.sale_manager" placeholder="请选择" style="width: 100%;"> <el-select v-model="editProject.sale_manager" placeholder="请选择" style="width: 100%;">
<el-option v-for="item in dept_member_list" :key="item.staff_id" :label="item.staff_name" <el-option
:value="item.staff_id"> v-for="item in dept_member_list"
</el-option> :key="item.staff_id"
:label="item.staff_name"
:value="item.staff_id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -190,13 +293,15 @@
</el-dialog> </el-dialog>
<!-- 添加项目成员对话框 --> <!-- 添加项目成员对话框 -->
<el-dialog title="添加项目组成员" :visible.sync="dialogVisibleAddMember" width="30%" append-to-body> <el-dialog :visible.sync="dialogVisibleAddMember" title="添加项目组成员" width="30%" append-to-body>
<el-form :model="editProject" label-width="100px"> <el-form :model="editProject" label-width="100px">
<el-form-item label="项目成员"> <el-form-item label="项目成员">
<el-select v-model="editProject.project_members" multiple placeholder="请选择" style="width: 100%;"> <el-select v-model="editProject.project_members" multiple placeholder="请选择" style="width: 100%;">
<el-option v-for="item in dept_member_list" :key="item.staff_id" :label="item.staff_name" <el-option
:value="item.staff_id"> v-for="item in dept_member_list"
</el-option> :key="item.staff_id"
:label="item.staff_name"
:value="item.staff_id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -207,27 +312,29 @@
</el-dialog> </el-dialog>
<!-- 编辑项目对话框 --> <!-- 编辑项目对话框 -->
<el-dialog title="编辑项目" :visible.sync="dialogVisibleEditProject" width="30%" append-to-body> <el-dialog :visible.sync="dialogVisibleEditProject" title="编辑项目" width="30%" append-to-body>
<el-form :model="editProject" label-width="100px"> <el-form :model="editProject" label-width="100px">
<el-form-item label="项目名称"> <el-form-item label="项目名称">
<el-input v-model="editProject.project_name"></el-input> <el-input v-model="editProject.project_name"/>
</el-form-item> </el-form-item>
<el-form-item label="项目编号"> <el-form-item label="项目编号">
<el-input v-model="editProject.project_number"></el-input> <el-input v-model="editProject.project_number"/>
</el-form-item> </el-form-item>
<el-form-item label="项目描述"> <el-form-item label="项目描述">
<el-input v-model="editProject.project_intro"></el-input> <el-input v-model="editProject.project_intro"/>
</el-form-item> </el-form-item>
<el-form-item label="项目状态"> <el-form-item label="项目状态">
<el-select v-model="editProject.project_state" placeholder="请选择" style="width: 80%;"> <el-select v-model="editProject.project_state" placeholder="请选择" style="width: 80%;">
<el-option v-for="item in project_state_list" :key="item.id" :label="item.desp" :value="item.id"> <el-option v-for="item in project_state_list" :key="item.id" :label="item.desp" :value="item.id"/>
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="创建时间"> <el-form-item label="创建时间">
<el-date-picker v-model="editProject.create_time" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" <el-date-picker
placeholder="选择日期"> v-model="editProject.create_time"
</el-date-picker> type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@@ -237,20 +344,27 @@
</el-dialog> </el-dialog>
<!-- 启动项目对话框 --> <!-- 启动项目对话框 -->
<el-dialog title="启动项目" :visible.sync="dialogVisibleStartProject" width="30%" append-to-body> <el-dialog :visible.sync="dialogVisibleStartProject" title="启动项目" width="30%" append-to-body>
<el-form :model="editNode" label-width="100px"> <el-form :model="editNode" label-width="100px">
<el-form-item label="参与员工"> <el-form-item label="参与员工">
<el-select v-model="editNode.members" multiple placeholder="请选择" style="width: 100%;"> <el-select v-model="editNode.members" filterable multiple placeholder="请选择" style="width: 100%;">
<el-option v-for="item in dept_member_list" :key="item.staff_id" :label="item.staff_name" <el-option
:value="item.staff_id"> v-for="item in dept_member_list"
</el-option> :key="item.staff_id"
:label="item.staff_name"
:value="item.staff_id"
filterable
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="启动时间"> <el-form-item label="启动时间">
<el-date-picker v-model="editNode.start_date" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" <el-date-picker
placeholder="选择日期"> v-model="editNode.start_date"
</el-date-picker> type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -268,16 +382,15 @@ import project from '@/api/project'
import contract from '@/api/contract' import contract from '@/api/contract'
import hr from '@/api/hr' import hr from '@/api/hr'
import user from '@/api/user' import user from '@/api/user'
import Contract from './Contract.vue'; import Contract from './Contract.vue'
import ExternalMember from './ExternalMember.vue'; import ExternalMember from './ExternalMember.vue'
import Materials from '@/views/components/Materials.vue' import Materials from '@/views/components/Materials.vue'
import SupplierInfo from './SupplierInfo.vue'; import SupplierInfo from './SupplierInfo.vue'
import ProjectPlan from './ProjectPlan.vue'; import ProjectPlan from './ProjectPlan.vue'
import BidInfo from '@/views/components/BidInfo.vue'; import BidInfo from '@/views/components/BidInfo.vue'
export default { export default {
name: 'ProjectBasicInfo', name: 'ProjectBasicInfo',
props: ['project_id', 'edit_support'],
components: { components: {
Contract, Contract,
ExternalMember, ExternalMember,
@@ -286,6 +399,7 @@ export default {
BidInfo, BidInfo,
ProjectPlan ProjectPlan
}, },
props: ['project_id', 'edit_support'],
data() { data() {
return { return {
update_view: false, update_view: false,
@@ -343,141 +457,135 @@ export default {
addProjectMember() { addProjectMember() {
this.dialogVisibleAddMember = true this.dialogVisibleAddMember = true
this.editProject.project_members = []; this.editProject.project_members = []
if (this.project_info['involve_members'] != '') { if (this.project_info['involve_members'] != '') {
this.editProject.project_members = this.project_info['involve_members'].split(',').map(staff_id => parseInt(staff_id, 10)); this.editProject.project_members = this.project_info['involve_members'].split(',').map(staff_id => parseInt(staff_id, 10))
} }
}, },
//获取项目部所有员工信息 // 获取项目部所有员工信息
get_project_dept_member_list() { get_project_dept_member_list() {
user.GetProjectDeptStaffList().then(response => { user.GetProjectDeptStaffList().then(response => {
this.dept_member_list = response.data.data this.dept_member_list = response.data.data
console.log(this.dept_member_list); console.log(this.dept_member_list)
}) })
}, },
setProjectManager() { setProjectManager() {
this.dialogVisibleSetManager = true; this.dialogVisibleSetManager = true
}, },
setSaleManager() { setSaleManager() {
this.dialogVisibleSetSaleManager = true; this.dialogVisibleSetSaleManager = true
}, },
update_sub_component() { update_sub_component() {
this.update_view = true; this.update_view = true
let that = this; const that = this
setTimeout(() => { setTimeout(() => {
that.update_view = false; that.update_view = false
}, 100); // 1000 毫秒后执行 }, 100) // 1000 毫秒后执行
}, },
confirmSetManager() { confirmSetManager() {
var param = { project_id: this.project_id, involve_manager: this.editProject.project_manager }
var param = { project_id: this.project_id, involve_manager: this.editProject.project_manager };
console.log('---------------------------') console.log('---------------------------')
console.log(param) console.log(param)
project.UpdateProjectManager(param).then(response => { project.UpdateProjectManager(param).then(response => {
this.get_project_info(this.project_id) this.get_project_info(this.project_id)
this.$message({ type: 'success', message: '更新成功' }); this.$message({ type: 'success', message: '更新成功' })
this.dialogVisibleSetManager = false; this.dialogVisibleSetManager = false
}) })
}, },
confirmSaleManager() { confirmSaleManager() {
var param = { project_id: this.project_id, sale_manager: this.editProject.sale_manager }
var param = { project_id: this.project_id, sale_manager: this.editProject.sale_manager };
console.log('---------------------------') console.log('---------------------------')
console.log(param) console.log(param)
project.UpdateProjectSaleManager(param).then(response => { project.UpdateProjectSaleManager(param).then(response => {
this.get_project_info(this.project_id) this.get_project_info(this.project_id)
this.$message({ type: 'success', message: '更新成功' }); this.$message({ type: 'success', message: '更新成功' })
this.dialogVisibleSetSaleManager = false; this.dialogVisibleSetSaleManager = false
}) })
}, },
confirmAddMember() { confirmAddMember() {
var param = { project_id: this.project_id, involve_members: this.editProject.project_members }; var param = { project_id: this.project_id, involve_members: this.editProject.project_members }
project.UpdateProjectMember(param).then(response => { project.UpdateProjectMember(param).then(response => {
this.get_project_info(this.project_id) this.get_project_info(this.project_id)
this.dialogVisibleAddMember = false this.dialogVisibleAddMember = false
this.$message({ type: 'success', message: '更新成功' }); this.$message({ type: 'success', message: '更新成功' })
}) })
}, },
confirmStartProject() { confirmStartProject() {
if (this.editNode.members.length == 0) { if (this.editNode.members.length == 0) {
this.$message.warning('请选择项目组成员'); this.$message.warning('请选择项目组成员')
return; return
} }
if ('' == this.editNode.start_date) { if (this.editNode.start_date == '') {
this.$message.warning('请选择项目启动时间'); this.$message.warning('请选择项目启动时间')
return; return
} }
var project_id = this.project_id var project_id = this.project_id
var param = { var param = {
project_id: project_id, project_id: project_id,
//manager: this.editNode.manager, // manager: this.editNode.manager,
members: this.editNode.members, members: this.editNode.members,
start_date: this.editNode.start_date, start_date: this.editNode.start_date
//tech_protocol: this.editNode.tech_protocol_url, // tech_protocol: this.editNode.tech_protocol_url,
}; }
console.log(param); console.log(param)
project.StartProject(param).then(response => { project.StartProject(param).then(response => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '添加成功' message: '添加成功'
}); })
this.get_project_info(this.project_id) this.get_project_info(this.project_id)
}).catch(error => { }).catch(error => {
this.$message({ this.$message({
type: 'error', type: 'error',
message: '添加失败,请重试' message: '添加失败,请重试'
}); })
}); })
this.dialogVisibleStartProject = false; this.dialogVisibleStartProject = false
}, },
get_project_state_list() { get_project_state_list() {
project.GetProjectStateList().then(response => { project.GetProjectStateList().then(response => {
this.project_state_list = response.data.data this.project_state_list = response.data.data
console.log(this.project_state_list); console.log(this.project_state_list)
}) })
}, },
editProjectInfo() { editProjectInfo() {
this.dialogVisibleEditProject = true; this.dialogVisibleEditProject = true
this.get_project_info(this.project_id); this.get_project_info(this.project_id)
}, },
get_project_info(project_id) { get_project_info(project_id) {
this.project_id = project_id this.project_id = project_id
var param = { project_id: project_id }; var param = { project_id: project_id }
project.GetProjectInfo(param).then(response => { project.GetProjectInfo(param).then(response => {
this.project_info = response.data.data this.project_info = response.data.data
//从项目管理进入 // 从项目管理进入
if (this.edit_support == false) { if (this.edit_support == false) {
//如果登录用户是项目经理,则有编辑项目基本信息的权限 // 如果登录用户是项目经理,则有编辑项目基本信息的权限
var login_user = localStorage.getItem('user_id'); var login_user = localStorage.getItem('user_id')
if (login_user == this.project_info.involve_manager) { if (login_user == this.project_info.involve_manager) {
this.edit_support = true this.edit_support = true
//不允许编辑项目经理 // 不允许编辑项目经理
this.allow_change_manager = false; this.allow_change_manager = false
} }
} } else// 从客户管理进入
else//从客户管理进入
{ {
//允许编辑项目经理 // 允许编辑项目经理
this.allow_change_manager = true; this.allow_change_manager = true
} }
this.editProject = response.data.data this.editProject = response.data.data
@@ -488,47 +596,47 @@ export default {
showProtocol() { showProtocol() {
this.dialogVisibleShowProtocol = true this.dialogVisibleShowProtocol = true
this.update_sub_component(); this.update_sub_component()
}, },
showEquipment() { showEquipment() {
this.dialogVisibleShowEquipment = true this.dialogVisibleShowEquipment = true
this.update_sub_component(); this.update_sub_component()
}, },
showReport() { showReport() {
this.dialogVisibleShowReport = true this.dialogVisibleShowReport = true
this.update_sub_component(); this.update_sub_component()
}, },
showSupplier() { showSupplier() {
this.dialogVisibleShowSupplier = true this.dialogVisibleShowSupplier = true
this.update_sub_component(); this.update_sub_component()
}, },
showBid() { showBid() {
this.dialogVisibleShowBid = true this.dialogVisibleShowBid = true
this.update_sub_component(); this.update_sub_component()
}, },
showSummary() { showSummary() {
this.dialogVisibleShowSummary = true this.dialogVisibleShowSummary = true
this.update_sub_component(); this.update_sub_component()
}, },
showPlan() { showPlan() {
this.dialogVisibleShowPlan = true this.dialogVisibleShowPlan = true
this.update_sub_component(); this.update_sub_component()
}, },
showContract() { showContract() {
this.dialogVisibleShowContract = true this.dialogVisibleShowContract = true
this.update_sub_component(); this.update_sub_component()
}, },
showExternalMember() { showExternalMember() {
this.dialogVisibleShowExternalMember = true this.dialogVisibleShowExternalMember = true
this.update_sub_component(); this.update_sub_component()
}, },
// showProtocol() { // showProtocol() {
@@ -539,25 +647,24 @@ export default {
var param = { project_id: this.project_id, contract_type: 2 } var param = { project_id: this.project_id, contract_type: 2 }
contract.GetProjectContractList(param).then(response => { contract.GetProjectContractList(param).then(response => {
this.contract_info_list = response.data.data this.contract_info_list = response.data.data
console.log(this.contract_info_list); console.log(this.contract_info_list)
}) })
}, },
update_sub_component() { update_sub_component() {
this.update_view = true; this.update_view = true
let that = this; const that = this
setTimeout(() => { setTimeout(() => {
that.update_view = false; that.update_view = false
}, 100); // 1000 毫秒后执行 }, 100) // 1000 毫秒后执行
}, },
showImg(row) { showImg(row) {
const url = process.env.BASE_WMS_FILE + row.contract_url const url = process.env.BASE_WMS_FILE + row.contract_url
const ext = url.split('.').pop().toLowerCase(); const ext = url.split('.').pop().toLowerCase()
console.log('-----------------------------------------'); console.log('-----------------------------------------')
console.log(url); console.log(url)
if (ext === 'jpg' || ext === 'jpeg' || ext === 'png') { if (ext === 'jpg' || ext === 'jpeg' || ext === 'png') {
this.previewUrl = url this.previewUrl = url
@@ -570,16 +677,16 @@ export default {
} else if (ext === '') { } else if (ext === '') {
} else { } else {
this.$message.success('不支持的文件类型'); this.$message.success('不支持的文件类型')
} }
this.dialogVisibleShowFile = true this.dialogVisibleShowFile = true
}, },
confirmEditProject() { confirmEditProject() {
if (this.editProject.project_name.trim() === '') { if (this.editProject.project_name.trim() === '') {
this.$message.warning('请输入项目名称'); this.$message.warning('请输入项目名称')
return; return
} }
var project_id = this.project_id; var project_id = this.project_id
var param = { var param = {
project_id: project_id, project_id: project_id,
project_name: this.editProject.project_name, project_name: this.editProject.project_name,
@@ -587,18 +694,18 @@ export default {
project_number: this.editProject.project_number, project_number: this.editProject.project_number,
project_state: this.editProject.project_state, project_state: this.editProject.project_state,
create_time: this.editProject.create_time create_time: this.editProject.create_time
}; }
console.log(param); console.log(param)
project.EditProjectInfo(param).then(response => { project.EditProjectInfo(param).then(response => {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '添加成功' message: '添加成功'
}); })
this.get_project_info(this.project_id); this.get_project_info(this.project_id)
}); })
this.dialogVisibleEditProject = false; this.dialogVisibleEditProject = false
} }
} }
} }

View File

@@ -38,7 +38,7 @@
<el-dialog title="功能需求清单" :visible.sync="dialogVisibleShowDemand" :close-on-click-modal="false" width="95%" <el-dialog title="功能需求清单" :visible.sync="dialogVisibleShowDemand" :close-on-click-modal="false" width="95%"
style="position: fixed;top:-10%" append-to-body> style="position: fixed;top:-10%" append-to-body>
<div class="custom-dialog"> <div class="custom-dialog">
<Story :project_id="project_info.project_id" :story_type="1" v-if="update_view == false"/> <Story :project_id="project_info.project_id" :is_project_manager=true :story_type="1" v-if="update_view == false"/>
</div> </div>
</el-dialog> </el-dialog>
@@ -118,7 +118,7 @@ export default {
this.project_info = response.data.data this.project_info = response.data.data
}) })
}, },
update_sub_component() { update_sub_component() {
this.update_view = true; this.update_view = true;
let that = this; let that = this;
@@ -156,7 +156,7 @@ export default {
//查看问题单 //查看问题单
showDemand() { showDemand() {
this.dialogVisibleShowDemand = true this.dialogVisibleShowDemand = true
this.update_sub_component() this.update_sub_component()
}, },
//查看项目实施购买清单 //查看项目实施购买清单
showPorShopping() { showPorShopping() {

View File

@@ -50,7 +50,7 @@
<el-button class="el-icon-view" @click="showMaterials(scope.row)" size="mini" type="text">查看</el-button> <el-button class="el-icon-view" @click="showMaterials(scope.row)" size="mini" type="text">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="story_managers" label="Story管理者" align="left"> <el-table-column prop="story_manager" label="Story管理者" align="left">
</el-table-column> </el-table-column>
<el-table-column prop="story_members" label="Story成员" align="left"> <el-table-column prop="story_members" label="Story成员" align="left">
</el-table-column> </el-table-column>

View File

@@ -62,7 +62,9 @@ export default {
data() { data() {
let id = 1; let id = 1;
return { return {
supplier_type_list: [], newPartner: {},
dialogVisibleAddPartner: false,
supplier_type_list: [],
update_view:false, update_view:false,
defaultProps: { defaultProps: {
children: 'sub_type', children: 'sub_type',
@@ -88,6 +90,31 @@ export default {
}, },
methods: { methods: {
confirmAddPartner() {
// this.newPartner.company_type = this.partner_type
//如果是供应商,需要设置供应商的服务类型
if (this.partner_type == 4) {
this.newPartner.service_type = this.service_type
}
else {
this.newPartner.service_type = 0;
}
partner.AddPartnerCompanyInfo(this.newPartner).then(response => {
this.$message({
type: 'success',
message: '添加成功'
});
//this.get_supplier_type_list(supplier_type)
}).catch(error => {
this.$message({
type: 'error',
message: '添加失败,请重试'
});
});
// 关闭所有对话框
this.dialogVisibleAddPartner = false;
},
openTreeMenu(event, data, node, target) { openTreeMenu(event, data, node, target) {
console.log(event, data, node, target) console.log(event, data, node, target)
@@ -129,7 +156,14 @@ export default {
that.update_view = false; that.update_view = false;
}, 100); // 1000 毫秒后执行 }, 100); // 1000 毫秒后执行
}, },
addPartnerInfo() {
this.dialogVisibleAddPartner = true;
this.newPartner = {
company_name: '',
company_intro: '',
create_time: ''
}
},
handle_node_click(data, node) { handle_node_click(data, node) {
this.currentNode = node; this.currentNode = node;
this.currentData = data; this.currentData = data;

View File

@@ -1,97 +1,118 @@
<template> <template>
<div class="about"> <div class="about">
<el-row> <el-card>
<el-table :data="staff_info_list" border fit highlight-current-row style="width: 100%; margin-left: 2px;" <el-main id="el-main">
height="80vh"> <el-table
<el-table-column prop="staff_idcard" label="员工工号" align="left"> :data="staff_info_list"
</el-table-column> border
<el-table-column prop="staff_name" label="员工姓名" align="left"> fit
</el-table-column> highlight-current-row
<el-table-column prop="staff_phone" label="员工电话" align="left"> style="width: 100%; margin-left: 2px;"
</el-table-column> height="80vh">
<el-table-column prop="staff_type_desp" label="员工类型" align="left"> <el-table-column prop="staff_idcard" label="员工工号" align="left"/>
</el-table-column> <el-table-column prop="staff_name" label="员工姓名" align="left"/>
<el-table-column prop="staff_dept_desp" label="员工部门" align="left"> <el-table-column prop="staff_phone" label="员工电话" align="left"/>
</el-table-column> <el-table-column prop="staff_type_desp" label="员工类型" align="left"/>
<el-table-column prop="staff_email" label="员工邮箱" align="left"> <el-table-column prop="staff_dept_desp" label="员工部门" align="left"/>
</el-table-column> <el-table-column prop="staff_email" label="员工邮箱" align="left"/>
<el-table-column prop="entry_date" label="入职时间" align="left"> <el-table-column prop="entry_date" label="入职时间" align="left"/>
</el-table-column>
<el-table-column fixed="right" label="操作" width="250px"> <el-table-column fixed="right" label="操作" width="250px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="(scope.row.task_state < 2) && (scope.row.action_state < 4)" <el-button
@click="handleClick(scope.row)" size="mini" type="danger">删除</el-button> size="mini"
<!--el-button class="el-icon-view" v-if="scope.row.asset_url != ''" @click="showImg(scope.row)" size="mini" type="danger"
type="primary"></el-button--> @click="handleClick(scope.row)">删除</el-button>
<!--el-button @click="update(scope.row)" size="mini" class="el-icon-edit" type="primary"></el-button--> <el-button
</template> class="el-icon-view"
</el-table-column> size="mini"
</el-table> type="primary"
</el-row> @click="showImg(scope.row)"/>
<el-button size="mini" class="el-icon-edit" type="primary" @click="update(scope.row)"/>
</template>
</el-table-column>
</el-table>
</el-main>
<el-pagination
:page-sizes="[5, 10, 20, 50]"
:page-size="pageSize"
:total="total"
:current-page.sync="currPage"
background
layout="sizes,prev, pager, next, jumper,->,total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"/>
</el-card>
<!-- 对话框 --> <!-- 对话框 -->
<el-dialog title="文件信息" :visible.sync="dialogVisibleStaffInfo" width="80%"> <el-dialog :visible.sync="dialogVisibleStaffInfo" title="文件信息" width="80%">
<img v-if="isImage" :src="previewUrl" alt="Preview" style="max-width: 40%; max-height: 30%;"> <img v-if="isImage" :src="previewUrl" alt="Preview" style="max-width: 40%; max-height: 30%;">
<iframe v-else-if="isPDF" :src="previewUrl" frameborder="0" style="width: 100%; height: 600px;"></iframe> <iframe v-else-if="isPDF" :src="previewUrl" frameborder="0" style="width: 100%; height: 600px;"/>
<p v-else>不支持的文件类型</p> <p v-else>不支持的文件类型</p>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import hr from '@/api/hr' import hr from '@/api/hr'
export default { export default {
data() { data() {
let id = 1; const id = 1
return { return {
staff_info_list: [], pageSize: 20,
id: id, currPage: 1,
dialogVisibleStaffInfo: false, total: 0,
assets_img: '', staff_info_list: [],
assets_pdf_img: '' id: id,
}; dialogVisibleStaffInfo: false,
}, assets_img: '',
mounted() { assets_pdf_img: ''
this.get_staff_info_list() }
}, },
created() { mounted() {
this.getStaffPageInfo()
},
created() {
}, },
methods: { methods: {
handleSizeChange(val) {
this.pageSize = val
this.getStaffPageInfo()
},
handleCurrentChange(val) {
this.currPage = val
this.getStaffPageInfo()
},
showImg(row) {
const url = row.asset_url
const ext = url.split('.').pop().toLowerCase()
showImg(row) { if (ext === 'jpg' || ext === 'jpeg' || ext === 'png') {
const url = row.asset_url this.previewUrl = url
const ext = url.split('.').pop().toLowerCase(); this.isImage = true
this.isPDF = false
} else if (ext === 'pdf') {
this.previewUrl = url
this.isImage = false
this.isPDF = true
} else if (ext === '') {
if (ext === 'jpg' || ext === 'jpeg' || ext === 'png') { } else {
this.previewUrl = url this.$message.success('不支持的文件类型')
this.isImage = true }
this.isPDF = false this.dialogVisibleStaffInfo = true
} else if (ext === 'pdf') { },
this.previewUrl = url
this.isImage = false
this.isPDF = true
} else if (ext === '') {
} else { getStaffPageInfo() {
this.$message.success('不支持的文件类型'); hr.getStaffPage({ currPage: this.currPage, pageSize: this.pageSize }).then(res => {
} this.staff_info_list = res.data.data.list
this.dialogVisibleStaffInfo = true this.total = res.data.data.total
}, })
}
get_staff_info_list() { }
var param = {}
console.log(param);
hr.GetStaffInfoList(param).then(response => {
this.staff_info_list = response.data.data
console.log(this.staff_info_list);
})
},
}
} }
</script> </script>

View File

@@ -4,7 +4,7 @@
<img :src="imgTitle" height="100px" alt="" /> <img :src="imgTitle" height="100px" alt="" />
</div> </div>
<div class="background" style="margin-bottom:110px;margin-top:110px;background-color:#2d3a4b;"> <div class="background" style="margin-bottom:110px;margin-top:110px;background-color:#2d3a4b;">
<img :src="imgBack" width="70%" height="80%" alt="" /> <img :src="imgBack" width="100%" height="100%" alt="" />
</div> </div>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on"
label-position="left" style="float:right"> label-position="left" style="float:right">

View File

@@ -49,8 +49,11 @@
</el-form-item> </el-form-item>
<el-form-item label="选择添加用户" prop="user_id"> <el-form-item label="选择添加用户" prop="user_id">
<el-select v-model="userData.user_id" placeholder="请选择" style="width: 100%;"> <el-select v-model="userData.user_id" filterable placeholder="请选择" style="width: 100%;">
<el-option v-for="item in contactsList" :key="item.contacts_id" :label="item.contacts_name" <el-option v-for="item in contactsList"
filterable
:key="item.contacts_id"
:label="item.contacts_name"
:value="item.contacts_id"> :value="item.contacts_id">
</el-option> </el-option>
</el-select> </el-select>
@@ -230,7 +233,7 @@ export default {
}, },
//获取用户信息 //获取用户信息
getUserInfoList() { getUserInfoList() {
user.getUserInfoList({ currPage: this.currPage, pageSize: this.pageSize, }).then(res => { user.getUserInfoList({ currPage: this.currPage, pageSize: this.pageSize}).then(res => {
this.userList = res.data.data.list; this.userList = res.data.data.list;
console.log('userList', this.userList); console.log('userList', this.userList);
this.total = res.data.data.total; this.total = res.data.data.total;