This commit is contained in:
xd 2024-05-22 17:27:10 +08:00
parent fc68bc000e
commit 362cd0fdfb
8 changed files with 389 additions and 13 deletions

View File

@ -40,11 +40,15 @@ public class QuotHj extends BaseEntity
/** 报价单信息 */
private String quotId;//报价单id
private String quotCode;//报价单号
private String quotSalesmanName;//业务员
private String quotCustomerName;//客户
private String quotProject;//项目
/** 技术协助信息 */
private String quotJsxzGroupValues;//技术协助-分组
public void setQuotHjId(String quotHjId)
{
this.quotHjId = quotHjId;
@ -95,6 +99,9 @@ public class QuotHj extends BaseEntity
public void setCreateName(String createName) { this.createName = createName; }
/** 报价单信息 */
public String getQuotId() { return quotId; }
public void setQuotId(String quotId) { this.quotId = quotId; }
public String getQuotCode() { return quotCode; }
public void setQuotCode(String quotCode) { this.quotCode = quotCode; }
@ -106,4 +113,7 @@ public class QuotHj extends BaseEntity
public String getQuotProject() { return quotProject; }
public void setQuotProject(String quotProject) { this.quotProject = quotProject; }
public String getQuotJsxzGroupValues() { return quotJsxzGroupValues; }
public void setQuotJsxzGroupValues(String quotJsxzGroupValues) { this.quotJsxzGroupValues = quotJsxzGroupValues; }
}

View File

@ -16,11 +16,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="quotId" column="quot_id" />
<result property="quotCode" column="quot_code" />
<result property="quotHjApprovalStatus" column="quot_hj_approval_status" />
<result property="quotSalesmanName" column="quot_salesman_name" />
<result property="quotCustomerName" column="quot_customer_name" />
<result property="quotProject" column="quot_project" />
<result property="quotJsxzGroupValues" column="quot_jsxz_group_values" />
</resultMap>
<sql id="quotHjJoins">
@ -33,8 +36,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select a.quot_hj_id, a.quot_hj_code, a.quot_hj_pricing_type, a.quot_hj_pricing_date, a.quot_hj_remark,
a.create_by, a.create_time, a.update_by, a.update_time,
u.nick_name create_name,
q.quot_hj_approval_status,q.quot_code,q.quot_salesman_name,
q.quot_customer_name,q.quot_project
q.quot_hj_approval_status,
q.quot_id,q.quot_code,q.quot_salesman_name,
q.quot_customer_name,q.quot_project,
q.quot_jsxz_group_values
from quot_hj a
<include refid="quotHjJoins"/>
</sql>

View File

