Selaa lähdekoodia

feature/预齐套页面扫描料箱绑定和查询料箱绑定&&进程页面添加流转卡号

dy 1 vuosi sitten
vanhempi
commit
6dc726c54f

+ 40 - 0
src/api/prepare/index.ts

@@ -30,3 +30,43 @@ export function getBoxInfo(data: any) {
     data,
   });
 }
+//扫描料箱
+export function getBoxDetail(data: any) {
+  return request({
+    url: "/api/v1/process/vehicleOperation/vehicleDetail",
+    method: "post",
+    data,
+  });
+}
+//扫物料码返扫码数据
+export function getMaterialInfo(data: any) {
+  return request({
+    url: "/api/v1/process/vehicleOperation/material",
+    method: "post",
+    data,
+  });
+}
+//绑定箱子
+export function vehicleBiding(data: any) {
+  return request({
+    url: "/api/v1/process/vehicleOperation/vehicleBiding",
+    method: "post",
+    data,
+  });
+}
+//箱子出库
+export function outBox(data: any) {
+  return request({
+    url: "/api/v3/wmsOrder/outBox",
+    method: "post",
+    data,
+  });
+}
+//新载具物料绑定
+export function addOperation(data: any) {
+  return request({
+    url: "/api/v1/process/vehicleOperation/add",
+    method: "post",
+    data,
+  });
+}

+ 1 - 4
src/components/Empty/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-empty :description="description" :image="emptyImage" :size="size" />
+  <el-empty :description="description" :image="emptyImage" />
 </template>
 
 <script setup lang="ts">
@@ -10,9 +10,6 @@ defineProps({
     type: String,
     default: "暂无数据",
   },
-  size: {
-    type: Number,
-  },
 });
 const emptyImage = ref(EmptyImageSvg);
 </script>

+ 0 - 89
src/components/PDFView/index.vue

@@ -1,89 +0,0 @@
-<template>
-  <el-button
-    v-if="contentType === 'button'"
-    :link="isLink"
-    :type="btnType"
-    @click="showPdf"
-  >
-    {{ btnText }}
-  </el-button>
-  <VuePdfEmbed
-    v-else
-    :page="pageNumber"
-    :source="pdfSource"
-    annotation-layer
-    text-layer
-    @click="showPdf"
-  />
-  <el-drawer
-    v-if="needToShowPdf"
-    v-model="visible"
-    :footer="false"
-    :header="false"
-    :show-close="false"
-    destroy-on-close
-    direction="rtl"
-    size="972px"
-  >
-    <VuePdfEmbed
-      :page="showPdfNumber"
-      :source="pdfSource"
-      annotation-layer
-      text-layer
-    />
-  </el-drawer>
-</template>
-
-<script lang="ts" setup>
-import VuePdfEmbed from "vue-pdf-embed";
-// essential styles
-import "vue-pdf-embed/dist/style/index.css";
-
-// optional styles
-import "vue-pdf-embed/dist/style/annotationLayer.css";
-import "vue-pdf-embed/dist/style/textLayer.css";
-
-// either URL, Base64, binary, or document proxy
-const props = defineProps({
-  pdfSource: {
-    type: String,
-    required: true,
-  },
-  pageNumber: {
-    type: Number,
-    default: 0,
-  },
-  needToShowPdf: {
-    type: Boolean,
-    default: false,
-  },
-  contentType: {
-    type: String as PropType<"button" | "pdf">,
-    default: "pdf",
-  },
-  btnText: {
-    type: String,
-    default: "预览",
-  },
-  btnType: {
-    type: String,
-    default: "primary",
-  },
-  isLink: {
-    type: Boolean,
-    default: false,
-  },
-  showPdfNumber: {
-    type: Number,
-    default: 0,
-  },
-});
-
-const visible = ref(false);
-
-const showPdf = () => {
-  visible.value = true;
-};
-</script>
-
-<style lang="scss" scoped></style>

+ 22 - 24
src/layout/components/header.vue

@@ -1,12 +1,7 @@
 <template>
   <div class="commonHeader">
     <div style="width: 155px">
-      <svg-icon
-        v-if="routeMeta.back"
-        icon-class="back"
-        size="48"
-        @click="commonBack"
-      />
+      <svg-icon v-if="routeMeta.back" icon-class="back" size="48" @click="commonBack" />
       <svg-icon v-else icon-class="LOGO" style="height: 48px; width: 155px" />
     </div>
     <div v-if="routeMeta.back && routeMeta.title" class="middle-title">
@@ -18,31 +13,20 @@
     </div>
     <div>
       <el-space>
+        <div class="">
+          <svg-icon icon-class="lingdang" size="48" class="activeNotice" />
+        </div>
         <div class="task">
-          <el-progress
-            :percentage="processCount"
-            :show-text="false"
-            :stroke-width="10"
-          />
+          <el-progress :percentage="processCount" :show-text="false" :stroke-width="10" />
           <div class="process">任务进度: {{ processCount }}%</div>
         </div>
         <div>
           <div class="name">{{ userStore.user.username }}</div>
           <div class="work">{{ userStore.user.station }}</div>
         </div>
-        <el-dropdown
-          ref="dropdown1"
-          trigger="contextmenu"
-          @command="handleCommand"
-        >
-          <img
-            v-if="userStore.user.avatar"
-            :alt="userStore.user.avatar"
-            :src="userStore.user.avatar"
-            object-fit="cover"
-            style="width: 48px; height: 48px; border-radius: 24px"
-            @click="showClick"
-          />
+        <el-dropdown ref="dropdown1" trigger="contextmenu" @command="handleCommand">
+          <img v-if="userStore.user.avatar" :alt="userStore.user.avatar" :src="userStore.user.avatar" object-fit="cover"
+            style="width: 48px; height: 48px; border-radius: 24px" @click="showClick" />
           <svg-icon v-else icon-class="head" size="48" @click="showClick" />
           <template #dropdown>
             <el-dropdown-menu style="width: 150px">
@@ -185,6 +169,20 @@ const handleCommand = (command: string | number | object) => {
     margin-right: 10px;
   }
 
