瀏覽代碼

Merge branch 'purchaseDev' into 'dev'

Purchase dev

See merge request new-business/drp-web!34
黄梓星 2 年之前
父節點
當前提交
c3db71eb21

+ 18 - 0
src/api/purchase/DemandSummary.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 采购需求汇总列表
+export function getSummaryList(data) {
+  return request({
+    url: `/pu/demand/summary/list?pageSize=${data.pageSize}&pageNum=${data.pageNum}`,
+    method: 'post',
+    data: data
+  })
+}
+// 采购需求汇总明细
+export function getSummaryDetail(data) {
+  return request({
+    url: `/pu/demand/summary/detail`,
+    method: 'post',
+    data: data
+  })
+}

+ 142 - 0
src/views/purchase/DemandSummary/add.vue

@@ -0,0 +1,142 @@
+<template>
+  <div id="checkDemandSummary">
+    <el-card>
+      <span>采购需求汇总详情</span>
+      <div class="btn_grooup">
+        <el-button type="primary" size="small">编辑</el-button>
+        <el-button type="primary" size="small">确定</el-button>
+        <el-button type="primary" size="small">行关闭</el-button>
+        <el-button type="primary" size="small">重取批量</el-button>
+      </div>
+
+      <el-table 
+          :data="tableList" 
+          fit
+          max-height="680"
+          @selection-change="handleSelectionChange"
+        >
+        <el-table-column type="selection" width="55" />
+        <el-table-column label="序号" align="center" prop="code"/>
+        <el-table-column label="行号" align="center" prop="code"/>
+        <el-table-column label="物料编码" align="center" prop="code"/>
+        <el-table-column label="品名" align="center" prop="code"/>
+        <el-table-column label="规格" align="center" prop="code"/>
+        <el-table-column label="单位" align="center" prop="code"/>
+        <el-table-column label="生产厂家/代理人" align="center" prop="code"/>
+        <el-table-column label="末级供应仓库库存量" align="center" prop="code"/>
+        <el-table-column label="月销量" align="center" prop="code"/>
+        <el-table-column label="采购周期" align="center" prop="code"/>
+        <el-table-column label="最终净需求量" align="center" prop="code"/>
+        <el-table-column label="最终采购量" align="center" prop="code"/>
+        <el-table-column label="需求客户" align="center" prop="code"/>
+        <el-table-column label="最小订货量" align="center" prop="code"/>
+        <el-table-column label="最小包装量" align="center" prop="code"/>
+        <el-table-column label="修改人" align="center" prop="code"/>
+        <el-table-column label="修改原因" align="center" prop="code"/>
+        <el-table-column label="业务备注" align="center" prop="code"/>
+        <el-table-column label="有效期" align="center" prop="code"/>
+        <el-table-column label="要求交货日期" align="center" prop="code"/>
+        <el-table-column label="紧急标识" align="center" prop="code"/>
+        <el-table-column label="补单标识" align="center" prop="code"/>
+        <el-table-column label="需求单单号" align="center" prop="code"/>
+        <el-table-column label="供应仓库" align="center" prop="code"/>
+        <el-table-column label="供应库位" align="center" prop="code"/>
+        <el-table-column label="业务类型" align="center" prop="code"/>
+        <el-table-column label="行状态" align="center" prop="code"/>
+        <el-table-column label="收货仓库" align="center" prop="code"/>
+        <el-table-column label="收货货位" align="center" prop="code"/>
+        <el-table-column label="采购员" align="center" prop="code"/>
+        <el-table-column label="制单人" align="center" prop="code"/>
+        <el-table-column label="审核人员" align="center" prop="code"/>
+        <el-table-column label="请购单号" align="center" prop="code"/>
+        <el-table-column label="品类" align="center" prop="code"/>
+        <el-table-column label="注册人" align="center" prop="code"/>
+        <el-table-column label="集团预测分类" align="center" prop="code"/>
+        <el-table-column label="修改时间" align="center" prop="code"/>
+        <el-table-column label="采购员编码" align="center" prop="code"/>
+        <el-table-column label="采购组织" align="center" prop="code"/>
+        <el-table-column label="物料类别" align="center" prop="code"/>
+        <el-table-column label="有效期单位" align="center" prop="code"/>
+        <el-table-column label="最小批量" align="center" prop="code"/>
+        <el-table-column label="业务部门" align="center" prop="code"/>
+        <el-table-column label="需求部门" align="center" prop="code"/>
+        <el-table-column label="批号锁定标识" align="center" prop="code"/>
+        <el-table-column label="采购需求单审批人" align="center" prop="code"/>
+        <el-table-column label="需求单审批时间" align="center" prop="code"/>
+        <el-table-column label="需求单提交时间" align="center" prop="code"/>
+        <el-table-column label="需求单提交人" align="center" prop="code"/>
+        <el-table-column label="处理需求时间" align="center" prop="code"/>
+        <el-table-column label="处理需求人员" align="center" prop="code"/>
+        <el-table-column label="汇总确认人" align="center" prop="code"/>
+        <el-table-column label="汇总确认时间" align="center" prop="code"/>
+        <el-table-column label="转请购时间" align="center" prop="code"/>
+        <el-table-column label="转请购人员" align="center" prop="code"/>
+        <el-table-column label="价格类型" align="center" prop="code"/>
+      </el-table>
+    </el-card>
+
+    <div class="btn_group">
+      <el-col :span="1.5">
+        <el-button size="small" plain @click="back">返回</el-button>
+      </el-col>
+    </div>
+  </div>
+</template>
+
+<script>
+import {getSummaryDetail} from '@/api/purchase/DemandSummary.js'
+export default {
+  name: 'checkDemandSummary',
+  props: ['pageStu','row', 'disable'],
+  model: {
+    prop: 'isList',
+    event: 'jugislist'
+  },
+  data() {
+    return{
+      tableList: []
+    }
+  },
+  created() {
+    if(this.pageStu == 'check') {
+      console.log('数据', this.row)
+      this.getDetails(this.row)
+    } else if(this.pageStu == 'edit') {
+      this.getDetails(this.row)
+    }
+  },
+  methods: {
+    handleSelectionChange() {},
+    back() {
+      this.$emit('jugislist', true)
+      let queryParams = {
+        pageNum: 1,
+        pageSize: 10
+      }
+      this.$emit('refresh', queryParams)
+    },
+    // 如果需要回显则调用详情接口
+    getDetails(row) {
+      getSummaryDetail(row).then(res => {
+        if (res.code === 200) {
+
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+ .btn_group {
+  width: 100%;
+  margin: 20px 0;
+  display: flex;
+  justify-content: center;
+} 
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+} 
+</style>

+ 53 - 45
src/views/purchase/DemandSummary/index.vue

@@ -304,6 +304,7 @@
         <el-table 
           :data="tableList" 
           fit
+          show-summary
           max-height="680"
           @selection-change="handleSelectionChange"
         >
@@ -312,53 +313,53 @@
           <el-table-column label="物料编码" align="center" prop="code"/>
           <el-table-column label="品名" align="center" prop="code"/>
           <el-table-column label="规格" align="center" prop="code"/>
-          <el-table-column label="单位" align="center" prop="code"/>
-          <el-table-column label="生产厂家/代理人" align="center" prop="code"/>
+          <el-table-column label="单位" align="center" prop="demandUnit"/>
+          <el-table-column label="生产厂家/代理人" align="center" prop="manufacturer"/>
           <el-table-column label="需求单位数" align="center" prop="code"/>
           <el-table-column label="总最终净需求量" align="center" prop="code"/>
-          <el-table-column label="总月销量" align="center" prop="code"/>
-          <el-table-column label="需求可用周期" align="center" prop="code"/>
-          <el-table-column label="呆滞量" align="center" prop="code"/>
-          <el-table-column label="采购周期" align="center" prop="code"/>
-          <el-table-column label="中心公共库存" align="center" prop="code"/>
-          <el-table-column label="中心仓专属货位" align="center" prop="code"/>
-          <el-table-column label="区域分仓公共库存" align="center" prop="code"/>
-          <el-table-column label="各项目仓库存" align="center" prop="code"/>
-          <el-table-column label="电商仓库" align="center" prop="code"/>
-          <el-table-column label="采购在途" align="center" prop="code"/>
-          <el-table-column label="借出在途" align="center" prop="code"/>
-          <el-table-column label="调拨在途" align="center" prop="code"/>
-          <el-table-column label="库存总计" align="center" prop="code"/>
-          <el-table-column label="最小包装量" align="center" prop="code"/>
-          <el-table-column label="最小订货量" align="center" prop="code"/>
-          <el-table-column label="最小批量" align="center" prop="code"/>
-          <el-table-column label="人工调整数" align="center" prop="code"/>
-          <el-table-column label="修改原因" align="center" prop="code"/>
-          <el-table-column label="建议采购量" align="center" prop="code"/>
-          <el-table-column label="建议净采购量" align="center" prop="code"/>
-          <el-table-column label="最终采购量" align="center" prop="code"/>
+          <el-table-column label="总月销量" align="center" prop="totalMonthlySales"/>
+          <el-table-column label="需求可用周期" align="center" prop="demandCycle"/>
+          <el-table-column label="呆滞量" align="center" prop="dullQut"/>
+          <el-table-column label="采购周期" align="center" prop="buyPeriod"/>
+          <el-table-column label="中心公共库存" align="center" prop="centralPublicStock"/>
+          <el-table-column label="中心仓专属货位" align="center" prop="centralWarehouse"/>
+          <el-table-column label="区域分仓公共库存" align="center" prop="regionPublicStock"/>
+          <el-table-column label="各项目仓库存" align="center" prop="eachWarehouseStock"/>
+          <el-table-column label="电商仓库" align="center" prop="commerceWarehouse"/>
+          <el-table-column label="采购在途" align="center" prop="buyTransit"/>
+          <el-table-column label="借出在途" align="center" prop="lendTransit"/>
+          <el-table-column label="调拨在途" align="center" prop="transferTransit"/>
+          <el-table-column label="库存总计" align="center" prop="stockTotal"/>
+          <el-table-column label="最小包装量" align="center" prop="minPackage"/>
+          <el-table-column label="最小订货量" align="center" prop="minOrder"/>
+          <el-table-column label="最小批量" align="center" prop="minBatch"/>
+          <el-table-column label="人工调整数" align="center" prop="artificialAdjust"/>
+          <el-table-column label="修改原因" align="center" prop="modifyReason"/>
+          <el-table-column label="建议采购量" align="center" prop="suggestionPurchase"/>
+          <el-table-column label="建议净采购量" align="center" prop="suggestBuyQty"/>
+          <el-table-column label="最终采购量" align="center" prop="finalBuyQty"/>
           <el-table-column label="二级品类" align="center" prop="code"/>
           <el-table-column label="三级品类" align="center" prop="code"/>
           <el-table-column label="四级品类" align="center" prop="code"/>
-          <el-table-column label="单据状态" align="center" prop="code"/>
-          <el-table-column label="采购员" align="center" prop="code"/>
+          <el-table-column label="单据状态" align="center" prop="status"/>
+          <el-table-column label="采购员" align="center" prop="buyerName"/>
           <el-table-column label="默认采购组织" align="center" prop="code"/>
-          <el-table-column label="有效期" align="center" prop="code"/>
-          <el-table-column label="有效期单位" align="center" prop="code"/>
-          <el-table-column label="业务类型" align="center" prop="code"/>
+          <el-table-column label="有效期" align="center" prop="validityPeriod"/>
+          <el-table-column label="有效期单位" align="center" prop="validityPeriodUnit"/>
+          <el-table-column label="业务类型" align="center" prop="businessType"/>
           <el-table-column label="安全库存量" align="center" prop="code"/>
-          <el-table-column label="单据来源" align="center" prop="code"/>
-          <el-table-column label="行号" align="center" prop="code"/>
+          <el-table-column label="单据来源" align="center" prop="billSource"/>
+          <el-table-column label="行号" align="center" prop="rowNo"/>
           <el-table-column label="注册人" align="center" prop="code"/>
-          <el-table-column label="可用量" align="center" prop="code"/>
-          <el-table-column label="总需与终采差异" align="center" prop="code"/>
-          <el-table-column label="集团预测分类" align="center" prop="code"/>
-          <el-table-column label="中心仓占有量" align="center" prop="code"/>
+          <el-table-column label="可用量" align="center" prop="qty"/>
+          <el-table-column label="总需与终采差异" align="center" prop="buyDiscrepancy"/>
+          <el-table-column label="集团预测分类" align="center" prop="forecastClassification"/>
+          <el-table-column label="中心仓占有量" align="center" prop="centerBinPossession"/>
           <el-table-column label="中心仓可用量" align="center" prop="code"/>
-          <el-table-column label="物料类别" align="center" prop="code"/>
-          <el-table-column label="业务部门" align="center" prop="code"/>
-          <el-table-column label="需求单位" align="center" prop="code"/>
-          <el-table-column label="采购经理审核人" align="center" prop="code"/>
+          <el-table-column label="物料类别" align="center" prop="materialCategory"/>
+          <el-table-column label="业务部门" align="center" prop="departmentName"/>
+          <el-table-column label="需求单位" align="center" prop="demandUnit"/>
+          <el-table-column label="采购经理审核人" align="center" prop="puManagerAuditor"/>
           <el-table-column
           fixed="right"
           label="操作"
@@ -382,15 +383,19 @@
         </el-pagination>
       </el-card>
     </div>
+
+    <Add v-model="isList" v-if="!isList" :pageStu="page" :disable="disable" :row="rowDetail" @refresh="getList"/>
   </div>
 </template>
 
 <script>
+import Add from './add.vue'
 import CollapseTransition from '@/components/MyCollapse/collapse.vue'
+import {getSummaryList} from '@/api/purchase/DemandSummary.js'
 export default {
   name: 'demandSummary',
   components: {
-    // Add,
+    Add,
     CollapseTransition
   },
   data() {
@@ -428,14 +433,17 @@ export default {
       ids: []
     }
   },
+  created() {
+    this.getList(this.queryParams)
+  },
   methods: {
     getList(params){
-      // getDemandList(params).then(res => {
-      //   if (res.code === 200) {
-      //     this.tableList = res.rows
-      //     this.total = res.total
-      //   }
-      // })
+      getSummaryList(params).then(res => {
+        if (res.code === 200) {
+          this.tableList = res.rows
+          this.total = res.total
+        }
+      })
     },
     handleSelectionChange(selection) {
       console.log('选中', selection)

+ 26 - 2
src/views/purchase/PurchaseDemandList/add.vue

@@ -241,7 +241,7 @@
       <el-table 
           :data="basicForm.puDemandItemList" 
           fit
-          max-height="680"
+          max-height="300"
           @selection-change="handleSelectionChange"
         >
           <el-table-column type="selection"/>
@@ -282,6 +282,27 @@
               </el-form-item>
             </template>
           </el-table-column>
+          <el-table-column label="预留比例" align="center" width="150" prop="reservedProportion">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input v-model="scope.row.reservedProportion"/>
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column label="预留周期" align="center" width="150" prop="reservedPeriod">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input v-model="scope.row.reservedPeriod"/>
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column label="预留数量" align="center" width="150" prop="reservedQty">
+            <template slot-scope="scope">
+              <el-form-item class="hang">
+                <el-input v-model="scope.row.reservedQty"/>
+              </el-form-item>
+            </template>
+          </el-table-column>
           <el-table-column label="采购员名称" align="center" prop="buyerName" />
           <el-table-column label="采购员" align="center" width="150" prop="buyer" />
           <el-table-column label="物料编码" align="center" width="120" prop="material">
@@ -293,6 +314,7 @@
           </el-table-column>
           <el-table-column label="物料名称" align="center" width="150" prop="materialName" />
           <el-table-column label="规格" align="center" width="150" prop="specification" />
+          <el-table-column label="型号" align="center" width="150" prop="model" />
           <el-table-column label="单位" align="center" width="150" prop="unit	" />
           <el-table-column label="生产厂家/代理人" align="center" width="150" prop="registrant" />
           <el-table-column label="注册人" align="center" width="150" prop="registrant" />
@@ -655,7 +677,9 @@ export default {
         updateBy: null,
         updateByName: null,
         updateTime: null,
-        delFlag: null
+        delFlag: null,
+        // 新增字段
+        model: null,
       }
       this.basicForm.puDemandItemList.push(newLine)
     },

+ 130 - 82
src/views/purchase/priceDeclaration/add-price-declaration.vue

@@ -2,44 +2,86 @@
 <template>
   <el-drawer title="我是标题" direction="btt" size="100%" :with-header="false" :visible.sync="visible"
     :before-close="handleClose">
-    <el-form size="mini" label-position="right" label-width="125px" :model="params">
-      <el-card class="add-pd-content" :body-style="{
-          padding: '20px',
-          display: 'flex',
-          'flex-wrap': 'wrap',
-        }">
-        <el-form-item v-for="(column, index) in columns" :key="index" :prop="column.key" :label="column.title"
-          :required="column.required" style="width: 33%">
+    <el-card :body-style="{
+        padding: '20px',
+        display: 'flex',
+        'flex-wrap': 'wrap',
+      }" style="margin: 10px">
+      <div slot="header" style="
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+        ">
+        <h3>新增</h3>
+        <div style="text-align: right">
+          <el-button size="mini" @click="setVisible(false)">取消</el-button>
+          <el-button size="mini" type="info" @click="setVisible(false)">保存并新增</el-button>
+          <el-button size="mini" type="danger" @click="setVisible(false)">保存</el-button>
+        </div>
+      </div>
+      <el-row>
+        <el-form size="mini" label-position="right" label-width="150px" :model="params">
+          <el-col v-for="(column, index) in columns" :key="index" :span="column.span || 8">
+            <el-form-item :prop="column.key" :label="column.title" :required="column.required">
 
-          <el-input v-if="column.type === 'Input'" v-model="params[column.key]" :placeholder="column.placeholder"
-            style="width: 90%"></el-input>
+              <el-input v-if="column.type === 'Input'" v-model="params[column.key]" :placeholder="column.placeholder"
+                :clearable="column.clearable" style="width: 90%"></el-input>
 
-          <el-input-number v-if="column.type === 'InputNumber'" v-model="params[column.key]" controls-position="right"
-            :placeholder="column.placeholder" style="width: 90%"></el-input-number>
+              <el-input-number v-if="column.type === 'InputNumber'" v-model="params[column.key]"
+                :controls-position="column.config.controlsPosition" :placeholder="column.placeholder"
+                :clearable="column.clearable" style="width: 90%"></el-input-number>
 
-          <el-select v-if="column.type === 'TagSelect'" v-model="params[column.key]" multiple clearable collapse-tags
-            :placeholder="column.placeholder" style="width: 90%">
-            <template #prefix>
-              <el-icon class="el-icon-s-operation" style="cursor: pointer" @click.stop="$message.info(234)"></el-icon>
-            </template>
-            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
-            </el-option>
-          </el-select>
+              <el-select v-if="column.type === 'Select'" v-model="params[column.key]" :placeholder="column.placeholder"
+                :clearable="column.clearable" style="width: 90%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
 
-          <el-date-picker v-if="column.type === 'DatePicker'" v-model="params[column.key]" :type="column.config.type"
-            :placeholder="column.placeholder" :picker-options="column.pickerOptions" style="width: 90%">
-          </el-date-picker>
-        </el-form-item>
-      </el-card>
-      <el-card class="add-pd-option" :body-style="{
-          'text-align': 'right',
-          padding: '10px 20px',
-        }">
-        <el-button size="mini" @click="setVisible(false)">取消</el-button>
-        <el-button size="mini" type="info" @click="setVisible(false)">保存并新增</el-button>
-        <el-button size="mini" type="danger" @click="setVisible(false)">保存</el-button>
-      </el-card>
-    </el-form>
+              <el-select v-if="column.type === 'TagSelect'" v-model="params[column.key]" multiple clearable collapse-tags
+                :placeholder="column.placeholder" :clearable="column.clearable" style="width: 90%">
+                <template #prefix>
+                  <el-icon class="el-icon-s-operation" style="cursor: pointer" @click.stop="$message.info(234)"></el-icon>
+                </template>
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+
+              <el-date-picker v-if="column.type === 'DatePicker'" v-model="params[column.key]" :type="column.config.type"
+                :placeholder="column.placeholder" :clearable="column.clearable" :picker-options="column.pickerOptions"
+                style="width: 90%">
+              </el-date-picker>
+
+              <el-upload v-if="column.type === 'Upload'" :file-list="params[column.key]" drag
+                action="https://jsonplaceholder.typicode.com/posts/" multiple>
+                <i class="el-icon-upload"></i>
+                <div class="el-upload__text">
+                  将文件拖到此处,或<em>点击上传</em>
+                </div>
+                <div class="el-upload__tip" slot="tip">
+                  只能上传jpg/png文件,且不超过500kb
+                </div>
+              </el-upload>
+
+            </el-form-item>
+          </el-col>
+        </el-form>
+      </el-row>
+    </el-card>
+    <el-card :body-style="{
+        padding: '20px',
+        display: 'flex',
+        'flex-wrap': 'wrap',
+      }" style="margin: 10px">
+      <el-tabs v-model="tabName" @tab-click="handleClick" style="width: 100%">
+        <el-tab-pane v-for="(column, index) in tabColumns" :key="index" :label="column.title" :name="column.key">
+          <el-table :data="tabTableDatas[column.key]" style="width: 100%">
+            <el-table-column v-for="(cColumn, cIndex) in column.tableColumns" :key="cIndex" :prop="cColumn.key"
+              :label="cColumn.title">
+            </el-table-column>
+          </el-table>
+        </el-tab-pane>
+      </el-tabs>
+    </el-card>
   </el-drawer>
 </template>
 
@@ -52,38 +94,8 @@ export default {
         data.map((item) => [item[keyName], item[valueName]])
       );
     };
-    const pickerOptions = {
-      disabledDate(time) {
-        return time.getTime() > Date.now();
-      },
-      shortcuts: [
-        {
-          text: "今天",
-          onClick(picker) {
-            picker.$emit("pick", new Date());
-          },
-        },
-        {
-          text: "昨天",
-          onClick(picker) {
-            const date = new Date();
-            date.setTime(date.getTime() - 3600 * 1000 * 24);
-            picker.$emit("pick", date);
-          },
-        },
-        {
-          text: "一周前",
-          onClick(picker) {
-            const date = new Date();
-            date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
-            picker.$emit("pick", date);
-          },
-        },
-      ],
-    };
-
     const columns = [
-      { key: "id", title: "id", type: "Input", },
+      { key: "id", title: "id", type: "TagSelect", require: true },
       { key: "status", title: "单据状态" },
       { key: "priceName", title: "价格名称" },
       { key: "supplier", title: "供应商" },
@@ -108,12 +120,48 @@ export default {
       { key: "updateByName", title: "更新人" },
       { key: "delFlag", title: "删除标记" }
     ];
-    const initColumns = () => columns;
+    const initColumns = () =>
+      columns.map((column) => {
+        const clearable = column.clearable || true;
+        if (column.type === "InputNumber") {
+          return {
+            ...column,
+            clearable,
+            config: { controlsPosition: "right" },
+          };
+        }
+        if (column.type === "DatePicker") {
+          return {
+            ...column,
+            clearable,
+            config: { type: "date" },
+          };
+        }
+        return {
+          ...column,
+          clearable,
+        };
+      });
     const initParams = () => arr2Obj(initColumns(), "key", "value");
-
+    // 标签页列
+    const tabColumns = [
+      {
+        key: 'materialBasic',
+        title: '物料信息表',
+        tableColumns: [],
+      },
+      {
+        key: 'enforcementScope',
+        title: '执行范围组织',
+        tableColumns: [],
+      },
+    ]
+    const initTabColumns = () => tabColumns;
     return {
       visible: false,
+      // 主数据表头
       columns: initColumns(),
+      // 表单
       params: initParams(),
       options: [
         {
@@ -137,6 +185,15 @@ export default {
           label: "北京烤鸭",
         },
       ],
+      // 标签页表格列
+      tabColumns: initTabColumns(),
+      // 标签页激活
+      tabName: "materialBasic",
+      // 标签页对应数据
+      tabTableDatas: {
+        materialBasic: [],
+        enforcementScope: [],
+      },
     }
   },
   methods: {
@@ -144,20 +201,11 @@ export default {
       this.visible = prop;
     },
     handleClose() { },
-  },
-  created() { },
-}
-</script>
+    handleClick() { },
 
-.add-pd-content {
-  margin: 10px
+  },
+  created() {
+    console.log(this.params, this.columns);
+  },
 }
-
-.add-pd-option {
-  position: fixed;
-  left: 0;
-  bottom: 0;
-  margin: 10px;
-  width: calc(100% - 20px);
-}}
-</style>
+</script>

