Przeglądaj źródła

Merge branch 'master' into 测试

lxf 1 rok temu
rodzic
commit
8d5f483a69

+ 3 - 0
src/components/byTable/index.vue

@@ -130,6 +130,9 @@
           :selectable="(rowData, rowIndex) => isSelectable(rowData, rowIndex, item)"
           :sortable="item.sortable || false"
           :prop="item.attrs.prop">
+          <template #header v-if="item.header">
+            <slot :name="item.attrs.slotHeader" v-if="item.attrs.slotHeader"> 插槽占位符 </slot>
+          </template>
           <template #default="scope" v-if="!item.type">
             <slot :name="item.attrs.slot" :item="scope.row" v-if="item.attrs.slot"> 插槽占位符 </slot>
             <div v-else-if="isFunction(getValue(scope, item))">

+ 37 - 3
src/views/group/data-board/turnover-rate/index.vue

@@ -26,6 +26,7 @@
           action: () => deriveExcel(),
         },
       ]"
+      :tableHeight="'calc(100vh - 297px)'"
       @get-list="getList"
       @clickReset="clickReset">
       <template #bomSpecName="{ item }">
@@ -40,6 +41,33 @@
           </el-tooltip>
         </div>
       </template>
+      <template #turnoverRateThirtyDays>
+        <span>30天周转率</span>
+        <el-tooltip class="box-item" effect="dark" placement="bottom">
+          <template #content>
+            <div>库存周转率=时间段天数/(时间段天数X (1/2) X (期初库存数量+期末库存数量)/时间段销售量)</div>
+          </template>
+          <el-icon style="cursor: pointer; margin-left: 4px; transform: translateY(2px)"><QuestionFilled /></el-icon>
+        </el-tooltip>
+      </template>
+      <template #turnoverRateSixtyDays>
+        <span>60天周转率</span>
+        <el-tooltip class="box-item" effect="dark" placement="bottom">
+          <template #content>
+            <div>库存周转率=时间段天数/(时间段天数X (1/2) X (期初库存数量+期末库存数量)/时间段销售量)</div>
+          </template>
+          <el-icon style="cursor: pointer; margin-left: 4px; transform: translateY(2px)"><QuestionFilled /></el-icon>
+        </el-tooltip>
+      </template>
+      <template #turnoverRateNinetyDays>
+        <span>90天周转率</span>
+        <el-tooltip class="box-item" effect="dark" placement="bottom">
+          <template #content>
+            <div>库存周转率=时间段天数/(时间段天数X (1/2) X (期初库存数量+期末库存数量)/时间段销售量)</div>
+          </template>
+          <el-icon style="cursor: pointer; margin-left: 4px; transform: translateY(2px)"><QuestionFilled /></el-icon>
+        </el-tooltip>
+      </template>
     </byTable>
   </el-card>
 </template>
