From 912b764830b165ff3b92267570ea43ef9dad58bf Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期五, 18 四月 2025 14:25:03 +0800
Subject: [PATCH] feat: 拉丝

---
 src/pages/production/twist/selfInspect/form.vue        |   66 ++
 src/pages.json                                         |   92 ++
 src/pages/production/wire/receive/edit.vue             |    0 
 src/pages/production/wire/selfInspect/index.vue        |   98 +++
 src/pages/production/twist/receive/monofil.vue         |   61 +
 src/pages/production/detail/wireDetail.vue             |   18 
 src/pages/production/twist/report/form.vue             |  104 +++
 src/pages/production/twist/receive/plate/form.vue      |   48 +
 src/pages/production/twist/backman/index.vue           |  108 +++
 src/pages/production/twist/components/MonofilCard.vue  |   35 +
 src/pages/production/wire/receive/form.vue             |    0 
 src/pages/production/wire/selfInspect/form.vue         |   66 ++
 src/pages/production/twist/receive/plate/edit.vue      |   29 
 src/pages/production/wire/selfInspect/edit.vue         |   31 +
 src/pages/production/twist/report/index.vue            |  123 +++
 src/pages/production/wire/backman/edit.vue             |   31 +
 src/pages/production/components/ProductionCard.vue     |    6 
 src/pages/production/twist/backman/form.vue            |   66 ++
 src/pages/production/twist/selfInspect/index.vue       |   98 +++
 src/pages/production/wire/backman/form.vue             |   66 ++
 src/pages/production/twist/backman/edit.vue            |   31 +
 src/pages/production/twist/report/edit.vue             |   29 
 src/pages/production/twist/selfInspect/edit.vue        |   31 +
 src/pages/production/wire/report/wire.vue              |    0 
 src/pages/production/twist/receive/plate/index.vue     |   92 ++
 src/pages/production/twist/receive/index.vue           |   34 +
 src/components/scan/index.vue                          |   89 ++
 src/pages/production/wire/backman/index.vue            |  108 +++
 src/pages/production/wire/report/wireEdit.vue          |    0 
 src/pages/production/twist/receive/steelCore/edit.vue  |   29 
 src/pages/production/wire/receive/index.vue            |    0 
 src/components/card-title/index.vue                    |    1 
 src/pages/production/wire/report/wireForm.vue          |    0 
 src/pages/production/detail/twistDetail.vue            |   39 +
 src/pages/production/index.vue                         |   16 
 src/pages/production/twist/receive/steelCore/index.vue |  105 +++
 src/pages/production/twist/receive/steelCore/form.vue  |   68 ++
 37 files changed, 1,802 insertions(+), 16 deletions(-)

diff --git a/src/components/card-title/index.vue b/src/components/card-title/index.vue
index 2430b16..b18d1d4 100644
--- a/src/components/card-title/index.vue
+++ b/src/components/card-title/index.vue
@@ -8,6 +8,7 @@
         鏂板
       </wd-button>
     </view>
+    <slot v-else name="action"></slot>
   </view>
 </template>
 <script setup lang="ts">
diff --git a/src/components/scan/index.vue b/src/components/scan/index.vue
new file mode 100644
index 0000000..f9b96c4
--- /dev/null
+++ b/src/components/scan/index.vue
@@ -0,0 +1,89 @@
+<template>
+  <view>
+    <view class="content"></view>
+  </view>
+</template>
+<!-- 婵�鍏夋壂鐮侊紝骞挎挱妯″紡 -->
+<script>
+var main, receiver, filter;
+var codeQueryTag = false;
+export default {
+  data() {
+    return {
+      scanCode: "",
+    };
+  },
+  created() {
+    // 鍒濆鍖�
+    this.initScan();
+    // 鍚姩骞挎挱
+    this.startScan();
+  },
+  onHide() {
+    // 缁撴潫骞挎挱
+    this.stopScan();
+  },
+  destroyed() {
+    // 缁撴潫骞挎挱
+    this.stopScan();
+  },
+  methods: {
+    // 鍒濆鍖�
+    initScan() {
+      //  #ifdef APP
+      // console.log('initScan:鎵爜鍒濆鍖�');
+      let that = this;
+      main = plus.android.runtimeMainActivity(); //鑾峰彇activity
+      //var context = plus.android.importClass('android.content.Context'); //涓婁笅鏂�
+      var IntentFilter = plus.android.importClass("android.content.IntentFilter");
+      filter = new IntentFilter();
+      //涓嬮潰鐨刟ddAction 鏀逛负鑷繁 pad 璁惧鐨勫箍鎾姩浣滐紙鍦ㄦ壂鎻忚缃垨鑰呭巶鍟嗛檮甯︾殑app 閲岄潰璁剧疆涓哄箍鎾ā寮忥紝鐒跺悗鏌ョ湅鐩稿簲鍙傛暟锛�
+      filter.addAction("com.dwexample.ACTION");
+      receiver = plus.android.implements("io.dcloud.feature.internal.reflect.BroadcastReceiver", {
+        onReceive: (context, intent) => {
+          console.log("---onReceive锛�", context, intent);
+          plus.android.importClass(intent);
+          //涓嬮潰鐨刧etStringExtra鍐呮敼涓鸿嚜宸辩殑骞挎挱鏍囩锛堥敭鍊�/key锛夛細 data
+          //鏂戦┈ TC20
+          var banMaSacanInfo = intent.getStringExtra(
+            "com.motorolasolutions.emdk.datawedge.data_string"
+          ); // callback(intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'));
+          console.log("鏂戦┈鎵弿缁撴灉", banMaSacanInfo);
+          // 浼犲叆鎺ユ敹鍒扮殑鍙傛暟
+          that.queryCode(banMaSacanInfo);
+        },
+      });
+      // #endif
+    },
+    // 寮�鍚箍鎾�
+    startScan() {
+      //  #ifdef APP
+      console.log("startScan,寮�鍚箍鎾帴鏀�");
+      main.registerReceiver(receiver, filter);
+      // #endif
+    },
+    // 鍏抽棴骞挎挱
+    stopScan() {
+      //  #ifdef APP
+      console.log("stopScan缁撴潫");
+      main.unregisterReceiver(receiver);
+      // #endif
+    },
+    // 閬垮厤閲嶅鎵爜
+    queryCode: function (code) {
+      //  #ifdef APP
+      if (codeQueryTag) return false;
+      codeQueryTag = true;
+      setTimeout(function () {
+        codeQueryTag = false;
+      }, 150);
+      // console.log('-****--鎵爜code锛� ', code);
+      let data = code;
+      uni.$emit("scan", {
+        code: data,
+      });
+      // #endif
+    },
+  },
+};
+</script>
diff --git a/src/pages.json b/src/pages.json
index 7f13996..3f0035e 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -153,29 +153,113 @@
         "navigationBarTitleText": "鎷変笣璇︽儏"
       }
     },