@ -0,0 +1,167 @@
export default {
bind(el, binding, vnode, oldVnode) {
let resizeEvent = new CustomEvent('drag-resize',{detail:'尺寸变化',bubbles:false});
//初始化不最大化
el.fullscreen = false;
// 弹框可拉伸最小宽高
const minWidth = 1100
const minHeight = 570
//当前宽高
let nowWidth = minWidth;
let nowHight = minHeight;
//当前顶部高度
let nowMarginTop = 0;
//获取弹框头部(这部分可双击全屏)
const dialogHeaderEl = el.querySelector('.el-dialog__header');
let hasSetBodyHight = false;
//弹窗
const dragDom = el.querySelector('.el-dialog');
el.style.overflow='initial'
dragDom.className += ' el-drag-dialog';
// 给弹窗加上overflow auto不然缩小时框内的标签可能超出dialog
dragDom.style.overflow = 'auto'
//清除选择头部文字效果
dialogHeaderEl.onselectstart = new Function("return false");
//头部加上可拖动cursor
dialogHeaderEl.style.cursor = 'move';
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
//头部插入最大化最小化元素
let maxMin = document.createElement("button");
maxMin.className += ' el-dialog__headerbtn el-dialog__minmax';
maxMin.style.right = '40px';
maxMin.style.color = '#909399';
maxMin.title = el.fullscreen ? '还原' : '最大化';
maxMin.innerHTML = '<i class=' + (el.fullscreen ? '"el-icon-crop"' : '"el-icon-full-screen"') + ' onMouseOver="this.style.color=\'#409EFF\'" onMouseOut="this.style.color=\'inherit\'"></i>';
dialogHeaderEl.insertBefore(maxMin, dialogHeaderEl.childNodes[1]);
let moveDown = (e) => {
// 鼠标按下,计算当前元素距离可视区的距离
const disX = e.clientX - dialogHeaderEl.offsetLeft;
const disY = e.clientY - dialogHeaderEl.offsetTop;
// 获取到的值带px 正则匹配替换
let styL, styT;
// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
if (sty.left.includes('%')) {
styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100);
styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100);
} else {
styL = +sty.left.replace(/\px/g, '');
styT = +sty.top.replace(/\px/g, '');
}
;
document.onmousemove = function (e) {
// 通过事件委托,计算移动的距离
const l = e.clientX - disX;
const t = e.clientY - disY;
// 移动当前元素
dragDom.style.left = `${l + styL}px`;
dragDom.style.top = `${t + styT}px`;
//将此时的位置传出去
//binding.value({x:e.pageX,y:e.pageY})
};
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
dialogHeaderEl.onmousedown = moveDown;
let bodyHeight = 'auto';
function setMaxMin() {
if (el.fullscreen) {
let i = maxMin.querySelector('.el-icon-crop');
i.classList.remove('el-icon-crop');
i.classList.add('el-icon-full-screen');
maxMin.innerHTML = '<i class="el-icon-full-screen"></i>';
maxMin.title = '最大化';
dragDom.style.height = nowHight + 'px';
dragDom.style.width = nowWidth + 'px';
dragDom.style.marginTop = window.innerHeight*0.07+'px';
el.fullscreen = false;
dialogHeaderEl.style.cursor = 'move';
dialogHeaderEl.onmousedown = moveDown;
//dragDom.querySelector('.el-dialog__body').style.height = bodyHeight;
hasSetBodyHight = false;
} else {
let i = maxMin.querySelector('.el-icon-full-screen');
i.classList.remove('el-icon-full-screen');
i.classList.add('el-icon-crop');
maxMin.title = '还原';
bodyHeight = dragDom.querySelector('.el-dialog__body').offsetHeight + 'px';
nowHight = dragDom.clientHeight;
nowWidth = dragDom.clientWidth;
nowMarginTop = dragDom.style.marginTop;
dragDom.style.left = 0;
dragDom.style.top = 0;
dragDom.style.height = window.innerHeight + 'px'
dragDom.style.width = "100VW";
dragDom.style.marginTop = 0;
el.fullscreen = true;
dialogHeaderEl.style.cursor = 'initial';
dialogHeaderEl.onmousedown = null;
if (!hasSetBodyHight) {
const footerHeight = dragDom.querySelector('.el-dialog__footer') && dragDom.querySelector('.el-dialog__footer').offsetHeight
dragDom.querySelector('.el-dialog__body').style.height =
'calc(90% - ' + (dialogHeaderEl.offsetHeight + footerHeight) + 'px)'
/* dragDom.querySelector('.el-dialog__body').style.height =
window.innerHeight*0.9
- (dialogHeaderEl.offsetHeight + footerHeight) + 'px'*/
hasSetBodyHight = true
}
}
el.dispatchEvent(resizeEvent);
}
//点击放大缩小效果
maxMin.onclick = setMaxMin;
//双击头部效果
dialogHeaderEl.ondblclick = setMaxMin;
//拉伸
let resizeEl = document.createElement("div");
dragDom.appendChild(resizeEl);
//在弹窗右下角加上一个10-10px的控制块
resizeEl.style.cursor = 'se-resize';
resizeEl.style.position = 'absolute';
resizeEl.style.height = '10px';
resizeEl.style.width = '10px';
resizeEl.style.right = '0px';
resizeEl.style.bottom = '0px';
resizeEl.style.zIndex = '99';
//鼠标拉伸弹窗
resizeEl.onmousedown = (e) => {
// 记录初始x位置
const clientX = e.clientX;
// 鼠标按下,计算当前元素距离可视区的距离
const disX = e.clientX - resizeEl.offsetLeft;
const disY = e.clientY - resizeEl.offsetTop;
document.onmousemove = function (e) {
e.preventDefault(); // 移动时禁用默认事件
// 通过事件委托,计算移动的距离
const x = e.clientX - disX + (e.clientX - clientX);//这里 由于elementUI的dialog控制居中的所以水平拉伸效果是双倍
const y = e.clientY - disY;
//比较是否小于最小宽高
dragDom.style.width = x > minWidth ? `${x}px` : minWidth + 'px';
dragDom.style.height = y > minHeight ? `${y}px` : minHeight + 'px';
if (!hasSetBodyHight) {
const footerHeight = dragDom.querySelector('.el-dialog__footer') && dragDom.querySelector('.el-dialog__footer').offsetHeight
dragDom.querySelector('.el-dialog__body').style.height = 'calc(90% - ' + (dialogHeaderEl.offsetHeight + footerHeight) + 'px)'
hasSetBodyHight = true
}
};
//拉伸结束
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
el.dispatchEvent(resizeEvent);
};
}
}
}

