From 1a1de1517a88afe8c9f8981ebf677de406f8960b Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 28 四月 2026 14:14:14 +0800
Subject: [PATCH] 基础参数模块开发

---
 src/pages.json                                       |   14 +
 src/pages/productionDesign/basicParameters/index.vue |  245 ++++++++++++++++++++
 src/pages/works.vue                                  |  114 +++++++-
 src/api/basicData/parameterMaintenance.js            |   36 +++
 src/pages/productionDesign/basicParameters/edit.vue  |  290 ++++++++++++++++++++++++
 5 files changed, 677 insertions(+), 22 deletions(-)

diff --git a/src/api/basicData/parameterMaintenance.js b/src/api/basicData/parameterMaintenance.js
new file mode 100644
index 0000000..387c2e3
--- /dev/null
+++ b/src/api/basicData/parameterMaintenance.js
@@ -0,0 +1,36 @@
+import request from "@/utils/request";
+
+// 鏌ヨ鍩虹鍙傛暟鍒楄〃
+export function getBaseParamList(query) {
+  return request({
+    url: "/technologyParam/list",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鏂板鍩虹鍙傛暟
+export function addBaseParam(data) {
+  return request({
+    url: "/technologyParam/add",
+    method: "post",
+    data: data,
+  });
+}
+
+// 缂栬緫鍩虹鍙傛暟
+export function editBaseParam(data) {
+  return request({
+    url: "/technologyParam/edit",
+    method: "put",
+    data: data,
+  });
+}
+
+// 鍒犻櫎鍩虹鍙傛暟
+export function removeBaseParam(id) {
+  return request({
+    url: "/technologyParam/remove/" + id,
+    method: "delete",
+  });
+}
diff --git a/src/pages.json b/src/pages.json
index cbd1ada..1a946d7 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -367,6 +367,20 @@
       }
     },
     {
+      "path": "pages/productionDesign/basicParameters/index",
+      "style": {
+        "navigationBarTitleText": "鍩虹鍙傛暟",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/productionDesign/basicParameters/edit",
+      "style": {
+        "navigationBarTitleText": "鍙傛暟璇︽儏",
+        "navigationStyle": "custom"
+      }
+    },
+    {
       "path": "pages/cooperativeOffice/collaborativeApproval/index1",
       "style": {
         "navigationBarTitleText": "鍏嚭绠$悊",
diff --git a/src/pages/productionDesign/basicParameters/edit.vue b/src/pages/productionDesign/basicParameters/edit.vue
new file mode 100644
index 0000000..111b465
--- /dev/null
+++ b/src/pages/productionDesign/basicParameters/edit.vue
@@ -0,0 +1,290 @@
+<template>
+  <view class="basic-parameters-edit">
+    <PageHeader :title="pageTitle"
+                @back="goBack" />
+    <up-form ref="formRef"
+             :model="form"
+             :rules="rules"
+             :errorType="['none']"
+             label-width="110">
+      <up-form-item label="鍙傛暟缂栫爜"
+                    prop="paramCode">
+        <up-input v-model="form.paramCode"
+                  disabled
+                  placeholder="鑷姩鐢熸垚" />
+      </up-form-item>
+      <up-form-item label="鍙傛暟鍚嶇О"
+                    prop="paramName"
+                    required>
+        <up-input v-model="form.paramName"
+                  placeholder="璇疯緭鍏ュ弬鏁板悕绉�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="鍙傛暟绫诲瀷"
+                    prop="paramType"
+                    required>
+        <up-input v-model="paramTypeText"
+                  placeholder="璇烽�夋嫨鍙傛暟绫诲瀷"
+                  readonly
+                  @click="showParamTypeSheet = true" />
+        <template #right>
+          <up-icon name="arrow-right"
+                   @click="showParamTypeSheet = true"></up-icon>
+        </template>
+      </up-form-item>
+      <up-form-item label="鍗曚綅"
+                    prop="unit"
+                    :required="form.paramType === 1">
+        <up-input v-model="form.unit"
+                  placeholder="璇疯緭鍏ュ崟浣�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="鍙栧�兼牸寮�"
+                    v-if="form.paramType === 1 || form.paramType === 2"
+                    prop="paramFormat">
+        <up-input v-model="form.paramFormat"
+                  placeholder="璇疯緭鍏ュ彇鍊兼牸寮�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="涓嬫媺瀛楀吀"
+                    v-else-if="form.paramType === 3"
+                    prop="paramFormat">
+        <up-input v-model="dictTypeText"
+                  placeholder="璇烽�夋嫨涓嬫媺瀛楀吀"
+                  readonly
+                  @click="showDictTypeSheet = true" />
+        <template #right>
+          <up-icon name="arrow-right"
+                   @click="showDictTypeSheet = true"></up-icon>
+        </template>
+      </up-form-item>
+      <up-form-item label="鏃堕棿鏍煎紡"
+                    v-else-if="form.paramType === 4"
+                    prop="paramFormat">
+        <up-input v-model="form.paramFormat"
+                  placeholder="璇烽�夋嫨鏃堕棿鏍煎紡"
+                  readonly
+                  @click="showTimeFormatSheet = true" />
+        <template #right>
+          <up-icon name="arrow-right"
+                   @click="showTimeFormatSheet = true"></up-icon>
+        </template>
+      </up-form-item>
+      <up-form-item label="鏄惁蹇呭~"
+                    prop="isRequired">
+        <view style="display: flex; justify-content: flex-end; width: 100%;">
+          <up-switch v-model="form.isRequired"
+                     :activeValue="1"
+                     :inactiveValue="0" />
+        </view>
+      </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="paramId ? '淇濆瓨' : '鏂板'"
+                   @cancel="goBack"
+                   @confirm="handleSubmit" />
+    <!-- 鍙傛暟绫诲瀷閫夋嫨 -->
+    <up-action-sheet :show="showParamTypeSheet"
+                     title="閫夋嫨鍙傛暟绫诲瀷"
+                     :actions="paramTypeActions"
+                     @select="onSelectParamType"
+                     @close="showParamTypeSheet = false" />
+    <!-- 涓嬫媺瀛楀吀閫夋嫨 -->
+    <up-action-sheet :show="showDictTypeSheet"
+                     title="閫夋嫨涓嬫媺瀛楀吀"
+                     :actions="dictTypeActions"
+                     @select="onSelectDictType"
+                     @close="showDictTypeSheet = false" />
+    <!-- 鏃堕棿鏍煎紡閫夋嫨 -->
+    <up-action-sheet :show="showTimeFormatSheet"
+                     title="閫夋嫨鏃堕棿鏍煎紡"
+                     :actions="timeFormatActions"
+                     @select="onSelectTimeFormat"
+                     @close="showTimeFormatSheet = false" />
+  </view>
+</template>
+
+<script setup>
+  import { computed, nextTick, onMounted, ref } from "vue";
+  import { onLoad, onReady } from "@dcloudio/uni-app";
+  import FooterButtons from "@/components/FooterButtons.vue";
+  import PageHeader from "@/components/PageHeader.vue";
+  import {
+    addBaseParam,
+    editBaseParam,
+  } from "@/api/basicData/parameterMaintenance";
+  import { listType } from "@/api/system/dict/type";
+
+  const formRef = ref();
+  const loading = ref(false);
+  const paramId = ref("");
+  const showParamTypeSheet = ref(false);
+  const showDictTypeSheet = ref(false);
+  const showTimeFormatSheet = ref(false);
+  const dictTypes = ref([]);
+
+  const form = ref({
+    id: null,
+    paramCode: "",
+    paramName: "",
+    paramType: "",
+    unit: "",
+    remark: "",
+    isRequired: 0,
+    paramFormat: "",
+  });
+
+  const rules = {
+    paramName: [{ required: true, message: "璇疯緭鍏ュ弬鏁板悕绉�" }],
+    paramType: [{ required: true, message: "璇烽�夋嫨鍙傛暟绫诲瀷" }],
+    unit: [
+      {
+        validator: (rule, value, callback) => {
+          if (form.value.paramType === 1 && !value) {
+            callback(new Error("鏁板�肩被鍨嬪繀椤诲~鍐欏崟浣�"));
+          } else {
+            callback();
+          }
+        },
+      },
+    ],
+  };
+
+  const paramTypeActions = [
+    { name: "鏁板�兼牸寮�", value: 1 },
+    { name: "鏂囨湰鏍煎紡", value: 2 },
+    { name: "涓嬫媺閫夐」", value: 3 },
+    { name: "鏃堕棿鏍煎紡", value: 4 },
+  ];
+
+  const timeFormatActions = [
+    { name: "YYYY-MM-DD", value: "YYYY-MM-DD" },
+    { name: "YYYY-MM-DD HH:mm:ss", value: "YYYY-MM-DD HH:mm:ss" },
+  ];
+
+  const dictTypeActions = computed(() => {
+    return dictTypes.value.map(item => ({
+      name: item.dictName,
+      value: item.dictType,
+    }));
+  });
+
+  const pageTitle = computed(() => (paramId.value ? "缂栬緫鍙傛暟" : "鏂板鍙傛暟"));
+
+  const paramTypeText = computed(() => {
+    const action = paramTypeActions.find(
+      item => item.value === form.value.paramType
+    );
+    return action ? action.name : "";
+  });
+
+  const dictTypeText = computed(() => {
+    const action = dictTypes.value.find(
+      item => item.dictType === form.value.paramFormat
+    );
+    return action ? action.dictName : form.value.paramFormat || "";
+  });
+
+  const goBack = () => {
+    uni.navigateBack();
+  };
+
+  const getDictTypes = () => {
+    listType({ pageNum: 1, pageSize: 1000 }).then(res => {
+      dictTypes.value = res.rows || [];
+    });
+  };
+
+  const onSelectParamType = action => {
+    form.value.paramType = action.value;
+    if (action.value === 1) {
+      form.value.paramFormat = "#.00000";
+    } else if (action.value === 4) {
+      form.value.paramFormat = "YYYY-MM-DD HH:mm:ss";
+    } else {
+      form.value.paramFormat = "";
+    }
+    showParamTypeSheet.value = false;
+  };
+
+  const onSelectDictType = action => {
+    form.value.paramFormat = action.value;
+    showDictTypeSheet.value = false;
+  };
+
+  const onSelectTimeFormat = action => {
+    form.value.paramFormat = action.value;
+    showTimeFormatSheet.value = false;
+  };
+
+  const handleSubmit = () => {
+    formRef.value
+      .validate()
+      .then(() => {
+        if (form.value.paramType === 3 && !form.value.paramFormat) {
+          uni.showToast({ title: "璇烽�夋嫨涓嬫媺瀛楀吀", icon: "none" });
+          return;
+        }
+
+        loading.value = true;
+        const action = paramId.value ? editBaseParam : addBaseParam;
+        action({ ...form.value, id: paramId.value || undefined })
+          .then(() => {
+            uni.showToast({ title: "淇濆瓨鎴愬姛", icon: "success" });
+            setTimeout(() => {
+              goBack();
+            }, 1500);
+          })
+          .catch(() => {
+            uni.showToast({ title: "淇濆瓨澶辫触", icon: "none" });
+          })
+          .finally(() => {
+            loading.value = false;
+          });
+      })
+      .catch(errors => {
+        if (errors && errors.length > 0) {
+          uni.showToast({
+            title: errors[0].message,
+            icon: "none",
+          });
+        }
+      });
+  };
+
+  onReady(() => {
+    if (formRef.value) {
+      formRef.value.setRules(rules);
+    }
+  });
+
+  onMounted(() => {
+    getDictTypes();
+  });
+
+  onLoad(options => {
+    if (options?.item) {
+      const item = JSON.parse(decodeURIComponent(options.item));
+      paramId.value = item.id;
+      if (item.paramType) {
+        item.paramType = Number(item.paramType);
+      }
+      Object.assign(form.value, item);
+    }
+  });
+</script>
+
+<style scoped lang="scss">
+  @import "@/static/scss/form-common.scss";
+
+  .basic-parameters-edit {
+    min-height: 100vh;
+    background: #f5f5f5;
+  }
+</style>
diff --git a/src/pages/productionDesign/basicParameters/index.vue b/src/pages/productionDesign/basicParameters/index.vue
new file mode 100644
index 0000000..24a5db0
--- /dev/null
+++ b/src/pages/productionDesign/basicParameters/index.vue
@@ -0,0 +1,245 @@
+<template>
+  <view class="sales-account">
+    <PageHeader title="鍩虹鍙傛暟"
+                @back="goBack" />
+    <view class="search-section">
+      <view class="search-bar">
+        <view class="search-input">
+          <up-input class="search-text"
+                    v-model="paramName"
+                    placeholder="璇疯緭鍏ュ弬鏁板悕绉�"
+                    clearable
+                    @change="handleSearch" />
+        </view>
+        <view class="filter-button"
+              @click="handleSearch">
+          <up-icon name="search"
+                   size="24"
+                   color="#999999"></up-icon>
+        </view>
+      </view>
+    </view>
+    <view v-if="list.length > 0"
+          class="ledger-list">
+      <view v-for="item in list"
+            :key="item.id"
+            class="ledger-item">
+        <view class="item-header">
+          <view class="item-left">
+            <view class="document-icon">
+              <up-icon name="setting-fill"
+                       size="16"
+                       color="#ffffff"></up-icon>
+            </view>
+            <text class="item-id">{{ item.paramName || "-" }}</text>
+          </view>
+          <text class="item-index">{{ item.paramCode || "-" }}</text>
+        </view>
+        <up-divider></up-divider>
+        <view class="item-details">
+          <view class="detail-row">
+            <text class="detail-label">鍙傛暟绫诲瀷</text>
+            <up-tag :text="getParamTypeLabel(item.paramType)"
+                    :type="getParamTypeTag(item.paramType)"
+                    size="mini" />
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍗曚綅</text>
+            <text class="detail-value">{{ item.unit || "-" }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鏄惁蹇呭~</text>
+            <up-tag :text="item.isRequired === 1 ? '鏄�' : '鍚�'"
+                    :type="item.isRequired === 1 ? 'success' : 'info'"
+                    size="mini" />
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍙栧�兼牸寮�</text>
+            <text class="detail-value">{{ item.paramFormat || "-" }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">澶囨敞</text>
+            <text class="detail-value">{{ item.remark || "-" }}</text>
+          </view>
+        </view>
+        <view class="action-buttons">
+          <up-button class="action-btn"
+                     size="small"
+                     type="primary"
+                     @click="goEdit(item)">缂栬緫</up-button>
+          <up-button class="action-btn"
+                     size="small"
+                     type="error"
+                     @click="handleDelete(item)">鍒犻櫎</up-button>
+        </view>
+      </view>
+      <up-loadmore :status="page.status" />
+    </view>
+    <view v-else
+          class="no-data">
+      <text>鏆傛棤鍩虹鍙傛暟鏁版嵁</text>
+    </view>
+    <view class="fab-button"
+          @click="goAdd">
+      <up-icon name="plus"
+               size="28"
+               color="#ffffff"></up-icon>
+    </view>
+  </view>
+</template>
+
+<script setup>
+  import { reactive, ref } from "vue";
+  import { onReachBottom, onShow } from "@dcloudio/uni-app";
+  import {
+    getBaseParamList,
+    removeBaseParam,
+  } from "@/api/basicData/parameterMaintenance";
+
+  const paramName = ref("");
+  const list = ref([]);
+
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+    status: "loadmore", // loadmore, loading, nomore
+  });
+
+  const goBack = () => {
+    uni.navigateBack();
+  };
+
+  const getParamTypeLabel = type => {
+    const map = {
+      1: "鏁板�兼牸寮�",
+      2: "鏂囨湰鏍煎紡",
+      3: "涓嬫媺閫夐」",
+      4: "鏃堕棿鏍煎紡",
+    };
+    return map[type] || type;
+  };
+
+  const getParamTypeTag = type => {
+    const map = {
+      1: "primary",
+      2: "info",
+      3: "warning",
+      4: "success",
+    };
+    return map[type] || "info";
+  };
+
+  const goAdd = () => {
+    uni.navigateTo({ url: "/pages/productionDesign/basicParameters/edit" });
+  };
+
+  const goEdit = item => {
+    uni.navigateTo({
+      url: `/pages/productionDesign/basicParameters/edit?item=${encodeURIComponent(
+        JSON.stringify(item)
+      )}`,
+    });
+  };
+
+  const handleDelete = item => {
+    uni.showModal({
+      title: "鎻愮ず",
+      content: "纭畾瑕佸垹闄よ鍙傛暟鍚楋紵",
+      success: res => {
+        if (res.confirm) {
+          removeBaseParam(item.id).then(() => {
+            uni.showToast({ title: "鍒犻櫎鎴愬姛" });
+            handleSearch();
+          });
+        }
+      },
+    });
+  };
+
+  const handleSearch = () => {
+    page.current = 1;
+    page.status = "loadmore";
+    list.value = [];
+    getList();
+  };
+
+  const getList = () => {
+    if (page.status === "loading" || page.status === "nomore") return;
+
+    page.status = "loading";
+    getBaseParamList({
+      current: page.current,
+      size: page.size,
+      paramName: paramName.value,
+    })
+      .then(res => {
+        const records = res?.data?.records || res?.records || [];
+        const total = res?.data?.total || res?.total || 0;
+
+        if (page.current === 1) {
+          list.value = records;
+        } else {
+          list.value = [...list.value, ...records];
+        }
+
+        page.total = total;
+        if (list.value.length >= total) {
+          page.status = "nomore";
+        } else {
+          page.status = "loadmore";
+          page.current++;
+        }
+      })
+      .catch(() => {
+        uni.showToast({ title: "鏌ヨ澶辫触", icon: "error" });
+        page.status = "loadmore";
+      });
+  };
+
+  onReachBottom(() => {
+    getList();
+  });
+
+  onShow(() => {
+    handleSearch();
+  });
+</script>
+
+<style scoped lang="scss">
+  @import "@/styles/procurement-common.scss";
+
+  .no-data {
+    padding-top: 100rpx;
+    text-align: center;
+    color: #999;
+    font-size: 28rpx;
+  }
+
+  .action-buttons {
+    display: flex;
+    justify-content: flex-end;
+    gap: 20rpx;
+    padding-bottom: 30rpx;
+  }
+
+  .action-btn {
+    width: 140rpx;
+    margin: 0 !important;
+  }
+
+  .fab-button {
+    position: fixed;
+    right: 40rpx;
+    bottom: 60rpx;
+    width: 100rpx;
+    height: 100rpx;
+    background: #2979ff;
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    box-shadow: 0 4rpx 12rpx rgba(41, 121, 255, 0.4);
+    z-index: 100;
+  }
+</style>
diff --git a/src/pages/works.vue b/src/pages/works.vue
index b4400c7..72f1d0a 100644
--- a/src/pages/works.vue
+++ b/src/pages/works.vue
@@ -15,7 +15,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -37,7 +38,31 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
+            </view>
+            <text class="item-label">{{item.label}}</text>
+          </up-grid-item>
+        </up-grid>
+      </view>
+    </view>
+    <!-- 宸ヨ壓璁捐 -->
+    <view class="common-module design-module"
+          v-if="hasDesignItems">
+      <view class="module-header">
+        <view class="module-title-container">
+          <text class="module-title">宸ヨ壓璁捐</text>
+        </view>
+      </view>
+      <view class="module-content">
+        <up-grid :border="false"
+                 col="4">
+          <up-grid-item v-for="(item, index) in designItems"
+                        :key="index"
+                        @click="handleCommonItemClick(item)">
+            <view class="icon-container">
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -59,7 +84,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -81,7 +107,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -103,7 +130,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -125,7 +153,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -147,7 +176,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -169,7 +199,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -191,7 +222,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -213,7 +245,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -235,7 +268,8 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
@@ -257,14 +291,14 @@
                         :key="index"
                         @click="handleCommonItemClick(item)">
             <view class="icon-container">
-              <image :src="item.icon" class="item-icon"></image>
+              <image :src="item.icon"
+                     class="item-icon"></image>
             </view>
             <text class="item-label">{{item.label}}</text>
           </up-grid-item>
         </up-grid>
       </view>
     </view>
-
     <DownloadProgressMask />
   </view>
 </template>
@@ -299,6 +333,25 @@
       currentStatus.value = statusList[statusIndex];
     }, 3000);
   };
+  // 宸ヨ壓璁捐鍔熻兘鏁版嵁
+  const designItems = reactive([
+    {
+      icon: "/static/images/icon/xiaoshoubaojia.svg",
+      label: "鍩虹鍙傛暟",
+    },
+    {
+      icon: "/static/images/icon/xiaoshoubaojia.svg",
+      label: "宸ュ簭绠$悊",
+    },
+    {
+      icon: "/static/images/icon/xiaoshoubaojia.svg",
+      label: "BOM",
+    },
+    {
+      icon: "/static/images/icon/xiaoshoubaojia.svg",
+      label: "宸ヨ壓璺嚎",
+    },
+  ]);
 
   // 钀ラ攢绠$悊鍔熻兘鏁版嵁
   const marketingItems = reactive([
@@ -397,8 +450,8 @@
     {
       icon: "/static/images/icon/hetongguanli.svg",
       label: "褰掕繕鐧昏",
-    }
-  ])
+    },
+  ]);
 
   // 鍞悗鏈嶅姟鍔熻兘鏁版嵁
   const afterSalesServiceItems = reactive([
@@ -938,6 +991,11 @@
           url: "/pages/fileManagement/return/index",
         });
         break;