+     {
+      "path": "pages/production/detail/twistDetail",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎璇︽儏"
+      }
+    },
     {
-      "path": "pages/production/report/wire",
+      "path": "pages/production/wire/report/wire",
       "style": {
         "navigationBarTitleText": "鎷変笣鎶ュ伐"
       }
     },
     {
-      "path": "pages/production/report/wireEdit",
+      "path": "pages/production/wire/report/wireEdit",
       "style": {
         "navigationBarTitleText": "鎶ュ伐涓婃姤"
       }
     },
     {
-      "path": "pages/production/receive/index",
+      "path": "pages/production/wire/receive/index",
       "style": {
         "navigationBarTitleText": "鎷変笣棰嗙敤"
       }
     },
     {
-      "path": "pages/production/receive/edit",
+      "path": "pages/production/wire/receive/edit",
       "style": {
         "navigationBarTitleText": "缂栬緫鎷変笣棰嗙敤"
       }
+    },
+    {
+      "path": "pages/production/wire/selfInspect/index",
+      "style": {
+        "navigationBarTitleText": "鎷変笣鑷"
+      }
+    },
+    {
+      "path": "pages/production/wire/selfInspect/edit",
+      "style": {
+        "navigationBarTitleText": "缂栬緫鎷変笣鑷"
+      }
+    },
+    {
+      "path": "pages/production/wire/backman/index",
+      "style": {
+        "navigationBarTitleText": "鏉傚伐"
+      }
+    },
+    {
+      "path": "pages/production/wire/backman/edit",
+      "style": {
+        "navigationBarTitleText": "缂栬緫鏉傚伐"
+      }
+    },
+    {
+      "path": "pages/production/twist/report/index",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鎶ュ伐"
+      }
+    },
+    {
+      "path": "pages/production/twist/report/edit",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鎶ュ伐涓婃姤"
+      }
+    },
+    {
+      "path": "pages/production/twist/receive/index",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鏉愭枡棰嗙敤"
+      }
+    },
+    {
+      "path": "pages/production/twist/receive/plate/edit",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鐩樺叿缂栬緫"
+      }
+    },
+    {
+      "path": "pages/production/twist/receive/steelCore/edit",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎閽㈣姱缂栬緫"
+      }
+    },
+    {
+      "path": "pages/production/twist/selfInspect/index",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鑷"
+      }
+    },
+    {
+      "path": "pages/production/twist/selfInspect/edit",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鑷缂栬緫"
+      }
+    },
+    {
+      "path": "pages/production/twist/backman/index",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鏉傚伐"
+      }
+    },
+    {
+      "path": "pages/production/twist/backman/edit",
+      "style": {
+        "navigationBarTitleText": "缁炵嚎鏉傚伐缂栬緫"
+      }
     }
   ],
   "globalStyle": {
diff --git a/src/pages/production/components/ProductionCard.vue b/src/pages/production/components/ProductionCard.vue
index b63f378..d89a77d 100644
--- a/src/pages/production/components/ProductionCard.vue
+++ b/src/pages/production/components/ProductionCard.vue
@@ -1,9 +1,9 @@
 <template>
   <wd-row>
-    <wd-col v-for="(item, index) in data" :key="index" :span="12" class="my-1">
-      <view class="flex justify-between pr-1">
+    <wd-col v-for="(item, index) in data" :key="index" :span="item.span ?? 12" class="my-1">
+      <view class="flex justify-between pr-1 w-full h-[20px]">
         <view class="text-[#646874]">{{ item.label }}</view>
-        <view class="font-medium" :style="{ color: color }">{{ item.value }}</view>
+        <view class="font-medium" :style="{ color: item.color ?? color }">{{ item.value }}</view>
       </view>
     </wd-col>
   </wd-row>
diff --git a/src/pages/production/detail/twistDetail.vue b/src/pages/production/detail/twistDetail.vue
new file mode 100644
index 0000000..936e58e
--- /dev/null
+++ b/src/pages/production/detail/twistDetail.vue
@@ -0,0 +1,39 @@
+<template>
+  <view>
+    <ProductCard />
+    <view class="mx-3">
+      <wd-grid class="rounded-lg" clickable>
+        <wd-grid-item
+          icon="computer"
+          link-type="navigateTo"
+          url="/pages/production/twist/report/index"
+          text="鎶ュ伐"
+        />
+        <wd-grid-item
+          icon="chart"
+          text="鑷"
+          link-type="navigateTo"
+          url="/pages/production/twist/selfInspect/index"
+        />
+        <wd-grid-item
+          icon="tips"
+          link-type="navigateTo"
+          url="/pages/production/twist/backman/index"
+          text="鏉傚伐"
+        />
+        <wd-grid-item
+          icon="wallet"
+          link-type="navigateTo"
+          url="/pages/production/twist/receive/index"
+          text="鏉愭枡棰嗙敤"
+        />
+      </wd-grid>
+    </view>
+  </view>
+</template>
+
+<script lang="ts" setup>
+import ProductCard from "@/components/product_card/index.vue";
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/pages/production/detail/wireDetail.vue b/src/pages/production/detail/wireDetail.vue
index 5e4276c..e86b48a 100644
--- a/src/pages/production/detail/wireDetail.vue
+++ b/src/pages/production/detail/wireDetail.vue
@@ -6,15 +6,25 @@
         <wd-grid-item
           icon="computer"
           link-type="navigateTo"
-          url="/pages/production/report/wire"
+          url="/pages/production/wire/report/wire"
           text="鎶ュ伐"
         />
-        <wd-grid-item icon="chart" text="鑷" />
-        <wd-grid-item icon="tips" text="鏉傚伐" />
+        <wd-grid-item
+          icon="chart"
+          text="鑷"
+          link-type="navigateTo"
+          url="/pages/production/wire/selfInspect/index"
+        />
+        <wd-grid-item
+          icon="tips"
+          link-type="navigateTo"
+          url="/pages/production/wire/backman/index"
+          text="鏉傚伐"
+        />
         <wd-grid-item
           icon="wallet"
           link-type="navigateTo"
-          url="/pages/production/receive/index"
+          url="/pages/production/wire/receive/index"
           text="鏉愭枡棰嗙敤"
         />
       </wd-grid>
diff --git a/src/pages/production/index.vue b/src/pages/production/index.vue
index d82c8d7..cc33983 100644
--- a/src/pages/production/index.vue
+++ b/src/pages/production/index.vue
@@ -15,7 +15,7 @@
         <wd-tab :title="item.label">
           <view class="card_box">
             <Statistics class="statistics_box" />
-            <ProductCard v-for="item in 10" @click="toDetail" />
+            <ProductCard v-for="(item, index) in 10" @click="toDetail(index)" />
             <wd-loadmore custom-class="loadmore" state="loading" />
           </view>
         </wd-tab>
@@ -38,10 +38,16 @@
   },
 ]);
 
