yuansh 1 ano atrás
pai
commit
e5b8501373

+ 39 - 0
src/components/tools/UserMenu.vue

@@ -84,6 +84,7 @@
     <user-password ref="userPassword"></user-password>
     <depart-select ref="departSelect" :closable="true" title="部门切换"></depart-select>
     <setting-drawer ref="settingDrawer" :closable="true" title="系统设置"></setting-drawer>
+   
   </div>
 </template>
 
@@ -173,9 +174,47 @@
         console.log('url = '+ window._CONFIG['staticDomainURL']+"/"+this.avatar())
         return window._CONFIG['staticDomainURL']+"/"+this.avatar()
       },
+       delCookie() {
+            var cookies = document.cookie.split(";");
+            for (var i = 0; i < cookies.length; i++) {
+              var cookie = cookies[i];
+              var eqPos = cookie.indexOf("=");
+              var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
+              document.cookie =
+                name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
+            }
+             console.log(cookies);
+            if (cookies.length > 0) {
+              for (var i = 0; i < cookies.length; i++) {
+                var cookie = cookies[i];
+                var eqPos = cookie.indexOf("=");
+                var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
+                var domain = location.host.substr(location.host.indexOf("."));
+                document.cookie =
+                  name +
+                  "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=" +
+                  domain;
+              }
+               console.log(cookies.length);
+            }
+          },
+
       handleLogout() {
+        // let serviceUrl = encodeURIComponent('http://www.myfitt.cn:18002/')
+        // let outUrl = window._CONFIG['casPrefixUrl']+"/logout?service="+serviceUrl;
+        // console.log(outUrl);
         const that = this
+        // // window.location.href = window._CONFIG['casPrefixUrl']+"/logout?service="+serviceUrl;
+        
+        // var newWin = window.open(outUrl,"_blank");
+        // // window.open('https://www.baidu.com/','_self');
+        // // window.opener=null;
+        // this.delCookie();//调用 
 
+        // setTimeout(() => {
+        //   newWin.close();
+        //   newWin.focus();
+        // }, 16)
         this.$confirm({
           title: '提示',
           content: '真的要注销登录吗 ?',

+ 1 - 0
src/main.js

@@ -12,6 +12,7 @@ import Viser from 'viser-vue'
 import 'k-form-design/lib/k-form-design.css'
 import 'ant-design-vue/dist/antd.less' // or 'ant-design-vue/dist/antd.less'
 
+import '@/utils/autoAlert'
 import '@/permission' // permission control
 import '@/utils/filter' // base filter
 import Print from 'vue-print-nb-jeecg'

+ 28 - 0
src/mixins/JeecgListMixin.js

@@ -270,6 +270,34 @@ export const JeecgListMixin = {
         }
       })
     },
