From 362cd0fdfb239f0d2142e9d204a7243ebd13cd0a Mon Sep 17 00:00:00 2001 From: xd <844539747@qq.com> Date: Wed, 22 May 2024 17:27:10 +0800 Subject: [PATCH] '123' --- .../priceVerification/domain/QuotHj.java | 10 + .../mapper/priceVerification/QuotHjMapper.xml | 9 +- ruoyi-ui/src/directive/dialog/dragDialog.js | 167 ++++++++++++++++ ruoyi-ui/src/settings.js | 2 +- ruoyi-ui/src/store/modules/settings.js | 4 +- .../priceVerification/hjInfo.vue | 187 +++++++++++++++++- ruoyi-ui/src/views/quot/quot/index.vue | 13 +- ruoyi-ui/src/views/redBook/quots.vue | 10 +- 8 files changed, 389 insertions(+), 13 deletions(-) create mode 100644 ruoyi-ui/src/directive/dialog/dragDialog.js diff --git a/ruoyi-system/src/main/java/com/ruoyi/priceVerification/domain/QuotHj.java b/ruoyi-system/src/main/java/com/ruoyi/priceVerification/domain/QuotHj.java index 76f0527..fd62527 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/priceVerification/domain/QuotHj.java +++ b/ruoyi-system/src/main/java/com/ruoyi/priceVerification/domain/QuotHj.java @@ -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; } } diff --git a/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml b/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml index e9c34c9..00172ad 100644 --- a/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml @@ -16,11 +16,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -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 diff --git a/ruoyi-ui/src/directive/dialog/dragDialog.js b/ruoyi-ui/src/directive/dialog/dragDialog.js new file mode 100644 index 0000000..be31661 --- /dev/null +++ b/ruoyi-ui/src/directive/dialog/dragDialog.js @@ -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 = ''; + 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 = ''; + 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); + }; + } + } +} diff --git a/ruoyi-ui/src/settings.js b/ruoyi-ui/src/settings.js index c367d6d..ad78801 100644 --- a/ruoyi-ui/src/settings.js +++ b/ruoyi-ui/src/settings.js @@ -12,7 +12,7 @@ module.exports = { /** * 是否显示顶部导航 */ - topNav: true, + topNav: false, /** * 是否显示 tagsView diff --git a/ruoyi-ui/src/store/modules/settings.js b/ruoyi-ui/src/store/modules/settings.js index ee38ede..c587891 100644 --- a/ruoyi-ui/src/store/modules/settings.js +++ b/ruoyi-ui/src/store/modules/settings.js @@ -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, diff --git a/ruoyi-ui/src/views/priceVerification/priceVerification/hjInfo.vue b/ruoyi-ui/src/views/priceVerification/priceVerification/hjInfo.vue index 1536794..76da996 100644 --- a/ruoyi-ui/src/views/priceVerification/priceVerification/hjInfo.vue +++ b/ruoyi-ui/src/views/priceVerification/priceVerification/hjInfo.vue @@ -65,6 +65,28 @@ + + + 询价附件 + + + + + + + + + + + + 核价附件 @@ -108,6 +130,125 @@ + + +
+ 特缆协助 + + + + + + + + + + + 上传文件 ({{this.quotJsqrTlFileNum}}) + + + + + + + + + + +
+
+ 低压协助 + + + + + + + + + + + 上传文件 ({{this.quotJsqrDyFileNum}}) + + + + + + + + + + +
+
+ 中压协助 + + + + + + + + + + + 上传文件 ({{this.quotJsqrZyFileNum}}) + + + + + + + + + + +
+
+ 其他协助 + + + + + + + + + + + 上传文件 ({{this.quotJsqrQtFileNum}}) + + + + + + + + + + +
+