+  .activeNotice {
+    animation: swing 0.15s infinite alternate ease-in-out;
+  }
+
+  @keyframes swing {
+    0% {
+      transform: rotate(-45deg);
+    }
+
+    100% {
+      transform: rotate(45deg);
+    }
+  }
+
   .process {
     font-weight: 500;
     font-size: 14px;

+ 15 - 0
src/store/modules/common.ts

@@ -8,6 +8,21 @@ export const useCommonStore = defineStore("commonStore", {
     tableType: 1,
     tableTitle: "",
   }),
+  actions: {
+    // 获取当前时间格式的函数
+    currentTimeFormat() {
+      const now = new Date();
+      const options = {
+        year: "numeric",
+        month: "short",
+        day: "numeric",
+        hour: "2-digit",
+        minute: "2-digit",
+        second: "2-digit",
+      };
+      return now.toLocaleDateString(undefined, options);
+    },
+  },
 });
 
 export function useCommonStoreHook() {

+ 4 - 0
src/styles/index.scss

@@ -65,6 +65,10 @@
   gap: 20px;
   grid-template-columns: 1fr 1fr;
 }
+.stepsViewScrollH {
+  width: calc((100vw / 6 * 5) - 50px);
+  height: calc(100vh - 204px);
+}
 
 
 //flex布局居中

+ 20 - 18
src/views/prepare-complete-suit/components/first.vue

@@ -25,13 +25,8 @@
                 <span :class="scope.row.totalMaterial - scope.row.completeNum < 0
                     ? 'sumOk'
                     : 'sumFail'
-                  ">{{
-    scope.row.totalMaterial - scope.row.completeNum > 0
-    ? scope.row.totalMaterial - scope.row.completeNum
-    : Math.abs(
-      scope.rwo.totalMaterial - scope.row.completeNum
-    )
-  }}</span>
+                  ">{{ scope.row.totalMaterial - scope.row.completeNum }}</span>
+                
               </template>
             </el-table-column>
 
@@ -55,10 +50,12 @@
     </el-col>
   </el-row>
   <div class="scanBox">
-    <el-button type="primary" @click="openPop('扫描料箱')" plain>扫描料箱</el-button>
+    <el-button type="primary" :disabled="disabled" @click="openPop('扫描料箱')" plain>扫描料箱</el-button>
   </div>
-  <ScanCode v-model="modelValue" :title="scanCodeTitle" @scancodefnc="scanCodeFnc" />
-  <ShowInfo v-model="infoModelValue" />
+  <ScanCode v-model="modelValue" :title="scanCodeTitle" @scancodefnc="scanCodeFnc" :operationId="operationId"
+    :workOrderCode="workOrderCode" @gettable="getTableData" />
+  <ShowInfo v-model="infoModelValue" :operationId="operationId" :workOrderCode="workOrderCode"
+    @reset-options-data="getTableData" />
 </template>
 
 <script lang="ts" setup>
@@ -86,11 +83,12 @@ const selectOrderIndex = ref(0);
 const selectStepIndex = ref(0);
 const tableFlexHeight = ref(0);
 const materialData = ref([]);
-const selectMaterialData = ref([]);
 const selectRowData = ref({});
+const operationId = ref("0");
+const workOrderCode = ref("0");
+const disabled = ref(false);
 provide("scanCode", scanCode);
 provide("materialData", materialData);