+    handleExportXls3(fileName,param){
+      if(!fileName || typeof fileName != "string"){
+        fileName = "导出文件"
+      }
+      if(this.selectedRowKeys && this.selectedRowKeys.length>0){
+        param['selections'] = this.selectedRowKeys.join(",")
+      }
+      console.log("导出参数",param)
+      downFile(this.url.exportXlsUrl,param).then((data)=>{
+        if (!data) {
+          this.$message.warning("文件下载失败")
+          return
+        }
+        if (typeof window.navigator.msSaveBlob !== 'undefined') {
+          window.navigator.msSaveBlob(new Blob([data],{type: 'application/vnd.ms-excel'}), fileName+'.xls')
+        }else{
+          let url = window.URL.createObjectURL(new Blob([data],{type: 'application/vnd.ms-excel'}))
+          let link = document.createElement('a')
+          link.style.display = 'none'
+          link.href = url
+          link.setAttribute('download', fileName+'.xls')
+          document.body.appendChild(link)
+          link.click()
+          document.body.removeChild(link); //下载完成移除元素
+          window.URL.revokeObjectURL(url); //释放掉blob对象
+        }
+      })
+    },
     /* 导入 */
     handleImportExcel(info){
       if (info.file.status !== 'uploading') {

+ 187 - 0
src/utils/autoAlert.js

@@ -0,0 +1,187 @@
+import Vue from 'vue'
+/*
+*  使用方法
+*  将以下代码复制到一个drag.js文件中,然后在入口文件main.js中导入:import ‘./util/drag.js’;
+*  给elementUI的dialog上加上 v-dialogDrag 指令就可以实现弹窗的全屏和拉伸了。
+*  给dialog设置 :close-on-click-modal="false" , 禁止点击遮罩层关闭弹出层
+*  如果是form表单,不要将提交等按钮放置el-form-item,以免在上下拉伸时被隐藏
+*/
+// v-dialogDrag: 弹窗拖拽+水平方向伸缩
+Vue.directive('dialogDrag', {
+  bind(el, binding, vnode, oldVnode) {
+    // 弹框可拉伸最小宽高
+    const minWidth = 400
+    const minHeight = 300
+    // 初始非全屏
+    let isFullScreen = false
+    // 当前顶部高度
+    let nowMarginTop = 0
+    // 获取弹框头部(这部分可双击全屏)
+    const dialogHeaderEl = el.querySelector('.el-dialog__header')
+    // 弹窗
+    const dragDom = el.querySelector('.el-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)
+    const 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 nowWidth = 0
+    // let nowHight = 0
+    // 双击头部全屏效果
+    dialogHeaderEl.ondblclick = e => {
+      if (isFullScreen === false) {
+        // nowHight = dragDom.clientHeight
+        nowWidth = dragDom.clientWidth
+        nowMarginTop = dragDom.style.marginTop
+        dragDom.style.left = 0
+        dragDom.style.top = 0
+        dragDom.style.height = '100VH'
+        dragDom.style.width = '100VW'
+        dragDom.style.marginTop = 0
+        isFullScreen = true
+        dialogHeaderEl.style.cursor = 'initial'
+        dialogHeaderEl.onmousedown = null
+      } else {
+        dragDom.style.height = 'auto'
+        dragDom.style.width = nowWidth + 'px'
+        dragDom.style.marginTop = nowMarginTop
+        isFullScreen = false
+        dialogHeaderEl.style.cursor = 'move'
+        dialogHeaderEl.onmousedown = moveDown
+      }
+    }
+    dragDom.onmousemove = function(e) {
+      // let moveE = e
+      if (
+        e.clientX > dragDom.offsetLeft + dragDom.clientWidth - 10 ||
+        dragDom.offsetLeft + 10 > e.clientX
+      ) {
+        dragDom.style.cursor = 'w-resize'
+      } else if (
+        el.scrollTop + e.clientY >
+        dragDom.offsetTop + dragDom.clientHeight - 10
+      ) {
+        dragDom.style.cursor = 's-resize'
+      } else {
+        dragDom.style.cursor = 'default'
+
+        dragDom.onmousedown = null
+      }
+      dragDom.onmousedown = e => {
+        const clientX = e.clientX
+        const clientY = e.clientY
+        const elW = dragDom.clientWidth
+        const elH = dragDom.clientHeight
+        const EloffsetLeft = dragDom.offsetLeft
+        const EloffsetTop = dragDom.offsetTop
+        dragDom.style.userSelect = 'none'
+        const ELscrollTop = el.scrollTop
+        // 判断点击的位置是不是为头部
+        if (
+          clientX > EloffsetLeft &&
+          clientX < EloffsetLeft + elW &&
+          clientY > EloffsetTop &&
+          clientY < EloffsetTop + 100
+        ) {
+          // 如果是头部在此就不做任何动作,以上有绑定dialogHeaderEl.onmousedown = moveDown;
+        } else {
+          document.onmousemove = function(e) {
+            // 移动时禁用默认事件
+            e.preventDefault()
+            // 左侧鼠标拖拽位置
+            if (clientX > EloffsetLeft && clientX < EloffsetLeft + 10) {
+              // 往左拖拽
+              if (clientX > e.clientX) {
+                dragDom.style.width = elW + (clientX - e.clientX) * 2 + 'px'
+              }
+              // 往右拖拽
+              if (clientX < e.clientX) {
+                if (dragDom.clientWidth < minWidth) {
+                  console.log()
+                } else {
+                  dragDom.style.width = elW - (e.clientX - clientX) * 2 + 'px'
+                }
+              }
+            }
+            // 右侧鼠标拖拽位置
+            if (
+              clientX > EloffsetLeft + elW - 10 &&
+              clientX < EloffsetLeft + elW
+            ) {
+              // 往左拖拽
+              if (clientX > e.clientX) {
+                if (dragDom.clientWidth < minWidth) {
+                  console.log()
+                } else {
+                  dragDom.style.width = elW - (clientX - e.clientX) * 2 + 'px'
+                }
+              }
+              // 往右拖拽
+              if (clientX < e.clientX) {
+                dragDom.style.width = elW + (e.clientX - clientX) * 2 + 'px'
+              }
+            }
+            // 底部鼠标拖拽位置
+            if (
+              ELscrollTop + clientY > EloffsetTop + elH - 20 &&
+              ELscrollTop + clientY < EloffsetTop + elH
+            ) {
+              // 往上拖拽
+              if (clientY > e.clientY) {
+                if (dragDom.clientHeight < minHeight) {
+                  console.log()
+                } else {
+                  dragDom.style.height = elH - (clientY - e.clientY) * 2 + 'px'
+                }
+              }
+              // 往下拖拽
+              if (clientY < e.clientY) {
+                dragDom.style.height = elH + (e.clientY - clientY) * 2 + 'px'
+              }
+            }
+          }
+          // 拉伸结束
+          document.onmouseup = function(e) {
+            document.onmousemove = null
+
+            document.onmouseup = null
+          }
+        }
+      }
+    }
+  }
+})

+ 88 - 0
src/utils/dragModal.js

@@ -0,0 +1,88 @@
+import Vue from 'vue'
+// 弹窗拖拽属性
+/**
+ * @directive 自定义属性
+ * @todo 弹窗拖拽属性
+ * @desc 使用在弹窗内部任意加载的html添加v-drag
+ * @param .ant-modal-header 弹窗头部用来拖动的属性
+ * @param .ant-modal 拖动的属性
+*/
+Vue.directive('drag', (el, binding, vnode, oldVnode) => {
+  // inserted (el, binding, vnode, oldVnode) {
+  Vue.nextTick(() => {
+    const isThemeModal = el.classList.contains('grid-theme')
+    const dialogHeaderEl = isThemeModal ? el.querySelector('.ant-tabs-bar') : document.querySelector('.ant-modal-header')
+    const dragDom = isThemeModal ? el.querySelector('.ant-modal') : document.querySelector('.ant-modal')
+    // dialogHeaderEl.style.cursor = 'move';
+    dialogHeaderEl.style.cssText += ';cursor:move;'
+    // dragDom.style.cssText += ';top:0px;'
+ 
+    // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
+    const sty = (function () {
+      if (window.document.currentStyle) {
+        return (dom, attr) => dom.currentStyle[attr]
+      } else {
+        return (dom, attr) => getComputedStyle(dom, false)[attr]
+      }
+    })()
+ 
+    dialogHeaderEl.onmousedown = (e) => {
+      // 鼠标按下,计算当前元素距离可视区的距离
+      const disX = e.clientX - dialogHeaderEl.offsetLeft
+      const disY = e.clientY - dialogHeaderEl.offsetTop
+ 
+      const screenWidth = document.body.clientWidth // body当前宽度
+      const screenHeight = document.documentElement.clientHeight // 可见区域高度(应为body高度,可某些环境下无法获取)
+ 
+      const dragDomWidth = dragDom.offsetWidth // 对话框宽度
+      const dragDomheight = dragDom.offsetHeight // 对话框高度
+ 
+      const minDragDomLeft = dragDom.offsetLeft
+      const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth - (isThemeModal ? 10 : 0)
+ 
+      const minDragDomTop = dragDom.offsetTop
+      const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight - (isThemeModal ? 10 : 0)
+ 
+      // 获取到的值带px 正则匹配替换
+      let styL = sty(dragDom, 'left')
+      let styT = sty(dragDom, 'top')
+ 
+      // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
+      if (styL.includes('%')) {
+        // eslint-disable-next-line no-useless-escape
+        styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)
+        // eslint-disable-next-line no-useless-escape
+        styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)
+      } else {
+        styL = +styL.replace(/\px/g, '')
+        styT = +styT.replace(/\px/g, '')
+      };
+ 
+      document.onmousemove = function (e) {
+        // 通过事件委托,计算移动的距离
+        let left = e.clientX - disX
+        let top = e.clientY - disY
+ 
+        // 边界处理
+        if (-(left) > minDragDomLeft) {
+          left = -(minDragDomLeft)
+        } else if (left > maxDragDomLeft) {
+          left = maxDragDomLeft
+        }
+ 
+        if (-(top) > minDragDomTop) {
+          top = -(minDragDomTop)
+        } else if (top > maxDragDomTop) {
+          top = maxDragDomTop
+        }
+        // 移动当前元素
+        dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
+      }
+ 
+      document.onmouseup = function (e) {
+        document.onmousemove = null
+        document.onmouseup = null
+      }
+    }
+  })
+})

+ 13 - 2
src/views/oa/IncidentTicketList.vue

@@ -99,7 +99,7 @@
     <!-- 操作按钮区域 -->
     <div class="table-operator">
       <!-- <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> -->
-      <a-button type="primary" icon="download" @click="handleExportXls('森_工厂质量事故单-主表')">导出</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls4('森_工厂质量事故单-主表')">导出</a-button>
      <!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
         <a-button type="primary" icon="import">导入</a-button>
       </a-upload>
@@ -383,7 +383,18 @@ import moment from 'moment'
         return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
       }
     },