+      case "鍩虹鍙傛暟":
+        uni.navigateTo({
+          url: "/pages/productionDesign/basicParameters/index",
+        });
+        break;
       default:
         uni.showToast({
           title: `鐐瑰嚮浜�${item.label}`,
@@ -1125,10 +1183,13 @@
 
     // 瀹氫箟鑿滃崟閰嶇疆鏄犲皠
     const menuMapping = {
-      collaboration: { target: collaborationItems, specialMapping: { "瑙勭珷鍒跺害": "瑙勭珷鍒跺害绠$悊" } },
-      purchase: { specialMapping: { "渚涘簲鍟嗘。妗�": "渚涘簲鍟嗙鐞�" } },
+      collaboration: {
+        target: collaborationItems,
+        specialMapping: { 瑙勭珷鍒跺害: "瑙勭珷鍒跺害绠$悊" },
+      },
+      purchase: { specialMapping: { 渚涘簲鍟嗘。妗�: "渚涘簲鍟嗙鐞�" } },
     };
-    console.log(allowedMenuTitles)
+    console.log(allowedMenuTitles);
     // 閫氱敤杩囨护鍑芥暟
     const filterArray = (targetArray, specialMapping) => {
       const filtered = targetArray.filter(item => {
@@ -1157,17 +1218,26 @@
 
   // 妫�鏌ユā鍧楁槸鍚︽湁鑿滃崟椤归渶瑕佹樉绀�
   const hasMarketingItems = computed(() => marketingItems.length > 0);
+  const hasDesignItems = computed(() => designItems.length > 0);
   const hasPurchaseItems = computed(() => purchaseItems.length > 0);
-  const hasFinanceManagementItems = computed(() => financeManagementItems.length > 0);
-  const hasAfterSalesServiceItems = computed(() => afterSalesServiceItems.length > 0);
+  const hasFinanceManagementItems = computed(
+    () => financeManagementItems.length > 0
+  );
+  const hasAfterSalesServiceItems = computed(
+    () => afterSalesServiceItems.length > 0
+  );
   const hasCollaborationItems = computed(() => collaborationItems.length > 0);
   const hasSafetyItems = computed(() => safetyItems.length > 0);
   const hasQualityItems = computed(() => qualityItems.length > 0);
   const hasHumanResourcesItems = computed(() => humanResourcesItems.length > 0);
-  const hasWarehouseLogisticsItems = computed(() => warehouseLogisticsItems.length > 0);
+  const hasWarehouseLogisticsItems = computed(
+    () => warehouseLogisticsItems.length > 0
+  );
   const hasProductionItems = computed(() => productionItems.length > 0);
   const hasEquipmentItems = computed(() => equipmentItems.length > 0);
-  const hasArchiveManagementItems = computed(() => archiveManagementItems.length > 0);
+  const hasArchiveManagementItems = computed(
+    () => archiveManagementItems.length > 0
+  );
 
   onMounted(() => {
     // 姣忔杩涘叆棣栭〉閮藉己鍒跺埛鏂扮敤鎴蜂俊鎭拰璺敱鏉冮檺锛屼笉鍋氭湰鍦扮紦瀛樺垽鏂�

--
Gitblit v1.9.3