View File

@ -12,7 +12,7 @@ module.exports = {
/**
* 是否显示顶部导航
*/
topNav: true,
topNav: false,
/**
* 是否显示 tagsView

View File

@ -8,8 +8,8 @@ const state = {
theme: storageSetting.theme || '#409EFF',
sideTheme: storageSetting.sideTheme || sideTheme,
showSettings: showSettings,
//topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
topNav: storageSetting.topNav === undefined ? topNav : true,
topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
//topNav: storageSetting.topNav === undefined ? topNav : true,
tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,
sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,

View File

@ -65,6 +65,28 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-divider content-position="center">询价附件</el-divider>
<el-table class="down" :data="quotXjFileList" border stripe style="width: 100%;" height="150px">
<el-table-column prop="fileName" label="文件名称" width="450px"></el-table-column>
<el-table-column prop="fileSize" label="文件大小" width="100px">
<template slot-scope="scope">
<span v-if="scope.row.fileSize / 1024 / 1024 < 1">{{(scope.row.fileSize / 1024).toFixed(2) + 'KB'}}</span>
<span v-else>{{(scope.row.fileSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
</template>
</el-table-column>
<el-table-column prop="fileTime" label="上传时间"></el-table-column>
<el-table-column width="150px" label="操作">
<template slot-scope="scope">
<el-button :key="Math.random()" size="small" type="text">
<a @click="downloadFile(scope.row.fileUrl)">下载</a>
</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-divider content-position="center">核价附件</el-divider>
@ -108,6 +130,125 @@
</el-table>
</el-col>
</el-row>
<div v-if="showTl">
<el-divider content-position="center">特缆协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="特缆协助状态" prop="quotJsqrTlApprovalStatus">
<el-select v-model="form.quotJsqrTlApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="特缆反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrTl')">上传文件 ({{this.quotJsqrTlFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="特缆协助说明" prop="quotJsqrTlRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrTlRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="showDy">
<el-divider content-position="center">低压协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="低压协助状态" prop="quotJsqrDyApprovalStatus">
<el-select v-model="form.quotJsqrDyApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="低压反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrDy')">上传文件 ({{this.quotJsqrDyFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="低压协助说明" prop="quotJsqrDyRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrDyRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="showZy">
<el-divider content-position="center">中压协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="中压协助状态" prop="quotJsqrZyApprovalStatus">
<el-select v-model="form.quotJsqrZyApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="中压反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrZy')">上传文件 ({{this.quotJsqrZyFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="中压协助说明" prop="quotJsqrZyRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrZyRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="showQt">
<el-divider content-position="center">其他协助</el-divider>
<el-row :gutter="8">
<el-col :span="8">
<el-form-item label="其他协助状态" prop="quotJsqrQtApprovalStatus">
<el-select v-model="form.quotJsqrQtApprovalStatus" :disabled="true">
<el-option
v-for="dict in dict.type.quot_jsxz_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="其他反馈附件">
<el-button size="mini" type="primary" @click="handleAddFile('quotJsqrQt')">上传文件 ({{this.quotJsqrQtFileNum}})</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="24">
<el-form-item label="其他协助说明" prop="quotJsqrQtRemark">
<el-input type="textarea" autosize v-model="form.quotJsqrQtRemark" placeholder="技术部填写" :disabled="true"/>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<div slot="footer" class="dialog-footer" v-if="this.form.quotHjApprovalStatus==1">
<div v-if="this.isSelfProp">
@ -139,6 +280,8 @@ export default {
open: false,
//
isSelfProp: true,
// -
quotXjFileList: [],
// -
quotHjFileList: [],
//-
@ -148,7 +291,12 @@ export default {
//
form: {},
//
rules: {}
rules: {},
//-
showTl: false,
showDy: false,
showZy: false,
showQt: false
};
},
methods: {
@ -164,8 +312,14 @@ export default {
quotProject: null,
quotHjRemark: null
};
this.quotXjFileList = [];
this.quotHjFileList = [];
this.showTl = false;
this.showDy = false;
this.showZy = false;
this.showQt = false;
this.resetForm("form");
},
//
@ -183,8 +337,30 @@ export default {
this.form = response.data;
this.open = true;
this.title = "核价单信息";
this.getQuotXjFileList();
this.getQuotHjFileList();
console.log( response.data)
const quotJsxzGroup = this.form.quotJsxzGroupValues;
alert(quotJsxzGroup)
if(quotJsxzGroup) {
if (quotJsxzGroup.indexOf("TL") !== -1) {
this.showTl = true;
this.getQuotJsqrFileList('quotJsqrTlFkFile');
}
if (quotJsxzGroup.indexOf("DY") !== -1) {
this.showDy = true;
this.getQuotJsqrFileList('quotJsqrDyFkFile');
}
if (quotJsxzGroup.indexOf("ZY") !== -1) {
this.showZy = true;
this.getQuotJsqrFileList('quotJsqrZyFkFile');
}
if (quotJsxzGroup.indexOf("QT") !== -1) {
this.showQt = true;
this.getQuotJsqrFileList('quotJsqrQtFkFile');
}
}
});
},
/** 提交报价按钮 */
@ -211,6 +387,13 @@ export default {
});
},
//-
getQuotXjFileList(){
const param = {relationId:this.form.quotId,fileType:'quotXjFile'}
quotFileList(param).then(response => {
this.quotXjFileList = response.rows;
});
},
//-
getQuotHjFileList(){
const param = {relationId:this.form.quotHjId,fileType:'quotHjFile'}

View File

@ -143,7 +143,7 @@
/>
<!-- 添加或修改报价对话框 -->
<el-dialog :visible.sync="open" width="1050px" append-to-body>
<el-dialog :visible.sync="open" width="1050px" v-el-drag-dialog append-to-body>
<template slot="title">
报价单信息<span style="color:red;margin-left:25px">(此报价单数据型号规格电压等如需下单或签订合同引用请再次自行核对责任自负)</span>
</template>
@ -778,8 +778,15 @@ import jsqrDialog from '@/views/technicalConfirm/technicalConfirm/jsxzInfo.vue';
/** 导入核价单详情组件*/
import hjDialog from '@/views/priceVerification/priceVerification/hjInfo.vue';
/** 弹窗放大、拖拽 */
import elDragDialog from "@/directive/dialog/dragDialog";
export default {
name: "Quot",
directives: {
elDragDialog,
},
components: {
//
'CustomerSelect': CustomerSelect,
@ -1014,7 +1021,7 @@ export default {
this.open = true;
this.activeName = "quotInfo";
var quotJsxzGroup = this.form.quotJsxzGroupValues;
const quotJsxzGroup = this.form.quotJsxzGroupValues;
if(quotJsxzGroup){
if(quotJsxzGroup.indexOf("TL")!==-1){
this.showTl = true;
@ -1222,7 +1229,7 @@ export default {
}
}, 0);
} else {
sums[index] = '---'
sums[index] = ''
}
}
});