@@ -123,9 +151,11 @@ const config = computed(() => {
       attrs: {
         label: "30天周转率",
         prop: "turnoverRateThirtyDays",
-        width: 130,
+        width: 140,
+        slotHeader: "turnoverRateThirtyDays",
       },
       sortable: true,
+      header: true,
     },
     {
       attrs: {
@@ -138,9 +168,11 @@ const config = computed(() => {
       attrs: {
         label: "60天周转率",
         prop: "turnoverRateSixtyDays",
-        width: 130,
+        width: 140,
+        slotHeader: "turnoverRateSixtyDays",
       },
       sortable: true,
+      header: true,
     },
     {
       attrs: {
@@ -153,9 +185,11 @@ const config = computed(() => {
       attrs: {
         label: "90天周转率",
         prop: "turnoverRateNinetyDays",
-        width: 130,
+        width: 140,
+        slotHeader: "turnoverRateNinetyDays",
       },
       sortable: true,
+      header: true,
     },
     {
       attrs: {

+ 36 - 113
src/views/production/warehouse/purchase-stock-pending/add.vue

@@ -8,12 +8,12 @@
       highlight-current-row
       :action-list="[
         {
-          text: '导入到货单',
+          text: '导入采购到货单',
           action: () => clickUpload(),
         },
         {
-          text: '新增采购入库',
-          action: () => clickAdd(),
+          text: '导入采购赠品',
+          action: () => clickGiveaway(),
         },
       ]">
       <template #dimension="{ item }">
@@ -25,7 +25,7 @@
       <el-button type="primary" @click="submitForm()" size="large" v-preReClick>确认并入库</el-button>
     </div>
 
-    <el-dialog title="导入到货单" v-if="openUpload" v-model="openUpload" width="600">
+    <el-dialog title="导入采购到货单" v-if="openUpload" v-model="openUpload" width="600">
       <div v-loading="loadingUpload">
         <el-upload :show-file-list="false" action="##" :http-request="uploadServerLog" :before-upload="handleBeforeUpload">
           <el-button style="background: #20b2aa; color: #fff; border: 1px solid #20b2aa">上传</el-button>
@@ -36,48 +36,14 @@
       </div>
     </el-dialog>
 
-    <el-dialog title="新增采购入库" v-if="openAdd" v-model="openAdd" width="80%">
-      <byForm :formConfig="formConfig" :formOption="formOption" v-model="formDataTwo.data" :rules="rules" ref="submit">
-        <template #purchaseId>
-          <div style="width: 100%">
-            <el-select v-model="formDataTwo.data.purchaseId" placeholder="采购合同" @change="changePurchase()">
-              <el-option v-for="item in purchaseList" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
-            </el-select>
-          </div>
-        </template>
-        <template #list>
-          <div style="width: 100%">
-            <el-table :data="formDataTwo.data.list" :row-style="{ height: '35px' }" header-row-class-name="tableHeader">
-              <el-table-column label="品号" prop="bomSpecCode" width="140" />
-              <el-table-column label="品名" prop="bomSpecName" min-width="220" />
-              <el-table-column label="采购数量" prop="purchaseQuantity" width="100" />
-              <el-table-column label="可入库数量" prop="canInStorageQuantity" width="100" />
-              <el-table-column label="到货数量" width="120">
-                <template #default="{ row, $index }">
-                  <el-form-item :prop="'list.' + $index + '.arrivalQuantity'" :rules="rules.arrivalQuantity" :inline-message="true" style="width: 100%">
-                    <el-input-number
-                      onmousewheel="return false;"
-                      v-model="row.arrivalQuantity"
-                      placeholder="数量"
-                      style="width: 100%"
-                      :controls="false"
-                      :min="0"
-                      :max="row.canInStorageQuantity" />
-                  </el-form-item>
-                </template>
-              </el-table-column>
-              <el-table-column label="操作" align="center" fixed="right" width="60">
-                <template #default="{ $index }">
-                  <el-button type="danger" @click="clickDelete($index)" text>删除</el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </div>
-        </template>
-      </byForm>
-      <div style="text-align: center; margin: 10px">
-        <el-button @click="openAdd = false" size="large">关 闭</el-button>
-        <el-button type="primary" @click="submitAddForm()" size="large" v-preReClick>确 认</el-button>
+    <el-dialog title="导入采购赠品" v-if="openGiveaway" v-model="openGiveaway" width="600">
+      <div v-loading="loadingGiveaway">
+        <el-upload :show-file-list="false" action="##" :http-request="giveawayServerLog" :before-upload="handleBeforeGiveaway">
+          <el-button style="background: #20b2aa; color: #fff; border: 1px solid #20b2aa">上传</el-button>
+        </el-upload>
+        <div style="text-align: center; margin: 10px">
+          <el-button @click="openGiveaway = false" size="large">关 闭</el-button>
+        </div>
       </div>
     </el-dialog>
   </div>
@@ -85,7 +51,6 @@
 
 <script setup>
 import byTable from "/src/components/byTable/index";
-import byForm from "/src/components/byForm/index";
 import { ElMessage } from "element-plus";
 
 const { proxy } = getCurrentInstance();
@@ -93,8 +58,6 @@ const loading = ref(false);
 const purchaseList = ref([]);
 const formData = reactive({
   data: {
-    purchaseId: "",
-    arrivalCode: "",
     purchasePendingStorageBomList: [],
   },
 });
@@ -214,7 +177,8 @@ const uploadServerLog = (params) => {
   proxy.postUploadFile("/purchasePendingStorage/purchaseArrivalImport", formFile).then(
     (res) => {
       ElMessage({ message: "导入成功", type: "success" });
-      formData.data = res.data;
+      console.log(res);
+      formData.data.purchasePendingStorageBomList = res.data;
       loadingUpload.value = false;
       openUpload.value = false;
     },
@@ -224,72 +188,31 @@ const uploadServerLog = (params) => {
     }
   );
 };
-const formOption = reactive({
-  inline: true,
-  labelWidth: "120px",
-  itemWidth: 100,
-  rules: [],
-  labelPosition: "right",
-  disabled: false,
-});
-const formConfig = computed(() => {
-  return [
-    {
-      type: "slot",
-      prop: "purchaseId",
-      slotName: "purchaseId",
-      label: "采购合同",
-      itemWidth: 50,
-    },
-    {
-      type: "slot",
-      slotName: "list",
-      label: "",
-    },
-  ];
-});
-const rules = ref({
-  purchaseId: [{ required: true, message: "请选择采购合同", trigger: "change" }],
-  arrivalQuantity: [{ required: true, message: "请输入数量", trigger: "change" }],
-});
-const openAdd = ref(false);
-const formDataTwo = reactive({
-  data: {
-    purchaseId: "",
-    arrivalCode: "",
-    list: [],
-  },
-});
-const submit = ref("");
-const clickAdd = () => {
-  formDataTwo.data = {
-    purchaseId: "",
-    arrivalCode: "",
-    list: [],
-  };
-  openAdd.value = true;
-};
-const changePurchase = () => {
-  formDataTwo.data.list = [];
-  proxy.post("/purchaseReturn/getPurchaseBomPage", { id: formDataTwo.data.purchaseId }).then((res) => {
-    formDataTwo.data.list = res;
-  });
+const openGiveaway = ref(false);
+const loadingGiveaway = ref(false);
+const clickGiveaway = () => {
+  loadingGiveaway.value = false;
+  openGiveaway.value = true;
 };
-const clickDelete = (index) => {
-  formDataTwo.data.list.splice(index, 1);
+const handleBeforeGiveaway = () => {
+  loadingGiveaway.value = true;
 };
-const submitAddForm = () => {
-  submit.value.handleSubmit(() => {
-    let list = formDataTwo.data.list.filter((item) => item.arrivalQuantity > 0);
-    if (list && list.length > 0) {
-      formData.data.purchaseId = formDataTwo.data.purchaseId;
-      formData.data.purchasePendingStorageBomList = formDataTwo.data.list;
-      ElMessage({ message: "添加成功", type: "success" });
-      openAdd.value = "";
-    } else {
-      return ElMessage("请添加入库清单");
+const giveawayServerLog = (params) => {
+  let file = params.file;
+  let formFile = new FormData();
+  formFile.append("file", file);
+  proxy.postUploadFile("/purchasePendingStorage/purchaseGiftImport", formFile).then(
+    (res) => {
+      ElMessage({ message: "导入成功", type: "success" });
+      formData.data.purchasePendingStorageBomList = res.data;
+      loadingGiveaway.value = false;
+      openGiveaway.value = false;
+    },
+    (err) => {
+      console.log(err);
+      loadingGiveaway.value = false;
     }
-  });
+  );
 };
 </script>