+ 55 - 24
src/views/purchase/priceDeclaration/index.vue

@@ -2,6 +2,9 @@
 <template>
   <el-card v-loading="loading" class="priceDeclaration" :body-style="{ padding: 0 }">
 
+    <addPriceDeclaration ref="addDeclaration"></addPriceDeclaration>
+    <seePriceDeclaration ref="seeDeclaration"></seePriceDeclaration>
+
     <!-- 检索 -->
     <el-form size="mini" label-position="right" label-width="85px" :model="searchParams" style="padding: 20px 0 0 0">
       <el-row :gutter="24">
@@ -31,12 +34,11 @@
         @click="handleSearchChange"></i>
     </el-divider>
 
-
     <!-- 操作 -->
     <el-row :gutter="24" style="padding: 0 20px">
       <!-- <el-col :span="6">  </el-col> -->
       <el-col :span="24" style="text-align: right">
-        <el-button size="mini" type="danger">新增</el-button>
+        <el-button size="mini" type="danger" @click="handleAddDeclaration">新增</el-button>
         <el-button-group>
           <el-dropdown>
             <el-button size="mini">
@@ -66,11 +68,10 @@
       </el-col>
     </el-row>
 
-
     <el-container>
       <el-main>
         <!-- 主信息 -->
-        <el-table class="pd_mainTable" :data="tableData" size="mini" @row-dblclick="handleOpenDetails">
+        <el-table class="pd-mainTable" :data="tableData" size="mini" @row-dblclick="handleOpenDetails">
           <el-table-column type="selection" width="35" />
           <el-table-column v-for="(column, index) in tableColumns" :key="index" :prop="column.key" :label="column.title"
             :width="column.width || 180" :show-overflow-tooltip="column.showOverflowTooltip || true">