-const toDetail = () => {
-  uni.navigateTo({
-    url: "/pages/production/detail/wireDetail",
-  });
+const toDetail = (type: number) => {
+  if (Math.floor(type) % 2 === 0) {
+    uni.navigateTo({
+      url: "/pages/production/detail/wireDetail",
+    });
+  } else {
+    uni.navigateTo({
+      url: "/pages/production/detail/twistDetail",
+    });
+  }
 };
 </script>
 
diff --git a/src/pages/production/twist/backman/edit.vue b/src/pages/production/twist/backman/edit.vue
new file mode 100644
index 0000000..c9ebfec
--- /dev/null
+++ b/src/pages/production/twist/backman/edit.vue
@@ -0,0 +1,31 @@
+<template>
+  <view>
+    <CardTitle title="缂栬緫鑷" :hideAction="false" />
+    <BackmanForm class="mx-4" />
+    <view class="footer">
+      <wd-button
+        class="submit_btn"
+        type="primary"
+        size="large"
+        block
+        :round="false"
+        @click="handleSubmit"
+      >
+        淇濆瓨
+      </wd-button>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import BackmanForm from "./form.vue";
+
+const handleSubmit = () => {};
+</script>
+
+<style lang="scss" scoped>
+.footer {
+  margin: 20px 16px 0 16px;
+}
+</style>
diff --git a/src/pages/production/twist/backman/form.vue b/src/pages/production/twist/backman/form.vue
new file mode 100644
index 0000000..e4cf542
--- /dev/null
+++ b/src/pages/production/twist/backman/form.vue
@@ -0,0 +1,66 @@
+<template>
+  <wd-form ref="form" :model="model" class="relative form_box">
+    <wd-cell-group :border="true">
+      <wd-input
+        v-model="model.workbench"
+        label="鏉傚伐鍚嶇О"
+        label-width="100px"
+        prop="workbench"
+        clearable
+        placeholder="璇疯緭鍏ユ潅宸ュ悕绉�"
+      />
+      <wd-input
+        v-model="model.poleNo"
+        label="鏉嗗彿"
+        label-width="100px"
+        prop="poleNo"
+        clearable
+        placeholder="璇疯緭鍏ユ潌鍙�"
+      />
+      <wd-input
+        v-model="model.unit"
+        label="鍗曚綅"
+        label-width="100px"
+        prop="unit"
+        clearable
+        placeholder="璇疯緭鍏ュ崟浣�"
+      />
+      <wd-input
+        v-model="model.poleWeight"
+        label="鏉嗛噸"
+        label-width="100px"
+        prop="poleWeight"
+        clearable
+        placeholder="璇疯緭鍏ユ潌閲�"
+      />
+      <wd-input
+        v-model="model.useWeight"
+        label="浣跨敤閲嶉噺"
+        label-width="100px"
+        prop="useWeight"
+        clearable
+        placeholder="璇疯緭鍏ヤ娇鐢ㄩ噸閲�"
+      />
+    </wd-cell-group>
+  </wd-form>
+</template>
+
+<script setup lang="ts">
+import useFormData from "@/hooks/useFormData";
+const { form: model } = useFormData({
+  backmanName: undefined, // 鏉傚伐鍚嶇О
+  unit: undefined, // 鍗曚綅
+  num: undefined, // 鏁伴噺
+  caller: undefined, // 鎶ュ伐浜�
+  callerDate: undefined, // 鎶ュ伐鏃ユ湡
+});
+</script>
+<style lang="scss" scoped>
+.form_box {
+}
+.submit_btn {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
diff --git a/src/pages/production/twist/backman/index.vue b/src/pages/production/twist/backman/index.vue
new file mode 100644
index 0000000..2ba997f
--- /dev/null
+++ b/src/pages/production/twist/backman/index.vue
@@ -0,0 +1,108 @@
+<template>
+  <view class="page pt-2">
+    <CardTitle title="缁炵嚎鏉傚伐淇℃伅" :hideAction="true" @action="addReport" />
+    <view class="list">
+      <wd-card type="rectangle" custom-class="round">
+        <template #title>
+          <view class="flex justify-between">
+            <view>
+              <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
+              <text class="text-[#252525] ml-2 font-medium">鏉傚伐椤圭洰鍚嶇О</text>
+            </view>
+            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+          </view>
+        </template>
+        <ProductionCard :data="cardAttr" color="#0D867F" />
+      </wd-card>
+    </view>
+    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submit">纭畾</wd-button>
+      </view>
+      <BackmanForm />
+    </wd-popup>
+    <wd-toast />
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import ProductionCard from "../../components/ProductionCard.vue";
+import { useToast } from "wot-design-uni";
+import BackmanForm from "./form.vue";
+
+const toast = useToast();
+const dialog = reactive({
+  visible: false,
+});
+
+const cardAttr = ref<any[]>([
+  {
+    label: "鍗曚綅",
+    value: "n惟路m",
+  },
+  {
+    label: "瀹氶",
+    value: "1246",
+  },
+  {
+    label: "鏁伴噺",
+    value: "4",
+  },
+  {
+    label: "閲戦",
+    value: "鏌ョ湅",
+  },
+  {
+    label: "鎶ュ伐浜�",
+    value: "闆疯繘瀹�",
+  },
+  {
+    label: "鏃ユ湡",
+    value: "2022-05-17",
+  },
+]);
+
+const toEdit = () => {
+  uni.navigateTo({
+    url: "/pages/production/twist/backman/edit",
+  });
+};
+
+const addReport = () => {
+  dialog.visible = true;
+};
+
+const submit = () => {
+  toast.show("鎻愪氦");
+  dialog.visible = false;
+};
+
+const cancel = () => {
+  toast.show("鍙栨秷");
+  dialog.visible = false;
+};
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+  .list {
+    height: calc(100vh - 120px);
+    margin: 12px;
+    overflow: scroll;
+
+    :deep() {
+      .round {
+        border-radius: 4px;
+      }
+    }
+  }
+}
+
+.action {
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/pages/production/twist/components/MonofilCard.vue b/src/pages/production/twist/components/MonofilCard.vue
new file mode 100644
index 0000000..329d7f5
--- /dev/null
+++ b/src/pages/production/twist/components/MonofilCard.vue
@@ -0,0 +1,35 @@
+<template>
+  <wd-card>
+    <wd-form :model="model">
+      <wd-cell-group :border="true">
+        <wd-input
+          v-model="model.no"
+          label="鍗曚笣缂栧彿"
+          label-width="100px"
+          prop="no"
+          clearable
+          placeholder="璇疯緭鍏ュ崟涓濈紪鍙�"
+        />
+        <wd-input
+          v-model="model.length"
+          label="闀垮害"
+          label-width="100px"
+          prop="length"
+          clearable
+          placeholder="璇疯緭鍏ラ暱搴�"
+        />
+      </wd-cell-group>
+    </wd-form>
+  </wd-card>
+</template>
+
+<script setup lang="ts">
+import useFormData from "@/hooks/useFormData";
+
+const { form: model } = useFormData({
+  no: undefined,
+  length: undefined,
+});
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/pages/production/twist/receive/index.vue b/src/pages/production/twist/receive/index.vue
new file mode 100644
index 0000000..277e46e
--- /dev/null
+++ b/src/pages/production/twist/receive/index.vue
@@ -0,0 +1,34 @@
+<template>
+  <wd-tabs v-model="tab" auto-line-width>
+    <wd-tab title="鍗曚笣棰嗙敤" name="鍗曚笣棰嗙敤">
+      <Monofil />
+    </wd-tab>
+    <wd-tab title="鐩樺叿棰嗙敤" name="鐩樺叿棰嗙敤">
+      <view class="content">
+        <Plate />
+      </view>
+    </wd-tab>
+    <wd-tab title="閽㈣姱棰嗙敤" name="閽㈣姱棰嗙敤">
+      <view class="content">
+        <SteelCore />
+      </view>
+    </wd-tab>
+  </wd-tabs>
+</template>
+
+<script setup lang="ts">
+import Monofil from "./monofil.vue";
+import Plate from "./plate/index.vue";
+import SteelCore from "./steelCore/index.vue";
+
+const tab = ref("鍗曚笣棰嗙敤");
+</script>
+
+<style lang="scss" scoped>
+::v-deep .wd-tabs__line {
+  background: #0d867f;
+}
+::v-deep .wd-tabs__nav {
+  border-bottom: 1px #dddddd solid;
+}
+</style>
diff --git a/src/pages/production/twist/receive/monofil.vue b/src/pages/production/twist/receive/monofil.vue
new file mode 100644
index 0000000..80d234f
--- /dev/null
+++ b/src/pages/production/twist/receive/monofil.vue
@@ -0,0 +1,61 @@
+<template>
+  <view class="page">
+    <CardTitle title="鍗曚笣棰嗙敤" :hideAction="false">
+      <template #action>
+        <wd-button type="icon" icon="scan" color="#0D867F" @click="scanCode"></wd-button>
+      </template>
+    </CardTitle>
+    <view class="list_box">
+      <MonofilCard v-for="(item, index) in 4" :key="index" />
+    </view>
+    <scan />
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import MonofilCard from "../components/MonofilCard.vue";
+import scan from "@/components/scan/index.vue";
+import { onLoad, onUnload } from "@dcloudio/uni-app";
+
+const cardList = ref<any[]>([]);
+
+const BroadcastScanningToObtainData = (res: any) => {
+  console.log("鑾峰彇娆℃暟", res.code);
+  let barcode = res.code;
+  console.log("鎵撳嵃鏁版嵁", barcode);
+};
+
+const scanCode = () => {
+  uni.scanCode({
+    onlyFromCamera: true,
+    success: (res) => {
+      console.log("鏉$爜绫诲瀷锛�" + res.scanType);
+      console.log("鏉$爜鍐呭锛�" + res.result);
+      cardList.value.push(res.result);
+    },
+  });
+};
+
+onLoad(() => {
+  // 寮�鍚箍鎾洃鍚簨浠�
+  uni.$on("scan", BroadcastScanningToObtainData);
+});
+onUnload(() => {
+  // 寮�鍚箍鎾洃鍚簨浠�
+  uni.$off("scan", BroadcastScanningToObtainData);
+});
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+  .list_box {
+    height: calc(100% - 100px);
+    overflow: scroll;
+  }
+}
+:deep(.wd-button__content) {
+  color: #0d867f;
+}
+</style>
diff --git a/src/pages/production/twist/receive/plate/edit.vue b/src/pages/production/twist/receive/plate/edit.vue
new file mode 100644
index 0000000..da1ad01
--- /dev/null
+++ b/src/pages/production/twist/receive/plate/edit.vue
@@ -0,0 +1,29 @@
+<template>
+  <view>
+    <CardTitle title="缁炵嚎鐩樺叿棰嗙敤" :hideAction="false" />
+    <PlateForm class="mx-4" />
+    <view class="footer">
+      <wd-button
+        class="submit_btn"
+        type="primary"
+        size="large"
+        block
+        :round="false"
+        @click="handleSubmit"
+      >
+        淇濆瓨
+      </wd-button>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import CardTitle from "@/components/card-title/index.vue";
+import PlateForm from "./form.vue";
+
+const handleSubmit = () => {};
+</script>
+<style lang="scss" scoped>
+.footer {
+  margin: 20px 16px 0 16px;
+}
+</style>
diff --git a/src/pages/production/twist/receive/plate/form.vue b/src/pages/production/twist/receive/plate/form.vue
new file mode 100644
index 0000000..950e5e1
--- /dev/null
+++ b/src/pages/production/twist/receive/plate/form.vue
@@ -0,0 +1,48 @@
+<template>
+  <wd-form ref="form" :model="model" class="relative form_box">
+    <wd-cell-group :border="true">
+      <wd-input
+        v-model="model.plateType"
+        label="鐩樺叿绫诲瀷"
+        label-width="100px"
+        prop="plateType"
+        clearable
+        placeholder="璇疯緭鍏ョ洏鍏风被鍨�"
+      />
+      <wd-input
+        v-model="model.length"
+        label="灏哄"
+        label-width="100px"
+        prop="length"
+        clearable
+        placeholder="璇疯緭鍏ュ昂瀵�"
+      />
+      <wd-input
+        v-model="model.weigth"
+        label="閲嶉噺"
+        label-width="100px"
+        prop="weigth"
+        clearable
+        placeholder="璇疯緭鍏ラ噸閲�"
+      />
+    </wd-cell-group>
+  </wd-form>
+</template>
+
+<script setup lang="ts">
+import useFormData from "@/hooks/useFormData";
+const { form: model } = useFormData({
+  plateType: undefined, // 鐩樺叿绫诲瀷
+  length: undefined, // 灏哄
+  weigth: undefined, // 閲嶉噺
+});
+</script>
+<style lang="scss" scoped>
+.form_box {
+}
+.submit_btn {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
diff --git a/src/pages/production/twist/receive/plate/index.vue b/src/pages/production/twist/receive/plate/index.vue
new file mode 100644
index 0000000..26dc6e2
--- /dev/null
+++ b/src/pages/production/twist/receive/plate/index.vue
@@ -0,0 +1,92 @@
+<template>
+  <view class="page pt-2">
+    <CardTitle title="鐩樺叿棰嗙敤" :hideAction="true" @action="addReport" />
+    <view class="list">
+      <wd-card v-for="(item, index) in 2" :key="index" type="rectangle" custom-class="round">
+        <template #title>
+          <view class="flex justify-between">
+            <view>
+              <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
+              <text class="text-[#252525] ml-2 font-medium">閾佹湪鐩�</text>
+            </view>
+            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+          </view>
+        </template>
+        <ProductionCard :data="cardAttr" color="#0D867F" />
+      </wd-card>
+    </view>
+    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submit">纭畾</wd-button>
+      </view>
+      <PlateForm />
+    </wd-popup>
+    <wd-toast />
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import ProductionCard from "../../../components/ProductionCard.vue";
+import { useToast } from "wot-design-uni";
+import PlateForm from "./form.vue";
+
+const toast = useToast();
+const dialog = reactive({
+  visible: false,
+});
+
+const cardAttr = ref<any[]>([
+  {
+    label: "灏哄",
+    value: "10m",
+  },
+  {
+    label: "閲嶉噺",
+    value: "46kg",
+  },
+]);
+
+const toEdit = () => {
+  uni.navigateTo({
+    url: "/pages/production/twist/receive/plate/edit",
+  });
+};
+
+const addReport = () => {
+  dialog.visible = true;
+};
+
+const submit = () => {
+  toast.show("鎻愪氦");
+  dialog.visible = false;
+};
+
+const cancel = () => {
+  toast.show("鍙栨秷");
+  dialog.visible = false;
+};
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+  .list {
+    height: calc(100vh - 120px);
+    margin: 12px;
+    overflow: scroll;
+
+    :deep() {
+      .round {
+        border-radius: 4px;
+      }
+    }
+  }
+}
+
+.action {
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/pages/production/twist/receive/steelCore/edit.vue b/src/pages/production/twist/receive/steelCore/edit.vue
new file mode 100644
index 0000000..269154d
--- /dev/null
+++ b/src/pages/production/twist/receive/steelCore/edit.vue
@@ -0,0 +1,29 @@
+<template>
+  <view>
+    <CardTitle title="缁炵嚎鐩樺叿棰嗙敤" :hideAction="false" />
+    <SteelCoreForm class="mx-4" />
+    <view class="footer">
+      <wd-button
+        class="submit_btn"
+        type="primary"
+        size="large"
+        block
+        :round="false"
+        @click="handleSubmit"
+      >
+        淇濆瓨
+      </wd-button>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import CardTitle from "@/components/card-title/index.vue";
+import SteelCoreForm from "./form.vue";
+
+const handleSubmit = () => {};
+</script>
+<style lang="scss" scoped>
+.footer {
+  margin: 20px 16px 0 16px;
+}
+</style>
diff --git a/src/pages/production/twist/receive/steelCore/form.vue b/src/pages/production/twist/receive/steelCore/form.vue
new file mode 100644
index 0000000..0c174b0
--- /dev/null
+++ b/src/pages/production/twist/receive/steelCore/form.vue
@@ -0,0 +1,68 @@
+<template>
+  <wd-form ref="form" :model="model" class="relative form_box">
+    <wd-cell-group :border="true">
+      <wd-input
+        v-model="model.steelCoreName"
+        label="閽㈣姱鍚嶇О"
+        label-width="100px"
+        prop="steelCoreName"
+        clearable
+        placeholder="璇疯緭鍏ラ挗鑺悕绉�"
+      />
+      <wd-input
+        v-model="model.plateNo"
+        label="鐩樺彿"
+        label-width="100px"
+        prop="plateNo"
+        clearable
+        placeholder="璇疯緭鍏ョ洏鍙�"
+      />
+      <wd-input
+        v-model="model.length"
+        label="闀垮害"
+        label-width="100px"
+        prop="length"
+        clearable
+        placeholder="璇疯緭鍏ラ暱搴�"
+      />
+      <wd-input
+        v-model="model.weight"
+        label="閲嶉噺"
+        label-width="100px"
+        prop="weight"
+        clearable
+        placeholder="璇疯緭鍏ラ噸閲�"
+      />
+      <wd-input
+        v-model="model.manufacturers"
+        label="鍘傚"
+        label-width="100px"
+        prop="manufacturers"
+        clearable
+        placeholder="璇疯緭鍏ュ巶瀹�"
+      />
+    </wd-cell-group>
+  </wd-form>
+</template>
+
+<script lang="ts" setup>
+import useFormData from "@/hooks/useFormData";
+
+const { form: model } = useFormData({
+  steelCoreName: undefined, // 閽㈣姱鍚嶇О
+  plateNo: undefined, // 鐩樺彿
+  length: undefined, // 闀垮害
+  weight: undefined, // 閲嶉噺
+  manufacturers: undefined, // 鍘傚
+});
+</script>
+
+<style lang="scss" scoped>
+.form_box {
+}
+.submit_btn {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
diff --git a/src/pages/production/twist/receive/steelCore/index.vue b/src/pages/production/twist/receive/steelCore/index.vue
new file mode 100644
index 0000000..7195115
--- /dev/null
+++ b/src/pages/production/twist/receive/steelCore/index.vue
@@ -0,0 +1,105 @@
+<template>
+  <view class="page pt-2">
+    <CardTitle title="閽㈣姱棰嗙敤" :hideAction="true" @action="addReport" />
+    <view class="list">
+      <wd-card v-for="(item, index) in 2" :key="index" type="rectangle" custom-class="round">
+        <template #title>
+          <view class="flex justify-between">
+            <view>
+              <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
+              <text class="text-[#252525] ml-2 font-medium">JX28201021-1</text>
+            </view>
+            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+          </view>
+        </template>
+        <ProductionCard :data="cardAttr" color="#0D867F" />
+      </wd-card>
+    </view>
+    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submit">纭畾</wd-button>
+      </view>
+      <PlateForm />
+    </wd-popup>
+    <wd-toast />
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import ProductionCard from "../../../components/ProductionCard.vue";
+import { useToast } from "wot-design-uni";
+import PlateForm from "./form.vue";
+
+const toast = useToast();
+const dialog = reactive({
+  visible: false,
+});
+
+const cardAttr = ref<any[]>([
+  {
+    label: "鐩樺彿",
+    value: "1902101",
+  },
+  {
+    label: "闀垮害",
+    value: "46kg",
+  },
+  {
+    label: "閲嶉噺",
+    value: "10kg",
+  },
+  {
+    label: undefined,
+    value: undefined,
+  },
+  {
+    label: "鍘傚",
+    value: "姹熻嫃鐪佸崡閫氬競鑺鏁板瓧鍘�",
+    span: 14,
+  },
+]);
+
+const toEdit = () => {
+  uni.navigateTo({
+    url: "/pages/production/twist/receive/steelCore/edit",
+  });
+};
+
+const addReport = () => {
+  dialog.visible = true;
+};
+
+const submit = () => {
+  toast.show("鎻愪氦");
+  dialog.visible = false;
+};
+
+const cancel = () => {
+  toast.show("鍙栨秷");
+  dialog.visible = false;
+};
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+  .list {
+    height: calc(100vh - 120px);
+    margin: 12px;
+    overflow: scroll;
+
+    :deep() {
+      .round {
+        border-radius: 4px;
+      }
+    }
+  }
+}
+
+.action {
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/pages/production/twist/report/edit.vue b/src/pages/production/twist/report/edit.vue
new file mode 100644
index 0000000..ac75111
--- /dev/null
+++ b/src/pages/production/twist/report/edit.vue
@@ -0,0 +1,29 @@
+<template>
+  <view>
+    <CardTitle title="鎶ュ伐涓婃姤" :hideAction="false" />
+    <TwistForm class="mx-4" />
+    <view class="footer">
+      <wd-button
+        class="submit_btn"
+        type="primary"
+        size="large"
+        block
+        :round="false"
+        @click="handleSubmit"
+      >
+        鎶ュ伐
+      </wd-button>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import CardTitle from "@/components/card-title/index.vue";
+import TwistForm from "./form.vue";
+
+const handleSubmit = () => {};
+</script>
+<style lang="scss" scoped>
+.footer {
+  margin: 20px 16px 0 16px;
+}
+</style>
diff --git a/src/pages/production/twist/report/form.vue b/src/pages/production/twist/report/form.vue
new file mode 100644
index 0000000..00bf68e
--- /dev/null
+++ b/src/pages/production/twist/report/form.vue
@@ -0,0 +1,104 @@
+<template>
+  <wd-form ref="form" :model="model" class="relative form_box">
+    <wd-cell-group :border="true">
+      <wd-input
+        v-model="model.contractNo"
+        label="鍚堝悓鍙�"
+        label-width="100px"
+        prop="contractNo"
+        clearable
+        placeholder="璇疯緭鍏ュ悎鍚屽彿"
+      />
+      <wd-input
+        v-model="model.status"
+        label="鐘舵��"
+        label-width="100px"
+        prop="status"
+        clearable
+        placeholder="璇疯緭鍏ョ姸鎬�"
+      />
+      <wd-input
+        v-model="model.clientName"
+        label="瀹㈡埛鍚嶇О"
+        label-width="100px"
+        prop="clientName"
+        clearable
+        placeholder="璇疯緭鍏ュ鎴峰悕绉�"
+      />
+      <wd-input
+        v-model="model.workbench"
+        label="鏈哄彴"
+        label-width="100px"
+        prop="workbench"
+        clearable
+        placeholder="璇疯緭鍏ユ満鍙�"
+      />
+      <wd-input
+        v-model="model.quality"
+        label="璐ㄩ噺杩芥函鍙�"
+        label-width="100px"
+        prop="quality"
+        clearable
+        placeholder="璇疯緭鍏ヨ川閲忚拷婧彿"
+      />
+      <wd-input
+        v-model="model.specification"
+        label="瑙勬牸鍨嬪彿"
+        label-width="100px"
+        prop="specification"
+        clearable
+        placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+      />
+      <wd-input
+        v-model="model.disc"
+        label="鐩橀暱(m)"
+        label-width="100px"
+        prop="disc"
+        clearable
+        placeholder="璇疯緭鍏ョ洏闀�"
+      />
+      <wd-input
+        v-model="model.produced"
+        label="宸茬敓浜�(m)"
+        label-width="100px"
+        prop="produced"
+        clearable
+        placeholder="璇疯緭鍏ュ凡鐢熶骇"
+      />
+      <wd-input
+        v-model="model.beProduced"
+        label="寰呯敓浜�(m)"
+        label-width="100px"
+        prop="beProduced"
+        clearable
+        placeholder="璇疯緭鍏ュ崟涓濈洏闀�"
+      />
+    </wd-cell-group>
+  </wd-form>
+</template>
+
+<script lang="ts" setup>
+import useFormData from "@/hooks/useFormData";
+
+const { form: model } = useFormData({
+  contractNo: undefined, // 鍚堝悓鍙�
+  status: undefined, // 鐘舵��
+  clientName: undefined, // 瀹㈡埛鍚嶇О
+  workbench: undefined, // 鏈哄彴
+  quality: undefined, // 璐ㄩ噺杩芥函鍙�
+  specification: undefined, // 瑙勬牸鍨嬪彿
+  disc: undefined, // 鐩橀暱
+  produced: undefined, // 宸茬敓浜�
+  beProduced: undefined, // 寰呯敓浜�
+});
+</script>
+
+<style lang="scss" scoped>
+.form_box {
+}
+.submit_btn {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
diff --git a/src/pages/production/twist/report/index.vue b/src/pages/production/twist/report/index.vue
new file mode 100644
index 0000000..602f50a
--- /dev/null
+++ b/src/pages/production/twist/report/index.vue
@@ -0,0 +1,123 @@
+<template>
+  <view class="page pt-2">
+    <CardTitle title="鎶ュ伐淇℃伅" :hideAction="true" @action="addReport" />
+    <view class="list">
+      <wd-card v-for="(item, index) in 6" type="rectangle" custom-class="round">
+        <template #title>
+          <view class="flex justify-between">
+            <view>
+              <wd-icon name="user" color="#0D867F"></wd-icon>
+              <text class="text-[#0D867F] ml-2 font-medium">鐢熶骇浜�</text>
+              <text class="text-[#333333] ml-2">鏂瑰厗鐜�</text>
+            </view>
+            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+          </view>
+        </template>
+        <ProductionCard :data="cardAttr" />
+      </wd-card>
+      <wd-loadmore custom-class="loadmore" state="loading" />
+    </view>
+
+    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submit">纭畾</wd-button>
+      </view>
+      <TwistForm />
+    </wd-popup>
+    <wd-toast />
+  </view>
+</template>
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import TwistForm from "./form.vue";
+import { useToast } from "wot-design-uni";
+import ProductionCard from "../../components/ProductionCard.vue";
+
+const toast = useToast();
+const dialog = reactive({
+  visible: false,
+});
+
+const cardAttr = ref<any[]>([
+  {
+    label: "鍚堝悓鍙�",
+    value: "ht2921246",
+  },
+  {
+    label: "鐘舵��",
+    value: "-----",
+  },
+  {
+    label: "瀹㈡埛鍚嶇О",
+    value: "澶忓織璞�",
+  },
+  {
+    label: "鏈哄彴",
+    value: "-----",
+  },
+  {
+    label: "瑙勬牸鍨嬪彿",
+    value: "2921246",
+  },
+  {
+    label: "宸茬敓浜ф暟閲�",
+    value: "0",
+  },
+  {
+    label: "鐩橀暱(m)",
+    value: "292",
+  },
+  {
+    label: "璁″垝鏁伴噺",
+    value: "100",
+  },
+  {
+    label: "璐ㄩ噺杩芥函鍙�",
+    value: "JX-1838",
+  },
+]);
+
+const toEdit = () => {
+  uni.navigateTo({
+    url: "/pages/production/twist/report/edit",
+  });
+};
+
+const addReport = () => {
+  dialog.visible = true;
+};
+
+const submit = () => {
+  toast.show("鎻愪氦");
+  dialog.visible = false;
+};
+
+const cancel = () => {
+  toast.show("鍙栨秷");
+  dialog.visible = false;
+};
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+
+  .list {
+    height: calc(100vh - 120px);
+    margin: 12px;
+    overflow: scroll;
+
+    :deep() {
+      .round {
+        border-radius: 4px;
+      }
+    }
+  }
+}
+
+.action {
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/pages/production/twist/selfInspect/edit.vue b/src/pages/production/twist/selfInspect/edit.vue
new file mode 100644
index 0000000..c9ebfec
--- /dev/null
+++ b/src/pages/production/twist/selfInspect/edit.vue
@@ -0,0 +1,31 @@
+<template>
+  <view>
+    <CardTitle title="缂栬緫鑷" :hideAction="false" />
+    <BackmanForm class="mx-4" />
+    <view class="footer">
+      <wd-button
+        class="submit_btn"
+        type="primary"
+        size="large"
+        block
+        :round="false"
+        @click="handleSubmit"
+      >
+        淇濆瓨
+      </wd-button>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import BackmanForm from "./form.vue";
+
+const handleSubmit = () => {};
+</script>
+
+<style lang="scss" scoped>
+.footer {
+  margin: 20px 16px 0 16px;
+}
+</style>
diff --git a/src/pages/production/twist/selfInspect/form.vue b/src/pages/production/twist/selfInspect/form.vue
new file mode 100644
index 0000000..6402db7
--- /dev/null
+++ b/src/pages/production/twist/selfInspect/form.vue
@@ -0,0 +1,66 @@
+<template>
+  <wd-form ref="form" :model="model" class="relative form_box">
+    <wd-cell-group :border="true">
+      <wd-input
+        v-model="model.selfInspectName"
+        label="鑷鍚嶇О"
+        label-width="100px"
+        prop="selfInspectName"
+        clearable
+        placeholder="璇疯緭鍏ヨ嚜妫�鍚嶇О"
+      />
+      <wd-input
+        v-model="model.unit"
+        label="鍗曚綅"
+        label-width="100px"
+        prop="unit"
+        clearable
+        placeholder="璇疯緭鍏ュ崟浣�"
+      />
+      <wd-input
+        v-model="model.standard"
+        label="鏍囧噯鍊�"
+        label-width="100px"
+        prop="standard"
+        clearable
+        placeholder="璇疯緭鍏ユ爣鍑嗗��"
+      />
+      <wd-input
+        v-model="model.selfInspectValue"
+        label="鑷鍊�"
+        label-width="100px"
+        prop="selfInspectValue"
+        clearable
+        placeholder="璇疯緭鍏ヨ嚜妫�鍊�"
+      />
+      <wd-input
+        v-model="model.selfInspectResult"
+        label="鑷缁撴灉"
+        label-width="100px"
+        prop="selfInspectResult"
+        clearable
+        placeholder="璇疯緭鍏ヨ嚜妫�缁撴灉"
+      />
+    </wd-cell-group>
+  </wd-form>
+</template>
+
+<script setup lang="ts">
+import useFormData from "@/hooks/useFormData";
+const { form: model } = useFormData({
+  selfInspectName: undefined, // 鑷鍚嶇О
+  unit: undefined, // 鍗曚綅
+  standard: undefined, // 鏍囧噯鍊�
+  selfInspectValue: undefined, // 鑷鍊�
+  selfInspectResult: undefined, // 鑷鍊�
+});
+</script>
+<style lang="scss" scoped>
+.form_box {
+}
+.submit_btn {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
diff --git a/src/pages/production/twist/selfInspect/index.vue b/src/pages/production/twist/selfInspect/index.vue
new file mode 100644
index 0000000..9d98a20
--- /dev/null
+++ b/src/pages/production/twist/selfInspect/index.vue
@@ -0,0 +1,98 @@
+<template>
+  <view class="page pt-2">
+    <CardTitle title="缁炵嚎鑷" :hideAction="true" @action="addReport" />
+    <view class="list">
+      <wd-card type="rectangle" custom-class="round">
+        <template #title>
+          <view class="flex justify-between">
+            <view>
+              <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
+              <text class="text-[#252525] ml-2 font-medium">鑷椤圭洰鍚嶇О</text>
+            </view>
+            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+          </view>
+        </template>
+        <ProductionCard :data="cardAttr" color="#0D867F" />
+      </wd-card>
+    </view>
+    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submit">纭畾</wd-button>
+      </view>
+      <SelfInspectForm />
+    </wd-popup>
+    <wd-toast />
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import ProductionCard from "../../components/ProductionCard.vue";
+import { useToast } from "wot-design-uni";
+import SelfInspectForm from "./form.vue";
+
+const toast = useToast();
+const dialog = reactive({
+  visible: false,
+});
+const cardAttr = ref<any[]>([
+  {
+    label: "鍗曚綅",
+    value: "n惟路m",
+  },
+  {
+    label: "鏍囧噯鍊�",
+    value: "1246",
+  },
+  {
+    label: "鑷鍊�",
+    value: "1245",
+  },
+  {
+    label: "鑷缁撴灉",
+    value: "涓嶅悎鏍�",
+    color: "#FF1E1E",
+  },
+]);
+const addReport = () => {
+  dialog.visible = true;
+};
+
+const toEdit = () => {
+  uni.navigateTo({
+    url: "/pages/production/twist/selfInspect/edit",
+  });
+};
+const submit = () => {
+  toast.show("鎻愪氦");
+  dialog.visible = false;
+};
+
+const cancel = () => {
+  toast.show("鍙栨秷");
+  dialog.visible = false;
+};
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+  .list {
+    height: calc(100vh - 120px);
+    margin: 12px;
+    overflow: scroll;
+
+    :deep() {
+      .round {
+        border-radius: 4px;
+      }
+    }
+  }
+}
+
+.action {
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/pages/production/wire/backman/edit.vue b/src/pages/production/wire/backman/edit.vue
new file mode 100644
index 0000000..c9ebfec
--- /dev/null
+++ b/src/pages/production/wire/backman/edit.vue
@@ -0,0 +1,31 @@
+<template>
+  <view>
+    <CardTitle title="缂栬緫鑷" :hideAction="false" />
+    <BackmanForm class="mx-4" />
+    <view class="footer">
+      <wd-button
+        class="submit_btn"
+        type="primary"
+        size="large"
+        block
+        :round="false"
+        @click="handleSubmit"
+      >
+        淇濆瓨
+      </wd-button>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import BackmanForm from "./form.vue";
+
+const handleSubmit = () => {};
+</script>
+
+<style lang="scss" scoped>
+.footer {
+  margin: 20px 16px 0 16px;
+}
+</style>
diff --git a/src/pages/production/wire/backman/form.vue b/src/pages/production/wire/backman/form.vue
new file mode 100644
index 0000000..e4cf542
--- /dev/null
+++ b/src/pages/production/wire/backman/form.vue
@@ -0,0 +1,66 @@
+<template>
+  <wd-form ref="form" :model="model" class="relative form_box">
+    <wd-cell-group :border="true">
+      <wd-input
+        v-model="model.workbench"
+        label="鏉傚伐鍚嶇О"
+        label-width="100px"
+        prop="workbench"
+        clearable
+        placeholder="璇疯緭鍏ユ潅宸ュ悕绉�"
+      />
+      <wd-input
+        v-model="model.poleNo"
+        label="鏉嗗彿"
+        label-width="100px"
+        prop="poleNo"
+        clearable
+        placeholder="璇疯緭鍏ユ潌鍙�"
+      />
+      <wd-input
+        v-model="model.unit"
+        label="鍗曚綅"
+        label-width="100px"
+        prop="unit"
+        clearable
+        placeholder="璇疯緭鍏ュ崟浣�"
+      />
+      <wd-input
+        v-model="model.poleWeight"
+        label="鏉嗛噸"
+        label-width="100px"
+        prop="poleWeight"
+        clearable
+        placeholder="璇疯緭鍏ユ潌閲�"
+      />
+      <wd-input
+        v-model="model.useWeight"
+        label="浣跨敤閲嶉噺"
+        label-width="100px"
+        prop="useWeight"
+        clearable
+        placeholder="璇疯緭鍏ヤ娇鐢ㄩ噸閲�"
+      />
+    </wd-cell-group>
+  </wd-form>
+</template>
+
+<script setup lang="ts">
+import useFormData from "@/hooks/useFormData";
+const { form: model } = useFormData({
+  backmanName: undefined, // 鏉傚伐鍚嶇О
+  unit: undefined, // 鍗曚綅
+  num: undefined, // 鏁伴噺
+  caller: undefined, // 鎶ュ伐浜�
+  callerDate: undefined, // 鎶ュ伐鏃ユ湡
+});
+</script>
+<style lang="scss" scoped>
+.form_box {
+}
+.submit_btn {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
diff --git a/src/pages/production/wire/backman/index.vue b/src/pages/production/wire/backman/index.vue
new file mode 100644
index 0000000..43f13cb
--- /dev/null
+++ b/src/pages/production/wire/backman/index.vue
@@ -0,0 +1,108 @@
+<template>
+  <view class="page pt-2">
+    <CardTitle title="鏉傚伐淇℃伅" :hideAction="true" @action="addReport" />
+    <view class="list">
+      <wd-card type="rectangle" custom-class="round">
+        <template #title>
+          <view class="flex justify-between">
+            <view>
+              <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
+              <text class="text-[#252525] ml-2 font-medium">鏉傚伐椤圭洰鍚嶇О</text>
+            </view>
+            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+          </view>
+        </template>
+        <ProductionCard :data="cardAttr" color="#0D867F" />
+      </wd-card>
+    </view>
+    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submit">纭畾</wd-button>
+      </view>
+      <BackmanForm />
+    </wd-popup>
+    <wd-toast />
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import ProductionCard from "../components/ProductionCard.vue";
+import { useToast } from "wot-design-uni";
+import BackmanForm from "./form.vue";
+
+const toast = useToast();
+const dialog = reactive({
+  visible: false,
+});
+
+const cardAttr = ref<any[]>([
+  {
+    label: "鍗曚綅",
+    value: "n惟路m",
+  },
+  {
+    label: "瀹氶",
+    value: "1246",
+  },
+  {
+    label: "鏁伴噺",
+    value: "4",
+  },
+  {
+    label: "閲戦",
+    value: "鏌ョ湅",
+  },
+  {
+    label: "鎶ュ伐浜�",
+    value: "闆疯繘瀹�",
+  },
+  {
+    label: "鏃ユ湡",
+    value: "2022-05-17",
+  },
+]);
+
+const toEdit = () => {
+  uni.navigateTo({
+    url: "/pages/production/backman/edit",
+  });
+};
+
+const addReport = () => {
+  dialog.visible = true;
+};
+
+const submit = () => {
+  toast.show("鎻愪氦");
+  dialog.visible = false;
+};
+
+const cancel = () => {
+  toast.show("鍙栨秷");
+  dialog.visible = false;
+};
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+  .list {
+    height: calc(100vh - 120px);
+    margin: 12px;
+    overflow: scroll;
+
+    :deep() {
+      .round {
+        border-radius: 4px;
+      }
+    }
+  }
+}
+
+.action {
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/pages/production/receive/edit.vue b/src/pages/production/wire/receive/edit.vue
similarity index 100%
rename from src/pages/production/receive/edit.vue
rename to src/pages/production/wire/receive/edit.vue
diff --git a/src/pages/production/receive/form.vue b/src/pages/production/wire/receive/form.vue
similarity index 100%
rename from src/pages/production/receive/form.vue
rename to src/pages/production/wire/receive/form.vue
diff --git a/src/pages/production/receive/index.vue b/src/pages/production/wire/receive/index.vue
similarity index 100%
rename from src/pages/production/receive/index.vue
rename to src/pages/production/wire/receive/index.vue
diff --git a/src/pages/production/report/wire.vue b/src/pages/production/wire/report/wire.vue
similarity index 100%
rename from src/pages/production/report/wire.vue
rename to src/pages/production/wire/report/wire.vue
diff --git a/src/pages/production/report/wireEdit.vue b/src/pages/production/wire/report/wireEdit.vue
similarity index 100%
rename from src/pages/production/report/wireEdit.vue
rename to src/pages/production/wire/report/wireEdit.vue
diff --git a/src/pages/production/report/wireForm.vue b/src/pages/production/wire/report/wireForm.vue
similarity index 100%
rename from src/pages/production/report/wireForm.vue
rename to src/pages/production/wire/report/wireForm.vue
diff --git a/src/pages/production/wire/selfInspect/edit.vue b/src/pages/production/wire/selfInspect/edit.vue
new file mode 100644
index 0000000..849b1e0
--- /dev/null
+++ b/src/pages/production/wire/selfInspect/edit.vue
@@ -0,0 +1,31 @@
+<template>
+  <view>
+    <CardTitle title="缂栬緫鎷変笣鑷" :hideAction="false" />
+    <SelfInspectForm class="mx-4" />
+    <view class="footer">
+      <wd-button
+        class="submit_btn"
+        type="primary"
+        size="large"
+        block
+        :round="false"
+        @click="handleSubmit"
+      >
+        淇濆瓨鑷淇℃伅
+      </wd-button>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import SelfInspectForm from "./form.vue";
+
+const handleSubmit = () => {};
+</script>
+
+<style lang="scss" scoped>
+.footer {
+  margin: 20px 16px 0 16px;
+}
+</style>
diff --git a/src/pages/production/wire/selfInspect/form.vue b/src/pages/production/wire/selfInspect/form.vue
new file mode 100644
index 0000000..6402db7
--- /dev/null
+++ b/src/pages/production/wire/selfInspect/form.vue
@@ -0,0 +1,66 @@
+<template>
+  <wd-form ref="form" :model="model" class="relative form_box">
+    <wd-cell-group :border="true">
+      <wd-input
+        v-model="model.selfInspectName"
+        label="鑷鍚嶇О"
+        label-width="100px"
+        prop="selfInspectName"
+        clearable
+        placeholder="璇疯緭鍏ヨ嚜妫�鍚嶇О"
+      />
+      <wd-input
+        v-model="model.unit"
+        label="鍗曚綅"
+        label-width="100px"
+        prop="unit"
+        clearable
+        placeholder="璇疯緭鍏ュ崟浣�"
+      />
+      <wd-input
+        v-model="model.standard"
+        label="鏍囧噯鍊�"
+        label-width="100px"
+        prop="standard"
+        clearable
+        placeholder="璇疯緭鍏ユ爣鍑嗗��"
+      />
+      <wd-input
+        v-model="model.selfInspectValue"
+        label="鑷鍊�"
+        label-width="100px"
+        prop="selfInspectValue"
+        clearable
+        placeholder="璇疯緭鍏ヨ嚜妫�鍊�"
+      />
+      <wd-input
+        v-model="model.selfInspectResult"
+        label="鑷缁撴灉"
+        label-width="100px"
+        prop="selfInspectResult"
+        clearable
+        placeholder="璇疯緭鍏ヨ嚜妫�缁撴灉"
+      />
+    </wd-cell-group>
+  </wd-form>
+</template>
+
+<script setup lang="ts">
+import useFormData from "@/hooks/useFormData";
+const { form: model } = useFormData({
+  selfInspectName: undefined, // 鑷鍚嶇О
+  unit: undefined, // 鍗曚綅
+  standard: undefined, // 鏍囧噯鍊�
+  selfInspectValue: undefined, // 鑷鍊�
+  selfInspectResult: undefined, // 鑷鍊�
+});
+</script>
+<style lang="scss" scoped>
+.form_box {
+}
+.submit_btn {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+}
+</style>
diff --git a/src/pages/production/wire/selfInspect/index.vue b/src/pages/production/wire/selfInspect/index.vue
new file mode 100644
index 0000000..26648f3
--- /dev/null
+++ b/src/pages/production/wire/selfInspect/index.vue
@@ -0,0 +1,98 @@
+<template>
+  <view class="page pt-2">
+    <CardTitle title="鎷変笣鑷" :hideAction="true" @action="addReport" />
+    <view class="list">
+      <wd-card type="rectangle" custom-class="round">
+        <template #title>
+          <view class="flex justify-between">
+            <view>
+              <wd-icon name="a-rootlist" color="#0D867F"></wd-icon>
+              <text class="text-[#252525] ml-2 font-medium">鑷椤圭洰鍚嶇О</text>
+            </view>
+            <view class="text-[#A8A8A8]" @click="toEdit">缂栬緫</view>
+          </view>
+        </template>
+        <ProductionCard :data="cardAttr" color="#0D867F" />
+      </wd-card>
+    </view>
+    <wd-popup v-model="dialog.visible" position="bottom" custom-class="yl-popup">
+      <view class="action px-3">
+        <wd-button type="text" @click="cancel">鍙栨秷</wd-button>
+        <wd-button type="text" @click="submit">纭畾</wd-button>
+      </view>
+      <SelfInspectForm />
+    </wd-popup>
+    <wd-toast />
+  </view>
+</template>
+
+<script setup lang="ts">
+import CardTitle from "@/components/card-title/index.vue";
+import ProductionCard from "../components/ProductionCard.vue";
+import { useToast } from "wot-design-uni";
+import SelfInspectForm from "./form.vue";
+
+const toast = useToast();
+const dialog = reactive({
+  visible: false,
+});
+const cardAttr = ref<any[]>([
+  {
+    label: "鍗曚綅",
+    value: "n惟路m",
+  },
+  {
+    label: "鏍囧噯鍊�",
+    value: "1246",
+  },
+  {
+    label: "鑷鍊�",
+    value: "1245",
+  },
+  {
+    label: "鑷缁撴灉",
+    value: "涓嶅悎鏍�",
+    color: "#FF1E1E",
+  },
+]);
+const addReport = () => {
+  dialog.visible = true;
+};
+
+const toEdit = () => {
+  uni.navigateTo({
+    url: "/pages/production/selfInspect/edit",
+  });
+};
+const submit = () => {
+  toast.show("鎻愪氦");
+  dialog.visible = false;
+};
+
+const cancel = () => {
+  toast.show("鍙栨秷");
+  dialog.visible = false;
+};
+</script>
+
+<style lang="scss" scoped>
+.page {
+  background: #f3f9f8;
+  .list {
+    height: calc(100vh - 120px);
+    margin: 12px;
+    overflow: scroll;
+
+    :deep() {
+      .round {
+        border-radius: 4px;
+      }
+    }
+  }
+}
+
+.action {
+  display: flex;
+  justify-content: space-between;
+}
+</style>

--
Gitblit v1.9.3