-provide("selectMaterialData", selectMaterialData);
 provide("selectRowData", selectRowData);
 const showInfoPop = async (row: any) => {
   //获取对应row箱子数据
@@ -99,9 +97,7 @@ const showInfoPop = async (row: any) => {
   infoModelValue.value = true;
 };
 //扫描料箱
-const scanCodeFnc = async () => {
-  
-};
+const scanCodeFnc = async () => { };
 const isInclude = () => {
   let res = false;
   tableData.value.forEach((item) => {
@@ -143,7 +139,11 @@ const getOrderData = async () => {
 
 const setOrderIndex = (index: number) => {
   selectOrderIndex.value = index;
-  getStationData(orderData.value[selectOrderIndex.value].workOrderCode);
+  if (orderData.value.length > 0) {
+    getStationData(orderData.value[selectOrderIndex.value].workOrderCode);
+  } else {
+    disabled.value = true;
+  }
 };
 const getStationData = async (id: any) => {
   const { data } = await getStation(id);
@@ -151,11 +151,13 @@ const getStationData = async (id: any) => {
 };
 const getTableData = async () => {
   const { data } = await getListData({
-    operationId: opsArray.value[selectStepIndex.value].operationId,
+    operationId: String(opsArray.value[selectStepIndex.value].operationId),
     workOrderCode: orderData.value[selectOrderIndex.value].workOrderCode,
     pageNo: page.value,
     pageSize: limit.value,
   });
+  operationId.value = String(opsArray.value[selectStepIndex.value].operationId);
+  workOrderCode.value = orderData.value[selectOrderIndex.value].workOrderCode;
   tableData.value = data.records;
   total.value = data.totalCount;
 };
@@ -164,7 +166,7 @@ const setSelectStepIndex = (index: number) => {
   getTableData();
 };
 onMounted(async () => {
-  tableFlexHeight.value = document.getElementById("table");
+  tableFlexHeight.value = Number(document.getElementById("table").offsetHeight);
   await getOrderData();
   setOrderIndex(0);
 });

+ 5 - 1
src/views/prepare-complete-suit/popUpView/bangding.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="midPopUp" v-if="modelValue">
     <div class="container">
-      <div class="headerTittle">绑定确认</div>
+      <div class="headerTittle">{{ title }}</div>
       <el-scrollbar style="padding: 0 20px">
         <div class="infoBox" v-for="item in selectedItem">{{ item.name }}</div>
       </el-scrollbar>
@@ -19,6 +19,10 @@ const props = defineProps({
     type: Number,
     default: 0,
   },
+  title: {
+    type: String,
+    default: "",
+  },
 });
 const emits = defineEmits(["update:modelValue"]);
 const materialData = inject("materialData");

+ 213 - 27
src/views/prepare-complete-suit/popUpView/bindingScan.vue

@@ -1,27 +1,67 @@
 <template>
   <div class="midPopUp" v-if="modelValue">
     <div class="container">
-      <div class="headerTittle">料箱绑定</div>
+      <div class="headerTittle">载具绑定</div>
       <div class="body">
         <div class="boxInfo">
-          <div class="info"></div>
-          <el-table class="infoTable" :data="selectIndexInfoData" border>
+          <div class="info">
+            <div class="titleText">载具名:{{ boxInfoData.vehicleName }}</div>
+            <div class="describeText">
+              载具编号:{{ boxInfoData.vehicleNo }}
+            </div>
+          </div>
+          <div class="scanBox">
+            <div class="titleText">请扫物料码:</div>
+            <ScanCodeInput v-model="scanCode" @enterfnc="enterfnc" />
+          </div>
+          <el-table class="infoTable" :data="scanItemArray" border>
             <el-table-column prop="materialName" label="物料名称" width="120" />
-            <el-table-column prop="materialNo" label="物料编号" />
-            <el-table-column prop="num" label="出入库数量" />
-            <el-table-column prop="coordinate" label="储位坐标" />
+            <el-table-column prop="materialCode" label="物料编号" />
+            <el-table-column prop="spec" label="规格" />
+            <el-table-column prop="num" label="数量" align="center" />
+            <el-table-column prop="" label="操作" align="center">
+              <template #default="scope">
+                <el-popconfirm title="确认清空?" @confirm="tableDelete(scope.row.materialCode)" confirm-button-text="确定"
+                  cancel-button-text="取消">
+                  <template #reference>
+                    <span class="opera">清空</span>
+                  </template>
+                </el-popconfirm>
+              </template>
+            </el-table-column>
             <template #empty>
               <Empty />
             </template>
           </el-table>
         </div>
         <div class="scan">
-          <div style="padding: 0 20px">
-            <ScanCodeInput />
+          <div class="scanBox">
+            <div class="titleText">搜索记录:</div>
+            <el-input clearable v-model="seachInput" placeholder="请输入已扫码" />
+          </div>
+          <div class="titleText" style="display: flex; justify-content: space-between">
+            扫码记录:<span>本次总扫码{{ scanAllNum }}次</span>
+            <span>目前实际记录{{ recordArray.length }}次</span>
           </div>
           <el-scrollbar class="scrollbarBox">
-            <div class="infoBox" v-for="item in 8">
-              {{ item.name }}
+            <div class="infoBox" v-for="item in showRecordArray">
+              <div class="describeText textRow">扫码时间:{{ item.time }}</div>
+              <div class="describeText textRow">
+                扫码内容:{{ item.scanCode }}
+              </div>
+              <div class="describeText textRow">
+                物料名称:{{ item.materialName }}
+              </div>
+              <div class="describeText textRow">
+                物料编码:{{ item.materialCode }}
+              </div>
+              <div class="describeText textRow">物料数量:{{ item.num }}</div>
+              <div class="describeText delete" @click="recordDelete(index)">
+                删除记录
+              </div>
+            </div>
+            <div v-if="showRecordArray.length == 0" class="infoBox titleText">
+              暂无内容
             </div>
           </el-scrollbar>
         </div>
@@ -29,27 +69,123 @@
 
       <div class="bottomBtn">
         <el-button class="leftBtn" @click="handleClose">取消</el-button>
-        <el-button class="rightBtn" @click="emits('submit')" type="primary">绑定</el-button>
+        <el-button class="rightBtn" @click="handleSubmit" type="primary">绑定</el-button>
       </div>
     </div>
   </div>
 </template>
 
 <script lang="ts" setup>
+import { getMaterialInfo, addOperation } from "@/api/prepare";
+import { useCommonStore } from "@/store";
+const store = useCommonStore();
 const props = defineProps({
   modelValue: {
     type: Number,
     default: 0,
   },
+  workOrderCode: {
+    type: String,
+  },
+  operationId: {
+    type: String,
+  },
+});
+const boxInfoData = inject("boxInfoData");
+const scanAllNum = ref(0);
+const emits = defineEmits(["update:modelValue", "close"]);
+//二维码
+const scanCode = ref("");
+//存放扫码信息总盒子
+const recordArray = ref([]);
+const seachInput = ref("");
+const showRecordArray = computed(() => {
+  if (seachInput.value != "") {
+    return recordArray.value.filter(
+      (item) => item.scanCode == seachInput.value
+    );
+  } else {
+    return recordArray.value;
+  }
 });
 
-const emits = defineEmits(["update:modelValue"]);
-const materialData = inject("materialData");
-const selectIndexInfoData = ref([]);
-const selectedItem = computed(() =>
-  materialData.value.filter((item) => item.selected == true)
-);
-const handleClose = () => emits("update:modelValue", false);
+//物料表格数据(会根据最近扫码后的结果进行统计展示)
+const scanItemArray = computed(() => {
+  let materialCodeArray = [];
+  let resArray = [];
+  recordArray.value.forEach((item) => {
+    if (!materialCodeArray.includes(item.materialCode)) {
+      materialCodeArray.push(item.materialCode);
+      resArray.push({
+        materialCode: item.materialCode,
+        materialName: item.materialName,
+        num: item.num,
+        spec: item.spec,
+      });
+    } else {
+      resArray.forEach((res) => {
+        if (res.materialCode == item.materialCode) {
+          res.num = Number(res.num) + Number(item.num);
+        }
+      });
+    }
+  });
+  return resArray;
+});
+//清空操作
+const tableDelete = (code) => {
+  recordArray.value = recordArray.value.filter(
+    (item) => item.materialCode != code
+  );
+};
+const recordDelete = (index) => {
+  recordArray.value.splice(index, 1);
+};
+const enterfnc = async () => {
+  const { data, code } = await getMaterialInfo({
+    materialLabel: scanCode.value,
+    operationId: props.operationId,
+    workOrderCode: props.workOrderCode,
+  });
+  if (code == "200") {
+    const obj = {
+      ...data,
+      scanCode: scanCode.value,
+      time: store.currentTimeFormat(),
+    };
+    recordArray.value.unshift(obj);
+    scanCode.value = "";
+    scanAllNum.value = scanAllNum.value + 1;
+  }
+};
+const addTableSum = computed((code) => {
+  return;
+});
+const reset = () => {
+  scanAllNum.value = 0;
+  scanCode.value = "";
+  recordArray.value = [];
+  seachInput.value = [];
+};
+const handleClose = () => {
+  emits("update:modelValue", false);
+  reset();
+};
+const handleSubmit = async () => {
+  const { data, code } = await addOperation({
+    operationId: props.operationId,
+    workOrderCode: props.workOrderCode,
+    processVehicleMaterialList: [...recordArray.value],
+    vehicleCode: boxInfoData.value.vehicleNo,
+    vehicleId: boxInfoData.value.vehicleId,
+    vehicleName: boxInfoData.value.vehicleName,
+  });
+  if (code == "200") {
+    ElMessage.success("绑定成功!");
+    handleClose();
+    emits("close");
+  }
+};
 </script>
 
 <style lang="scss" scoped>
@@ -57,8 +193,10 @@ const handleClose = () => emits("update:modelValue", false);
   z-index: 4;
 }
 
-.el-empty {
-  transform: scale(0.7);
+.opera {
+  color: var(--el-color-primary);
+  font-size: $f20;
+  cursor: pointer;
 }
 
 .container {
@@ -77,17 +215,27 @@ const handleClose = () => emits("update:modelValue", false);
 
       .info {
         width: 100%;
-        height: 120px;
+        height: 80px;
         border-radius: 16px;
         background-color: white;
+        padding: $p10;
+        display: flex;
+        flex-direction: column;
+
+        .titleText {
+          line-height: 30px;
+        }
+
+        .describeText {
+          text-align: left;
+        }
       }
 
       .infoTable {
         width: 100%;
         margin-top: $p20;
-        min-height: 240px;
-        height: calc(80vh - 260px);
-
+        min-height: 120px;
+        height: calc(80vh - 310px);
         border-radius: 16px;
       }
     }
@@ -95,25 +243,63 @@ const handleClose = () => emits("update:modelValue", false);
     .scan {
       width: 50%;
       padding: 20px;
+      padding-bottom: 0px;
+
+      flex .scanBox {
+        padding: 0 20px;
+        width: 100%;
+        height: 40px;
+        display: flex;
+        flex-direction: column;
+        justify-content: space-evenly;
+      }
 
       .scrollbarBox {
-        height: calc(80vh - 165px);
-        padding: $p20;
+        height: calc(80vh - 226px);
+        padding: $p20 0;
+        padding-bottom: 0px;
       }
     }
   }
 }
 
+:deep(.el-input__wrapper) {
+  box-shadow: 0 0 0 0px var(--el-input-border-color, var(--el-border-color)) inset;
+  cursor: default;
+  border-radius: 16px;
+
+  .el-input__inner {
+    cursor: default !important;
+  }
+}
+
 .el-table__empty-block {
   height: 0 !important;
 }
 
 .infoBox {
   width: 100%;
-  height: 80px;
   background-color: white;
   border-radius: 16px;
   margin-bottom: $p10;
+  @include flex;
+  flex-wrap: wrap;
+  padding: 20px;
+
+  .describeText {
+    line-height: 22px;
+    text-align: left;
+    color: black;
+  }
+
+  .textRow {
+    height: 22px;
+  }
+
+  .delete {
+    text-align: right;
+    color: var(--el-color-primary);
+  }
 }
 
 .bottomBtn {

+ 29 - 6
src/views/prepare-complete-suit/popUpView/scanCode.vue

@@ -2,20 +2,21 @@
   <div class="midPopUp" @click="handleClose" v-if="modelValue">
     <div class="container" @click.stop>
       <div class="headerTittle">{{ title }}</div>
-      <div class="describeText">请扫料码</div>
+      <div class="describeText">请扫料箱编码</div>
       <ScanCodeInput v-model="scanCode" />
       <div class="bottomBtn">
         <el-button class="leftBtn" @click="handleClose">关闭</el-button>
         <el-button class="rightBtn" @click="handleSubmit" type="primary">确定</el-button>
       </div>
+      <BindingScan v-model="showBinding" :operationId="operationId" :workOrderCode="workOrderCode" @close="handleClose" />
     </div>
-    <BindingScan v-model="showBinding" />
   </div>
 </template>
 
 <script lang="ts" setup>
 import ScanCodeInput from "@/components/ScanCodeInput/index.vue";
 import BindingScan from "./bindingScan.vue";
+import { getBoxDetail } from "@/api/prepare";
 const props = defineProps({
   modelValue: {
     type: Boolean,
@@ -24,16 +25,38 @@ const props = defineProps({
   title: {
     type: String,
   },
+  workOrderCode: {
+    type: String,
+  },
+  operationId: {
+    type: String,
+  },
 });
-const scanCode = inject("scanCode");
+const boxInfoData = ref({});
+provide("boxInfoData", boxInfoData);
+const scanCode = ref("");
 const showBinding = ref(false);
-const emits = defineEmits(["update:modelValue", "scancodefnc"]);
+const emits = defineEmits(["update:modelValue", "scancodefnc", "gettable"]);
 const handleClose = () => {
   emits("update:modelValue", false);
+  emits("gettable");
 };
 const handleSubmit = () => {
-  emits("scancodefnc");
-  showBinding.value = true;
+  getBoxInfo();
+};
+const getBoxInfo = async () => {
+  const { data } = await getBoxDetail({
+    workOrderCode: props.workOrderCode,
+    operationId: props.operationId,
+    vehicleCode: scanCode.value,
+  });
+  if (data.isEnable == 1) {
+    boxInfoData.value = data;
+    showBinding.value = true;
+  } else {
+    ElMessage.warning("该物料箱包含其他物料!");
+    return;
+  }
 };
 </script>
 

+ 116 - 32
src/views/prepare-complete-suit/popUpView/showInfo.vue

@@ -4,20 +4,27 @@
       <el-row :gutter="20">
         <el-col :span="14" class="leftView">
           <div class="btns">
-            <el-button :class="selectedType == 'default' ? 'activeBtn' : ''" @click="setSelectedType('default')"
-              type="primary" plain>全 部</el-button>
-            <el-button :class="selectedType == 'no' ? 'activeBtn' : ''" @click="setSelectedType('no')" type="primary"
-              plain>不符合</el-button>
-            <el-button :class="selectedType == 'yes' ? 'activeBtn' : ''" @click="setSelectedType('yes')" type="primary"
-              plain>符 合</el-button>
-
+            <!-- <el-button :class="selectedType == 'default' ? 'activeBtn' : ''" @click="setSelectedType('default')"
+              type="primary" plain>全 部</el-button> -->
+            <el-button :class="selectedType == 'yes' ? 'activeBtn' : ''" @click="setSelectedType('yes')"
+              :disabled="disabled" type="primary" plain>符 合</el-button>
+            <el-button :class="selectedType == 'no' ? 'activeBtn' : ''" @click="setSelectedType('no')"
+              :disabled="disabled" type="primary" plain>不符合</el-button>
             <div class="submitBox">
-              <el-button type="primary" @click="close" v-if="!bingdingStatus" plain>关 闭</el-button>
-              <el-button type="primary" style="background-color: #f9bf5c90" v-if="!bingdingStatus" @click="binding"
-                plain>绑 定</el-button>
-              <el-button @click="cancelBingding" type="primary" v-if="bingdingStatus" plain>取 消</el-button>
+              <el-button type="primary" @click="close" v-if="!bingdingStatus && !outboundStatus" plain>关 闭</el-button>
+              <el-button type="primary" style="background-color: #f9bf5c90"
+                v-if="!bingdingStatus && selectedType == 'yes'" @click="binding" plain>绑 定</el-button>
+
+              <el-button @click="cancelBingding" type="primary" v-if="bingdingStatus || outboundStatus" plain>取
+                消</el-button>
+              <el-button type="primary" style="background-color: #f9bf5c90" v-if="!bingdingStatus &&
+                selectedType == 'no' &&
+                outboundStatus == false
+                " @click="outboundFnc" plain>出 库</el-button>
               <el-button type="primary" @click="submit" style="background-color: #f9bf5c90; color: white; border: 0px"
                 v-if="bingdingStatus" plain>确 认</el-button>
+              <el-button type="primary" @click="submit" style="background-color: #f9bf5c90; color: white; border: 0px"
+                v-if="outboundStatus" plain>确 认</el-button>
             </div>
           </div>
           <div class="selectInfoBox">
@@ -47,12 +54,19 @@
             </el-scrollbar>
           </div>
           <el-scrollbar class="scrollbar">
-            <template v-for="(item, index) in materialData" @click="setSelectIndex(index)">
-              <div :class="item.selected == true ? 'item active' : 'item'" v-if="itemShowStatus(item)">
+            <template v-for="(item, index) in materialData">
+              <div :class="index == outboundIndex
+                  ? 'item bound'
+                  : item.selected == true
+                    ? 'item active'
+                    : 'item'
+                " v-if="itemShowStatus(item)" @click="setSelectIndex(index)">
+                <div>料箱名称:</div>
                 <div>{{ item.name }}</div>
+                <div>料箱编号:</div>
+                <div>{{ item.code }}</div>
               </div>
             </template>
-
             <Empty v-if="materialData.length < 1" />
           </el-scrollbar>
         </el-col>
@@ -63,7 +77,6 @@
               <el-table-column prop="materialNo" label="物料编号" />
               <el-table-column prop="num" label="出入库数量" />
               <el-table-column prop="coordinate" label="储位坐标" />
-
               <template #empty>
                 <Empty />
               </template>
@@ -72,28 +85,38 @@
         </el-col>
       </el-row>
     </div>
-    <Bangding v-model="showStatus" />
+    <Bangding v-model="showStatus" :title="bindingTitle" @submit="submitData" />
   </div>
 </template>
 
 <script lang="ts" setup>
 import Bangding from "./bangding.vue";
+import { vehicleBiding, outBox } from "@/api/prepare";
 const props = defineProps({
   modelValue: {
     type: Boolean,
     default: false,
   },
+  workOrderCode: {
+    type: String,
+  },
+  operationId: {
+    type: String,
+  },
 });
-const emits = defineEmits(["update:modelValue"]);
-const selectedType = ref("default");
+const emits = defineEmits(["update:modelValue", "resetOptionsData"]);
+const selectedType = ref("yes");
+const disabled = ref(false);
 const materialData = inject("materialData");
-const selectMaterialData = inject("selectMaterialData");
 const selectRowData = inject("selectRowData");
 const showStatus = ref(false);
+const outboundIndex = ref();
+const bindingTitle = ref("");
+const bingdingStatus = ref(false);
+const outboundStatus = ref(false);
+const selectIndex = ref(0);
 const itemShowStatus = (item: any) => {
-  if (selectedType.value == "default") {
-    return true;
-  } else if (selectedType.value == "yes") {
+  if (selectedType.value == "yes") {
     if (item.isEnable == 1) {
       return true;
     } else {
@@ -107,11 +130,13 @@ const itemShowStatus = (item: any) => {
     }
   }
 };
-const bingdingStatus = ref(false);
-const selectIndex = ref(0);
 const setSelectedType = (type: string) => {
   selectedType.value = type;
 };
+const outboundFnc = () => {
+  outboundStatus.value = true;
+  disabled.value = true;
+};
 const selectIndexInfoData = computed(() => {
   if (materialData.value.length > 0) {
     return materialData.value[selectIndex.value].list;
@@ -119,15 +144,30 @@ const selectIndexInfoData = computed(() => {
     return [];
   }
 });
+//盒子点击事件
 const setSelectIndex = (index: number) => {
   selectIndex.value = index;
-  if (bingdingStatus.value) {
-    if (materialData.value[selectIndex.value].selected == true) {
-      materialData.value[selectIndex.value].selected = false;
-    } else {
-      materialData.value[selectIndex.value].selected = true;
+  if (selectedType.value == "yes") {
+    if (bingdingStatus.value) {
+      if (materialData.value[selectIndex.value].selected == true) {
+        materialData.value[selectIndex.value].selected = false;
+      } else {
+        materialData.value[selectIndex.value].selected = true;
+      }
+      materialData.value[selectIndex.value].selectedIndex = index;
+    }
+  } else {
+    if (bingdingStatus.value) {
+      if (materialData.value[selectIndex.value].selected == true) {
+        materialData.value[selectIndex.value].selected = false;
+      } else {
+        materialData.value[selectIndex.value].selected = true;
+      }
+      materialData.value[selectIndex.value].selectedIndex = index;
+    }
+    if (outboundStatus.value) {
+      outboundIndex.value = selectIndex.value;
     }
-    materialData.value[selectIndex.value].selectedIndex = index;
   }
 };
 const closeTopItem = (index: number) => {
@@ -142,15 +182,51 @@ const close = () => {
 };
 const binding = () => {
   bingdingStatus.value = true;
+  disabled.value = true;
 };
 const cancelBingding = () => {
   bingdingStatus.value = false;
+  outboundStatus.value = false;
+  disabled.value = false;
 };
 const submit = () => {
+  if (outboundStatus.value == true) {
+    bindingTitle.value = "确认出库";
+  } else {
+    bindingTitle.value = "绑定确认";
+  }
   showStatus.value = true;
 };
 const reset = () => {
-  selectedType.value = "default";
+  selectedType.value = "yes";
+};
+//提交函数(包含绑定、出库)
+const submitData = async () => {
+  if (bingdingStatus.value == true) {
+    const codes = [];
+    materialData.value.forEach((item) => {
+      if (item.selected == true) {
+        codes.push(item.code);
+      }
+    });
+    const { data, code } = await vehicleBiding({
+      codes,
+      operationId: props.operationId,
+      workOrderCode: props.workOrderCode,
+    });
+    if (code == "200") {
+      ElMessage.success("绑定成功!");
+      emits("resetOptionsData");
+      close();
+    }
+  } else {
+    //出库
+    const { data, code } = await outBox({
+      vehicleNo: codes,
+      taskId: 0,
+      houseNo: "",
+    });
+  }
 };
 </script>
 
@@ -159,6 +235,11 @@ const reset = () => {
   width: 0 !important;
 }
 
+.bound {
+  background-color: #a52a2a80 !important;
+  color: white;
+}
+
 .leftView {
   width: calc(100vw);
 
@@ -240,7 +321,7 @@ const reset = () => {
     width: 100%;
     height: 70px;
     display: flex;
-    justify-content: space-between;
+    justify-content: space-evenly;
     padding-bottom: 10px;
 
     .submitBox {
@@ -272,6 +353,9 @@ const reset = () => {
       background-color: #ffffff60;
       display: inline-block;
       margin: $p20;
+      padding: $p20;
+      cursor: pointer;
+      box-sizing: border-box;
     }
   }
 }

+ 203 - 17
src/views/pro-steps/components/jiluxiang.vue

@@ -1,40 +1,226 @@
 <template>
-  <div class="stepsViewScroll">
-    <div class="operateBox"></div>
-    <div class="operateBox"></div>
+  <div class="stepsViewScrollH">
+    <template v-if="submitStatus == true">
+      <div class="operateBody">
+        <el-scrollbar>
+          <div class="operateBox" v-for="(item, index) in listData">
+            <div class="inputBox">
+              <div class="valueBox">
+                <div class="describeText value">{{ index + 1 }}.记录项:</div>
+                <div class="inputText">
+                  <el-input v-model="item.label" style="width: 240px" placeholder="请输入" />
+                </div>
+              </div>
+              <div class="valueBox">
+                <div class="describeText value">内容:</div>
+                <div class="inputText">
+                  <el-input v-model="item.inputValue" type="textarea" placeholder="请输入" />
+                </div>
+              </div>
+            </div>
+            <div class="operate">
+              <div class="iconBox">
+                <div class="operateText">增加</div>
+                <div class="operateText">删除</div>
+                <div class="operateText">编辑</div>
+                <div class="operateText">完成</div>
+                <div class="operateText">取消</div>
+              </div>
+            </div>
+          </div>
+          <div @click="add" class="operateBox" v-if="listData.length < 1" style="
+              height: 80px;
+              display: flex;
+              align-items: center;
+              justify-content: center;
+            ">
+            <el-icon size="30">
+              <Plus />
+            </el-icon>
+          </div>
+        </el-scrollbar>
+      </div>
+    </template>
+
+    <!-- 展示 -->
+    <div class="body" v-if="submitStatus == false">
+      <div class="left" v-if="listData.length > 0">
+        <el-scrollbar>
+          <div class="infoBox" v-for="item in listData"></div>
+        </el-scrollbar>
+      </div>
+      <div class="right" v-if="listData.length > 0">
+        <el-scrollbar>
+          <div class="describeText"></div>
+        </el-scrollbar>
+      </div>
+      <Empty v-if="listData.length == 0" />
+    </div>
+    <div class="btns">
+      <el-button @click="setSubmitStatus" type="primary" plain>{{
+        submitStatus ? "提 交" : "编 辑"
+      }}</el-button>
+      <el-button type="primary" v-if="submitStatus == true" @click="submitStatus = false" plain>取 消</el-button>
+    </div>
   </div>
 </template>
 
 <script lang="ts" setup>
+import { listAdd, getList } from "@/api/prosteps/jiluxiang";
+import { useProcessStore } from "@/store";
 defineOptions({
   name: "Jiluxiang",
 });
-const input = ref<number>(18);
+const submitStatus = ref(false);
+const store = useProcessStore();
 const jianDisabled = ref(true);
 const jiaDisabled = ref(false);
+const listData = ref([]);
+const submitData = ref([]);
+const getListData = async () => {
+  const { data } = await getList({
+    pageNo: 1,
+    pageSize: 9999,
+  });
+  listData.value = data.records;
+};
+const item = {
+  inputValue: "",
+  label: "",
+  processId: Number(store.scanInfo.id),
+  operationRecordItemId: Number(store.odersData.operationId),
+};
+const add = () => {
+  listData.value.push({ ...item, sort: listData.value.length + 1 });
+};
+const addAsync = async () => {
+  const { data } = await listAdd({
+    inputValue: Number(store.scanInfo.id),
+    label: Number(store.scanInfo.id),
+    processId: Number(store.scanInfo.id),
+    sortNum: 0,
+    operationRecordItemId: Number(store.odersData.operationId),
+  });
+};
+const setSubmitStatus = () => {
+  if (submitStatus.value == false) {
+    submitStatus.value = true;
+    return;
+  } else {
+    //提交保存
+  }
+};
+onMounted(() => {
+  getListData();
+});
 </script>
 
 <style lang="scss" scoped>
-.titleText {
-  font-size: $f24;
-  font-weight: $Medium;
+.describeText {
+  color: black;
 }
 
-.describeText {
-  font-size: $f20;
-  color: $font-default-60;
-  line-height: 25px;
+.stepsViewScrollH {
+  position: relative;
 }
 
-.operateBox {
+.btns {
   width: 100%;
-  height: 210px;
-  background-color: white;
-  border-radius: 16px;
+  height: 70px;
+
   display: flex;
-  padding: $p20;
-  justify-content: space-between;
   align-items: center;
+  justify-content: center;
+  margin-top: 10px;
+
+  .el-button {
+    width: 120px;
+    border-radius: 25px;
+    font-size: $f20;
+    height: 50px;
+    margin: 0 40px;
+  }
+}
+
+.operateBody {
+  width: 100%;
+  height: calc(100% - 80px);
+}
+
+.body {
+  width: 100%;
+  height: calc(100% - 80px);
+  @include flex;
+
+  .left {
+    width: 50%;
+
+    .infoBox {
+      display: inline-block;
+      width: 130px;
+      height: 130px;
+      background-color: white;
+      border-radius: 16px;
+      margin: 10px;
+      margin-top: 0px;
+      box-sizing: border-box;
+    }
+  }
+
+  .right {
+    width: 50%;
+    background-color: white;
+    border-radius: 16px;
+  }
+}
+
+.operateBox {
+  padding: $p20;
+  background-color: white;
+  border-radius: 16px;
+  margin: $p20;
   position: relative;
+  display: flex;
+
+  .inputBox {
+    flex: 1;
+    height: auto;
+    border: 1px solid #00000060;
+    border-radius: 16px;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-evenly;
+    padding: 0 $p20;
+
+    .valueBox {
+      display: flex;
+      margin: $p10 0;
+
+      .inputText {
+        flex: 1;
+      }
+
+      .value {
+        text-align: right;
+        width: 110px;
+      }
+    }
+  }
+
+  .operate {
+    width: 60px;
+    height: auto;
+    @include flex;
+
+    .iconBox {
+      display: flex;
+      flex-direction: column;
+    }
+  }
+}
+
+.el-icon {
+  width: 60px;
+  font-weight: bold;
 }
 </style>

+ 45 - 10
src/views/process/components/operate.vue

@@ -1,22 +1,36 @@
 <template>
   <div class="commonTitle">操作</div>
   <div class="body">
-    <div
-      v-for="(item, index) in operationObjs"
-      :key="index"
-      class="operateBox"
-      @click="handleClick(item)"
-    >
-      <span class="operateText">{{ item.text }}</span>
-      <svg-icon v-if="item.icon" :icon-class="item.icon" size="30" />
-      <span v-else>{{ item.num }}</span>
+    <ScanCode />
+    <div class="btnBox">
+      <el-button color="#0A59F7" class="btn" @click="call" round>
+        <span class="btnText">叫料</span>
+      </el-button>
+    </div>
+
+    <div class="operateBox" style="margin-top: 20px">
+      <span class="operateText">物料流转</span>
+      <svg-icon icon-class="liuzhuan" size="30" />
+    </div>
+    <div class="operateBox">
+      <span class="operateText">生产履历</span>
+      <svg-icon icon-class="shengchanlvli" size="30" />
+      <div v-for="(item, index) in operationObjs" :key="index" class="operateBox" @click="handleClick(item)">
+        <span class="operateText">{{ item.text }}</span>
+        <svg-icon v-if="item.icon" :icon-class="item.icon" size="30" />
+        <span v-else>{{ item.num }}</span>
+      </div>
+      <OperatePop v-model="callStatus" @opeatecall="opeateCall" />
+      <CallMaterialsPop v-model="callBoxStatus" />
     </div>
   </div>
 </template>
 
 <script lang="ts" setup>
 import router from "@/router";
-
+import ScanCode from "@/views/process/components/scanCode.vue";
+import OperatePop from "../popUpView/operatePop.vue";
+import CallMaterialsPop from "../popUpView/callMaterialsPop.vue";
 const operationObjs: { icon?: string; text: string; num?: number }[] = [
   {
     icon: "liuzhuan",
@@ -45,6 +59,15 @@ const handleClick = (item: { text: string }) => {
       break;
   }
 };
+
+const callStatus = ref(false);
+const callBoxStatus = ref(false);
+const opeateCall = () => {
+  callBoxStatus.value = true;
+};
+const call = () => {
+  callStatus.value = true;
+};
 </script>
 
 <style lang="scss" scoped>
@@ -52,6 +75,18 @@ const handleClick = (item: { text: string }) => {
   width: 100%;
   height: 250px;
 
+  .btnBox {
+    width: 100%;
+    height: 80px;
+    margin-top: $p20;
+
+    .btn {
+      width: 100%;
+      height: 80px;
+      font-size: $f24;
+    }
+  }
+
   .operateBox {
     height: 76px;
     width: 100%;

+ 1 - 2
src/views/process/components/scanCode.vue

@@ -1,6 +1,5 @@
 <template>
   <!-- 扫码板块 -->
-  <div class="commonTitle">扫码</div>
   <div class="icon">
     <img class="imgIcon" src="@/assets/icons/shaoma.svg" @click="toProSteps" />
   </div>
@@ -15,7 +14,7 @@ import { useProcessStore } from "@/store";
 import { getScan } from "@/api/process";
 const store = useProcessStore();
 const router = useRouter();
-const inputValue = ref("12020100000052404100011");
+const inputValue = ref("");
 const toProSteps = () => {
   store.odersData.qrCode = inputValue.value;
   getScanData();

+ 22 - 5
src/views/process/components/steps.vue

@@ -1,7 +1,12 @@
 <template>
   <div class="body">
     <div class="steps" v-for="(item, index) in opsArray" :key="index" @click="boxClick(item, index)">
-      <div :class="selectStepIndex == index ? 'stepBox stepBoxHover' : 'stepBox'">
+      <div :class="selectStepIndex == index
+          ? 'stepBox stepBoxHover'
+          : item.opComplete
+            ? 'stepBox stepBoxDisabled'
+            : 'stepBox'
+        ">
         <div style="display: flex; align-items: center">
           <div :class="selectStepIndex == index
               ? 'stepIndex stepIndexHover'
@@ -40,22 +45,30 @@ import { useProcessStore } from "@/store";
 const store = useProcessStore();
 const props = defineProps<{
   opsArray?: object;
-  selectStepIndex: number;
 }>();
 const emit = defineEmits(["setstepindex"]);
+const selectStepIndex = ref(0);
+const setStepIndex = () => {
+  for (let i = 0; i < props.opsArray.length; i++) {
+    if (props.opsArray[i].opComplete == false) {
+      selectStepIndex.value = i;
+      return;
+    }
+  }
+};
 const boxClick = (item, index) => {
-  //第二层参数赋值
+  if (item.opComplete == true) return;
   store.odersData.operationId = item.operationId;
   store.processInfo.operationCode = item.operationCode;
   store.processInfo.operationName = item.operationName;
-
   emit("setstepindex", index);
 };
 watch(
   () => props.opsArray,
   () => {
     if (props.opsArray.length > 0) {
-      boxClick(props.opsArray[0], 0);
+      setStepIndex();
+      boxClick(props.opsArray[selectStepIndex.value], selectStepIndex.value);
     }
   }
 );
@@ -81,6 +94,10 @@ watch(
   background-color: $select-hover;
 }
 
+.stepBoxDisabled {
+  background-color: grey;
+}
+
 .stepIndexHover {
   border-color: white !important;
 

+ 38 - 4
src/views/process/components/transferNum.vue

@@ -2,26 +2,60 @@
   <div class="commonTitle">流转卡号</div>
   <div class="body">
     <el-scrollbar class="scrollbar">
-      <div class="describeText" v-for="item in 111">
-        60301000012412404150031603010000124124041500360301000012412404150031
+      <Empty v-if="selectSeqArray.length < 1" />
+
+      <div class="row" v-for="(item, index) in selectSeqArray" :key="index">
+        <el-tooltip effect="dark" :content="item.seqNo" placement="right" trigger="click" @click="clickCardNum(index)">
+          <span :class="index == selectSeqIndex ? 'describeText active' : 'describeText'
+            " style="cursor: pointer">{{ item.seqNo }}</span>
+        </el-tooltip>
+
+        <div class="status">
+          {{ dictS.getLableByValue("outsource_state", item.state) }}
+        </div>
       </div>
     </el-scrollbar>
   </div>
 </template>
 
-<script lang="ts" setup></script>
+<script lang="ts" setup>
+import { useDictionaryStore } from "@/store";
+const dictS = useDictionaryStore();
+const selectSeqIndex = inject("selectSeqIndex");
+const selectSeqArray = inject("selectSeqArray");
+const clickCardNum = (index: number) => {
+  selectSeqIndex.value = index;
+};
+</script>
 
 <style lang="scss" scoped>
 .body {
   width: 100%;
-  height: calc(100% - 80px);
+  max-height: calc(100% - 44px);
   background-color: white;
   border-radius: 16px;
   padding: 20px;
+
+  .row {
+    display: flex;
+
+    .status {
+      width: 60px;
+    }
+  }
 }
 
 .describeText {
   color: black;
   font-weight: $Medium;
+  font-size: 30px;
+  margin-bottom: $p10;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.active {
+  color: $select-hover;
 }
 </style>

+ 6 - 32
src/views/process/currentProduction.vue

@@ -1,43 +1,17 @@
 <template>
-  <div class="setFlex">
-    <el-row :gutter="20">
-      <el-col :span="12" class="elColClasss" style="height: 310px" @click="setOdersData">
-        <TransferNum />
-      </el-col>
-      <el-col :span="12" class="elColClasss" style="height: 310px">
-        <Operate />
-      </el-col>
-    </el-row>
-    <ScanCode />
-  </div>
+  <el-col :span="6" class="elColClasss">
+    <TransferNum />
+  </el-col>
+  <el-col :span="6" class="elColClasss">
+    <Operate />
+  </el-col>
 </template>
 <script lang="ts" setup>
 import TransferNum from "@/views/process/components/transferNum.vue";
 import Operate from "@/views/process/components/operate.vue";
-import ScanCode from "@/views/process/components/scanCode.vue";
-import { useProcessStore } from "@/store";
-
-const store = useProcessStore();
-const router = useRouter();
-const orderData = {};
-const setOdersData = () => {
-  store.setOdersData(orderData);
-};
 </script>
 
 <style lang="scss" scoped>
-.barHeight {
-  height: calc(100vh - 270px);
-}
-
-.setFlex {
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-  height: calc(100vh - 120px);
-  overflow: hidden;
-}
-
 .bottomBtn {
   height: 80px;
   margin-top: 10px;

+ 10 - 7
src/views/process/main.vue

@@ -9,11 +9,7 @@
           <Processes />
         </div>
       </el-col>
-      <el-col :span="12" class="elColClasss">
-        <div class="grid-content ep-bg-purple">
-          <CurrentProduction />
-        </div>
-      </el-col>
+      <CurrentProduction />
     </el-row>
   </div>
 </template>
@@ -24,19 +20,26 @@ import Orders from "@/views/process/orders.vue";
 import Processes from "@/views/process/processes.vue";
 import CurrentProduction from "@/views/process/currentProduction.vue";
 import { getOrders } from "@/api/process";
-
 defineOptions({ name: "ProcessMain" });
 //未完成订单数组
 const ordersDataArray = ref([]);
 //未完成任务总数
 const ordersSum = ref(0);
-// 获取选中的Index
+// 获取选中订单的Index
 const selectOrderIndex = ref(NaN);
+// 获取选中订单对应流转卡号的Data
+const selectSeqArray = ref([]);
+// 获取选中订单对应流转卡号的index
+const selectSeqIndex = ref(0);
+
 const setSelectOrderIndex = (value: number) => {
   selectOrderIndex.value = value;
+  selectSeqArray.value = ordersDataArray.value[value].seqs;
 };
+provide("selectSeqIndex", selectSeqIndex);
 provide("ordersDataArray", ordersDataArray);
 provide("selectOrderIndex", selectOrderIndex);
+provide("selectSeqArray", selectSeqArray);
 //获取未完成订单的参数
 const ordersQuery = ref({
   orders: [],

+ 2 - 0
src/views/process/orders.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="commonTitle">待完成订单[{{ ordersSum }}]</div>
+  <Empty v-if="ordersDataArray.length < 1" />
   <el-scrollbar class="barHeight">
     <Order v-for="(item, index) in ordersDataArray" :key="index" @click="setSlectIndex(index)"
       :hoverStatus="index == selectIndex ? true : false" :item="item" />
@@ -16,6 +17,7 @@ const props = defineProps<{
 }>();
 const emit = defineEmits(["getindex"]);
 const ordersDataArray = inject("ordersDataArray");
+//这里是存放控制当前选择工序的index
 const selectIndex = ref(0);
 const setSlectIndex = (value: number) => {
   selectIndex.value = value;

+ 6 - 29
src/views/process/processes.vue

@@ -1,23 +1,18 @@
 <template>
   <div class="commonTitle">工序[{{ OptArrayLength }}]</div>
+  <Empty v-if="opsArray.length < 1" />
   <el-scrollbar class="barHeight">
-    <Steps :opsArray="opsArray" @setstepindex="setSelectStepIndex" :selectStepIndex="selectStepIndex" />
+    <Steps :opsArray="opsArray" />
   </el-scrollbar>
-  <div class="bottomBtn">
-    <el-button color="#0A59F7" class="btn" round>
-      <span class="btnText">叫料</span>
-    </el-button>
-  </div>
 </template>
 <script lang="ts" setup>
 import Steps from "@/views/process/components/steps.vue";
+//总的订单data
 const ordersDataArray = inject("ordersDataArray");
+//当前选择的订单index
 const selectOrderIndex = inject("selectOrderIndex");
-const selectStepIndex = ref(-1);
+//当前选择的订单对应订单的工序data
 const opsArray = ref([]);
-const setSelectStepIndex = (value) => {
-  selectStepIndex.value = value;
-};
 const setOptArray = () => {
   if (selectOrderIndex.value > -1) {
     opsArray.value = ordersDataArray.value[selectOrderIndex.value].ops;
@@ -33,24 +28,6 @@ watch(selectOrderIndex, () => {
 
 <style lang="scss" scoped>
 .barHeight {
-  height: calc(100vh - 270px);
-}
-
-.bottomBtn {
-  height: 80px;
-  margin-top: 10px;
-  width: 100%;
-  display: flex;
-
-  .btn {
-    width: 100%;
-    height: 80px;
-    border-radius: 40px;
-
-    .btnText {
-      font-size: $f24;
-      color: white;
-    }
-  }
+  height: calc(100vh - 170px);
 }
 </style>