Преглед на файлове

Merge branch 'purchaseDev' into 'dev'

Purchase dev

See merge request new-business/drp-web!217
黄梓星 преди 1 година
родител
ревизия
a9bb027ac7

+ 1 - 1
src/api/purchase/basic.js

@@ -41,7 +41,7 @@ export function delDivision(ids) {
 // 参照统一接口
 export function getRefer(data) {
   return request({
-    url: `/refer/query?pageSize=${data.pageSize}&pageNum=${data.pageNo}`,
+    url: `/refer/query?pageSize=1000&pageNum=1`,
     method: 'post',
     data: data
   })

+ 11 - 0
src/assets/styles/element-ui.scss

@@ -94,4 +94,15 @@
 
 .el-autocomplete-suggestion .el-autocomplete-suggestion__wrap{
   padding: 10px 0 0 0;
+}   
+
+ .el-super-table {
+  width: 100%;
+  margin: 20px 0 0 0;
+}
+ .el-super-table .el-table__cell {
+  height: 50px;
+}
+ .el-super-table td.el-table__cell {
+  border-right: 0;
 }

+ 4 - 2
src/components/DictTag/index.vue

@@ -2,12 +2,14 @@
   <div>
     <template v-for="(item, index) in options">
       <template v-if="values.includes(item.value)">
-        <span
+        <el-tag
           v-if="item.raw.listClass == 'default' || item.raw.listClass == ''"
+          type="primary"
+          :size="size"
           :key="item.value"
           :index="index"
           :class="item.raw.cssClass"
-          >{{ item.label }}</span
+          >{{ item.label }}</el-tag
         >
         <el-tag
           v-else

+ 8 - 0
src/components/Refers/refers.vue

@@ -35,6 +35,7 @@
               <el-table-column show-overflow-tooltip v-if="remark" prop="remark" header-align="center" align="center" min-width="90" label="备注"/>
               <el-table-column show-overflow-tooltip v-if="shortName" prop="shortName" header-align="center" align="center" min-width="90" label="简称"/>
               <el-table-column show-overflow-tooltip v-if="mneCode" prop="mneCode" header-align="center" align="center" min-width="90" label="助记码"/>
+              <el-table-column show-overflow-tooltip v-if="deptName" prop="deptName" header-align="center" align="center" min-width="90" label="部门"/>
             </el-table>
             <el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
               :current-page="searchForm.pageNo" :page-sizes="[5, 10, 15, 20]" :page-size="searchForm.pageSize"
@@ -67,6 +68,7 @@ export default {
       dataList: [],
       total: 0,
       orgName: false,
+      deptName: false,
       warehouseAttributes: false,
       warehouseCode: false,
       warehouseName: false,
@@ -137,6 +139,12 @@ export default {
           this.orgName = false
           this.warehouseAttributes = false
         }
+        // 人员内加部门
+        if(res.rows.length !== 0 && res.rows[0].deptId) {
+          this.deptName = true
+        } else {
+          this.deptName = false
+        }
         // 选择货位里面加仓库
         if(res.rows.length !== 0 && res.rows[0].warehouseCode) {
           this.warehouseCode = true

+ 51 - 0
src/components/draggable/index.vue

@@ -0,0 +1,51 @@
+<template>
+  <draggable
+    v-bind="$attrs"
+    v-on="$listeners"
+    v-model="innerValue"
+    animation="250"
+    forceFallback="true"
+  >
+    <transition-group>
+      <slot></slot>
+    </transition-group>
+  </draggable>
+</template>
+
+<script>
+import draggable from "vuedraggable";
+export default {
+  name: "Draggable",
+  props: {
+    // v-model
+    value: {
+      type: [Array],
+      require: true,
+    },
+    group: {
+      type: [String, Object],
+      require: true,
+    },
+  },
+  components: { draggable },
+  data() {
+    return {};
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.value;
+      },
+      set(value) {
+        this.$emit("input", value);
+      },
+    },
+  },
+  watch: {},
+  methods: {},
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style scoped></style>

+ 79 - 0
src/components/hide-table-column/index.vue

@@ -0,0 +1,79 @@
+<template>
+  <el-button v-bind="$attrs" v-on="$listeners" @click="onOpen">
+    隐藏列
+    <el-drawer size="20%" title="隐藏列" append-to-body :visible.sync="drawer">
+      <el-row :gutter="20" style="margin: 0">
+        <el-draggable
+          v-model="innerValue"
+          :group="{ item: 'key' }"
+          @start="onStart"
+          @end="onEnd"
+        >
+          <el-col
+            v-for="({ item, attr }, index) in innerValue"
+            :key="index"
+            :span="24"
+            style="
+              display: flex;
+              justify-content: space-between;
+              margin: 15px 0;
+            "
+          >
+            <span style="cursor: move">
+              <i class="el-icon-s-grid"></i>
+              {{ item.title }}
+            </span>
+            <el-switch v-model="attr.isHidden"> </el-switch>
+          </el-col>
+        </el-draggable>
+      </el-row>
+    </el-drawer>
+  </el-button>
+</template>
+
+<script>
+export default {
+  name: "HideTableColumn",
+  props: {
+    // v-model
+    value: {
+      type: [Array],
+      require: true,
+    },
+  },
+  components: {
+    ElDraggable: () => import("@/components/draggable/index.vue"),
+  },
+  data() {
+    return {
+      drawer: false,
+    };
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.value;
+      },
+      set(value) {
+        this.$emit("input", value);
+      },
+    },
+  },
+  watch: {},
+  methods: {
+    onOpen() {
+      this.drawer = true;
+    },
+    onStart() {
+      console.log("开始拖拽事件", this.innerValue);
+    },
+    onEnd() {
+      console.log("拖拽结束事件", this.innerValue);
+    },
+  },
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style scoped></style>

+ 128 - 0
src/components/super-search/index.vue

@@ -0,0 +1,128 @@
+<template>
+  <el-form
+    v-bind="$attrs"
+    v-on="$listeners"
+    :model="innerValue"
+    label-width="auto"
+    label-position="right"
+    @submit.native.prevent
+    style="padding: 20px 20px 0"
+  >
+    <el-row :gutter="20" style="display: flex; flex-wrap: wrap">
+      <el-col
+        v-for="({ item, attr }, index) in columns"
+        :key="index"
+        :span="item.span || 6"
+      >
+        <el-form-item :prop="item.key" :label="item.title">
+          <component
+            v-if="attr.is === 'el-input'"
+            v-bind="attr"
+            v-model="innerValue[item.key]"
+            @keyup.enter.native="$emit('submit')"
+            style="width: 100%"
+          >
+          </component>
+          <component
+            v-if="attr.is === 'el-select'"
+            v-bind="attr"
+            v-model="innerValue[item.key]"
+            @change="$emit('submit')"
+            style="width: 100%"
+          >
+            <template>
+              <el-option
+                v-for="item in dict.type[attr.dictName]"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </template>
+          </component>
+          <component
+            v-if="attr.is === 'el-date-picker'"
+            v-bind="attr"
+            v-model="innerValue[item.key]"
+            @change="$emit('submit')"
+            style="width: 100%"
+          >
+          </component>
+          <component
+            v-if="attr.is === 'el-popover-select-v2'"
+            v-bind="attr"
+            v-model="innerValue[item.key]"
+            :source.sync="innerValue"
+            @change="$emit('submit')"
+            style="width: 100%"
+          >
+          </component>
+          <component
+            v-if="attr.is === 'el-popover-multiple-select-v2'"
+            v-bind="attr"
+            v-model="innerValue[item.key]"
+            :source.sync="innerValue"
+            @change="$emit('submit')"
+            style="width: 100%"
+          >
+          </component>
+          <component
+            v-if="attr.is === 'el-popover-tree-select'"
+            v-bind="attr"
+            v-model="innerValue[item.key]"
+            :source.sync="innerValue"
+            @change="$emit('submit')"
+            style="width: 100%"
+          >
+          </component>
+        </el-form-item>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+export default {
+  name: "SuperSearch",
+  props: {
+    value: {
+      type: [Object],
+      require: true,
+    },
+    dict: {
+      type: [Object],
+      require: true,
+    },
+    columns: {
+      type: [Array],
+      require: true,
+    },
+  },
+  components: {
+    ElPopoverSelectV2: () => import("@/components/popover-select-v2/index.vue"),
+    ElPopoverMultipleSelectV2: () =>
+      import("@/components/popover-select-v2/multiple.vue"),
+    ElPopoverTreeSelect: () =>
+      import("@/components/popover-tree-select/index.vue"),
+  },
+  data() {
+    return {};
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.value;
+      },
+      set(value) {
+        this.$emit("input", value);
+      },
+    },
+  },
+  watch: {},
+  methods: {},
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style scoped></style>

+ 95 - 0
src/components/super-table/index.vue

@@ -0,0 +1,95 @@
+<template>
+  <el-table
+    v-if="innerValue.length"
+    v-bind="$attrs"
+    v-on="$listeners"
+    :data="innerValue"
+    border
+    stripe
+    highlight-current-row
+    class="el-super-table"
+  >
+    <slot></slot>
+    <el-table-column
+      v-for="({ item, attr }, index) in showColumns"
+      :key="index"
+      :prop="item.key"
+      :label="item.title"
+      :width="item.width || 225"
+      show-overflow-tooltip
+    >
+      <template slot-scope="scope">
+        <component
+          v-if="attr.is === 'el-dict-tag'"
+          v-bind="attr"
+          :size="$attrs.size"
+          :value="scope.row[item.key]"
+          :options="dict.type[attr.dictName]"
+        ></component>
+        <component
+          v-else-if="attr.is === 'el-file-preview'"
+          v-bind="attr"
+          v-model="scope.row[item.key]"
+        ></component>
+        <component
+          v-else-if="attr.is === 'el-computed-input-v2'"
+          v-bind="attr"
+          v-model="scope.row[item.key]"
+        ></component>
+        <component v-else is="span">{{
+          scope.row[item.key] || "--"
+        }}</component>
+      </template>
+    </el-table-column>
+  </el-table>
+  <el-empty v-else :image-size="200"></el-empty>
+</template>
+
+<script>
+export default {
+  name: "SuperTable",
+  props: {
+    value: {
+      type: [Array],
+      require: true,
+    },
+    dict: {
+      type: [Object],
+      require: true,
+    },
+    columns: {
+      type: [Array],
+      require: true,
+    },
+  },
+  components: {
+    ElDictTag: () => import("@/components/DictTag/index.vue"),
+    ElFilePreview: () => import("@/components/file-preview/index.vue"),
+    ElComputedInputV2: () => import("@/components/computed-input-v2/index.vue"),
+  },
+  data() {
+    return {};
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.value;
+      },
+      set(value) {
+        this.$emit("input", value);
+      },
+    },
+    showColumns: {
+      get() {
+        return this.columns.filter(({ attr }) => attr.isHidden);
+      },
+    },
+  },
+  watch: {},
+  methods: {},
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style scoped></style>

