Browse Source

Merge branch 'master' of http://git.echepei.com/wengyuwen/anpinjingyuan-ui

wengyuwen 4 years ago
parent
commit
987bff94f7

+ 1 - 1
package.json

@@ -40,7 +40,7 @@
     "axios": "^0.21.1",
     "clipboard": "2.0.6",
     "core-js": "3.8.1",
-    "echarts": "4.9.0",
+    "echarts": "^4.9.0",
     "element-ui": "2.15.0",
     "file-saver": "2.0.4",
     "fuse.js": "6.4.3",

+ 49 - 1
src/api/purchaseRequest/index.js

@@ -15,6 +15,33 @@ export function viewSingle(query) {
     method: 'get',
   })
 }
+// 查询项目名称
+export function queryItem(query) {
+  return request({
+    url: '/anpin/project/projectName',
+    method: 'post',
+    data: {
+      projectName:query
+    }
+  })
+}
+// 查询供应商开票单位付款单位
+export function company(query) {
+  return request({
+    url: '/basicdata/corps/getCorpName',
+    method: 'post',
+    data: {
+      fTypeid:query
+    }
+  })
+}
+// 查询仓库
+export function warehouse() {
+  return request({
+    url: '/basicdata/warehouse/lists',
+    method: 'get'
+  })
+}
 // 查询品名数据
 export function productName(query) {
   return request({
@@ -31,7 +58,7 @@ export function submit(data) {
     data:data
   })
 }
-//保存详情页面内容
+//查询详情页面内容能否删除
 export function deleteQuery(fId,time) {
   return request({
     url: '/anpin/stockControl/judge',
@@ -42,3 +69,24 @@ export function deleteQuery(fId,time) {
     }
   })
 }
+//删除详情单条列表
+export function listDelete(fId) {
+  return request({
+    url: '/anpin/stockControl/removeFee/' + fId,
+    method: 'delete'
+  })
+}
+//删除整个表前的查询
+export function tableDeleteQuery(fIds) {
+  return request({
+    url: '/anpin/stockControl/' + fIds,
+    method: 'delete'
+  })
+}
+//确认删除整个表
+export function confirmDeletion(fIds) {
+  return request({
+    url: '/anpin/stockControl/remove/' + fIds,
+    method: 'delete'
+  })
+}

+ 25 - 6
src/combination/formComponent.vue

@@ -2,32 +2,47 @@
   <div>
     <el-form :model="form" ref="form" style="display:flex;flex-wrap: wrap">
       <el-form-item
-        v-for="(item,index) in formOption" :key="index" v-if="(index+1) <= inDex"
+        v-for="(item,index) in formOption" :key="item.index" v-if="(index+1) <= inDex"
         :prop="item.label"
         :label="item.name"
         :label-width="item.labelSize + 'px'"
         :rules="item.rules"
       >
-        <el-input v-model="form[item.label]" v-if="item.inputType == 2" :style="{ width: item.width + 'px' }" size="small" :placeholder="'请输入'+item.name"></el-input>
+        <el-input v-model="form[item.label]" :onkeyup="item.onabort" :disabled="item.disabled" v-if="item.inputType == 2" :style="{ width: item.width + 'px' }" size="small" :placeholder="'请输入'+item.name"></el-input>
         <span v-if="item.inputType == 1">
-          <el-select v-model="form[item.label]" slot="prepend" placeholder="请选择">
-            <el-option v-for="(item,index) in dataList[item.label]" :key="index" :label="item.fName" :value="item.fId"></el-option>
+          <el-select v-model="form[item.label]" :disabled="item.disabled" :style="{ width: item.width + 'px' }" filterable slot="prepend" @change="change(item.label,dataList[item.label],form[item.label])" placeholder="请选择">
+            <el-option v-for="(item,index) in dataList[item.label]" :key="index" :label="item.label" :value="item.value"></el-option>
           </el-select>
         </span>
         <el-input
           v-if="item.inputType == 4"
           type="textarea"
+          :onkeyup="item.onabort"
+          :style="{ width: item.width + 'px' }"
           autosize
+          :disabled="item.disabled"
           placeholder="请输入内容"
           v-model="form[item.label]">
         </el-input>
         <div style="width: 100%;display:flex;" v-if="item.inputType == 5">
-          <el-input v-model="number" placeholder="请输入内容" @input="spellNumbers(item.label)"></el-input>
+          <el-input v-model="number" :onkeyup="item.onabort" :style="{ width: item.width + 'px' }" placeholder="请输入内容" :disabled="item.disabled" @input="spellNumbers(item.label)"></el-input>
           <span style="padding-left: 10px;padding-right: 10px">至</span>
-          <el-input v-model="numBer" placeholder="请输入内容" @input="spellNumbers(item.label)"></el-input>
+          <el-input v-model="numBer" :onkeyup="item.onabort" placeholder="请输入内容" :disabled="item.disabled" @input="spellNumbers(item.label)"></el-input>
         </div>
         <el-date-picker
+          v-if="item.inputType == 6"
+          :disabled="item.disabled"
+          v-model="form[item.label]"
+          size="small"
+          :style="{ width: item.width + 'px' }"
+          value-format="yyyy-MM-dd"
+          type="date"
+          placeholder="选择日期">
+        </el-date-picker>
+        <el-date-picker
+          :disabled="item.disabled"
           v-if="item.inputType == 3"
+          :style="{ width: item.width + 'px' }"
           v-model="form[item.label]"
           type="daterange"
           value-format="yyyy-MM-dd"
@@ -58,6 +73,10 @@ export default {
     spellNumbers(name){
       this.form[name] = [this.number,this.numBer]
     },
+    //选中后触发
+    change(name,list,id){
+      this.$emit('selectTrigger',name,list,id)
+    },
     //表单验证
     submitForm(form) {
       this.$refs["form"].validate((valid) => {

+ 11 - 15
src/combination/listComponent.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <div style="width: 100%;height: 40px;">
-      <div style="margin: 0 12px;float: left;">
+      <div style="margin: 10px 12px;float: left;">
         <el-button
           v-for="item in customButton"
           :type="item.type"
@@ -13,7 +13,7 @@
           {{ item.name }}
         </el-button>
       </div>
-      <div class="tabSetting">
+      <div class="tabSetting" style="float: right;margin: 10px 0">
         <div style="margin-left:10px;float: right">
           <el-button
             icon="el-icon-setting"
@@ -28,7 +28,7 @@
           @queryTable="getList"
         ></right-toolbar>
       </div>
-      <div style="margin-right:10px;float: right" v-if="isItHidden">
+      <div style="margin:10px 10px 0px 0px;float: right;" v-if="isItHidden">
         <el-button
           type="success"
           plain
@@ -60,7 +60,7 @@
       :show-summary="tatolLabel?true:false"
       :summary-method="listTotal"
     >
-      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column type="selection" width="60" align="center"/>
       <el-table-column
         v-for="(item,index) in queryList.columnList"
         :key="index"
@@ -92,7 +92,7 @@
                 :value="item.value"
               ></el-option>
             </el-select>
-            <el-input v-if="item.changeable == 2" @input="totalAmount" :disabled="item.disabled" v-model="scope.row[item.label]" placeholder="请输入内容" :onkeyup="item.onabort"></el-input>
+            <el-input v-if="item.changeable == 2" @input="totalAmount(scope)" :disabled="item.disabled" v-model="scope.row[item.label]" placeholder="请输入内容" :onkeyup="item.onabort"></el-input>
             <el-date-picker
               v-if="item.changeable == 3"
               v-model="scope.row[item.label]"
@@ -175,17 +175,10 @@ export default {
     }
   },
   watch:{
-    // 'queryList.columnList':(newValue,oldValue){
-    //   console.log(setRowList)
-    //   // this.initData()
-    // }
     queryList: function (newValue,oldValue) {
       console.log(newValue,oldValue)
       this.queryList.columnList = newValue.columnList
     },
-    listData: function (newValue,oldValue) {
-      console.log(newValue,oldValue)
-    },
   },
   created() {
     console.log(this.listStyle)
@@ -193,9 +186,11 @@ export default {
     console.log(this.queryList.columnList.length)
   },
   methods: {
-    totalAmount(){
-      this.$emit('totalAmount')
+    //输入框数据变动时触发
+    totalAmount(scope){
+      this.$emit('totalAmount',scope)
     },
+    //合计
     listTotal(param) {
       const { columns, data } = param
       const sums = []
@@ -277,7 +272,8 @@ export default {
       resetModule(this.data).then((res) => {
         if (res.code == 200) {
           this.showSetting = false;
-          this.queryList.columnList = this.listStyle;
+          this.listStyle.forEach(item=>item.checked = 0)
+          this.queryList.columnList = this.setRowList =this.listStyle;
         }
       });
     },

+ 163 - 0
src/combination/plugs/print.js

@@ -0,0 +1,163 @@
+// 打印类属性、方法定义
+/* eslint-disable */
+const Print = function (dom, options) {
+  if (!(this instanceof Print)) return new Print(dom, options);
+
+  this.options = this.extend({
+    'noPrint': '.no-print'
+  }, options);
+
+  if ((typeof dom) === "string") {
+    this.dom = document.querySelector(dom);
+  } else {
+    this.isDOM(dom)
+    this.dom = this.isDOM(dom) ? dom : dom.$el;
+  }
+
+  this.init();
+};
+Print.prototype = {
+  init: function () {
+    var content = this.getStyle() + this.getHtml();
+    this.writeIframe(content);
+  },
+  extend: function (obj, obj2) {
+    for (var k in obj2) {
+      obj[k] = obj2[k];
+    }
+    return obj;
+  },
+
+  getStyle: function () {
+    var str = "",
+      styles = document.querySelectorAll('style,link');
+    for (var i = 0; i < styles.length; i++) {
+      str += styles[i].outerHTML;
+    }
+    str += "<style>" + (this.options.noPrint ? this.options.noPrint : '.no-print') + "{display:none;}</style>";
+
+    return str;
+  },
+
+  getHtml: function () {
+    var inputs = document.querySelectorAll('input');
+    var textareas = document.querySelectorAll('textarea');
+    var selects = document.querySelectorAll('select');
+
+    for (var k = 0; k < inputs.length; k++) {
+      if (inputs[k].type == "checkbox" || inputs[k].type == "radio") {
+        if (inputs[k].checked == true) {
+          inputs[k].setAttribute('checked', "checked")
+        } else {
+          inputs[k].removeAttribute('checked')
+        }
+      } else if (inputs[k].type == "text") {
+        inputs[k].setAttribute('value', inputs[k].value)
+      } else {
+        inputs[k].setAttribute('value', inputs[k].value)
+      }
+    }
+
+    for (var k2 = 0; k2 < textareas.length; k2++) {
+      if (textareas[k2].type == 'textarea') {
+        textareas[k2].innerHTML = textareas[k2].value
+      }
+    }
+
+    for (var k3 = 0; k3 < selects.length; k3++) {
+      if (selects[k3].type == 'select-one') {
+        var child = selects[k3].children;
+        for (var i in child) {
+          if (child[i].tagName == 'OPTION') {
+            if (child[i].selected == true) {
+              child[i].setAttribute('selected', "selected")
+            } else {
+              child[i].removeAttribute('selected')
+            }
+          }
+        }
+      }
+    }
+    // 包裹要打印的元素
+    // fix: https://github.com/xyl66/vuePlugs_printjs/issues/36
+    let outerHTML = this.wrapperRefDom(this.dom).outerHTML
+    return outerHTML;
+  },
+  // 向父级元素循环,包裹当前需要打印的元素
+  // 防止根级别开头的 css 选择器不生效
+  wrapperRefDom: function (refDom) {
+    let prevDom = null
+    let currDom = refDom
+    // 判断当前元素是否在 body 中,不在文档中则直接返回该节点
+    if (!this.isInBody(currDom)) return currDom
+
+    while (currDom) {
+      if (prevDom) {
+        let element = currDom.cloneNode(false)
+        element.appendChild(prevDom)
+        prevDom = element
+      } else {
+        prevDom = currDom.cloneNode(true)
+      }
+
+      currDom = currDom.parentElement
+    }
+
+    return prevDom
+  },
+
+  writeIframe: function (content) {
+    var w, doc, iframe = document.createElement('iframe'),
+      f = document.body.appendChild(iframe);
+    iframe.id = "myIframe";
+    //iframe.style = "position:absolute;width:0;height:0;top:-10px;left:-10px;";
+    iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;');
+    w = f.contentWindow || f.contentDocument;
+    doc = f.contentDocument || f.contentWindow.document;
+    doc.open();
+    doc.write(content);
+    doc.close();
+    var _this = this
+    iframe.onload = function(){
+      _this.toPrint(w);
+      setTimeout(function () {
+        document.body.removeChild(iframe)
+      }, 100)
+    }
+  },
+
+  toPrint: function (frameWindow) {
+    try {
+      setTimeout(function () {
+        frameWindow.focus();
+        try {
+          if (!frameWindow.document.execCommand('print', false, null)) {
+            frameWindow.print();
+          }
+        } catch (e) {
+          frameWindow.print();
+        }
+        frameWindow.close();
+      }, 10);
+    } catch (err) {
+      console.log('err', err);
+    }
+  },
+  // 检查一个元素是否是 body 元素的后代元素且非 body 元素本身
+  isInBody: function (node) {
+    return (node === document.body) ? false : document.body.contains(node);
+  },
+  isDOM: (typeof HTMLElement === 'object') ?
+    function (obj) {
+      return obj instanceof HTMLElement;
+    } :
+    function (obj) {
+      return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';
+    }
+};
+const MyPlugin = {}
+MyPlugin.install = function (Vue, options) {
+  // 4. 添加实例方法
+  Vue.prototype.$print = Print
+}
+export default MyPlugin

+ 5 - 0
src/main.js

@@ -20,6 +20,8 @@ import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels,
 import Pagination from "@/components/Pagination";
 // 自定义表格工具扩展
 import RightToolbar from "@/components/RightToolbar"
+import echarts from "echarts";
+Vue.prototype.$echarts = echarts;
 //自定义列表组件
 import listComponent from '@/combination/listComponent'
 Vue.component('listComponent', listComponent)
@@ -29,6 +31,9 @@ import formComponent from '@/combination/formComponent'
 Vue.component('formComponent', formComponent)
 import draggable from "vuedraggable";
 Vue.component('draggable', draggable)
+
+import Print from '@/combination/plugs/print'
+Vue.use(Print) // 注册
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts
 Vue.prototype.getConfigKey = getConfigKey

File diff suppressed because it is too large
+ 911 - 514
src/views/index.vue


File diff suppressed because it is too large
+ 546 - 355
src/views/purchaseRequest/index.vue


Some files were not shown because too many files changed in this diff