@@ -90,17 +91,21 @@
         </el-pagination>
 
         <!-- 附表格 -->
-        <el-tabs class="pd_tabs" v-model="activeName" @tab-click="handleTabClick">
-          <el-tab-pane v-for="v in viceTable" :label="v.title" :name="v.name">
+        <div class="pd-viceTable">
+          <el-tabs class="pd-tabs" v-model="activeName" @tab-click="handleTabClick" style="width: 100%;">
+            <el-tab-pane v-for="v in viceTable" :label="v.title" :name="v.name">
+
+              <el-table class="pd_viceTable" :data="tabTableDatas[v.name]" style="width: 100%;">
+                <el-table-column v-if="tabTableDatas[v.name].lenth" type="index" width="35" />
+                <el-table-column v-for="(column, index) in v.columns" :key="index" :prop="column.key"
+                  :label="column.title" :width="column.width || 180"
+                  :show-overflow-tooltip="column.showOverflowTooltip || true">
+                </el-table-column>
+              </el-table>
+            </el-tab-pane>
+          </el-tabs>
+        </div>
 
-            <el-table class="pd_viceTable" :data="viceData" size="mini">
-              <el-table-column type="index" width="35" />
-              <el-table-column v-for="(column, index) in v.columns" :key="index" :prop="column.key" :label="column.title"
-                :width="column.width || 180" :show-overflow-tooltip="column.showOverflowTooltip || true">
-              </el-table-column>
-            </el-table>
-          </el-tab-pane>
-        </el-tabs>
       </el-main>
     </el-container>
 