+ 15 - 7
src/utils/request.js

@@ -92,10 +92,7 @@ service.interceptors.response.use(
     // 未设置状态码则默认成功状态
     const code = res.data.code || 200;
     // 获取错误信息
-    const msg =
-      errorCode[code] ||
-      res.data.msg.replaceAll(/(\n|\r|\r\n|↵)/g, "<br/>") ||
-      errorCode["default"];
+    const msg = errorCode[code] || res.data.msg || errorCode["default"];
     // 二进制数据则直接返回
     if (
       res.request.responseType === "blob" ||
@@ -127,15 +124,26 @@ service.interceptors.response.use(
       }
       return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
     } else if (code === 500) {
-      Notification.error({ title: "error", message: msg });
+      Notification.error({
+        title: "error",
+        message: msg.replaceAll(/(\n|\r|\r\n|↵)/g, "<br/>"),
+        dangerouslyUseHTMLString: true,
+      });
       // Message({ message: msg, type: "error" });
       return Promise.reject(new Error(msg));
     } else if (code === 601) {
-      Notification.warning({ title: "error", message: msg });
+      Notification.warning({
+        title: "error",
+        message: msg.replaceAll(/(\n|\r|\r\n|↵)/g, "<br/>"),
+        dangerouslyUseHTMLString: true,
+      });
       // Message({ message: msg, type: "warning" });
       return Promise.reject("error");
     } else if (code !== 200) {
-      Notification.error({ title: msg });
+      Notification.error({
+        title: msg.replaceAll(/(\n|\r|\r\n|↵)/g, "<br/>"),
+        dangerouslyUseHTMLString: true,
+      });
       return Promise.reject("error");
     } else {
       return res.data;

+ 16 - 49
src/views/purchase/DemandSummary/index.vue

@@ -33,6 +33,16 @@
               </el-form-item>
             </el-col>
             <el-col :span="1.5">
+              <el-form-item label="生产厂家">
+                <el-input
+                v-model.trim="queryParams.manufacturer"
+                size="mini"
+                clearable
+                style="width: 200px"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="1.5">
               <el-form-item label="" label-width="20px">
                 <el-button type="primary" size="mini" icon="el-icon-search" plain @click="search">搜索</el-button>
                 <el-button size="mini" icon="el-icon-refresh" plain @click="reset">重置</el-button>
@@ -44,16 +54,6 @@
           <div v-show="expanded">
             <el-row :gutter="10">
               <el-col :span="1.5">
-                <el-form-item label="生产厂家">
-                  <el-input
-                  v-model.trim="queryParams.manufacturer"
-                  size="mini"
-                  clearable
-                  style="width: 200px"
-                  />
-                </el-form-item>
-              </el-col>
-              <el-col :span="1.5">
                 <el-form-item label="预测分类">
                   <el-select v-model="queryParams.forecastClassification" size="mini" style="width: 200px" clearable>
                     <el-option
@@ -69,39 +69,6 @@
                   </el-select>
                 </el-form-item>
               </el-col>
-              <!-- <el-col :span="1.5">
-                <el-form-item label="周期单位">
-                  <el-select v-model="queryParams.periodUnit" size="mini" style="width: 200px" clearable>
-                    <el-option
-                      v-for="dict in dict.type.sys_period_unit" :key="dict.value" :label="dict.label" :value="dict.value">
-                    </el-option>
-                  </el-select>
-                </el-form-item>
-              </el-col> -->
-            </el-row>
-
-            <el-row :gutter="10">
-              <!-- <el-col :span="1.5">
-                <el-form-item label="转请购单号">
-                  <el-input
-                  v-model="queryParams.zqgdh"
-                  size="mini"
-                  placeholder=""
-                  clearable
-                  style="width: 200px"
-                  />
-                </el-form-item>
-              </el-col> -->
-              <!-- <el-col :span="1.5">
-                <el-form-item label="业务部门">
-                  <el-select clearable size="mini" v-model="queryParams.departmentName" @focus="chooseRefer('DEPT_PARAM', true, '业务部门')" style="width: 200px">
-                    <el-option v-for="item in deptOptions" :key="item.id" :label="item.name" :value="item.id" />
-                  </el-select>
-                </el-form-item>
-              </el-col> -->
-            </el-row>
-
-            <el-row :gutter="10">
               <el-col :span="1.5">
                 <el-form-item label="注册人">
                   <el-input
@@ -121,6 +88,9 @@
                   </el-select>
                 </el-form-item>
               </el-col>
+            </el-row>
+
+            <el-row :gutter="10">
               <el-col :span="1.5">
                 <el-form-item label="单据来源">
                   <el-select v-model="queryParams.billSource" size="mini" style="width: 200px" clearable>
@@ -130,9 +100,6 @@
                   </el-select>
                 </el-form-item>
               </el-col>
-            </el-row>
-
-            <el-row :gutter="10">
               <el-col :span="1.5">
                 <el-form-item label="需求客户">
                   <el-select clearable size="mini" v-model="queryParams.customer" @focus="chooseRefer('CUSTOMER_PARAM', true, '需求客户')" style="width: 200px">
@@ -196,9 +163,6 @@
                   </el-date-picker>
                 </el-form-item>
               </el-col>
-            </el-row>
-
-            <el-row :gutter="10">
               <el-col :span="1.5">
                 <el-form-item label="采购需求单号">
                   <el-input
@@ -209,6 +173,9 @@
                   />
                 </el-form-item>
               </el-col>
+            </el-row>
+
+            <el-row :gutter="10">
               <el-col :span="1.5">
                 <el-form-item label="审批结束日期">
                   <el-date-picker

+ 144 - 144
src/views/purchase/PurchaseDemandList/add.vue

@@ -1197,152 +1197,152 @@ export default {
       console.log('复制的数组',rows);
       console.log('列表的数组',this.basicForm.puDemandItemList)
       let linArr = []
-      for (let i = 0; i<rows.length; i++) {
-        console.log('items',rows[i])
-        await getRefer({ type: 'MATERIAL_PARAM', code: rows[i] }).then(res => {
-          if (res.code === 200) {
-            let line = {
-              contacts: null,
-              id: null,
-              demandId: null,
-              status: null,
-              businessDept: null,
-              businessDeptName: null,
-              materialCategory: null,
-              buyer: null,
-              buyerName: null,
-              mateiralClassifyOne: null,
-              materialClassifyOneName: null,
-              materialClassifyTwo: null,
-              materialClassifyTwoName: null,
-              materialClassifyThree: null,
-              materialClassifyThreeName: null,
-              materialClassifyFour: null,
-              materialClassifyFourName: null,
-              materialCode: null,
-              material: null,
-              materialName: null,
-              classifyId: null,
-              specification: null,
-              unit: null,
-              unitName: null,
-              manufacturerName: null,
-              registrant: null,
-              puPeriod: null,
-              expiryUnit: null,
-              expiry: null,
-              minPackage: null,
-              minOrderQty: null,
-              minBatch: null,
-              safeStock: null,
-              averageQtyMonth: null,
-              qty: null,
-              adjustmentPersonal: null,
-              adjustmentTime: null,
-              manualRegulation: null,
-              updateCause: null,
-              reservedProportion: null,
-              reservedPeriod: null,
-              reservedQty: null,
-              demandPeriod: null,
-              forecastClassify: null,
-              onemonthAvgVolume: null,
-              threemonthAvgVolume: null,
-              deliveryDate: null,
-              isUrgency: this.basicForm.billType == 'JJXQ' ? 'Y' : 'N',
-              isReplenishment: this.basicForm.billType == 'BDXQ' ? 'Y' : 'N',
-              isBatchLock: 'N',
-              remark: null,
-              puRemark: null,
-              lastWarehouseQty: null,
-              resDemandQty: null,
-              lastWarehouse: null,
-              lastWarehouseName: null,
-              deliveryWarehouse: null,
-              deliveryWarehouseName: null,
-              lastAllocation: null,
-              lastAllocationName: null,
-              deliveryAllocation: null,
-              deliveryAllocationName: null,
-              passageOn: null,
-              puOrg: null,
-              purOrgName: null,
-              lastStockQty: null,
-              superiorCenterQty: null,
-              superiorAllotQty: null,
-              availableQty: null,
-              statusAllot: 'N',
-              additionalSupplier: null,
-              additionalSupplierName: null,
-              periodUnit: null,
-              demandCustomer: this.basicForm.customer,
-              demandCustomerName: this.basicForm.customerName,
-              businessDept: this.basicForm.demandDept,
-              businessDeptName: null,
-              lastStockOrg: null,
-              lastStockOrgName: null,
-              superiorStockOrg: null,
-              superiorStockOrgName: null,
-              allotCode: null,
-              deliveryAddress: null,
-              deliveryAddressName: null,
-              contacts: null,
-              contactsPhone: null,
-              address: null,
-              source: null,
-              priceType: 'order',
-              puManagerApprover: null,
-              puManagerApproverName: null,
-              processTime: null,
-              affirmer: null,
-              tenantId: null,
-              revision: null,
-              createBy: null,
-              createByName: null,
-              createTime: null,
-              updateBy: null,
-              updateByName: null,
-              updateTime: null,
-              delFlag: 0,
-              // 新增字段
-              model: null,
-              storageCondition: null,
-              transportationCondition: null,
-            }
-            line.businessDept = res.rows[0].businessDepartment
-            line.businessDeptName = res.rows[0].businessDepartmentName
-            line.materialCode = res.rows[0].code
-            line.material = res.rows[0].id
-            line.materialName = res.rows[0].name
-            line.classifyId = res.rows[0].classifyId
-            line.materialClassifyOneName = res.rows[0].oneClass
-            line.materialClassifyTwoName = res.rows[0].twoClass
-            line.materialClassifyThreeName = res.rows[0].threeClass
-            line.materialClassifyFourName = res.rows[0].fourClass
-            line.specification = res.rows[0].specification
-            line.model = res.rows[0].model
-            line.unit = res.rows[0].unitId
-            line.unitName = res.rows[0].unitIdName
-            line.registrant = res.rows[0].registrant
-            line.manufacturerName = res.rows[0].manufacturerIdName
-            line.puPeriod = res.rows[0].deliveryPeriod
-            line.expiry = res.rows[0].usefulLife
-            line.expiryUnit = res.rows[0].expiryUnitIdName
-            // line.minPackage = res.rows[0].usefulLife
-            line.minPackage = res.rows[0].minPackQty
-            line.minOrderQty = res.rows[0].minOrderQty
-            line.minBatch = res.rows[0].minBatchQty
-            line.safeStock = res.rows[0].safeStock
-            line.purOrgName = res.rows[0].purchasingOrganizationName
-            line.puOrg = res.rows[0].purchasingOrganization
-            // 物料存储条件和运输条件
-            line.transportationCondition = res.rows[0].transportationCondition
-            line.storageCondition = res.rows[0].storageCondition
-            linArr[i] = line
-          }
+      // for (let i = 0; i<rows.length; i++) {
+        // console.log('items',rows[i])
+        await getRefer({ type: 'MATERIAL_PARAM', materialCodeList: rows }).then(res => {
+          // if (res.code === 200) {
+          //   let line = {
+          //     contacts: null,
+          //     id: null,
+          //     demandId: null,
+          //     status: null,
+          //     businessDept: null,
+          //     businessDeptName: null,
+          //     materialCategory: null,
+          //     buyer: null,
+          //     buyerName: null,
+          //     mateiralClassifyOne: null,
+          //     materialClassifyOneName: null,
+          //     materialClassifyTwo: null,
+          //     materialClassifyTwoName: null,
+          //     materialClassifyThree: null,
+          //     materialClassifyThreeName: null,
+          //     materialClassifyFour: null,
+          //     materialClassifyFourName: null,
+          //     materialCode: null,
+          //     material: null,
+          //     materialName: null,
+          //     classifyId: null,
+          //     specification: null,
+          //     unit: null,
+          //     unitName: null,
+          //     manufacturerName: null,
+          //     registrant: null,
+          //     puPeriod: null,
+          //     expiryUnit: null,
+          //     expiry: null,
+          //     minPackage: null,
+          //     minOrderQty: null,
+          //     minBatch: null,
+          //     safeStock: null,
+          //     averageQtyMonth: null,
+          //     qty: null,
+          //     adjustmentPersonal: null,
+          //     adjustmentTime: null,
+          //     manualRegulation: null,
+          //     updateCause: null,
+          //     reservedProportion: null,
+          //     reservedPeriod: null,
+          //     reservedQty: null,
+          //     demandPeriod: null,
+          //     forecastClassify: null,
+          //     onemonthAvgVolume: null,
+          //     threemonthAvgVolume: null,
+          //     deliveryDate: null,
+          //     isUrgency: this.basicForm.billType == 'JJXQ' ? 'Y' : 'N',
+          //     isReplenishment: this.basicForm.billType == 'BDXQ' ? 'Y' : 'N',
+          //     isBatchLock: 'N',
+          //     remark: null,
+          //     puRemark: null,
+          //     lastWarehouseQty: null,
+          //     resDemandQty: null,
+          //     lastWarehouse: null,
+          //     lastWarehouseName: null,
+          //     deliveryWarehouse: null,
+          //     deliveryWarehouseName: null,
+          //     lastAllocation: null,
+          //     lastAllocationName: null,
+          //     deliveryAllocation: null,
+          //     deliveryAllocationName: null,
+          //     passageOn: null,
+          //     puOrg: null,
+          //     purOrgName: null,
+          //     lastStockQty: null,
+          //     superiorCenterQty: null,
+          //     superiorAllotQty: null,
+          //     availableQty: null,
+          //     statusAllot: 'N',
+          //     additionalSupplier: null,
+          //     additionalSupplierName: null,
+          //     periodUnit: null,
+          //     demandCustomer: this.basicForm.customer,
+          //     demandCustomerName: this.basicForm.customerName,
+          //     businessDept: this.basicForm.demandDept,
+          //     businessDeptName: null,
+          //     lastStockOrg: null,
+          //     lastStockOrgName: null,
+          //     superiorStockOrg: null,
+          //     superiorStockOrgName: null,
+          //     allotCode: null,
+          //     deliveryAddress: null,
+          //     deliveryAddressName: null,
+          //     contacts: null,
+          //     contactsPhone: null,
+          //     address: null,
+          //     source: null,
+          //     priceType: 'order',
+          //     puManagerApprover: null,
+          //     puManagerApproverName: null,
+          //     processTime: null,
+          //     affirmer: null,
+          //     tenantId: null,
+          //     revision: null,
+          //     createBy: null,
+          //     createByName: null,
+          //     createTime: null,
+          //     updateBy: null,
+          //     updateByName: null,
+          //     updateTime: null,
+          //     delFlag: 0,
+          //     // 新增字段
+          //     model: null,
+          //     storageCondition: null,
+          //     transportationCondition: null,
+          //   }
+          //   line.businessDept = res.rows[0].businessDepartment
+          //   line.businessDeptName = res.rows[0].businessDepartmentName
+          //   line.materialCode = res.rows[0].code
+          //   line.material = res.rows[0].id
+          //   line.materialName = res.rows[0].name
+          //   line.classifyId = res.rows[0].classifyId
+          //   line.materialClassifyOneName = res.rows[0].oneClass
+          //   line.materialClassifyTwoName = res.rows[0].twoClass
+          //   line.materialClassifyThreeName = res.rows[0].threeClass
+          //   line.materialClassifyFourName = res.rows[0].fourClass
+          //   line.specification = res.rows[0].specification
+          //   line.model = res.rows[0].model
+          //   line.unit = res.rows[0].unitId
+          //   line.unitName = res.rows[0].unitIdName
+          //   line.registrant = res.rows[0].registrant
+          //   line.manufacturerName = res.rows[0].manufacturerIdName
+          //   line.puPeriod = res.rows[0].deliveryPeriod
+          //   line.expiry = res.rows[0].usefulLife
+          //   line.expiryUnit = res.rows[0].expiryUnitIdName
+          //   // line.minPackage = res.rows[0].usefulLife
+          //   line.minPackage = res.rows[0].minPackQty
+          //   line.minOrderQty = res.rows[0].minOrderQty
+          //   line.minBatch = res.rows[0].minBatchQty
+          //   line.safeStock = res.rows[0].safeStock
+          //   line.purOrgName = res.rows[0].purchasingOrganizationName
+          //   line.puOrg = res.rows[0].purchasingOrganization
+          //   // 物料存储条件和运输条件
+          //   line.transportationCondition = res.rows[0].transportationCondition
+          //   line.storageCondition = res.rows[0].storageCondition
+          //   linArr[i] = line
+          // }
         })
         console.log('临时数组', linArr)
-      }
+      // }
       this.basicForm.puDemandItemList.push(...linArr)
       console.log('列表', this.basicForm.puDemandItemList)
       // this.basicForm.puDemandItemList.forEach(e => {

+ 18 - 21
src/views/purchase/PurchaseDemandList/index.vue

@@ -34,6 +34,13 @@
               </el-form-item>
             </el-col>
             <el-col :span="1.5">
+              <el-form-item label="需求人员">
+                <el-select clearable size="mini" v-model="queryParams.demandPersonal" @focus="chooseOrg('CONTACTS_PARAM', true, '需求人员')" style="width: 200px">
+                  <el-option v-for="item in personOptions" :key="item.id" :label="item.name" :value="item.code" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="1.5">
               <el-form-item label="" label-width="20px">
                 <el-button type="primary" size="mini" icon="el-icon-search" plain @click="searchList">搜索</el-button>
                 <el-button size="mini" icon="el-icon-refresh" plain @click="resetList">重置</el-button>
@@ -44,13 +51,6 @@
           <div v-show="expanded">
           <el-row :gutter="10">
             <el-col :span="1.5">
-              <el-form-item label="需求人员">
-                <el-select clearable size="mini" v-model="queryParams.demandPersonal" @focus="chooseOrg('CONTACTS_PARAM', true, '需求人员')" style="width: 200px">
-                  <el-option v-for="item in personOptions" :key="item.id" :label="item.name" :value="item.code" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="1.5">
               <el-form-item label="单据来源">
                 <el-select clearable v-model="queryParams.source" size="mini" style="width: 200px">
                   <el-option v-for="dict in dict.type.sys_bill_source" :key="dict.value" :label="dict.label" :value="dict.value">
@@ -66,9 +66,6 @@
                 </el-select>
               </el-form-item>
             </el-col>
-          </el-row>
-
-          <el-row :gutter="10">
             <el-col :span="1.5">
               <el-form-item label="需求部门">
                 <el-select clearable v-model="queryParams.demandDept" size="mini" @focus="chooseOrg('DEPT_PARAM', true, '需求部门')" style="width: 200px">
@@ -94,18 +91,8 @@
                 </el-date-picker>
               </el-form-item>
             </el-col>
-            <el-col :span="1.5">
-              <el-form-item label="备注">
-                <el-input
-                  v-model.trim="queryParams.remark"
-                  size="mini"
-                  clearable
-                  style="width: 200px"
-                />
-                </el-form-item>
-              </el-col>
           </el-row>
-
+          
           <el-row :gutter="10">
             <el-col :span="1.5">
               <el-form-item label="物料编码">
@@ -125,6 +112,16 @@
                 </el-select>
               </el-form-item>
             </el-col>
+            <el-col :span="1.5">
+              <el-form-item label="备注">
+                <el-input
+                  v-model.trim="queryParams.remark"
+                  size="mini"
+                  clearable
+                  style="width: 200px"
+                />
+                </el-form-item>
+              </el-col>
           </el-row>
 
           </div>

+ 24 - 15
src/views/purchase/apply/column.js

@@ -1,28 +1,37 @@
 export const TableColumns = [
-  { item: { key: "priceName", title: "价格名称" }, attr: {} },
-  { item: { key: "priceCode", title: "价格编码" }, attr: {} },
+  { item: { key: "priceName", title: "价格名称" }, attr: { isHidden: true } },
+  { item: { key: "priceCode", title: "价格编码" }, attr: { isHidden: true } },
   {
     item: { key: "status", title: "状态" },
-    attr: { dictName: "sys_status" },
+    attr: { is: "el-dict-tag", dictName: "sys_status", isHidden: true },
   },
-  { item: { key: "supplierName", title: "供应商" }, attr: {} },
-  { item: { key: "currencyName", title: "币种" }, attr: {} },
-  { item: { key: "explainStr", title: "价格合理性说明" }, attr: {} },
-  { item: { key: "buyerName", title: "采购员" }, attr: {} },
-  { item: { key: "puDeptName", title: "采购部门" }, attr: {} },
+  { item: { key: "supplierName", title: "供应商" }, attr: { isHidden: true } },
+  { item: { key: "currencyName", title: "币种" }, attr: { isHidden: true } },
+  {
+    item: { key: "explainStr", title: "价格合理性说明" },
+    attr: { isHidden: true },
+  },
+  { item: { key: "buyerName", title: "采购员" }, attr: { isHidden: true } },
+  { item: { key: "puDeptName", title: "采购部门" }, attr: { isHidden: true } },
   {
     item: { key: "file", title: "附件" },
-    attr: { component: "dr-file-preview" },
+    attr: { is: "el-file-preview", isHidden: true },
   },
-  { item: { key: "createByName", title: "创建人" }, attr: {} },
+  { item: { key: "createByName", title: "创建人" }, attr: { isHidden: true } },
   {
     item: { key: "isEffective", title: "是否已推价格" },
-    attr: { dictName: "is_effective" },
+    attr: { is: "el-dict-tag", dictName: "is_effective", isHidden: true },
+  },
+  {
+    item: { key: "effectiveDate", title: "生效日期" },
+    attr: { isHidden: true },
+  },
+  { item: { key: "id", title: "来源单据id" }, attr: { isHidden: true } },
+  { item: { key: "source", title: "来源单据号" }, attr: { isHidden: true } },
+  {
+    item: { key: "sourceType", title: "来源单据类型" },
+    attr: { isHidden: true },
   },
-  { item: { key: "effectiveDate", title: "生效日期" }, attr: {} },
-  { item: { key: "id", title: "来源单据id" }, attr: {} },
-  { item: { key: "source", title: "来源单据号" }, attr: {} },
-  { item: { key: "sourceType", title: "来源单据类型" }, attr: {} },
 ];
 
 export const SearchColumns = [

+ 27 - 141
src/views/purchase/apply/index.vue

@@ -11,18 +11,21 @@ export default {
     EditModel: () => import("./edit/index.vue"),
     SubmitModel: () => import("./submit/index.vue"),
     DeleteModel: () => import("./delete/index.vue"),
-    ElPopoverSelectV2: () => import("@/components/popover-select-v2/index.vue"),
+    ElHideTableColumnButton: () =>
+      import("@/components/hide-table-column/index.vue"),
+    ElSuperTable: () => import("@/components/super-table/index.vue"),
+    ElSuperSearch: () => import("@/components/super-search/index.vue"),
   },
   data() {
     return {
       size: "mini",
       loading: false,
       batching: false,
-      searchColumns: SearchColumns,
+      SearchColumns: SearchColumns,
       params: initParams(SearchColumns),
       tableData: [],
       selectData: [],
-      tableColumns: TableColumns,
+      TableColumns: TableColumns,
       page: { pageNum: 1, pageSize: 10, total: 0 },
     };
   },
@@ -41,19 +44,15 @@ export default {
         const rule1 = selectData.length === 1;
         const rule2 = selectData.length > 1;
         const rule3 = status === "0" || status === "3";
-        const copy = rule1;
-        const edit = rule1 && rule3;
-        const delt = rule1 ? rule1 && rule3 : rule2;
-        const subm = rule1 ? rule1 && rule3 : rule2;
         return {
           // 复 制
-          copy: copy,
+          copy: rule1,
           // 修 改
-          edit: edit,
+          edit: rule1 && rule3,
           // 删 除
-          delt: delt,
+          delt: rule1 ? rule1 && rule3 : rule2,
           // 审 核
-          subm: subm,
+          subm: rule1 ? rule1 && rule3 : rule2,
         };
       },
     },
@@ -133,24 +132,11 @@ export default {
       const { open } = this.$refs.AddModel;
       await open(id);
     },
-    hasPowerCopy(prop) {
-      return prop.length === 1;
-    },
     // 删 除
     async useDelete(prop) {
       const { open } = this.$refs.DeleteModel;
       await open(prop);
     },
-    hasPowerDelete(prop) {
-      if (prop.length === 1) {
-        const [{ status }] = prop;
-        if (status === "1") return false;
-        else if (status === "2") return false;
-        else return true;
-      } else {
-        return !!prop.length;
-      }
-    },
     // 编 辑
     async useEdit(prop) {
       const [{ id }] = prop;
@@ -168,16 +154,6 @@ export default {
       const { open } = this.$refs.SubmitModel;
       await open(prop, done);
     },
-    hasPowerSubmit(prop) {
-      if (prop.length === 1) {
-        const [{ status }] = prop;
-        if (status === "1") return false;
-        else if (status === "2") return false;
-        else return true;
-      } else {
-        return !!prop.length;
-      }
-    },
   },
 };
 </script>
@@ -195,48 +171,20 @@ export default {
       ref="DeleteModel"
       @success="useQuery(params, page)"
     ></delete-model>
-    <el-form
+    <el-super-search
+      v-model="params"
       :size="size"
-      :model="params"
-      label-width="auto"
-      label-position="right"
-      @submit.native.prevent
-    >
-      <el-row :gutter="20">
-        <el-col
-          v-for="column in searchColumns"
-          :key="column.item.title"
-          :span="column.item.span || 6"
-        >
-          <el-form-item :prop="column.item.key" :label="column.item.title">
-            <component
-              v-bind="column.attr"
-              v-model="params[column.item.key]"
-              :source.sync="params"
-              @change="useQuery(params, page)"
-              @keyup.enter.native="useQuery(params, page)"
-              style="width: 100%"
-            >
-              <template v-if="column.attr.dictName">
-                <el-option
-                  v-for="item in dict.type[column.attr.dictName]"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                >
-                </el-option>
-              </template>
-            </component>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
+      :dict="dict"
+      :columns="SearchColumns"
+      @submit="useQuery(params, page)"
+    ></el-super-search>
     <div style="padding: 0 20px; display: flex; justify-content: space-between">
       <div>
         <el-button :size="size" @click="useQuery(params, page)">
           查 询
         </el-button>
         <el-button :size="size" @click="useReset">重 置</el-button>
+        <el-divider direction="vertical"></el-divider>
         <el-button :size="size" @click="useAdd">新 增</el-button>
         <el-button
           v-show="$power.copy"
@@ -251,13 +199,6 @@ export default {
           @click="useEdit(selectData)"
           >编 辑</el-button
         >
-        <!-- <el-button
-        v-show="$power.delt"
-        :size="size"
-        @click="useDelete(selectData)"
-      >
-        删 除
-      </el-button> -->
         <el-button
           v-show="$power.delt"
           :size="size"
@@ -272,22 +213,19 @@ export default {
         >
       </div>
       <div>
-        <el-button
+        <el-button :size="size" @click="useBatch"> 批 量 </el-button>
+        <el-divider direction="vertical"></el-divider>
+        <el-hide-table-column-button
+          v-model="TableColumns"
           :size="size"
-          :icon="batching ? 'el-icon-close' : 'el-icon-check'"
-          @click="useBatch"
-        >
-          批 量
-        </el-button>
+        ></el-hide-table-column-button>
       </div>
     </div>
-    <el-table
-      v-if="tableData.length"
+    <el-super-table
+      v-model="tableData"
       :size="size"
-      :data="tableData"
-      border
-      stripe
-      highlight-current-row
+      :dict="dict"
+      :columns="TableColumns"
       @row-dblclick="useSee"
       @selection-change="useSelect"
       @row-click="useRowClick([$event])"
@@ -301,40 +239,7 @@ export default {
         :selectable="setSelectable"
       >
       </el-table-column>
-      <el-table-column width="55" align="center" type="index">
-        <template slot-scope="scope">
-          {{ scope.row.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column
-        v-for="(column, index) in tableColumns"
-        :key="index"
-        :prop="column.item.key"
-        :label="column.item.title"
-        :width="column.item.width || 200"
-        show-overflow-tooltip
-      >
-        <template slot-scope="scope">
-          <dict-tag
-            v-if="column.attr.dictName"
-            :size="size"
-            :value="scope.row[column.item.key]"
-            :options="dict.type[column.attr.dictName]"
-          />
-          <dr-file-preview
-            v-else-if="
-              column.attr.component === 'dr-file-preview' &&
-              scope.row[column.item.key]
-            "
-            v-model="scope.row[column.item.key]"
-          ></dr-file-preview>
-          <component is="span" v-else>{{
-            scope.row[column.item.key]
-          }}</component>
-        </template>
-      </el-table-column>
-    </el-table>
-    <el-empty v-else :image-size="200"></el-empty>
+    </el-super-table>
     <pagination
       v-if="tableData.length"
       :total="page.total"
@@ -350,24 +255,5 @@ export default {
   height: 100%;
   margin: 10px;
   padding: 0 0 20px 0;
-  .el-form {
-    padding: 20px 0 0;
-  }
-  .el-row {
-    display: flex;
-    flex-wrap: wrap;
-    padding: 0 20px;
-  }
-  ::v-deep .el-table--mini {
-    width: 100%;
-    margin: 20px 0 0 0;
-    .el-table__cell {
-      height: 50px;
-    }
-    td.el-table__cell {
-      border-right: 0;
-      // border-bottom: 0;
-    }
-  }
 }
 </style>

+ 1 - 0
src/views/purchase/contract/add/index.vue

@@ -175,6 +175,7 @@ export default {
     :title="title"
     :show-close="false"
     :visible.sync="visible"
+    destroy-on-close
   >
     <template slot="title">
       <span>{{ title }}</span>

+ 123 - 43
src/views/purchase/contract/column.js

@@ -1,11 +1,11 @@
 import CONFIG from "@/config";
 
 export const TableColumns = [
-  { item: { key: "puOrgName", title: "采购组织" }, attr: {} },
-  { item: { key: "code", title: "合同编码" }, attr: {} },
+  { item: { key: "puOrgName", title: "采购组织" }, attr: { isHidden: true } },
+  { item: { key: "code", title: "合同编码" }, attr: { isHidden: true } },
   {
     item: { key: "status", title: "状态" },
-    attr: { is: "el-dict-tag", dictName: "documents_status" },
+    attr: { is: "el-dict-tag", dictName: "documents_status", isHidden: true },
   },
   {
     item: { key: "lastPuMoney", title: "上年度采购额" },
@@ -14,13 +14,18 @@ export const TableColumns = [
       formatter: (prop) => {
         return (prop * 1).toFixed(CONFIG.precision);
       },
+      isHidden: true,
     },
   },
-  { item: { key: "buyerName", title: "采购员" }, attr: {} },
-  { item: { key: "supplierName", title: "供应商" }, attr: {} },
+  { item: { key: "buyerName", title: "采购员" }, attr: { isHidden: true } },
+  { item: { key: "supplierName", title: "供应商" }, attr: { isHidden: true } },
   {
     item: { key: "contractType", title: "合同类型" },
-    attr: { is: "el-dict-tag", dictName: "puarchase_contract_contract_type" },
+    attr: {
+      is: "el-dict-tag",
+      dictName: "puarchase_contract_contract_type",
+      isHidden: true,
+    },
   },
   {
     item: { key: "puMoneyYear", title: "本年度采购额" },
@@ -29,14 +34,22 @@ export const TableColumns = [
       formatter: (prop) => {
         return (prop * 1).toFixed(CONFIG.precision);
       },
+      isHidden: true,
     },
   },
-  { item: { key: "puDeptName", title: "采购部门" }, attr: {} },
+  { item: { key: "puDeptName", title: "采购部门" }, attr: { isHidden: true } },
   {
     item: { key: "supplierTier", title: "供应商层级" },
-    attr: { is: "el-dict-tag", dictName: "puarchase_contract_supplier_tier" },
+    attr: {
+      is: "el-dict-tag",
+      dictName: "puarchase_contract_supplier_tier",
+      isHidden: true,
+    },
+  },
+  {
+    item: { key: "contractName", title: "合同名称" },
+    attr: { isHidden: true },
   },
-  { item: { key: "contractName", title: "合同名称" }, attr: {} },
   {
     item: { key: "grossRateAverage", title: "平均毛利率 (%)" },
     attr: {
@@ -44,20 +57,29 @@ export const TableColumns = [
       formatter: (prop) => {
         return (prop * 1).toFixed(CONFIG.precision);
       },
+      isHidden: true,
     },
   },
   {
     item: { key: "approveFlow", title: "审批流程" },
-    attr: { is: "el-dict-tag", dictName: "puarchase_contract_approve_flow" },
+    attr: {
+      is: "el-dict-tag",
+      dictName: "puarchase_contract_approve_flow",
+      isHidden: true,
+    },
   },
   {
     item: { key: "consumableClass", title: "耗材类别" },
     attr: {
       is: "el-dict-tag",
       dictName: "puarchase_contract_consumable_class",
+      isHidden: true,
     },
   },
-  { item: { key: "effectiveDate", title: "合同生效日期" }, attr: {} },
+  {
+    item: { key: "effectiveDate", title: "合同生效日期" },
+    attr: { isHidden: true },
+  },
   {
     item: { key: "brandGrossRate", title: "同类品牌及毛利率 (%)" },
     attr: {
@@ -65,14 +87,22 @@ export const TableColumns = [
       formatter: (prop) => {
         return (prop * 1).toFixed(CONFIG.precision);
       },
+      isHidden: true,
     },
   },
   {
     item: { key: "contractFormat", title: "合同格式" },
-    attr: { is: "el-dict-tag", dictName: "puarchase_contract_contract_format" },
+    attr: {
+      is: "el-dict-tag",
+      dictName: "puarchase_contract_contract_format",
+      isHidden: true,
+    },
   },
-  { item: { key: "productName", title: "产品类别&名称" }, attr: {} },
-  { item: { key: "endDate", title: "合同终止日期" }, attr: {} },
+  {
+    item: { key: "productName", title: "产品类别&名称" },
+    attr: { isHidden: true },
+  },
+  { item: { key: "endDate", title: "合同终止日期" }, attr: { isHidden: true } },
   {
     item: { key: "invoiceTax", title: "发票税率 (%)" },
     attr: {
@@ -80,6 +110,7 @@ export const TableColumns = [
       formatter: (prop) => {
         return (prop * 1).toFixed(CONFIG.precision);
       },
+      isHidden: true,
     },
   },
   {
@@ -87,62 +118,107 @@ export const TableColumns = [
     attr: {
       is: "el-dict-tag",
       dictName: "puarchase_contract_emergency_degree",
+      isHidden: true,
     },
   },
-  { item: { key: "project", title: "项目医院" }, attr: {} },
+  { item: { key: "project", title: "项目医院" }, attr: { isHidden: true } },
   {
     item: { key: "deliveryType", title: "交货方式" },
-    attr: { is: "el-dict-tag", dictName: "puarchase_contract_delivery_type" },
+    attr: {
+      is: "el-dict-tag",
+      dictName: "puarchase_contract_delivery_type",
+      isHidden: true,
+    },
+  },
+  { item: { key: "source", title: "合同来源" }, attr: { isHidden: true } },
+  {
+    item: { key: "contractPartycName", title: "合同丙方" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "guaranteePeriodEnd", title: "质保期限" },
+    attr: { isHidden: true },
   },
-  { item: { key: "source", title: "合同来源" }, attr: {} },
-  { item: { key: "contractPartycName", title: "合同丙方" }, attr: {} },
-  { item: { key: "guaranteePeriodEnd", title: "质保期限" }, attr: {} },
   {
     item: { key: "freightMethods", title: "运费承担方式" },
-    attr: { is: "el-dict-tag", dictName: "puarchase_contract_freight_methods" },
+    attr: {
+      is: "el-dict-tag",
+      dictName: "puarchase_contract_freight_methods",
+      isHidden: true,
+    },
+  },
+  {
+    item: { key: "signDate", title: "合同创建时间" },
+    attr: { isHidden: true },
   },
-  { item: { key: "signDate", title: "合同创建时间" }, attr: {} },
   {
     item: { key: "isTarget", title: "是否有指标" },
-    attr: { is: "el-dict-tag", dictName: "sys_yes_no" },
+    attr: { is: "el-dict-tag", dictName: "sys_yes_no", isHidden: true },
+  },
+  {
+    item: { key: "contractTarget", title: "合同指标" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "exemptionPostageCondtion", title: "包邮条件" },
+    attr: { isHidden: true },
   },
-  { item: { key: "contractTarget", title: "合同指标" }, attr: {} },
-  { item: { key: "exemptionPostageCondtion", title: "包邮条件" }, attr: {} },
   {
     item: { key: "isRebate", title: "是否有返利" },
-    attr: { is: "el-dict-tag", dictName: "sys_yes_no" },
+    attr: { is: "el-dict-tag", dictName: "sys_yes_no", isHidden: true },
+  },
+  {
+    item: { key: "rebatePolicy", title: "返利政策" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "externalContract", title: "外部合同号" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "rollbackPolicy", title: "退换货政策" },
+    attr: { isHidden: true },
+  },
+  { item: { key: "enquiryCode", title: "询价单号" }, attr: { isHidden: true } },
+  {
+    item: { key: "contractContent", title: "合同主要内容" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "refusalReasons", title: "拒绝理由" },
+    attr: { isHidden: true },
   },
-  { item: { key: "rebatePolicy", title: "返利政策" }, attr: {} },
-  { item: { key: "externalContract", title: "外部合同号" }, attr: {} },
-  { item: { key: "rollbackPolicy", title: "退换货政策" }, attr: {} },
-  { item: { key: "enquiryCode", title: "询价单号" }, attr: {} },
-  { item: { key: "contractContent", title: "合同主要内容" }, attr: {} },
-  { item: { key: "refusalReasons", title: "拒绝理由" }, attr: {} },
   {
     item: { key: "pigeonhole", title: "是否归档" },
-    attr: { is: "el-dict-tag", dictName: "sys_yes_no" },
+    attr: { is: "el-dict-tag", dictName: "sys_yes_no", isHidden: true },
   },
   {
     item: { key: "pigeonholeFile", title: "归档附件" },
-    attr: { is: "el-file-preview" },
+    attr: { is: "el-file-preview", isHidden: true },
   },
   {
     item: { key: "externalFile", title: "对外附件" },
-    attr: { is: "el-file-preview" },
+    attr: { is: "el-file-preview", isHidden: true },
   },
   {
     item: { key: "puFile", title: "采购商盖章合同附件" },
-    attr: { is: "el-file-preview" },
+    attr: { is: "el-file-preview", isHidden: true },
   },
   {
     item: { key: "supplierFile", title: "供应商盖章合同附件" },
-    attr: { is: "el-file-preview" },
+    attr: { is: "el-file-preview", isHidden: true },
+  },
+  { item: { key: "projectCode", title: "项目编号" }, attr: { isHidden: true } },
+  { item: { key: "projectName", title: "项目名称" }, attr: { isHidden: true } },
+  { item: { key: "area", title: "区域" }, attr: { isHidden: true } },
+  {
+    item: { key: "consigneePhone", title: "收货人联系方式" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "paymentAgreement", title: "付款协议" },
+    attr: { isHidden: true },
   },
-  { item: { key: "projectCode", title: "项目编号" }, attr: {} },
-  { item: { key: "projectName", title: "项目名称" }, attr: {} },
-  { item: { key: "area", title: "区域" }, attr: {} },
-  { item: { key: "consigneePhone", title: "收货人联系方式" }, attr: {} },
-  { item: { key: "paymentAgreement", title: "付款协议" }, attr: {} },
   {
     item: { key: "taxPrice", title: "价税合计" },
     attr: {
@@ -150,10 +226,14 @@ export const TableColumns = [
       formatter: (prop) => {
         return prop ? (prop * 1).toFixed(CONFIG.precision) : "0.000000";
       },
+      isHidden: true,
     },
   },
-  { item: { key: "currencyName", title: "币种" }, attr: {} },
-  { item: { key: "guaranteePeriod", title: "质保期" }, attr: {} },
+  { item: { key: "currencyName", title: "币种" }, attr: { isHidden: true } },
+  {
+    item: { key: "guaranteePeriod", title: "质保期" },
+    attr: { isHidden: true },
+  },
 ];
 export const FormColumns = [
   {

+ 26 - 98
src/views/purchase/contract/index.vue

@@ -1,11 +1,11 @@
 <script>
-import { TableColumns, FormColumns } from "./column";
+import { TableColumns, FormColumns as SearchColumns } from "./column";
 import { LIST } from "@/api/business/purchase/contract";
 import { initDicts, initParams } from "@/utils/init.js";
 export default {
   name: "PuchaseContract",
   dicts: [
-    ...initDicts(FormColumns),
+    ...initDicts(SearchColumns),
     ...initDicts(TableColumns),
     "puarchase_contract_origin",
   ],
@@ -19,17 +19,18 @@ export default {
     TerminationModel: () => import("./termination/index.vue"),
     PigeonholeModel: () => import("./pigeonhole/index.vue"),
     SubmitModel: () => import("./submit/index.vue"),
-    ElDictTag: () => import("@/components/DictTag/index.vue"),
-    ElFilePreview: () => import("@/components/file-preview/index.vue"),
-    ElComputedInputV2: () => import("@/components/computed-input-v2/index.vue"),
+    ElHideTableColumnButton: () =>
+      import("@/components/hide-table-column/index.vue"),
+    ElSuperTable: () => import("@/components/super-table/index.vue"),
+    ElSuperSearch: () => import("@/components/super-search/index.vue"),
   },
   data() {
     return {
       size: "mini",
       loading: false,
       batching: false,
-      FormColumns: FormColumns,
-      params: initParams(FormColumns),
+      SearchColumns: SearchColumns,
+      params: initParams(SearchColumns),
       tableData: [],
       selectData: [],
       TableColumns: TableColumns,
@@ -107,7 +108,7 @@ export default {
     useReset() {
       this.page.pageNum = 1;
       this.page.pageSize = 10;
-      this.params = initParams(FormColumns);
+      this.params = initParams(SearchColumns);
       this.useQuery(this.params, this.page);
     },
     // 选 择
@@ -202,47 +203,14 @@ export default {
       ref="PigeonholeModel"
       @success="useQuery(params, page)"
     ></pigeonhole-model>
-
-    <el-form
+    <el-super-search
+      v-model="params"
       :size="size"
-      :model="params"
-      label-width="auto"
-      label-position="right"
-      @submit.native.prevent
-    >
-      <el-row :gutter="20" style="display: flex; flex-wrap: wrap">
-        <el-col
-          v-for="{ item, attr } in FormColumns"
-          :key="item.key"
-          :span="item.span || 6"
-        >
-          <el-form-item :prop="item.key" :label="item.title">
-            <component
-              v-if="attr.is === 'el-input'"
-              v-bind="attr"
-              v-model="params[item.key]"
-              @keyup.enter.native="useQuery(params, page)"
-            ></component>
-            <component
-              v-if="attr.is === 'el-select'"
-              v-bind="attr"
-              v-model="params[item.key]"
-              style="width: 100%"
-              @change="useQuery(params, page)"
-              @keyup.enter.native="useQuery(params, page)"
-            >
-              <el-option
-                v-for="option in $dicts[attr.dictName]"
-                :key="option.value"
-                :label="option.label"
-                :value="option.value"
-              >
-              </el-option>
-            </component>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
+      :dict="dict"
+      :columns="SearchColumns"
+      @submit="useQuery(params, page)"
+    ></el-super-search>
+
     <div style="padding: 0 20px; display: flex; justify-content: space-between">
       <div>
         <el-button :size="size" @click="useQuery(params, page)">
@@ -292,22 +260,19 @@ export default {
       </div>
       <!-- <el-button :size="size" @click="useImport"> 导 入 </el-button> -->
       <div>
-        <el-button
+        <el-button :size="size" @click="useBatch"> 批 量 </el-button>
+        <el-divider direction="vertical"></el-divider>
+        <el-hide-table-column-button
+          v-model="TableColumns"
           :size="size"
-          :icon="batching ? 'el-icon-close' : 'el-icon-check'"
-          @click="useBatch"
-        >
-          批 量
-        </el-button>
+        ></el-hide-table-column-button>
       </div>
     </div>
-    <el-table
-      v-if="tableData.length"
+    <el-super-table
+      v-model="tableData"
       :size="size"
-      :data="tableData"
-      border
-      stripe
-      highlight-current-row
+      :dict="dict"
+      :columns="TableColumns"
       @row-dblclick="useSee"
       @selection-change="useSelect"
       @row-click="useRowClick([$event])"
@@ -321,44 +286,7 @@ export default {
         :selectable="setSelectable"
       >
       </el-table-column>
-      <el-table-column width="55" align="center" type="index">
-        <template slot-scope="scope">
-          {{ scope.row.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column
-        v-for="{ item, attr } in TableColumns"
-        :key="item.key"
-        :prop="item.key"
-        :label="item.title"
-        :width="item.width || 200"
-        show-overflow-tooltip
-      >
-        <template slot-scope="scope">
-          <component
-            v-if="attr.is === 'el-dict-tag'"
-            v-bind="attr"
-            v-model="scope.row[item.key]"
-            :size="size"
-            :options="dict.type[attr.dictName]"
-          ></component>
-          <component
-            v-else-if="attr.is === 'el-file-preview'"
-            v-bind="attr"
-            v-model="scope.row[item.key]"
-          ></component>
-          <component
-            v-else-if="attr.is === 'el-computed-input-v2'"
-            v-bind="attr"
-            v-model="scope.row[item.key]"
-          ></component>
-          <component is="span" v-else>{{
-            scope.row[item.key] || "--"
-          }}</component>
-        </template>
-      </el-table-column>
-    </el-table>
-    <el-empty v-else :image-size="200"></el-empty>
+    </el-super-table>
     <pagination
       :total="page.total"
       :page.sync="page.pageNum"

+ 17 - 20
src/views/purchase/purchase-order/index.vue

@@ -143,26 +143,42 @@ export default {
     },
     // 编辑、修订
     async handleOpenEditDrawer(row) {
+
       const { id } = row;
+
       const { setVisible, fetchItem } = this.$refs.editDrawerRef;
+      
       await setVisible(true);
+
       await fetchItem(id);
+      
     },
     // 获取子表信息
      handleDetailsData(row) {
-      window.clearTimeout(this.timeOut)
+
+      window.clearTimeout(this.timeOut);
+
       this.timeOut = setTimeout(async () =>{
 
         try {
+
           this.tabLoading = true;
+
           this.primaryResource = row;
+
           this.checkedTabList = [];
+
           const { code, msg, data } = await orderApi.details(row.id);
+
           if (code === 200) {
+
             // 物料信息:puOrderItemList   执行结果:puOrderExecuteList
             for (const key in this.tabTableDatas) {
+
               this.tabTableDatas[key] = data[key];
+
             }
+
           }
         } catch (err) {}
         finally{
@@ -221,8 +237,6 @@ export default {
 
       let inconformity = this.checkedList.filter(row => !(row.status == '0' || row.status == '3'));
 
-      console.log(inconformity,'inconformity--------');
-
       if(!inconformity.length && this.checkedList.length){
 
         let puOrderIds = this.checkedList.map( item => Number(item.id));
@@ -245,22 +259,6 @@ export default {
 
       this.fetchSubmit(puOrderIds);
 
-      // try {
-
-      //  this.handleConfirmTips(async()=>{
-
-      //    let { code } = await orderApi.submit({ puOrderId: row.id });
- 
-      //    if (code == 200) {
- 
-      //     this.handleRefreshList();
- 
-      //    }
-
-      //  })
-      // } catch (error) {
-      // } finally {
-      // }
     },
     fetchSubmit(puOrderIds){
 
@@ -636,7 +634,6 @@ export default {
       </el-table-column>
       <el-table-column fixed="right" label="操作" width="120">
         <template slot-scope="scope">
-          <!-- <el-button @click.stop="handleOpenSeeDrawer(scope.row)" type="text" size="small">查看</el-button> -->
           <el-button 
             v-if="scope.row.status == '2'"
             type="text" 

+ 67 - 30
src/views/purchase/task/column.js

@@ -1,41 +1,78 @@
 export const TableColumns = [
-  { item: { key: "code", title: "订单生成单号" }, attr: {} },
+  { item: { key: "code", title: "订单生成单号" }, attr: { isHidden: true } },
   {
     item: { key: "status", title: "状态" },
-    attr: { is: "el-dict-tag", dictName: "purchase_task_status" },
+    attr: {
+      is: "el-dict-tag",
+      dictName: "purchase_task_status",
+      isHidden: true,
+    },
+  },
+  { item: { key: "demandCode", title: "需求单号" }, attr: { isHidden: true } },
+  { item: { key: "materialName", title: "物料" }, attr: { isHidden: true } },
+  {
+    item: { key: "materialCode", title: "物料编码" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "materialDesc", title: "物料描述" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "manufacturerName", title: "生产厂家" },
+    attr: { isHidden: true },
+  },
+  { item: { key: "puQty", title: "采购数量" }, attr: { isHidden: true } },
+  {
+    item: { key: "executeQty", title: "已执行数量" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "residueQty", title: "未执行数量" },
+    attr: { isHidden: true },
   },
-  { item: { key: "demandCode", title: "需求单号" }, attr: {} },
-  { item: { key: "materialName", title: "物料" }, attr: {} },
-  { item: { key: "materialCode", title: "物料编码" }, attr: {} },
-  { item: { key: "materialDesc", title: "物料描述" }, attr: {} },
-  { item: { key: "manufacturerName", title: "生产厂家" }, attr: {} },
-  { item: { key: "puQty", title: "采购数量" }, attr: {} },
-  { item: { key: "executeQty", title: "已执行数量" }, attr: {} },
-  { item: { key: "residueQty", title: "未执行数量" }, attr: {} },
   {
     item: { key: "priceType", title: "价格类型" },
-    attr: { is: "el-dict-tag", dictName: "sys_price_type" },
-  },
-  { item: { key: "puUnitName", title: "采购单位" }, attr: {} },
-  { item: { key: "buyerName", title: "采购员" }, attr: {} },
-  { item: { key: "supplierName", title: "建议供应商" }, attr: {} },
-  { item: { key: "puOrgName", title: "采购组织" }, attr: {} },
-  { item: { key: "currencyName", title: "币种" }, attr: {} },
-  { item: { key: "source", title: "需求来源" }, attr: {} },
-  { item: { key: "customerName", title: "收货客户" }, attr: {} },
-  { item: { key: "assignSupplierName", title: "指定供应商" }, attr: {} },
-  { item: { key: "demandDate", title: "需求时间" }, attr: {} },
-  { item: { key: "projectName", title: "项目名称" }, attr: {} },
-  { item: { key: "demandPersonalName", title: "需求人" }, attr: {} },
-  { item: { key: "demandOrgName", title: "需求组织" }, attr: {} },
-  { item: { key: "demandDeptName", title: "需求部门" }, attr: {} },
+    attr: { is: "el-dict-tag", dictName: "sys_price_type", isHidden: true },
+  },
+  { item: { key: "puUnitName", title: "采购单位" }, attr: { isHidden: true } },
+  { item: { key: "buyerName", title: "采购员" }, attr: { isHidden: true } },
+  {
+    item: { key: "supplierName", title: "建议供应商" },
+    attr: { isHidden: true },
+  },
+  { item: { key: "puOrgName", title: "采购组织" }, attr: { isHidden: true } },
+  { item: { key: "currencyName", title: "币种" }, attr: { isHidden: true } },
+  { item: { key: "source", title: "需求来源" }, attr: { isHidden: true } },
+  {
+    item: { key: "customerName", title: "收货客户" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "assignSupplierName", title: "指定供应商" },
+    attr: { isHidden: true },
+  },
+  { item: { key: "demandDate", title: "需求时间" }, attr: { isHidden: true } },
+  { item: { key: "projectName", title: "项目名称" }, attr: { isHidden: true } },
+  {
+    item: { key: "demandPersonalName", title: "需求人" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "demandOrgName", title: "需求组织" },
+    attr: { isHidden: true },
+  },
+  {
+    item: { key: "demandDeptName", title: "需求部门" },
+    attr: { isHidden: true },
+  },
   {
     item: { key: "isBack", title: "是否退回" },
-    attr: { is: "el-dict-tag", dictName: "sys_yes_no" },
+    attr: { is: "el-dict-tag", dictName: "sys_yes_no", isHidden: true },
   },
-  { item: { key: "baskCause", title: "退回原因" }, attr: {} },
-  { item: { key: "backDate", title: "退回日期" }, attr: {} },
-  { item: { key: "unitName", title: "单位" }, attr: {} },
+  { item: { key: "baskCause", title: "退回原因" }, attr: { isHidden: true } },
+  { item: { key: "backDate", title: "退回日期" }, attr: { isHidden: true } },
+  { item: { key: "unitName", title: "单位" }, attr: { isHidden: true } },
 ];
 
 export const SearchColumns = [
@@ -45,7 +82,7 @@ export const SearchColumns = [
       title: "物料分类",
     },
     attr: {
-      is: "dr-popover-tree-select",
+      is: "el-popover-tree-select",
       referName: "MATERIALCLASSIFY_PARAM",
       multiple: true,
       valueKey: "id",

+ 53 - 96
src/views/purchase/task/index.vue

@@ -13,20 +13,20 @@ export default {
     ShiftModel: () => import("./modify-buyer/index.vue"),
     DirectModel: () => import("./first-direct/index.vue"),
     ReturnModel: () => import("./documents-return/index.vue"),
-    ElDictTag: () => import("@/components/DictTag/index.vue"),
-    ElPopoverSelectV2: () => import("@/components/popover-select-v2/index.vue"),
-    ElPopoverMultipleSelectV2: () =>
-      import("@/components/popover-select-v2/multiple.vue"),
+    ElHideTableColumnButton: () =>
+      import("@/components/hide-table-column/index.vue"),
+    ElSuperTable: () => import("@/components/super-table/index.vue"),
+    ElSuperSearch: () => import("@/components/super-search/index.vue"),
   },
   data() {
     return {
       size: "mini",
       loading: false,
-      searchColumns: SearchColumns,
+      SearchColumns: SearchColumns,
       params: initParams(SearchColumns),
       tableData: [],
       selectData: [],
-      tableColumns: TableColumns,
+      TableColumns: TableColumns,
       page: { pageNum: 1, pageSize: 10, total: 0 },
     };
   },
@@ -177,76 +177,56 @@ export default {
       ref="ReturnModel"
       @success="useQuery(params, page)"
     ></return-model>
-    <el-form
+    <el-super-search
+      v-model="params"
       :size="size"
-      :model="params"
-      label-width="auto"
-      label-position="right"
-      @submit.native.prevent
-    >
-      <el-row :gutter="20">
-        <el-col
-          v-for="(column, index) in searchColumns"
-          :key="index"
-          :span="column.item.span || 6"
+      :dict="dict"
+      :columns="SearchColumns"
+      @submit="useQuery(params, page)"
+    ></el-super-search>
+    <div style="padding: 0 20px; display: flex; justify-content: space-between">
+      <div>
+        <el-button :size="size" @click="useQuery(params, page)">
+          查 询
+        </el-button>
+        <el-button :size="size" @click="useReset"> 重 置 </el-button>
+        <el-divider direction="vertical"></el-divider>
+        <el-button
+          v-show="hasPowerShift(selectData)"
+          :size="size"
+          @click="useShift(selectData[0])"
         >
-          <el-form-item :prop="column.item.key" :label="column.item.title">
-            <component
-              v-bind="column.attr"
-              v-model="params[column.item.key]"
-              :source.sync="params"
-              @change="useQuery(params, page)"
-              @keyup.enter.native="useQuery(params, page)"
-              style="width: 100%"
-            >
-              <template v-if="column.attr.dictName">
-                <el-option
-                  v-for="item in $dicts[column.attr.dictName]"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                >
-                </el-option>
-              </template>
-            </component>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <el-row>
-      <el-button :size="size" @click="useQuery(params, page)">
-        查 询
-      </el-button>
-      <el-button :size="size" @click="useReset"> 重 置 </el-button>
-      <el-button
-        v-show="hasPowerShift(selectData)"
-        :size="size"
-        @click="useShift(selectData[0])"
-      >
-        转 派
-      </el-button>
-      <el-button
-        v-show="hasPowerReturn(selectData)"
-        :size="size"
-        @click="useReturn(selectData)"
-      >
-        退回需求
-      </el-button>
-      <el-button
-        v-show="hasPowerDirect(selectData)"
-        :size="size"
-        @click="useDirect(selectData)"
-      >
-        协议直采
-      </el-button>
-    </el-row>
-    <el-table
-      :data="tableData"
-      size="mini"
-      highlight-current-row
+          转 派
+        </el-button>
+        <el-button
+          v-show="hasPowerReturn(selectData)"
+          :size="size"
+          @click="useReturn(selectData)"
+        >
+          退回需求
+        </el-button>
+        <el-button
+          v-show="hasPowerDirect(selectData)"
+          :size="size"
+          @click="useDirect(selectData)"
+        >
+          协议直采
+        </el-button>
+      </div>
+      <div>
+        <el-hide-table-column-button
+          v-model="TableColumns"
+          :size="size"
+        ></el-hide-table-column-button>
+      </div>
+    </div>
+    <el-super-table
+      v-model="tableData"
+      :size="size"
+      :dict="dict"
+      :columns="TableColumns"
       @row-dblclick="useSee"
       @selection-change="useSelect"
-      @row-click="useSelect([$event])"
     >
       <el-table-column
         fixed
@@ -256,30 +236,7 @@ export default {
         :selectable="setSelectable"
       >
       </el-table-column>
-      <el-table-column width="55" align="center" type="index">
-        <template slot-scope="scope">
-          {{ scope.row.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column
-        v-for="({ item, attr }, index) in tableColumns"
-        :key="index"
-        :prop="item.key"
-        :label="item.title"
-        :width="item.width || 250"
-        show-overflow-tooltip
-      >
-        <template slot-scope="scope">
-          <dict-tag
-            v-if="attr.dictName"
-            :size="size"
-            :value="scope.row[item.key]"
-            :options="$dicts[attr.dictName]"
-          />
-          <component is="span" v-else>{{ scope.row[item.key] }}</component>
-        </template>
-      </el-table-column>
-    </el-table>
+    </el-super-table>
     <pagination
       :total="page.total"
       :page.sync="page.pageNum"