View File

@ -65,7 +65,7 @@
</el-table>
<!-- 报价详情对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1050px" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="1050px" v-el-drag-dialog append-to-body>
<el-form ref="form" :model="form":rules="rules" label-width="100px">
<el-row :gutter="8">
<el-col :span="12">
@ -119,7 +119,7 @@
</el-col>
</el-row>
<el-table v-loading="selectedResultLoading" width="100%;" :row-class-name="selectedResultIndex" :data="selectedResultData" height="350px">
<el-table v-loading="selectedResultLoading" width="100%;" :row-class-name="selectedResultIndex" :data="selectedResultData" height="300px">
<el-table-column fixed="left" label="" align="center" prop="index" width="50"/>
<el-table-column label="版本uid" align="center" prop="uid_0" v-if="false"/>
<el-table-column fixed="left" label="产品型号" align="center" prop="name_0" width="180"/>
@ -167,12 +167,16 @@
</style>
<script>
import { checkPermi, checkRole } from "@/utils/permission"; //
import {toDecimal, versionList,listQuots,getQuotDetail,deleteQuots,updateSelectedResultData,madeQuot,saveQuot,commitQuot } from "@/api/redBook/redBook";
/** 弹窗放大、拖拽 */
import elDragDialog from "@/directive/dialog/dragDialog";
export default {
name: "quots",
dicts:['rb_quot_approval_status'],
directives: {
elDragDialog,
},
data() {
return {
//