@@ -109,8 +114,15 @@
 
 <script>
 import declaration from '@/api/business/purchase/priceDeclaration'
+import addPriceDeclaration from './add-price-declaration.vue'
+import seePriceDeclaration from './see-price-declaration.vue'
 
 export default {
+  name: 'priceDeclaration',
+  components: {
+    addPriceDeclaration,
+    seePriceDeclaration
+  },
   data() {
     const arr2Obj = function (data, keyName, valueName) {
       return Object.fromEntries(
@@ -213,7 +225,13 @@ export default {
       tableColumns: initTableHeader(),
       // 附表格
       viceTable: initViceTable(),
-      viceData: [],
+      // 附表格数据
+      tabTableDatas: {
+        // 物料信息表
+        materialBasic: [],
+        // 执行范围组织
+        enforcementScope: [],
+      },
       // 列表数据
       tableData: [
         {
@@ -270,6 +288,14 @@ export default {
       //   title: this.isSimpleSearch ? "Simple Search" : "All Search",
       // });
     },
+    // 新增
+    handleAddDeclaration() {
+      const { setVisible } = this.$refs.addDeclaration;
+      setVisible(true);
+      setTimeout(() => {
+        this.$notify.info("Open Add Drawer");
+      }, 250);
+    },
     // 标签页切换
     handleTabClick() {
       console.log(this.activeName, '标签页切换');
@@ -278,6 +304,11 @@ export default {
     // 行双击-进入详情
     handleOpenDetails(row) {
       console.log(row, '行双击-进入详情');
+      const { setVisible } = this.$refs.seeDeclaration;
+      setVisible(true);
+      setTimeout(() => {
+        this.$notify.info("Open See Drawer");
+      }, 250);
     },
     // 行编辑
     handleEdit(index, row) {
@@ -316,20 +347,20 @@ export default {
   .el-main {
     padding-top: 0px;
 
-
-
-    .pd_mainTable {
+    .pd-mainTable {
       width: 100%;
       margin: 20px 0 0 0;
-
-
     }
 
-    .pd_tabs {
-      margin-top: 20px;
-
-      .pd_viceTable {}
+    .pd-viceTable {
+      padding: 20px 0 0 0;
+      display: flex;
+      flex-wrap: wrap;
     }
+
+    // .pd_tabs {
+    //   margin-top: 20px;
+    // }
   }
 }
 </style>

+ 199 - 2
src/views/purchase/priceDeclaration/see-price-declaration.vue

@@ -1,11 +1,208 @@
 <!-- 价格申报单-详情 -->
 <template>
+  <el-drawer title="我是标题" direction="btt" size="100%" :with-header="false" :visible.sync="visible"
+    :before-close="handleClose">
+    <el-card :body-style="{
+        padding: '20px',
+        display: 'flex',
+        'flex-wrap': 'wrap',
+      }" style="margin: 10px">
+      <div slot="header" style="
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+        ">
+        <h3>查看</h3>
+        <div style="text-align: right">
+          <el-button size="mini" @click="setVisible(false)">取消</el-button>
+          <el-button size="mini" type="info" @click="setVisible(false)">保存并新增</el-button>
+          <el-button size="mini" type="danger" @click="setVisible(false)">保存</el-button>
+        </div>
+      </div>
+      <el-row>
+        <el-form size="mini" label-position="right" label-width="150px" :model="params">
+          <el-col v-for="(column, index) in columns" :key="index" :span="column.span || 8">
+            <el-form-item :prop="column.key" :label="column.title" :required="column.required">
 
+              <el-input v-if="column.type === 'Input'" v-model="params[column.key]" :placeholder="column.placeholder"
+                :clearable="column.clearable" style="width: 90%"></el-input>
+
+              <el-input-number v-if="column.type === 'InputNumber'" v-model="params[column.key]"
+                :controls-position="column.config.controlsPosition" :placeholder="column.placeholder"
+                :clearable="column.clearable" style="width: 90%"></el-input-number>
+
+              <el-select v-if="column.type === 'Select'" v-model="params[column.key]" :placeholder="column.placeholder"
+                :clearable="column.clearable" style="width: 90%">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+
+              <el-select v-if="column.type === 'TagSelect'" v-model="params[column.key]" multiple clearable collapse-tags
+                :placeholder="column.placeholder" :clearable="column.clearable" style="width: 90%">
+                <template #prefix>
+                  <el-icon class="el-icon-s-operation" style="cursor: pointer" @click.stop="$message.info(234)"></el-icon>
+                </template>
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+
+              <el-date-picker v-if="column.type === 'DatePicker'" v-model="params[column.key]" :type="column.config.type"
+                :placeholder="column.placeholder" :clearable="column.clearable" :picker-options="column.pickerOptions"
+                style="width: 90%">
+              </el-date-picker>
+
+              <el-upload v-if="column.type === 'Upload'" :file-list="params[column.key]" drag
+                action="https://jsonplaceholder.typicode.com/posts/" multiple>
+                <i class="el-icon-upload"></i>
+                <div class="el-upload__text">
+                  将文件拖到此处,或<em>点击上传</em>
+                </div>
+                <div class="el-upload__tip" slot="tip">
+                  只能上传jpg/png文件,且不超过500kb
+                </div>
+              </el-upload>
+
+            </el-form-item>
+          </el-col>
+        </el-form>
+      </el-row>
+    </el-card>
+    <el-card :body-style="{
+        padding: '20px',
+        display: 'flex',
+        'flex-wrap': 'wrap',
+      }" style="margin: 10px">
+      <el-tabs v-model="tabName" @tab-click="handleClick" style="width: 100%">
+        <el-tab-pane v-for="(column, index) in tabColumns" :key="index" :label="column.title" :name="column.key">
+          <el-table :data="tabTableDatas[column.key]" style="width: 100%">
+            <el-table-column v-for="(cColumn, cIndex) in column.tableColumns" :key="cIndex" :prop="cColumn.key"
+              :label="cColumn.title">
+            </el-table-column>
+          </el-table>
+        </el-tab-pane>
+      </el-tabs>
+    </el-card>
+  </el-drawer>
 </template>
 
 <script>
 export default {
-  name:'seePriceDeclaration',
-
+  name: 'seePriceDeclaration',
+  data() {
+    const arr2Obj = function (data, keyName, valueName) {
+      return Object.fromEntries(
+        data.map((item) => [item[keyName], item[valueName]])
+      );
+    };
+    const columns = [
+      { key: "id", title: "id", type: "TagSelect", require: true },
+      { key: "status", title: "单据状态" },
+      { key: "priceName", title: "价格名称" },
+      { key: "supplier", title: "供应商" },
+      { key: "supplierName", title: "供应商名称" },
+      { key: "puOrg", title: "采购组织" },
+      { key: "puOrgName", title: "采购组织名称" },
+      { key: "currency", title: "币种" },
+      { key: "currencyName", title: "币种名称" },
+      { key: "explain", title: "价格合理性说明" },
+      { key: "buyer", title: "采购员" },
+      { key: "buyerName", title: "采购员名称" },
+      { key: "puDept", title: "采购部门" },
+      { key: "puDeptName", title: "采购部门名称" },
+      { key: "sourceType", title: "来源单据类型" },
+      { key: "source", title: "来源单据号" },
+      { key: "isEffective", title: "是否已推价格" },
+      { key: "effectiveDate", title: "生效日期" },
+      { key: "file", title: "附件" },
+      { key: "tenantId", title: "租户号" },
+      { key: "revision", title: "乐观锁" },
+      { key: "createByName", title: "创建人名称" },
+      { key: "updateByName", title: "更新人" },
+      { key: "delFlag", title: "删除标记" }
+    ];
+    const initColumns = () =>
+      columns.map((column) => {
+        const clearable = column.clearable || true;
+        if (column.type === "InputNumber") {
+          return {
+            ...column,
+            clearable,
+            config: { controlsPosition: "right" },
+          };
+        }
+        if (column.type === "DatePicker") {
+          return {
+            ...column,
+            clearable,
+            config: { type: "date" },
+          };
+        }
+        return {
+          ...column,
+          clearable,
+        };
+      });
+    const initParams = () => arr2Obj(initColumns(), "key", "value");
+    // 标签页列
+    const tabColumns = [
+      {
+        key: 'materialBasic',
+        title: '物料信息表',
+        tableColumns: [],
+      },
+      {
+        key: 'enforcementScope',
+        title: '执行范围组织',
+        tableColumns: [],
+      },
+    ]
+    const initTabColumns = () => tabColumns;
+    return {
+      visible: false,
+      // 主数据表头
+      columns: initColumns(),
+      // 表单
+      params: initParams(),
+      options: [
+        {
+          value: "选项1",
+          label: "黄金糕",
+        },
+        {
+          value: "选项2",
+          label: "双皮奶",
+        },
+        {
+          value: "选项3",
+          label: "蚵仔煎",
+        },
+        {
+          value: "选项4",
+          label: "龙须面",
+        },
+        {
+          value: "选项5",
+          label: "北京烤鸭",
+        },
+      ],
+      // 标签页表格列
+      tabColumns: initTabColumns(),
+      // 标签页激活
+      tabName: "materialBasic",
+      // 标签页对应数据
+      tabTableDatas: {
+        materialBasic: [],
+        enforcementScope: [],
+      },
+    }
+  },
+  methods: {
+    setVisible(prop) {
+      this.visible = prop;
+    },
+    handleClose() { },
+    handleClick() { },
+  },
+  created() { },
 }
 </script>