-    methods: {
+    methods: { 
+      handleExportXls4(fileName){
+          
+          var param = Object.assign({}, this.queryParam, null);
+          param.field = this.getQueryField();
+          param.pageNo = this.ipagination.current;
+          param.pageSize = this.ipagination.pageSize;
+          param.state = (param.state&&param.state!=='')?param.state.toString():"";
+          param.informant =(param.informant&&param.informant!=='')?param.informant.toString():"";
+          param.processor = (param.processor&&param.processor!=='')?param.processor.toString():"";
+          return this.handleExportXls3(fileName,param)
+    },
       getQueryParams() {
         this.toggleSearchStatus = false
         var param = Object.assign({}, this.queryParam, null);

+ 31 - 11
src/views/oa/modules/IncidentTicketModalDetail.vue

@@ -346,7 +346,7 @@
                                 <td class="tdOne">成衣销售订单号</td>
                                 <td class="tdOne">{{ formState.garmentSalesOrder }}</td>
                                 <td class="tdOne">款号</td>
-                                <td class="tdOne">{{ formState.styleNumber }}</td>
+                                <td class="tdOne" style="width: 10%;word-break: break-all">{{ formState.styleNumber }}</td>
                                 <td class="tdOne">物料</td>
                                 <td class="tdOne">{{ formState.material }}</td>
                             </tr>
@@ -398,9 +398,10 @@
                         <thead>
                         </thead>
                         <tbody>
-                            <tr style="height: 50px;">
+                            <tr style="height:30px;">
                                 <td class="tdOne" style="width: 1%;">财务备注</td>
-                                <td class="tdOne" colspan="7" style="text-align: left;padding-left: 1%;">
+                                <td class="tdOne" colspan="5" style="text-align: left;padding-left: 1%;">
+                                  
                                   <textarea  style="width: 100%;border: none;overflow: hidden;" readOnly>{{ formState.financeRemark }}</textarea>
                                   <!-- {{  formState.financeRemark }} -->
                                   <!-- <input type="text"   v-text="formState.financeRemark" /> -->
@@ -860,20 +861,38 @@
         this.$nextTick(() => {
         const html = window.document.getElementById('printBox').innerHTML 
          const win = window.open();
-         const style = '<style>\n'
+         const style = '<style> textarea{width:200px} \n'
          + 'table{width: 100% !important;border-collapse: collapse;border-spacing: 0;overflow-x:hidden;}\n'
-         + 'th,td{width:5%;height: 18px;border: 1px solid #999;font-size: 12px;color: #333;max-width:2000px;text-align: center;}\n'
+         + 'th,td{width:5%;height: 18px;border: 1px solid #999;font-size: 12px;color: #333;max-width:1000px;text-align: center;}\n'
          + 'th{color: #333}\n'
+        + ' \n'
         //  +'@media print{@page {size:landscape}}'
          + '</style>';;
          win.document.write(style+html);
          win.focus();
          setTimeout(function(){
-          let textArea = win.document.getElementsByTagName('textarea')
-        for (let i = 0; i < textArea.length; i++) {
-        textArea[i].style.height = 'auto' // 先设置成auto,再设置高度,删除文字的时候高度才会改变
-         textArea[i].style.height = textArea[i].scrollHeight+30 + 'px'
-  }
+            let textArea = win.document.getElementsByTagName('textarea')
+   
+            for (let i = 0; i < textArea.length; i++) {
+             
+              textArea[i].style.height = '100px';// 先设置成auto,再设置高度,删除文字的时候高度才会改变
+              if(textArea[i].value.length > 1000){
+                textArea[i].style.height = textArea[i].scrollHeight+200 + 'px'
+              }else if(textArea[i].value.length > 900){
+                textArea[i].style.height = textArea[i].scrollHeight+175 + 'px'
+              }else if(textArea[i].value.length > 750){
+                textArea[i].style.height = textArea[i].scrollHeight+150 + 'px'
+              }else if(textArea[i].value.length > 600){
+                textArea[i].style.height = textArea[i].scrollHeight+120 + 'px'
+              }else if(textArea[i].value.length > 300){
+                textArea[i].style.height = textArea[i].scrollHeight+80 + 'px'
+              }else if(textArea[i].value.length > 200){
+                textArea[i].style.height = textArea[i].scrollHeight+60 + 'px'
+              }else{
+                 textArea[i].style.height = textArea[i].scrollHeight+30 + 'px'
+              }
+             
+            } 
             win.print();
             win.close();
          },1000)
@@ -940,6 +959,7 @@
 }
 /deep/ .ant-table td {
     white-space: break-spaces !important;
-    word-break: break-word;
+    // word-break: break-word;
+    word-break: break-all;
 }
 </style>

+ 6 - 5
src/views/system/modules/SelectUserListModal.vue

@@ -200,7 +200,8 @@
         })
       },
       getQueryParams(){
-        let param = Object.assign({}, this.queryParam,this.isorter);
+        // let param = Object.assign({}, this.queryParam,this.isorter);
+        let param = Object.assign({}, this.queryParam,{});
         param.field = this.getQueryField();
         //--update-begin----author:scott---date:20190818------for:新建公告时指定特定用户翻页错误SelectUserListModal #379----
         // param.current = this.ipagination.current;
@@ -243,10 +244,10 @@
       },
       handleTableChange(pagination, filters, sorter){
         //TODO 筛选
-        if (Object.keys(sorter).length>0){
-          this.isorter.column = sorter.field;
-          this.isorter.order = "ascend"==sorter.order?"asc":"desc"
-        }
+        // if (Object.keys(sorter).length>0){
+        //   this.isorter.column = sorter.field;
+        //   this.isorter.order = "ascend"==sorter.order?"asc":"desc"
+        // }
         this.ipagination = pagination;
         this.loadData();
       },