From b904c6cf33ea022dfc84544501d965f4c30f4887 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 20 五月 2026 16:49:18 +0800
Subject: [PATCH] 天津宝东app 1.部署修改

---
 src/pages/productionDesign/processManagement/edit.vue |  236 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 236 insertions(+), 0 deletions(-)

diff --git a/src/pages/productionDesign/processManagement/edit.vue b/src/pages/productionDesign/processManagement/edit.vue
new file mode 100644
index 0000000..425be43
--- /dev/null
+++ b/src/pages/productionDesign/processManagement/edit.vue
@@ -0,0 +1,236 @@
+<template>
+  <view class="process-edit">
+    <PageHeader :title="pageTitle"
+                @back="goBack" />
+    <up-form ref="formRef"
+             :model="form"
+             :rules="rules"
+             :errorType="['none']"
+             label-width="110">
+      <up-form-item label="宸ュ簭缂栫爜"
+                    prop="no">
+        <up-input v-model="form.no"
+                  placeholder="璇疯緭鍏ュ伐搴忕紪鐮�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="宸ュ簭鍚嶇О"
+                    prop="name"
+                    required>
+        <up-input v-model="form.name"
+                  placeholder="璇疯緭鍏ュ伐搴忓悕绉�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="宸ヨ祫瀹氶"
+                    prop="salaryQuota">
+        <up-input v-model="form.salaryQuota"
+                  type="number"
+                  placeholder="璇疯緭鍏ュ伐璧勫畾棰�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="璁¤垂绫诲瀷"
+                    prop="type">
+        <up-input v-model="typeText"
+                  placeholder="璇烽�夋嫨璁¤垂绫诲瀷"
+                  readonly
+                  @click="showTypeSheet = true" />
+        <template #right>
+          <up-icon name="arrow-right"
+                   @click="showTypeSheet = true"></up-icon>
+        </template>
+      </up-form-item>
+      <up-form-item label="鏄惁璐ㄦ"
+                    prop="isQuality">
+        <view style="display: flex; justify-content: flex-end; width: 100%;">
+          <up-switch v-model="form.isQuality" />
+        </view>
+      </up-form-item>
+      <up-form-item label="鏄惁鐢熶骇"
+                    prop="isProduction">
+        <view style="display: flex; justify-content: flex-end; width: 100%;">
+          <up-switch v-model="form.isProduction" />
+        </view>
+      </up-form-item>
+      <up-form-item label="鍏宠仈璁惧"
+                    prop="deviceLedgerId">
+        <up-input v-model="deviceText"
+                  placeholder="璇烽�夋嫨鍏宠仈璁惧"
+                  readonly
+                  @click="showDeviceSheet = true" />
+        <template #right>
+          <up-icon name="arrow-right"
+                   @click="showDeviceSheet = true"></up-icon>
+        </template>
+      </up-form-item>
+      <up-form-item label="宸ュ簭鎻忚堪"
+                    prop="remark">
+        <up-textarea v-model="form.remark"
+                     placeholder="璇疯緭鍏ュ伐搴忔弿杩�"
+                     autoHeight />
+      </up-form-item>
+    </up-form>
+    <FooterButtons :loading="loading"
+                   :confirmText="processId ? '淇濆瓨' : '鏂板'"
+                   @cancel="goBack"
+                   @confirm="handleSubmit" />
+    <!-- 璁¤垂绫诲瀷閫夋嫨 -->
+    <up-action-sheet :show="showTypeSheet"
+                     title="閫夋嫨璁¤垂绫诲瀷"
+                     :actions="typeActions"
+                     @select="onSelectType"
+                     @close="showTypeSheet = false" />
+    <!-- 璁惧閫夋嫨 -->
+    <up-action-sheet :show="showDeviceSheet"
+                     title="閫夋嫨鍏宠仈璁惧"
+                     :actions="deviceActions"
+                     @select="onSelectDevice"
+                     @close="showDeviceSheet = false" />
+  </view>
+</template>
+
+<script setup>
+  import { reactive, ref, computed, onMounted } from "vue";
+  import { onLoad, onReady } from "@dcloudio/uni-app";
+  import FooterButtons from "@/components/FooterButtons.vue";
+  import {
+    add,
+    update,
+    getDeviceLedger,
+  } from "@/api/productionManagement/processManagement";
+
+  const formRef = ref(null);
+  const loading = ref(false);
+  const processId = ref(null);
+  const pageTitle = computed(() => (processId.value ? "缂栬緫宸ュ簭" : "鏂板宸ュ簭"));
+
+  const form = ref({
+    no: "",
+    name: "",
+    salaryQuota: "",
+    isQuality: false,
+    isProduction: false,
+    remark: "",
+    deviceLedgerId: null,
+    type: 0,
+  });
+
+  const rules = {
+    name: [{ required: true, message: "璇疯緭鍏ュ伐搴忓悕绉�" }],
+    salaryQuota: [
+      {
+        validator: (rule, value, callback) => {
+          if (value !== "" && value !== null && (isNaN(value) || value < 0)) {
+            callback(new Error("宸ヨ祫瀹氶蹇呴』鏄潪璐熸暟瀛�"));
+          } else {
+            callback();
+          }
+        },
+      },
+    ],
+  };
+
+  const showTypeSheet = ref(false);
+  const typeActions = [
+    { name: "璁℃椂", value: 0 },
+    { name: "璁′欢", value: 1 },
+  ];
+  const typeText = computed(() => {
+    const action = typeActions.find(a => a.value === form.value.type);
+    return action ? action.name : "";
+  });
+
+  const showDeviceSheet = ref(false);
+  const deviceActions = ref([]);
+  const deviceText = ref("");
+
+  const onSelectType = e => {
+    form.value.type = e.value;
+    showTypeSheet.value = false;
+  };
+
+  const onSelectDevice = e => {
+    form.value.deviceLedgerId = e.id;
+    deviceText.value = e.name;
+    showDeviceSheet.value = false;
+  };
+
+  const loadDevices = async () => {
+    try {
+      const { data } = await getDeviceLedger();
+      deviceActions.value = (data || []).map(item => ({
+        name: item.deviceName,
+        id: item.id,
+      }));
+      if (form.value.deviceLedgerId) {
+        const device = deviceActions.value.find(
+          d => d.id === Number(form.value.deviceLedgerId)
+        );
+        if (device) deviceText.value = device.name;
+      }
+    } catch (error) {
+      console.error("鍔犺浇璁惧澶辫触", error);
+    }
+  };
+
+  const goBack = () => {
+    uni.navigateBack();
+  };
+
+  const handleSubmit = () => {
+    formRef.value
+      .validate()
+      .then(() => {
+        loading.value = true;
+        const promise = processId.value ? update(form.value) : add(form.value);
+        promise
+          .then(() => {
+            uni.showToast({ title: processId.value ? "淇濆瓨鎴愬姛" : "鏂板鎴愬姛" });
+            setTimeout(() => {
+              goBack();
+            }, 1500);
+          })
+          .catch(err => {
+            uni.showToast({ title: err.msg || "鎻愪氦澶辫触", icon: "error" });
+          })
+          .finally(() => {
+            loading.value = false;
+          });
+      })
+      .catch(errors => {
+        if (errors && errors.length > 0) {
+          uni.showToast({
+            title: errors[0].message,
+            icon: "none",
+          });
+        }
+      });
+  };
+
+  onLoad(option => {
+    if (option.item) {
+      const item = JSON.parse(decodeURIComponent(option.item));
+      processId.value = item.id;
+      Object.assign(form.value, item);
+      // 澶勭悊绫诲瀷杞崲锛岀‘淇濇槸鏁板瓧
+      form.value.type = Number(form.value.type);
+      form.value.isQuality = !!form.value.isQuality;
+      form.value.isProduction = !!form.value.isProduction;
+    }
+  });
+
+  onReady(() => {
+    formRef.value.setRules(rules);
+  });
+
+  onMounted(() => {
+    loadDevices();
+  });
+</script>
+
+<style scoped lang="scss">
+  @import "@/static/scss/form-common.scss";
+
+  .process-edit {
+    min-height: 100vh;
+    background: #f5f5f5;
+  }
+</style>
\ No newline at end of file

--
Gitblit v1.9.3