You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1396 lines
43 KiB

<template>
<div>
<el-form :inline="true" label-position="top" :model="searchData" ref="queryForm"
@keyup.enter.native="getDataList()">
<el-row :gutter="10">
<el-col :span="3">
<el-form-item label="项目编码" prop="projectCode">
<el-input v-model="searchData.projectCode"></el-input>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="searchData.projectName"></el-input>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="物料编码" prop="partCode">
<el-input v-model="searchData.partCode"></el-input>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="物料名称" prop="partName">
<el-input v-model="searchData.partName"></el-input>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="状态" prop="partStatus">
<el-select v-model="searchData.partStatus" style="width: 100%">
<el-option label="全部" value=""></el-option>
<el-option v-for="dict in dict.type.function_project_part_status" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="开始时间">
<div style="display: flex">
<el-date-picker style="width: 47%" v-model="searchData.startDate" type="date" value-format='yyyy-MM-dd'
format='yyyy-MM-dd' clearable></el-date-picker>
<div style="width: 6%;text-align: center" prop="endDate">-</div>
<el-date-picker style="width: 47%" v-model="searchData.endDate" type="date" value-format='yyyy-MM-dd'
format='yyyy-MM-dd' clearable></el-date-picker>
</div>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label=" ">
<el-button type="primary" @click="getDataListAll" :disabled="isBatchEditing">查 询</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery" :disabled="isBatchEditing">重置</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 列表 -->
<el-table @header-dragend="handleColumnResize" height="30vh" :data="dataList" border ref="mainTable"
highlight-current-row @row-click="projectClickRow" @current-change="changeCurrentRow" v-loading="dataListLoading"
style="width: 100%;margin-top: 5px">
<el-table-column v-for="(item,index) in columnList" :key="index" :sortable="item.columnSortable"
:prop="item.columnProp" :header-align="item.headerAlign" :align="item.align"
:fixed="item.fixed === ''?false:item.fixed" :min-width="item.columnWidth" :label="item.columnLabel">
<template slot-scope="scope">
<!-- <dict-tag v-if="item.columnProp == 'partStatus'" :options="dict.type.function_project_part_status"
:value="scope.row.partStatus" /> -->
<span v-if="item.columnProp == 'partStatus'">
<span :class="getPartStatusClass(scope.row.partStatus)">
{{ getPartStatusLabel(scope.row.partStatus) }}
</span>
</span>
<div v-else>
<span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px" /></span>
</div>
</template>
</el-table-column>
<el-table-column fixed="right" header-align="center" align="center" width="180" label="操作">
<template slot-scope="scope">
<el-link style="cursor: pointer" @click="copyModel(scope.row)" :disabled="isBatchEditing || copyLoading">复制</el-link>
<el-link style="cursor: pointer" @click="handleUpdate(scope.row)" :disabled="isBatchEditing">编辑</el-link>
<!-- <el-link style="cursor: pointer" v-if="scope.row.partStatus == '0'" @click="updateProjectPartStatus(scope.row)">下达</el-link> -->
<el-link v-if="!scope.row.isModelFlag" style="cursor: pointer" @click="handleModal(scope.row)" :disabled="isBatchEditing">新增模具</el-link>
<!-- <el-link style="cursor: pointer" @click="handleExport(scope.row)">导出</el-link> -->
<!-- <el-link style="cursor: pointer" @click="deleteProject(scope.row)">删除</el-link> -->
</template>
</el-table-column>
</el-table>
<!-- 分页插件 -->
<el-pagination style="margin-top: 0px" @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
:current-page="pageIndex" :page-sizes="[20, 50, 100, 200, 500]" :page-size="pageSize" :total="totalPage"
layout="total, sizes, prev, pager, next, jumper" :disabled="isBatchEditing">
</el-pagination>
<el-tabs style="margin-top: 0px; width: 100%; height: 100%;font-size: 14px;" v-model="activeTable"
class="customer-tab" type="border-card" @tab-click="tabClick" :before-leave="beforeLeaveTab">
<!-- <el-tab-pane label="项目管理事项" name="projectPartProperty"
:disabled="isBatchEditing && activeTable !== 'projectPartProperty'">
<projectPartModelTable :projectPartModel="projectPartModel" :projectPart="model"
@partFinished="getProjectPartModelList"
@batch-edit-change="onBatchEditChange('projectPartProperty', $event)"
:auth-flag="true" :height="'33vh'"></projectPartModelTable>
</el-tab-pane> -->
<el-tab-pane label="模具开发进度" name="projectPartModel"
:disabled="isBatchEditing && activeTable !== 'projectPartModel'">
<ProjectPartModelTableDetail ref="projectPartModelTableDetail" :projectPartModel="projectPartModel"
@partFinished="getProjectPartModelList" @change="onModelFlagChange"
@batch-edit-change="onBatchEditChange('projectPartModel', $event)"
:auth-flag="true" :height="'33vh'"></ProjectPartModelTableDetail>
<!-- <oss-components ref="inquiryDocument" label="申请单号" style="margin-top: 5px" height="44vh" :columns="ossColumns"
:disabled="false" :orderRef1="model.site" :orderRef2="model.objectId" :rfqNo="model.projectCode"
:orderRef5="model.projectId">
</oss-components> -->
</el-tab-pane>
<el-tab-pane label="相关文档" name="inquiryDocument"
:disabled="isBatchEditing && activeTable !== 'inquiryDocument'">
<div style="height: 100%;overflow: auto;">
<oss-components ref="inquiryDocument" label="申请单号" style="margin-top: 5px" height="44vh" :columns="ossColumns"
:disabled="false" :orderRef1="model.site" :orderRef2="model.projectPartId" :fileTypeCode="1" :rfqNo="model.projectCode"
:orderRef5="model.projectId" step-name="项目物料">
</oss-components>
</div>
</el-tab-pane>
</el-tabs>
<ProjectPartForm ref="projectPartForm" v-if="projectModelVisible" @selectedFinish="getDataList"></ProjectPartForm>
<ProjectModelFormHeader ref="projectModelFormHeader" v-if="projectModelHeaderVisible" @selectedFinish="getModelFormHeaderList"></ProjectModelFormHeader>
</div>
</template>
<script>
import {
queryProjectPartByPage,
queryProjectPartModelList,
updateProjectPartStatus,
handleExport,
copyProjectManagePart,
} from '@/api/project/project.js'
import ProjectPartModelTable from './modules/projectPartModelTable.vue'
import OssComponents from './modules/ossProjectComponents.vue'
import ProjectPartForm from './modules/projectPartForm.vue'
import ProjectModelFormHeader from './modules/projectModelFormHeader.vue'
import ProjectPartModelTableDetail from './modules/projectPartModelTableDetail.vue'
import { getRoleByUserId } from '@/api/role.js'
export default {
beforeRouteEnter(to, from, next) {
next((vm) => {
// 跳转后清除 redirectPath
localStorage.removeItem('redirectPath')
console.log('redirectPath 已清除')
})
},
dicts: ['function_project_part_status'],
name: 'projectPartIndex',
computed: {
isBatchEditing() {
return !!(
(this.batchEditLocks && this.batchEditLocks.projectPartProperty) ||
(this.batchEditLocks && this.batchEditLocks.projectPartModel)
)
},
},
components: {
ProjectPartModelTable,
OssComponents,
ProjectPartForm,
ProjectModelFormHeader,
ProjectPartModelTableDetail,
},
props: {},
data() {
return {
projectPartModel: [],
model: {},
loading: false,
attributeDialog: true,
projectModelVisible: false,
projectModelHeaderVisible: false,
priceCheckRule: {
associatedPartNo: [{ required: true, message: ' ', trigger: 'change' }],
materialRequired: [{ required: true, message: ' ', trigger: 'change' }],
yearlyOrMonthlyRequirement: [
{ required: true, message: ' ', trigger: 'change' },
],
runningWidth: [{ required: true, message: ' ', trigger: 'change' }],
},
savePriceDetail: {
site: '',
quotationNo: '',
associatedPartNo: '',
materialRequired: '',
yearlyOrMonthlyRequirement: '',
runningWidth: '',
},
priceCheckPropertiesList: [],
// 导出
exportData: [],
resultList: [],
// ======== 行高 ========
secondHeight: 200,
// ======== 分页 ========
pageIndex: 1,
pageSize: 50,
totalPage: 0,
selectedDataNum: 0,
ossColumns: [
{
userId: this.$store.state.user.name,
functionId: 101506001001,
serialNumber: '101506001001Table2FileName',
tableId: '101506001001Table2',
tableName: '文件信息表',
columnProp: 'fileName',
headerAlign: 'center',
align: 'center',
columnLabel: '文件名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},
{
userId: this.$store.state.user.name,
functionId: 101506001001,
serialNumber: '101506001001Table2FileRemark',
tableId: '101506001001Table2',
tableName: '文件信息表',
columnProp: 'cadditionalInfo',
headerAlign: 'center',
align: 'center',
columnLabel: '备注',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 240,
},
{
userId: this.$store.state.user.name,
functionId: 101506001001,
serialNumber: '101506001001Table2CreateDate',
tableId: '101506001001Table2',
tableName: '文件信息表',
columnProp: 'fileSuffix',
headerAlign: 'center',
align: 'center',
columnLabel: '文件步骤',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 101506001001,
serialNumber: '101506001001Table2CreateDate',
tableId: '101506001001Table2',
tableName: '文件信息表',
columnProp: 'createDate',
headerAlign: 'center',
align: 'center',
columnLabel: '上传时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},
{
userId: this.$store.state.user.name,
functionId: 101506001001,
serialNumber: '101506001001Table2CreatedBy',
tableId: '101506001001Table2',
tableName: '文件信息表',
columnProp: 'createdBy',
headerAlign: 'center',
align: 'center',
columnLabel: '上传人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},
],
// 条件查询
searchData: {
userId: this.$store.state.user.id,
site: this.$store.state.user.site,
id: '',
customerNo: '',
customerDesc: '',
projectNo: '',
projectName: '',
buNo: '',
requestStartDate: '',
requestEndDate: '',
requiredCompletionStartDate: '',
requiredCompletionEndDate: '',
status: '',
sstatus: '',
quoterName: '',
requesterName: '',
priorityLevel: '',
orderRef1: 'PJ',
page: 1,
limit: 10,
menuId: this.$route.meta.menuId,
projectPartId:0,
partCode:'',
},
searchData1: {
userId: this.$store.state.user.id,
site: this.$store.state.user.site,
id: '',
customerNo: '',
customerDesc: '',
projectNo: '',
bu: '',
requestStartDate: '',
requestEndDate: '',
requiredCompletionStartDate: '',
requiredCompletionEndDate: '',
status: '',
quoterName: '',
requesterName: '',
priorityLevel: '',
orderRef1: 'PJ',
page: 1,
limit: 10,
menuId: this.$route.meta.menuId,
},
// 其它
dataListLoading: false,
// 选择项目弹框开关
chooseProjectListFlag: false,
reviewFlag: false,
// 初始页签
activeTable: 'projectPartModel',
lastActiveTable: 'projectPartProperty',
tabRollbacking: false,
copyLoading: false,
batchEditLocks: {
projectPartProperty: false,
projectPartModel: false,
},
batchEditLockedTab: '',
// ======== 数据对象 ========
modalData: {
flag: '',
title: '',
site: this.$store.state.user.site,
userName: this.$store.state.user.name,
id: '',
projectNo: '',
customerNo: '',
customerDesc: '',
requestDate: '',
requester: '',
requesterName: '',
customerInquiryNo: '',
priorityLevel: '',
requiredCompletionDate: '',
quoter: '',
quoterName: '',
status: '',
remark: '',
createDate: '',
createBy: '',
updateDate: '',
updateBy: '',
authHistId: '',
approveResult: '',
authHistRemark: '',
canAuthFlag: '',
actAuthorizator: '',
strActAuthorizeDate: this.dayjs().format('YYYY-MM-DD HH:mm:ss'),
actAuthorizeDate: '',
},
inquiryPartItemModalData: {
bu: '',
buDesc: '',
projectNo: '',
partNo: '',
partDesc: '',
umId: '',
umName: '',
codeNo: '',
codeDesc: '',
textValue: '',
numValue: '',
valueType: '',
valueTypeDb: '',
valueChooseFlag: '',
availableValueList: [],
},
// ======== 数据列表 ========
dataList: [],
inquiryAuthDataList: [],
// ======== 列表表头 ========
columnList: [
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '190006Table1QuoteVersionNo',
tableId: '777002Table1',
tableName: '项目信息表',
columnProp: 'projectCode',
headerAlign: 'center',
align: 'center',
columnLabel: '项目编码',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '190006Table1QuoteDate',
tableId: '777002Table1',
tableName: '项目信息表',
columnProp: 'projectName',
headerAlign: 'center',
align: 'left',
columnLabel: '项目名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 160,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1CustomerNo',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'partCode',
headerAlign: 'center',
align: 'left',
columnLabel: '物料编号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1CustomerDesc',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'partName',
headerAlign: 'center',
align: 'left',
columnLabel: '物料名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1RequesterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'partLeader',
headerAlign: 'center',
align: 'left',
columnLabel: '物料负责人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'partCustomerCode',
headerAlign: 'center',
align: 'left',
columnLabel: '客户编号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'partCustomerName',
headerAlign: 'center',
align: 'left',
columnLabel: '客户名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'partStatus',
headerAlign: 'center',
align: 'center',
columnLabel: '料号状态',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'partEndDate',
headerAlign: 'center',
align: 'center',
columnLabel: '结案日期',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'createBy',
headerAlign: 'center',
align: 'left',
columnLabel: '创建人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'createTime',
headerAlign: 'center',
align: 'center',
columnLabel: '创建时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 130,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'updateBy',
headerAlign: 'center',
align: 'left',
columnLabel: '更新人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80,
},
{
userId: this.$store.state.user.name,
functionId: 777002,
serialNumber: '5012Table1QuoterName',
tableId: '777002Table1',
tableName: '项目信息',
columnProp: 'updateTime',
headerAlign: 'center',
align: 'center',
columnLabel: '更新时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 130,
},
],
// ======== 必填规则 ========
inquiryPartRules: {
bu: [
{ required: true, message: ' ', trigger: 'change' },
{ required: true, message: ' ', trigger: 'blur' },
],
partNo: [
{ required: true, message: ' ', trigger: 'change' },
{ required: true, message: ' ', trigger: 'blur' },
],
partDesc: [
{ required: true, message: ' ', trigger: 'change' },
{ required: true, message: ' ', trigger: 'blur' },
],
inquiryQty: [
{ required: true, message: ' ', trigger: 'change' },
{ required: true, message: ' ', trigger: 'blur' },
],
umId: [
{ required: true, message: ' ', trigger: 'change' },
{ required: true, message: ' ', trigger: 'blur' },
],
codeNo: [
{ required: true, message: ' ', trigger: 'change' },
{ required: true, message: ' ', trigger: 'blur' },
],
},
// ======== 选中的当前行数据 ========
projectCurrentRow: {},
// ======== 模态框开关控制 ========
modalFlag: false,
modalDisableFlag: false,
inquiryPartModalFlag: false,
inquiryPartModalDisableFlag: false,
inquiryPartItemModalFlag: false,
}
},
mounted() {
this.$nextTick(() => {
/*第二个表格高度的动态调整*/
this.height = window.innerHeight - 210
})
},
created() {
// 获取 URL 查询参数
const project = {
projectPartId:this.$route.query.projectPartId,
partCode:this.$route.query.partCode,
}
// 将查询参数赋值给 searchData
if (project) {
this.$set(this.searchData,'projectPartId',project.projectPartId)
this.$set(this.searchData,'partCode',project.partCode)
}
// 动态列
this.getTableUserColumn(this.$route.meta.menuId + 'table1', 1)
this.getDataList()
},
activated() {
this.getDataList()
},
watch: {
activeTable(newVal, oldVal) {
if (this.tabRollbacking) return
// 记录上一次可用tab(非批量编辑时)
if (!this.isBatchEditing) {
this.lastActiveTable = newVal
return
}
// 批量编辑中:强制回滚到锁定tab(或上一次tab)
const target = this.batchEditLockedTab || oldVal || this.lastActiveTable
if (target && newVal !== target) {
this.tabRollbacking = true
this.$message.warning('批量编辑中,请先保存或取消后再切换页签')
this.$nextTick(() => {
this.activeTable = target
this.tabRollbacking = false
})
}
},
},
methods: {
onBatchEditChange(source, val) {
if (!this.batchEditLocks) return
this.$set(this.batchEditLocks, source, !!val)
if (!!val) {
// 进入批量编辑时锁定当前tab
this.batchEditLockedTab = this.activeTable
} else if (!this.isBatchEditing) {
// 全部退出批量编辑后解锁
this.batchEditLockedTab = ''
}
},
beforeLeaveTab(activeName, oldActiveName) {
if (this.isBatchEditing) {
this.$message.warning('批量编辑中,请先保存或取消后再切换页签')
return false
}
return true
},
handleColumnResize(newWidth, oldWidth, column, event) {
let inData = this.columnList.filter(
(item) => item.columnProp === column.property
)[0]
inData.columnWidth = newWidth
updateColumnSize(inData).then(({ data }) => {
if (data.code === 0) {
console.log('栏位宽度保存成功!')
}
})
},
// ======== 分页相关方法 ========
/**
* 每页数
* @param val
*/
sizeChangeHandle(val) {
if (this.isBatchEditing) {
this.$message.warning('批量编辑中,请先保存或取消')
return
}
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
/**
* 当前页
* @param val
*/
currentChangeHandle(val) {
if (this.isBatchEditing) {
this.$message.warning('批量编辑中,请先保存或取消')
return
}
this.pageIndex = val
this.getDataList()
},
// ======== 页签切换相关方法 ========
/**
* 列表表格选择替换
* @param tab
* @param event
*/
tabClick(tab, event) {
if (this.isBatchEditing) {
// 兜底:有些版本不会触发 before-leave 或 disabled 表现不一致
this.$message.warning('批量编辑中,请先保存或取消后再切换页签')
const target = this.batchEditLockedTab || this.lastActiveTable
if (target) this.activeTable = target
return
}
// 刷新列表数据
this.refreshCurrentTabTable()
},
// ======== 列表操作方法 ========
/**
* 单机选中询价信息
* @param row
*/
projectClickRow(row) {
if (this.isBatchEditing) {
this.$message.warning('批量编辑中,请先保存或取消')
return
}
this.projectCurrentRow = JSON.parse(JSON.stringify(row))
this.model = JSON.parse(JSON.stringify(row))
//刷新当前页表
this.refreshCurrentTabTable()
},
/**
* 当前值发生变化的时候修改
* @param row
* @param oldRow
*/
changeCurrentRow(row, oldRow) {
if (this.isBatchEditing) return
// 判断是否是获取焦点的事件
if (row) {
this.projectCurrentRow = JSON.parse(JSON.stringify(row))
}
},
/**
* 刷新页签的table数据
*/
refreshCurrentTabTable() {
this.getTabs()
},
// ======== 列表数据刷新方法 ========
/**
* 获取数据列表
*/
getDataListAll() {
if (this.isBatchEditing) {
this.$message.warning('批量编辑中,请先保存或取消')
return
}
this.searchData1 = null
this.getDataList()
},
getDataList() {
if (this.isBatchEditing) {
this.$message.warning('批量编辑中,请先保存或取消')
return
}
//console.log(this.searchData1)
this.searchData.pageSize = this.pageSize
this.searchData.pageNo = this.pageIndex
let inData = this.searchData
queryProjectPartByPage(inData).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.page.records
this.pageIndex = data.page.current
this.pageSize = data.page.size
this.totalPage = data.page.total
this.dataList.forEach((item) => {
if (item.groupDesc === '' || item.groupDesc === null) {
item.auth = item.userDisplay
} else {
item.auth = item.groupDesc
}
})
//判断是否全部存在数据
if (this.totalPage > 0) {
//设置选中行
this.$refs.mainTable.setCurrentRow(this.dataList[0])
this.projectClickRow(this.dataList[0])
}
}
this.dataListLoading = false
})
},
getTabs() {
switch (this.activeTable) {
case 'projectPartProperty':
this.getProjectPartModelList()
break
case 'projectPartModel':
this.$refs.projectPartModelTableDetail.handleQuery(this.model)
break
case 'inquiryDocument':
this.$refs.inquiryDocument.handleQuery()
break
default:
this.getProjectPartModelList()
break
}
},
getProjectPartModelList() {
let obj = {
projectPartId: this.model.projectPartId,
}
queryProjectPartModelList(obj).then(({ data }) => {
if (data && data.code === 0) {
this.projectPartModel = data.list
this.getRoleByUserId()
} else {
this.$message.warning(data.msg)
}
})
},
partFinished() {
this.getProjectPartModelList()
},
deleteProject(row) {
this.$confirm('确认删除该项目信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
this.handleRemoveProject(row)
})
.catch(() => {})
},
handleRemoveProject(row) {
let params = {
projectId: row.projectId,
}
projectDeleteById(params).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success(data.msg)
this.getDataList()
}
})
},
// /**
// * 获得这些询价号的全部附件
// */
// getFileContentList () {
// let currentData = {
// orderRef1: this.$store.state.user.site,
// orderRef2: this.enterResultData.quotationNo
// }
// getFileContentList(currentData).then(({data}) => {
// if (data && data.code === 0) {
// this.enterResultData.fileContentList = data.rows
// } else {
// this.enterResultData.fileContentList = []
// }
// })
// },
updateModal(row) {
this.modalData = JSON.parse(JSON.stringify(row))
this.modalData.strActAuthorizeDate = this.dayjs().format(
'YYYY-MM-DD HH:mm:ss'
)
this.modalData.userName = this.$store.state.user.name
this.reviewFlag = true
},
saveReview(row, val) {
if (row.authHistRemark == '') {
this.$alert(data.msg, '操作提示', {
confirmButtonText: '确定',
callback: (action) => {
this.saveButton = false
},
})
}
this.loading = true
this.modalData.id = row.authHistId
this.modalData.actAuthorizator = row.userName
this.modalData.remark = row.authHistRemark
this.modalData.actAuthorizeDate = row.strActAuthorizeDate
this.modalData.orderRef1 = row.projectNo
if (val === 'Y') {
if (row.lastStepFlag === 'Y') {
this.modalData.approveResult = '已审批'
} else {
this.modalData.approveResult = '已审批'
}
} else if (val === 'N') {
this.modalData.approveResult = '未通过'
}
updateProjectAuthHist(this.modalData).then(({ data }) => {
if (data && data.code === 0) {
this.getDataList()
this.reviewFlag = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {},
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定',
})
}
this.loading = false
})
},
getRoleByUserId() {
for (let i = 0; i < this.projectPartModel.length; i++) {
this.$set(this.projectPartModel[i], 'planEndDateDisabled', false)
}
if (this.$store.state.user.id === 1) {
return
}
let params = {
userId: this.$store.state.user.id,
}
getRoleByUserId(params)
.then((res) => {
if (res && res.data.code === 0) {
let hasManager = res.data.roles.includes('manager')
for (let i = 0; i < this.projectPartModel.length; i++) {
if (!hasManager && this.projectPartModel[i].planEndDate) {
this.projectPartModel[i].planEndDateDisabled = true
} else {
this.projectPartModel[i].planEndDateDisabled = false
}
}
console.log('获取角色信息成功:', this.projectPartModel);
} else {
this.$message.warning(res.data.msg)
}
})
.catch((error) => {
this.$message.error(error)
})
},
// ======== 导出相关方法 ========
/**
* 导出excel
*/
async createExportData() {
this.searchData.limit = -1
this.searchData.page = 1
await queryProjectPartByPage(this.searchData).then(({ data }) => {
this.resultList = data.page.list
})
return this.resultList
},
startDownload() {},
finishDownload() {},
fields() {
let json = '{'
this.columnList.forEach((item, index) => {
if (index == this.columnList.length - 1) {
json +=
'"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
} else {
json +=
'"' +
item.columnLabel +
'"' +
':' +
'"' +
item.columnProp +
'"' +
','
}
})
json += '}'
let s = eval('(' + json + ')')
return s
},
// ======== 导入相关方法 ========
handleImportQuotation() {
let currentData = {
createBy: this.$store.state.user.name,
site: this.$store.state.user.site,
}
//打开组件 去做新增业务
this.$nextTick(() => {
this.$refs.quotationUpload.init(currentData)
})
},
handleUpdate(row) {
this.projectModelVisible = true
this.$nextTick(() => {
this.$refs.projectPartForm.edit(row)
})
},
handleModal(row) {
this.projectModelHeaderVisible = true
this.$nextTick(() => {
this.$refs.projectModelFormHeader.edit(row)
})
},
copyModel(row) {
if (this.copyLoading) return
this.copyLoading = true
let params = {
projectPartId: row.projectPartId,
site: this.$store.state.user.site,
}
copyProjectManagePart(params).then(({ data }) => {
if (data && data.code === 0) {
this.getDataList()
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {},
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定',
})
}
}).finally(() => {
this.copyLoading = false
})
},
// 保存弹框关闭事件
closeSaveDataDialog() {
this.modalData = {
flag: '',
title: '',
site: '',
bu: '',
buNo: '',
buDesc: '',
id: '',
projectNo: '',
customerNo: '',
customerDesc: '',
requester: '',
requesterName: '',
quoter: '',
quoterName: '',
customerInquiryNo: '',
status: '',
priorityLevel: '',
requestDate: '',
requiredCompletionDate: '',
remark: '',
}
this.modalFlag = false
},
rowStyle({ row }) {
if (this.projectCurrentRow.id === row.id) {
return { 'background-color': '#E8F7F6', cursor: 'pointer' }
}
},
// 动态列开始 获取 用户保存的 格式列
async getTableUserColumn(tableId, columnId) {
let queryTableUser = {
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
tableId: tableId,
status: true,
languageCode: this.$i18n.locale,
}
/* await getTableUserListLanguage(queryTableUser).then(({ data }) => {
if (data.rows.length > 0) {
switch (columnId) {
case 1:
this.columnList = data.rows
break
}
} else {
this.getColumnList(tableId, columnId)
}
}) */
},
// 获取 tableDefault 列
async getColumnList(tableId, columnId) {
let queryTable = {
functionId: this.$route.meta.menuId,
tableId: tableId,
languageCode: this.$i18n.locale,
}
await getTableDefaultListLanguage(queryTable).then(({ data }) => {
if (!data.rows.length === 0) {
switch (columnId) {
case 1:
this.columnList = data.rows
break
}
}
})
},
resetQuery() {
if (this.isBatchEditing) {
this.$message.warning('批量编辑中,请先保存或取消')
return
}
this.$set(this.searchData, 'startDate', '')
this.$set(this.searchData, 'endDate', '')
this.resetForm('queryForm')
this.getDataList()
},
updateProjectPartStatus(row){
updateProjectPartStatus(row).then(({data})=>{
if (data && data.code === 0) {
this.getDataList()
}
})
},
onModelFlagChange(){
},
// 获取项目物料状态标签
getPartStatusLabel(status) {
const statusDict = this.dict.type.function_project_part_status
const statusItem = statusDict.find(item => item.value === status)
return statusItem ? statusItem.label : status
},
// 获取项目物料状态样式类
getPartStatusClass(status) {
switch (status) {
case '3':
return 'status-green'
case '4':
return 'status-yellow'
case '5':
return 'status-red'
default:
return ''
}
},
getModelFormHeaderList(){
this.searchData.pageSize = this.pageSize
this.searchData.pageNo = this.pageIndex
let inData = this.searchData
queryProjectPartByPage(inData).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.page.records
this.pageIndex = data.page.current
this.pageSize = data.page.size
this.totalPage = data.page.total
//判断是否全部存在数据
if (this.totalPage > 0) {
//设置选中行
this.$nextTick(() => {
const current = this.dataList.find(item => item.projectPartId === this.model.projectPartId)
if (current) {
this.$refs.mainTable.setCurrentRow(current)
this.projectClickRow(current)
}
})
}
}
this.dataListLoading = false
})
},
handleExport(row){
console.log(row);
handleExport(row).then(response => {
// 接受blob二进制流
const blob = new Blob([response.data], {type: 'application/vnd.ms-excel'});
// 根据blob创建下载链接
const downloadUrl = window.URL.createObjectURL(blob);
// 创建a标签
const link = document.createElement('a');
link.href = downloadUrl;
// 文件名处理
let fileName = '默认文件名.xlsx';
const contentDisposition = response.headers['content-disposition'];
if (contentDisposition) {
const fileNameMatch = contentDisposition.match(/filename=(.+)/);
fileName = fileNameMatch ? decodeURIComponent(fileNameMatch[1]) : fileName;
}
link.download = fileName;
document.body.appendChild(link);
link.click();
// 🧹内存清理
window.URL.revokeObjectURL(downloadUrl);
document.body.removeChild(link);
}).catch(error => {
this.$message.error('导出失败: ' + error.message);
});
},
},
}
</script>
<style scoped>
/deep/ .customer-tab .el-tabs__content {
padding: 0px !important;
height: 100%;
}
/deep/ .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
background-color: #17b3a3;
border-color: #17b3a3;
}
/deep/ .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
border-color: #fff;
}
/deep/ .el-form-item--medium .el-form-item__content {
height: auto;
}
.el-input-number /deep/ .el-input__inner {
text-align: right;
padding-right: 5px !important;
}
/deep/ .el-input .el-input--medium {
line-height: 20px;
}
/deep/ .el-input-number .el-input--medium {
line-height: 20px;
}
/*table中input 修改样式*/
/deep/ div.table-el-date {
padding: 0px 0px;
height: 25px !important;
}
/*table中input*/
div.table-el-date /deep/ input.el-input__inner {
padding: 0px 0px;
height: 23px !important;
text-align: right;
}
/* 特殊的样式*/
/deep/ .el-table div.cell:has(.table-el-date) {
/* 直接作用于 <td> 元素 */
padding: 0px;
height: 25px;
}
.el-transfer-panel {
border: 2px solid #17b3a3;
border-radius: 4px;
overflow: hidden;
background: #fff;
display: inline-block;
vertical-align: middle;
width: 200px;
max-height: 100%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
position: relative;
}
.el-transfer-panel .el-transfer-panel__header {
height: 40px;
line-height: 40px;
background: #17b3a3;
margin: 0;
padding-left: 15px;
border-bottom: 1px solid #17b3a3;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: #000;
}
.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label {
font-size: 14px;
color: #303133;
font-weight: 400;
}
/* 项目物料状态颜色样式 */
.status-green {
color: #67c23a;
}
.status-yellow {
color: #e6a23c;
}
.status-red {
color: #f56c6c;
}
</style>