From 29a6e997b69d55b31d37810ff973a613924ddfa9 Mon Sep 17 00:00:00 2001
From: 邱宇豪 <qyh123230312>
Date: 星期四, 16 十一月 2023 09:51:59 +0800
Subject: [PATCH] 20231116_qiuyh_料仓大屏
---
web/src/views/ProjectManage/SectionManage.vue | 1218 ++++++++++++++++++++++++++++++---------------------------
1 files changed, 635 insertions(+), 583 deletions(-)
diff --git a/web/src/views/ProjectManage/SectionManage.vue b/web/src/views/ProjectManage/SectionManage.vue
index 09e277f..4cbfa56 100644
--- a/web/src/views/ProjectManage/SectionManage.vue
+++ b/web/src/views/ProjectManage/SectionManage.vue
@@ -1,584 +1,636 @@
-<template>
- <!-- 工程项目管理 ==> 单位工程管理-->
- <div class="main">
- <div class="main_header">
- <div class="header_item">
- <span class="header_label">标段名称:</span>
- <el-input v-model="queryInfo.segmentName" clearable placeholder="请输入标段名称"></el-input>
- </div>
- <div class="header_item">
- <span class="header_label">项目名称:</span>
- <el-select v-model="queryInfo.proId" placeholder="请选择项目名称" clearable>
- <el-option v-for="item in optionsProject" :key="item.proId" :label="item.proName" :value="item.proId">
- </el-option>
- </el-select>
- </div>
- <div class="header_item">
- <el-button icon="el-icon-search" v-permission="'search'" @click="queryReset">查询</el-button>
- <el-button class="search_btn" icon="el-icon-plus" v-permission="'insert'" @click="addRow">新增</el-button>
- </div>
- </div>
- <div class="main_content">
- <cpnTable :table-index="true" :table-data="dataList" :table-columns="tableColumns" :page-total="total"
- :page-num.sync="queryInfo.pageNum" :page-size.sync="queryInfo.pageSize" :page-change="pageChange">
-
- <template #finished="{ row }">
- <div style="cursor: pointer;" @click="showDetail(row)">{{ row.completedQuantity }}</div>
- </template>
- </cpnTable>
- </div>
- <!-- dialog -->
- <el-dialog class="prop_dialog" v-if="isRender" :title="dialogTitle" :visible.sync="asyncVisible" width="660px"
- @close="closeForm">
- <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="rule_form">
- <el-form-item label="项目名称:" prop="proId">
- <el-select v-model="ruleForm.proId" placeholder="请选择" @change="changeNeed">
- <el-option v-for="item in optionsProject" :key="item.proId" :label="item.proName" :value="item.proId">
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="起讫里程:" prop="mileage">
- <el-input v-model="ruleForm.mileage" clearable placeholder="请输入起讫里程"></el-input>
- </el-form-item>
- <el-form-item label="单位工程名称:" prop="unitProjectName">
- <el-input v-model="ruleForm.unitProjectName" clearable placeholder="请输入单位工程名称"></el-input>
- </el-form-item>
- <el-form-item label="需求负责人:" prop="segmentAdmin">
- <el-select v-model="ruleForm.segmentAdmin" placeholder="请选择求负责人">
- <el-option v-for="item in optionsUser" :key="item.userId" :label="item.realName" :value="item.userId">
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="盾构单位:" prop="shieldEnp">
- <el-input v-model="ruleForm.shieldEnp" clearable placeholder="请输入盾构单位"></el-input>
- </el-form-item>
- <el-form-item label="开始时间:" prop="startTime">
- <el-date-picker v-model="ruleForm.startTime" value-format="yyyy-MM-dd" placeholder="请选择开始日期"></el-date-picker>
- </el-form-item>
- <el-form-item label="结束时间:" prop="endTime">
- <el-date-picker v-model="ruleForm.endTime" value-format="yyyy-MM-dd" placeholder="请选择结束日期"></el-date-picker>
- </el-form-item>
- <el-form-item label="工期:" prop="duration">
- <el-input v-model="ruleForm.duration" clearable placeholder="请输入工期"></el-input>
- </el-form-item>
- <el-form-item label="站点:" prop="station">
- <el-input v-model="ruleForm.station" clearable placeholder="请输入站点"></el-input>
- </el-form-item>
- <div class="section_needs">标段需求</div>
- <div class="section_needs_content">
- <div v-for="item in ruleForm.segmentList" :key="item.dictId" class="needs_items">
- <div class="needs_text">{{ item.dictName }}</div>
- <el-input placeholder="请输入数量" type="number" v-model="item.needNum" class="needs_num">
- <template slot="append">块</template>
- </el-input>
- </div>
- </div>
- </el-form>
- <div slot="footer">
- <el-button @click="asyncVisible = false">取 消</el-button>
- <el-button class="submit_btn" @click="onSubmit('ruleForm')">提 交</el-button>
- </div>
- </el-dialog>
- <!-- detail dialog -->
- <el-dialog class="prop_dialog" v-if="detail.isRenderDetail" title="管片数量" :visible.sync="detail.asyncVisible"
- width="1000px">
- <el-card>
- <div class="titles" v-for="item in detail.infoMap" :key="item.key">
- {{ item.name }} :
- <template v-if="item.key === 'waterproofType'">
- <span>{{ detail.infos[item.key] === 0 ? '有' : '无' }} </span>
- </template>
- <template v-else-if="item.key === 'proHas'">
- <span v-for="val in detail.infos[item.key]" :key="val.hasSteel">
- {{ val.dictName }}
- </span>
- </template>
- <template v-else>
- <span>{{ detail.infos[item.key] }}</span>
- </template>
- </div>
- </el-card>
- <cpnTable :table-index="true" :table-data="detail.tableData" :table-columns="detail.tableColumns"
- :page-total="detail.total" :page-num.sync="detail.pageNum" :page-size.sync="detail.pageSize"
- :page-change="detailPageChange">
- </cpnTable>
- </el-dialog>
- </div>
-</template>
-
-<script>
-import {throttle} from '../../plugins/public'; // 导入节流、动态切换组件尺寸方法
-import cpnTable from '@/components/element/Table'
-export default {
- data() {
- return {
- isRender: false,
- loading: false,
- asyncVisible: false,
- submitMode: '', // add update
- total: 0,
- queryInfo: {
- pageNum: 1,
- pageSize: 10,
- segmentName: '',
- proId: '',
- },
- dataList: [],
- tableColumns: [],
- optionsUser: [], //需求负责人
- optionsProject: [], // 项目名称
- ruleForm: {}, // 按钮表单
- rules: {
- proId: [{required: true, message: '请选择', trigger: 'change'}],
- mileage: [{required: true, message: '请输入', trigger: 'blur'}],
- unitProjectName: [{required: true, message: '请输入', trigger: 'blur'}],
- segmentAdmin: [{required: true, message: '请选择', trigger: 'change'}],
- shieldEnp: [{required: true, message: '请输入', trigger: 'blur'}],
- startTime: [{required: true, message: '请选择', trigger: 'change'}],
- endTime: [{required: true, message: '请选择', trigger: 'change'}],
- duration: [{required: true, message: '请输入', trigger: 'blur'}],
- station: [{required: true, message: '请输入', trigger: 'blur'}],
- },
- detail: {
- rowId: '',
- isRenderDetail: false,
- asyncVisible: false,
- pageNum: 1,
- pageSize: 10,
- total: 0,
- tableData: [],
- tableColumns: [],
- infos: [],
- infoMap: [
- {
- name: '项目名称',
- key: 'proName',
- },
- {
- name: '单位工程名称',
- key: 'createUnit',
- },
- {
- name: '外径',
- key: 'outsideDiameter',
- },
- {
- name: '內径',
- key: 'innerDiameter',
- },
- {
- name: '厚度',
- key: 'thickness',
- },
- {
- name: '环宽',
- key: 'ringWidth',
- },
- {
- name: '混凝土强度等级',
- key: 'concreteStrengthGrade',
- },
- {
- name: '抗渗等级',
- key: 'impermeabilityLevel',
- },
- {
- name: '配筋型号',
- key: 'proHas',
- },
- {
- name: '有无外弧面防水',
- key: 'waterproofType',
- }
- ]
- }
- }
- },
- components: {
- cpnTable
- },
- computed: {
- isUpdate() {
- return this.submitMode === 'update'
- },
- dialogTitle() {
- return this.isUpdate ? '修改新增单位工程' : '新增单位工程'
- },
- },
- created() {
- this.setFormProps()
- this.setTableColumn()
- this.getLists()
- this.getAllProjects()
- this.getAllPersons()
- // this.getAllBlocks() // 暂时没用,先屏蔽
- },
- methods: {
- // 获取table列表数据
- getLists() {
- this.loading = true
- let params = this.queryInfo
- this.$api.Engineer.searchSegment(params).then(res => {
- if (res.statusMsg === 'ok') {
- this.total = res.data.total
- this.dataList = res.data.list
- }
- this.loading = false
- })
- },
- //获得所有人员
- getAllPersons() {
- this.$api.Engineer.getPersonsList({}).then(res => {
- if (res.statusMsg === 'ok') {
- this.optionsUser = res.data
- } else {
- this.$message.warning('人员名称获取失败')
- }
- })
- },
- //获得所有项目名称
- getAllProjects() {
- let obj = {
- pageNum: 1,
- pageSize: 100000000
- }
- this.$api.Engineer.searchProjects(obj).then(res => {
- if (res.statusMsg === 'ok') {
- this.optionsProject = res.data.list
- } else {
- this.$message.warning('项目名称获取失败')
- }
- })
- },
- //字典里获取所有标段块号
- getAllBlocks() {
- let params = {
- pageNum: 1,
- pageSize: 100000000
- }
- this.$api.Dictionary.searchDictionary(params).then(res => {
- if (res.statusMsg === 'ok') {
- const segmentList = []
- res.data.list.forEach(item => {
- if (item.dictType === '5') {
- segmentList.push({
- dictName: item.dictName,
- needType: item.dictId,
- needNum: 0,
- segmentId: ''
- })
- }
- })
- this.ruleForm.segmentList = segmentList
- } else {
- this.$message.warning('标段获取失败')
- }
- })
- },
- // 已完成 table信息
- getDetailLists() {
- let detailData = this.detail
- this.$api.DuctpiecePLM.searchDuctpiecePLMList({
- segmentId: detailData.rowId,
- pageNum: detailData.pageNum,
- pageSize: detailData.pageSize
- }).then(res => {
- if (res.success) {
- detailData.total = res.data.total
- detailData.tableData = res.data.list
- }
- })
- },
- // 已完成 title信息
- getDetailInfos(id) {
- this.$api.Engineer.detailsProjects({proId: id}).then(res => {
- if (res.success) {
- this.detail.infos = res.data
- }
- })
- },
- // 初始化 ruleform
- setFormProps(options = {}) {
- let _form = {
- proId: '', // 项目名称id
- mileage: '', // 起讫里程
- unitProjectName: '', // 单位工程名称
- segmentAdmin: '', // 需求负责人
- shieldEnp: '', // 盾构单位
- startTime: null, // 开始时间
- endTime: null, // 结束时间
- duration: '', // 工期
- station: '', // 站点
- segmentList: [], // 标段需求
- }
- this.ruleForm = Object.keys(options).length ? options : _form
- },
- // 初始化 table 配置
- setTableColumn() {
- this.tableColumns = [
- {index: true},
- {slot: "finished", name: "已完成(块)"},
- {name: "项目名称", key: "proName", width: 160},
- {name: "起讫里程", key: "mileage"},
- {name: "单位工程名称", key: "unitProjectName"},
- {name: "盾构单位", key: "shieldEnp"},
- {name: "开始时间", key: "startTime", width: 100},
- {name: "结束时间", key: "endTime", width: 100},
- {name: "工期", key: "duration"},
- {name: "站点", key: "station"},
- {name: "负责人", key: "realName"},
- {
- operation: true, name: "操作", width: 140, value: [
- {name: "修改", class: "table_btn", permission: "update", handleRow: this.updateRow},
- {name: "删除", class: "delete_btn", permission: "delete", handleRow: this.deleteRow},
- ]
- },
- ]
- this.detail.tableColumns = [
- {index: true},
- {name: "环号", key: "ringNum"},
- {name: "管片编号", key: "pipeNum", width: 140},
- {name: "转向", key: "turnName", width: 106},
- {name: "配筋", key: "reinforcementName"},
- {name: "注浆孔", key: "groutingHolesName"},
- {name: "块号", key: "blockNumName"},
- {name: "模具", key: "mouldNum"},
- {name: "入模时间", key: "intoModTime", width: 136},
- {name: "浇筑时间", key: "pouringTime"},
- {name: "质检时间", key: "checkTime", width: 136},
- {name: "生产班组", key: "groupName"},
- {name: "项目", key: "proName", width: 240},
- {name: "质量标注", key: "checkResultStr"},
- ]
- },
- // 重置表单
- resetForm(formName) {
- this.$refs[formName].resetFields()
- },
- // 显示表单
- showForm() {
- !this.isRender && (this.isRender = true)
- this.asyncVisible = true
- },
- // 隐藏表单
- closeForm() {
- this.asyncVisible = false
- this.resetForm('ruleForm')
- this.setFormProps()
- },
- // 查询按钮列表信息
- queryReset() {
- this.queryInfo.pageNum = 1
- this.queryInfo.pageSize = 10
- this.getLists()
- },
- // 添加数据
- addRow() {
- this.submitMode = 'add'
- this.showForm()
- },
- // 更新数据
- async updateRow(row) {
- this.submitMode = 'update'
- this.showForm()
- const segmentList = await this.getProjectBlocks(row.segmentId)
- Object.keys(this.ruleForm).forEach(item => {
- if (row.hasOwnProperty.call(row, item)) {
- this.ruleForm[item] = row[item]
- }
- })
- this.ruleForm.segmentId = row.segmentId
- this.ruleForm.segmentList = segmentList
- },
- // 删除数据
- deleteRow(row) {
- this.$confirm("该操作将删除该信息,是否继续删除?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- this.$api.Engineer.deleteSegment({segmentId: row.segmentId}).then(res => {
- if (res.statusMsg === 'ok') {
- this.queryReset();
- this.$message.success("删除成功!")
- } else {
- this.$message.warning(res.statusMsg)
- }
- })
- }).catch(() => {
- this.$message.warning("您已取消")
- })
- },
- //获取项目标段
- getProjectBlocks(id) {
- return new Promise(resolve => {
- this.$api.Engineer.detailsSegment({segmentId: id}).then(res => {
- let outData = []
- if (res.statusMsg === 'ok') {
- outData.push(...res.data.segmentNeeds)
- }
- resolve(outData)
- })
- })
- },
- //通过不同的项目展示不同的标段需求
- changeNeed(val) {
- this.$api.Reinforce.searchProjectBears({proId: val}).then(res => {
- if (res.statusMsg === 'ok') {
- const segmentList = []
- res.data.blokDtos.forEach(item => {
- segmentList.push({
- dictName: item.blockName,
- needType: item.blockNum,
- needNum: 0,
- segmentId: ''
- })
- })
- this.ruleForm.segmentList = segmentList
- } else {
- this.$message.warning('标段获取失败')
- }
- })
- },
- // 提交表单
- onSubmit: throttle(function () {
- this.$refs.ruleForm.validate(valid => {
- if (!valid) return
- const params = this.ruleForm
- if (this.isUpdate) {
- // 更新
- this.$api.Engineer.updateSegment(params).then((res) => {
- if (res.statusMsg === 'ok') {
- this.closeForm()
- this.getLists()
- this.$message.success('更新成功!')
- } else {
- this.$message.warning(res.statusMsg)
- }
- })
- } else {
- // 添加
- this.$api.Engineer.insertSegment(params).then((res) => {
- if (res.statusMsg === 'ok') {
- this.closeForm()
- this.getLists()
- this.$message.success('添加成功!')
- } else {
- this.$message.warning(res.statusMsg)
- }
- })
- }
- })
- }, 1000),
- showDetail(row) {
- let detailData = this.detail
- !detailData.isRenderDetail && (detailData.isRenderDetail = true)
- detailData.asyncVisible = true
- detailData.rowId = row.segmentId
- detailData.total = 0
- detailData.tableData = []
- detailData.infos = []
- this.getDetailInfos(row.proId)
- this.getDetailLists()
- },
- // 分页改变
- pageChange() {
- this.getLists();
- },
- // 已完成の分页改变
- detailPageChange() {
- this.getDetailLists();
- },
- }
-}
-</script>
-
-<style lang="scss" scoped>
-@import '../../style/layout-main.scss';
-
-/deep/ {
- &::-webkit-scrollbar {
- width: 8px;
- height: 8px;
- }
-
- &::-webkit-scrollbar-corner {
- background-color: transparent;
- }
-
- &::-webkit-scrollbar-thumb {
- border-radius: 10px;
- box-shadow: inset 0 0 5px transparent;
- background: #39B5FE;
- }
-
- &::-webkit-scrollbar-track {
- box-shadow: inset 0 0 5px transparent;
- border-radius: 10px;
- background: rgba(76, 188, 254, .3);
- }
-}
-
-.el-card {
- margin-bottom: 20px;
- border: none;
- color: #fff;
- background: rgba(9, 64, 101, 1);
-
- .titles {
- float: left;
- width: 25%;
- min-height: 36px;
- padding-right: 6px;
- margin-bottom: 6px;
- line-height: 18px;
- box-sizing: border-box;
- }
-
- span {
- color: #39B5FE;
- }
-}
-
-.section_needs {
- position: relative;
- color: #18F5F7;
- padding: 20px 20px 10px 15px;
- border-bottom: 1px solid #1949A3;
-
- &::before {
- position: absolute;
- content: "";
- width: 2px;
- height: 20px;
- background-color: #18F5F7;
- top: 20px;
- left: 5px;
- }
-}
-
-.section_needs_content {
- display: flex;
- flex-wrap: wrap;
-
- .needs_items {
- max-width: 190px;
- min-width: 142px;
- padding: 15px;
- display: flex;
-
- .needs_text {
- // width: 50px;
- flex: none;
- align-self: center;
- text-align: center;
- padding-right: 15px;
- color: #E1E3E9;
- }
-
- .needs_num {
- align-self: center;
- }
- }
-}
+<template>
+ <!-- 工程项目管理 ==> 单位工程管理-->
+ <div class="main">
+ <div class="main_header">
+ <div class="header_item">
+ <span class="header_label">标段名称:</span>
+ <el-input v-model="queryInfo.segmentName" clearable placeholder="请输入标段名称"></el-input>
+ </div>
+ <div class="header_item">
+ <span class="header_label">项目名称:</span>
+ <el-select v-model="queryInfo.proId" placeholder="请选择项目名称" clearable>
+ <el-option v-for="item in optionsProject" :key="item.proId" :label="item.proName" :value="item.proId">
+ </el-option>
+ </el-select>
+ </div>
+ <div class="header_item">
+ <el-button icon="el-icon-search" v-permission="'search'" @click="queryReset">查询</el-button>
+ <el-button class="search_btn" icon="el-icon-plus" v-permission="'insert'" @click="addRow">新增</el-button>
+ </div>
+ </div>
+ <div class="main_content">
+ <cpnTable :table-index="true" :table-loading="loading" :table-data="dataList" :table-columns="tableColumns"
+ :page-total="total" :page-num.sync="queryInfo.pageNum" :page-size.sync="queryInfo.pageSize"
+ :page-change="pageChange">
+
+ <template #finished="{ row }">
+ <div style="cursor: pointer;" @click="showDetail(row)">{{ row.completedQuantity }}</div>
+ </template>
+ </cpnTable>
+ </div>
+ <!-- dialog -->
+ <el-dialog class="prop_dialog" v-if="isRender" :title="dialogTitle" :visible.sync="asyncVisible" width="660px"
+ @close="closeForm">
+ <!-- form组件未开发完 -->
+ <!-- <cpnForm :form-config="formConfig"></cpnForm> -->
+
+ <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="rule_form">
+ <el-form-item label="项目名称:" prop="proId">
+ <el-select v-model="ruleForm.proId" placeholder="请选择" @change="changeNeed">
+ <el-option v-for="item in optionsProject" :key="item.proId" :label="item.proName" :value="item.proId">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="起讫里程:" prop="mileage">
+ <el-input v-model="ruleForm.mileage" clearable placeholder="请输入起讫里程"></el-input>
+ </el-form-item>
+ <el-form-item label="单位工程名称:" prop="unitProjectName">
+ <el-input v-model="ruleForm.unitProjectName" clearable placeholder="请输入单位工程名称"></el-input>
+ </el-form-item>
+ <el-form-item label="需求负责人:" prop="segmentAdmin">
+ <el-select v-model="ruleForm.segmentAdmin" placeholder="请选择需求负责人">
+ <el-option v-for="item in optionsUser" :key="item.userId" :label="item.realName" :value="item.userId">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="盾构单位:" prop="shieldEnp">
+ <el-input v-model="ruleForm.shieldEnp" clearable placeholder="请输入盾构单位"></el-input>
+ </el-form-item>
+ <el-form-item label="开始时间:" prop="startTime">
+ <el-date-picker v-model="ruleForm.startTime" value-format="yyyy-MM-dd" placeholder="请选择开始日期"></el-date-picker>
+ </el-form-item>
+ <el-form-item label="结束时间:" prop="endTime">
+ <el-date-picker v-model="ruleForm.endTime" value-format="yyyy-MM-dd" placeholder="请选择结束日期"></el-date-picker>
+ </el-form-item>
+ <el-form-item label="工期:" prop="duration">
+ <el-input v-model="ruleForm.duration" clearable placeholder="请输入工期"></el-input>
+ </el-form-item>
+ <el-form-item label="站点:" prop="station">
+ <el-input v-model="ruleForm.station" clearable placeholder="请输入站点"></el-input>
+ </el-form-item>
+ <div class="section_needs">标段需求</div>
+ <div class="section_needs_content">
+ <div v-for="item in ruleForm.segmentList" :key="item.dictId" class="needs_items">
+ <div class="needs_text">{{ item.dictName }}</div>
+ <el-input placeholder="请输入数量" type="number" v-model="item.needNum" class="needs_num">
+ <template slot="append">块</template>
+ </el-input>
+ </div>
+ </div>
+ </el-form>
+ <div slot="footer">
+ <el-button @click="asyncVisible = false">取 消</el-button>
+ <el-button class="submit_btn" @click="onSubmit('ruleForm')">提 交</el-button>
+ </div>
+ </el-dialog>
+ <!-- detail dialog -->
+ <el-dialog class="prop_dialog" v-if="detail.isRenderDetail" title="管片数量" :visible.sync="detail.asyncVisible"
+ width="1000px">
+ <el-card>
+ <div class="titles" v-for="item in detail.infoMap" :key="item.key">
+ {{ item.name }} :
+ <template v-if="item.key === 'waterproofType'">
+ <span>{{ detail.infos[item.key] === 0 ? '有' : '无' }} </span>
+ </template>
+ <template v-else-if="item.key === 'proHas'">
+ <span v-for="val in detail.infos[item.key]" :key="val.hasSteel">
+ {{ val.dictName }}
+ </span>
+ </template>
+ <template v-else>
+ <span>{{ detail.infos[item.key] }}</span>
+ </template>
+ </div>
+ </el-card>
+ <cpnTable :table-index="true" :table-data="detail.tableData" :table-columns="detail.tableColumns"
+ :page-total="detail.total" :page-num.sync="detail.pageNum" :page-size.sync="detail.pageSize"
+ :page-change="detailPageChange">
+ </cpnTable>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {throttle} from '../../plugins/public'; // 导入节流、动态切换组件尺寸方法
+import cpnTable from '@/components/element/Table'
+// import cpnForm from '@/components/element/Form'
+export default {
+ data() {
+ return {
+ isRender: false,
+ loading: false,
+ asyncVisible: false,
+ submitMode: '', // add update
+ total: 0,
+ queryInfo: {
+ pageNum: 1,
+ pageSize: 10,
+ segmentName: '',
+ proId: '',
+ },
+ dataList: [],
+ tableColumns: [],
+ optionsUser: [], //需求负责人
+ optionsProject: [], // 项目名称
+ ruleForm: {}, // 按钮表单
+ rules: {
+ proId: [{required: true, message: '请选择', trigger: 'change'}],
+ mileage: [{required: true, message: '请输入', trigger: 'blur'}],
+ unitProjectName: [{required: true, message: '请输入', trigger: 'blur'}],
+ segmentAdmin: [{required: true, message: '请选择', trigger: 'change'}],
+ shieldEnp: [{required: true, message: '请输入', trigger: 'blur'}],
+ startTime: [{required: true, message: '请选择', trigger: 'change'}],
+ endTime: [{required: true, message: '请选择', trigger: 'change'}],
+ duration: [{required: true, message: '请输入', trigger: 'blur'}],
+ station: [{required: true, message: '请输入', trigger: 'blur'}],
+ },
+ detail: {
+ rowId: '',
+ isRenderDetail: false,
+ asyncVisible: false,
+ pageNum: 1,
+ pageSize: 10,
+ total: 0,
+ tableData: [],
+ tableColumns: [],
+ infos: [],
+ infoMap: [
+ {
+ name: '项目名称',
+ key: 'proName',
+ },
+ {
+ name: '单位工程名称',
+ key: 'createUnit',
+ },
+ {
+ name: '外径',
+ key: 'outsideDiameter',
+ },
+ {
+ name: '內径',
+ key: 'innerDiameter',
+ },
+ {
+ name: '厚度',
+ key: 'thickness',
+ },
+ {
+ name: '环宽',
+ key: 'ringWidth',
+ },
+ {
+ name: '混凝土强度等级',
+ key: 'concreteStrengthGrade',
+ },
+ {
+ name: '抗渗等级',
+ key: 'impermeabilityLevel',
+ },
+ {
+ name: '配筋型号',
+ key: 'proHas',
+ },
+ {
+ name: '有无外弧面防水',
+ key: 'waterproofType',
+ }
+ ]
+ },
+ // formConfig: {
+ // formModels: {
+ // proId: '', // 项目名称id
+ // mileage: '', // 起讫里程
+ // unitProjectName: '', // 单位工程名称
+ // segmentAdmin: '', // 需求负责人
+ // shieldEnp: '', // 盾构单位
+ // startTime: null, // 开始时间
+ // endTime: null, // 结束时间
+ // duration: '', // 工期
+ // station: '', // 站点
+ // segmentList: [], // 标段需求
+ // },
+ // formItems: [
+ // {
+ // type: 'input', label: '用户id'
+ // },
+ // {
+ // type: 'input', label: '用户名'
+ // },
+
+ // {
+ // type: 'input', label: '真实姓名'
+ // },
+ // {
+ // type: 'input', label: '电话号码'
+ // },
+ // {
+ // type: 'select', label: '用户状态', options: [
+ // {label: '禁用', value: 0},
+ // {label: '启用', value: 1}
+ // ]
+ // },
+ // {
+ // type: 'datepicker', label: '创建时间', otherOptions: {
+ // startPlaceholder: '开始时间',
+ // endPlaceholder: '结束时间',
+ // type: 'daterange',
+ // 'unlink-panels': true
+ // }
+ // }
+ // ],
+ // itemColLayout: {
+ // span: 8
+ // }
+ // }
+ }
+ },
+ components: {
+ cpnTable,
+ // cpnForm
+ },
+ computed: {
+ isUpdate() {
+ return this.submitMode === 'update'
+ },
+ dialogTitle() {
+ return this.isUpdate ? '修改单位工程' : '新增单位工程'
+ },
+ },
+ created() {
+ this.setFormProps()
+ this.setTableColumn()
+ this.getLists()
+ this.getAllProjects()
+ this.getAllPersons()
+ // this.getAllBlocks() // 暂时没用,先屏蔽
+ },
+ methods: {
+ // 获取table列表数据
+ getLists() {
+ this.loading = true
+ let params = this.queryInfo
+ this.$api.Engineer.searchSegment(params).then(res => {
+ if (res.statusMsg === 'ok') {
+ this.total = res.data.total
+ this.dataList = res.data.list
+ }
+ this.loading = false
+ })
+ },
+ //获得所有人员
+ getAllPersons() {
+ this.$api.Engineer.getPersonsList({}).then(res => {
+ if (res.statusMsg === 'ok') {
+ this.optionsUser = res.data
+ } else {
+ this.$message.warning('人员名称获取失败')
+ }
+ })
+ },
+ //获得所有项目名称
+ getAllProjects() {
+ let obj = {
+ pageNum: 1,
+ pageSize: 100000000
+ }
+ this.$api.Engineer.searchProjects(obj).then(res => {
+ if (res.statusMsg === 'ok') {
+ this.optionsProject = res.data.list
+ } else {
+ this.$message.warning('项目名称获取失败')
+ }
+ })
+ },
+ //字典里获取所有标段块号
+ getAllBlocks() {
+ let params = {
+ pageNum: 1,
+ pageSize: 100000000
+ }
+ this.$api.Dictionary.searchDictionary(params).then(res => {
+ if (res.statusMsg === 'ok') {
+ const segmentList = []
+ res.data.list.forEach(item => {
+ if (item.dictType === '5') {
+ segmentList.push({
+ dictName: item.dictName,
+ needType: item.dictId,
+ needNum: 0,
+ segmentId: ''
+ })
+ }
+ })
+ this.ruleForm.segmentList = segmentList
+ } else {
+ this.$message.warning('标段获取失败')
+ }
+ })
+ },
+ // 已完成 table信息
+ getDetailLists() {
+ let detailData = this.detail
+ this.$api.DuctpiecePLM.searchDuctpiecePLMList({
+ segmentId: detailData.rowId,
+ pageNum: detailData.pageNum,
+ pageSize: detailData.pageSize
+ }).then(res => {
+ if (res.success) {
+ detailData.total = res.data.total
+ detailData.tableData = res.data.list
+ }
+ })
+ },
+ // 已完成 title信息
+ getDetailInfos(id) {
+ this.$api.Engineer.detailsProjects({proId: id}).then(res => {
+ if (res.success) {
+ this.detail.infos = res.data
+ }
+ })
+ },
+ // 初始化 ruleform
+ setFormProps(options = {}) {
+ let _form = {
+ proId: '', // 项目名称id
+ mileage: '', // 起讫里程
+ unitProjectName: '', // 单位工程名称
+ segmentAdmin: '', // 需求负责人
+ shieldEnp: '', // 盾构单位
+ startTime: null, // 开始时间
+ endTime: null, // 结束时间
+ duration: '', // 工期
+ station: '', // 站点
+ segmentList: [], // 标段需求
+ }
+ this.ruleForm = Object.keys(options).length ? options : _form
+ },
+ // 初始化 table 配置
+ setTableColumn() {
+ this.tableColumns = [
+ {index: true},
+ {slot: "finished", name: "已完成(块)"},
+ {name: "项目名称", key: "proName", width: 160},
+ {name: "起讫里程", key: "mileage"},
+ {name: "单位工程名称", key: "unitProjectName"},
+ {name: "盾构单位", key: "shieldEnp"},
+ {name: "开始时间", key: "startTime", width: 100},
+ {name: "结束时间", key: "endTime", width: 100},
+ {name: "工期", key: "duration"},
+ {name: "站点", key: "station"},
+ {name: "负责人", key: "realName"},
+ {
+ operation: true, name: "操作", width: 140, value: [
+ {name: "修改", class: "table_btn", permission: "update", handleRow: this.updateRow},
+ {name: "删除", class: "delete_btn", permission: "delete", handleRow: this.deleteRow},
+ ]
+ },
+ ]
+ this.detail.tableColumns = [
+ {index: true},
+ {name: "环号", key: "ringNum"},
+ {name: "管片编号", key: "pipeNum", width: 140},
+ {name: "转向", key: "turnName", width: 106},
+ {name: "配筋", key: "reinforcementName"},
+ {name: "注浆孔", key: "groutingHolesName"},
+ {name: "块号", key: "blockNumName"},
+ {name: "模具", key: "mouldNum"},
+ {name: "入模时间", key: "intoModTime", width: 136},
+ {name: "浇筑时间", key: "pouringTime"},
+ {name: "质检时间", key: "checkTime", width: 136},
+ {name: "生产班组", key: "groupName"},
+ {name: "项目", key: "proName", width: 240},
+ {name: "质量标注", key: "checkResultStr"},
+ ]
+ },
+ // 重置表单
+ resetForm(formName) {
+ this.$refs[formName].resetFields()
+ },
+ // 显示表单
+ showForm() {
+ !this.isRender && (this.isRender = true)
+ this.asyncVisible = true
+ },
+ // 隐藏表单
+ closeForm() {
+ this.asyncVisible = false
+ this.resetForm('ruleForm')
+ this.setFormProps()
+ },
+ // 查询按钮列表信息
+ queryReset() {
+ this.queryInfo.pageNum = 1
+ this.queryInfo.pageSize = 10
+ this.getLists()
+ },
+ // 添加数据
+ addRow() {
+ this.submitMode = 'add'
+ this.showForm()
+ },
+ // 更新数据
+ async updateRow(row) {
+ this.submitMode = 'update'
+ this.showForm()
+ const segmentList = await this.getProjectBlocks(row.segmentId)
+ Object.keys(this.ruleForm).forEach(item => {
+ if (row.hasOwnProperty.call(row, item)) {
+ this.ruleForm[item] = row[item]
+ }
+ })
+ this.ruleForm.segmentId = row.segmentId
+ this.ruleForm.segmentList = segmentList
+ },
+ // 删除数据
+ deleteRow(row) {
+ this.$confirm("该操作将删除该信息,是否继续删除?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ }).then(() => {
+ this.$api.Engineer.deleteSegment({segmentId: row.segmentId}).then(res => {
+ if (res.statusMsg === 'ok') {
+ this.queryReset();
+ this.$message.success("删除成功!")
+ } else {
+ this.$message.warning(res.statusMsg)
+ }
+ })
+ }).catch(() => {
+ this.$message.warning("您已取消")
+ })
+ },
+ //获取项目标段
+ getProjectBlocks(id) {
+ return new Promise(resolve => {
+ this.$api.Engineer.detailsSegment({segmentId: id}).then(res => {
+ let outData = []
+ if (res.statusMsg === 'ok') {
+ outData.push(...res.data.segmentNeeds)
+ }
+ resolve(outData)
+ })
+ })
+ },
+ //通过不同的项目展示不同的标段需求
+ changeNeed(val) {
+ this.$api.Reinforce.searchProjectBears({proId: val}).then(res => {
+ if (res.statusMsg === 'ok') {
+ const segmentList = []
+ res.data.blokDtos.forEach(item => {
+ segmentList.push({
+ dictName: item.blockName,
+ needType: item.blockNum,
+ needNum: 0,
+ segmentId: ''
+ })
+ })
+ this.ruleForm.segmentList = segmentList
+ } else {
+ this.$message.warning('标段获取失败')
+ }
+ })
+ },
+ // 提交表单
+ onSubmit: throttle(function () {
+ this.$refs.ruleForm.validate(valid => {
+ if (!valid) return
+ const params = this.ruleForm
+ if (this.isUpdate) {
+ // 更新
+ this.$api.Engineer.updateSegment(params).then((res) => {
+ if (res.statusMsg === 'ok') {
+ this.closeForm()
+ this.getLists()
+ this.$message.success('更新成功!')
+ } else {
+ this.$message.warning(res.statusMsg)
+ }
+ })
+ } else {
+ // 添加
+ this.$api.Engineer.insertSegment(params).then((res) => {
+ if (res.statusMsg === 'ok') {
+ this.closeForm()
+ this.getLists()
+ this.$message.success('添加成功!')
+ } else {
+ this.$message.warning(res.statusMsg)
+ }
+ })
+ }
+ })
+ }, 1000),
+ showDetail(row) {
+ let detailData = this.detail
+ !detailData.isRenderDetail && (detailData.isRenderDetail = true)
+ detailData.asyncVisible = true
+ detailData.rowId = row.segmentId
+ detailData.total = 0
+ detailData.tableData = []
+ detailData.infos = []
+ this.getDetailInfos(row.proId)
+ this.getDetailLists()
+ },
+ // 分页改变
+ pageChange() {
+ this.getLists();
+ },
+ // 已完成の分页改变
+ detailPageChange() {
+ this.getDetailLists();
+ },
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+@import '../../style/layout-main.scss';
+
+/deep/ {
+ &::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ }
+
+ &::-webkit-scrollbar-corner {
+ background-color: transparent;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ border-radius: 10px;
+ box-shadow: inset 0 0 5px transparent;
+ background: #39B5FE;
+ }
+
+ &::-webkit-scrollbar-track {
+ box-shadow: inset 0 0 5px transparent;
+ border-radius: 10px;
+ background: rgba(76, 188, 254, .3);
+ }
+}
+
+.el-card {
+ margin-bottom: 20px;
+ border: none;
+ color: #fff;
+ background: rgba(9, 64, 101, 1);
+
+ .titles {
+ float: left;
+ width: 25%;
+ min-height: 36px;
+ padding-right: 6px;
+ margin-bottom: 6px;
+ line-height: 18px;
+ box-sizing: border-box;
+ }
+
+ span {
+ color: #39B5FE;
+ }
+}
+
+.section_needs {
+ position: relative;
+ color: #18F5F7;
+ padding: 20px 20px 10px 15px;
+ border-bottom: 1px solid #1949A3;
+
+ &::before {
+ position: absolute;
+ content: "";
+ width: 2px;
+ height: 20px;
+ background-color: #18F5F7;
+ top: 20px;
+ left: 5px;
+ }
+}
+
+.section_needs_content {
+ display: flex;
+ flex-wrap: wrap;
+
+ .needs_items {
+ max-width: 190px;
+ min-width: 142px;
+ padding: 15px;
+ display: flex;
+
+ .needs_text {
+ // width: 50px;
+ flex: none;
+ align-self: center;
+ text-align: center;
+ padding-right: 15px;
+ color: #E1E3E9;
+ }
+
+ .needs_num {
+ align-self: center;
+ }
+ }
+}
</style>
\ No newline at end of file
--
Gitblit v1.9.3