From 03e1f933ce9771a7cdacddbff5be7186ba1d4718 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 05 二月 2026 17:29:02 +0800
Subject: [PATCH] 安全培训考核更正名字错字

---
 src/pages/safeProduction/safetyTrainingAssessment/detail.vue |  430 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 430 insertions(+), 0 deletions(-)

diff --git a/src/pages/safeProduction/safetyTrainingAssessment/detail.vue b/src/pages/safeProduction/safetyTrainingAssessment/detail.vue
new file mode 100644
index 0000000..d55c892
--- /dev/null
+++ b/src/pages/safeProduction/safetyTrainingAssessment/detail.vue
@@ -0,0 +1,430 @@
+<template>
+  <view class="danger-investigation-detail">
+    <PageHeader :title="isEdit ? '缂栬緫鍩硅' : '鏂板鍩硅'"
+                @back="goBack" />
+    <u-form @submit="handleSubmit"
+            ref="formRef"
+            label-width="110">
+      <!-- 鍩硅淇℃伅 -->
+      <u-cell-group title="鍩硅淇℃伅">
+        <u-form-item label="璇剧▼缂栧彿"
+                     prop="courseCode"
+                     border-bottom>
+          <u-input v-model="form.courseCode"
+                   placeholder="绯荤粺鑷姩鐢熸垚"
+                   readonly />
+        </u-form-item>
+        <u-form-item label="鍩硅鏃ユ湡"
+                     prop="trainingDate"
+                     required
+                     border-bottom>
+          <u-input v-model="form.trainingDate"
+                   placeholder="璇烽�夋嫨鍩硅鏃ユ湡"
+                   @click="showTrainingDatePicker"
+                   readonly />
+          <template #right>
+            <up-icon name="arrow-right"
+                     @click="showTrainingDatePicker"></up-icon>
+          </template>
+        </u-form-item>
+        <u-form-item label="寮�濮嬫椂闂�"
+                     prop="openingTime"
+                     required
+                     border-bottom>
+          <u-input v-model="form.openingTime"
+                   placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
+                   @click="showOpeningTimePicker"
+                   readonly />
+          <template #right>
+            <up-icon name="arrow-right"
+                     @click="showOpeningTimePicker"></up-icon>
+          </template>
+        </u-form-item>
+        <u-form-item label="缁撴潫鏃堕棿"
+                     prop="endTime"
+                     required
+                     border-bottom>
+          <u-input v-model="form.endTime"
+                   placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
+                   @click="showEndTimePicker"
+                   readonly />
+          <template #right>
+            <up-icon name="arrow-right"
+                     @click="showEndTimePicker"></up-icon>
+          </template>
+        </u-form-item>
+        <u-form-item label="鍩硅鐩爣"
+                     prop="trainingObjectives"
+                     border-bottom>
+          <u-input v-model="form.trainingObjectives"
+                   placeholder="璇疯緭鍏ュ煿璁洰鏍�" />
+        </u-form-item>
+        <u-form-item label="鍙傚姞瀵硅薄"
+                     prop="participants"
+                     border-bottom>
+          <u-input v-model="form.participants"
+                   placeholder="璇疯緭鍏ュ弬鍔犲璞�" />
+        </u-form-item>
+        <u-form-item label="鍩硅鍐呭"
+                     prop="trainingContent"
+                     required
+                     border-bottom>
+          <u-textarea v-model="form.trainingContent"
+                      placeholder="璇疯緭鍏ュ煿璁唴瀹�"
+                      :maxlength="200"
+                      count
+                      :autoHeight="true" />
+        </u-form-item>
+        <u-form-item label="鍩硅璁插笀"
+                     prop="trainingLecturer"
+                     required
+                     border-bottom>
+          <u-input v-model="form.trainingLecturer"
+                   placeholder="璇疯緭鍏ュ煿璁甯�" />
+        </u-form-item>
+        <u-form-item label="椤圭洰瀛﹀垎"
+                     prop="projectCredits"
+                     border-bottom>
+          <u-input v-model="form.projectCredits"
+                   placeholder="璇疯緭鍏ラ」鐩鍒�"
+                   type="number" />
+        </u-form-item>
+        <u-form-item label="鍩硅鏂瑰紡"
+                     prop="trainingMode"
+                     border-bottom>
+          <u-input v-model="trainingModeName"
+                   placeholder="璇烽�夋嫨鍩硅鏂瑰紡"
+                   @click="showTrainingModeSheet"
+                   readonly />
+          <template #right>
+            <up-icon name="arrow-right"
+                     @click="showTrainingModeSheet"></up-icon>
+          </template>
+        </u-form-item>
+        <u-form-item label="鍩硅鍦扮偣"
+                     prop="placeTraining"
+                     border-bottom>
+          <u-input v-model="form.placeTraining"
+                   placeholder="璇疯緭鍏ュ煿璁湴鐐�" />
+        </u-form-item>
+        <u-form-item label="璇炬椂"
+                     prop="classHour"
+                     required
+                     border-bottom>
+          <u-input v-model="form.classHour"
+                   placeholder="璇疯緭鍏ヨ鏃�"
+                   type="number" />
+        </u-form-item>
+      </u-cell-group>
+      <!-- 鎻愪氦鎸夐挳 -->
+      <view class="footer-btns">
+        <u-button class="cancel-btn"
+                  @click="goBack">鍙栨秷</u-button>
+        <u-button class="sign-btn"
+                  type="primary"
+                  @click="handleSubmit"
+                  :loading="loading">{{ isEdit ? '淇濆瓨淇敼' : '鎻愪氦' }}</u-button>
+      </view>
+    </u-form>
+    <!-- 鏃堕棿閫夋嫨鍣� -->
+    <up-datetime-picker :show="trainingDateVisible"
+                        mode="date"
+                        v-model="nowDate"
+                        @confirm="handleTrainingDateConfirm"
+                        @cancel="trainingDateVisible = false"
+                        title="閫夋嫨鍩硅鏃ユ湡" />
+    <u-datetime-picker :show="openingTimeVisible"
+                       mode="time"
+                       @confirm="handleOpeningTimeConfirm"
+                       @cancel="openingTimeVisible = false"
+                       title="閫夋嫨寮�濮嬫椂闂�" />
+    <u-datetime-picker :show="endTimeVisible"
+                       mode="time"
+                       @confirm="handleEndTimeConfirm"
+                       @cancel="endTimeVisible = false"
+                       title="閫夋嫨缁撴潫鏃堕棿" />
+    <!-- 鍩硅鏂瑰紡閫夋嫨鍣� -->
+    <up-action-sheet :show="trainingModeSheetVisible"
+                     :actions="trainingModeOptions"
+                     @select="handleTrainingModeSelect"
+                     @close="trainingModeSheetVisible = false"
+                     title="閫夋嫨鍩硅鏂瑰紡" />
+  </view>
+</template>
+
+<script setup>
+  // 鏇挎崲 toast 鏂规硶
+  defineOptions({ name: "danger-investigation-detail" });
+  const showToast = message => {
+    uni.showToast({ title: message, icon: "none" });
+  };
+
+  import { ref, onMounted } from "vue";
+  import PageHeader from "@/components/PageHeader.vue";
+  import {
+    safeTrainingAdd,
+    safeTrainingUpdate,
+  } from "@/api/safeProduction/safetyTrainingAssessment";
+  import { onLoad } from "@dcloudio/uni-app";
+  import { useDict } from "@/utils/dict";
+  import dayjs from "dayjs";
+
+  // 鑾峰彇瀛楀吀鏁版嵁
+  const { safe_training_methods } = useDict("safe_training_methods");
+
+  // 琛ㄥ崟鏁版嵁
+  const form = ref({
+    courseCode: "", // 璇剧▼缂栧彿
+    trainingDate: "", // 鍩硅鏃ユ湡
+    openingTime: "", // 寮�濮嬫椂闂�
+    endTime: "", // 缁撴潫鏃堕棿
+    trainingObjectives: "", // 鍩硅鐩爣
+    participants: "", // 鍙傚姞瀵硅薄
+    trainingContent: "", // 鍩硅鍐呭
+    trainingLecturer: "", // 鍩硅璁插笀
+    projectCredits: "", // 椤圭洰瀛﹀垎
+    trainingMode: "", // 鍩硅鏂瑰紡
+    placeTraining: "", // 鍩硅鍦扮偣
+    classHour: "", // 璇炬椂
+  });
+
+  // 椤甸潰鐘舵��
+  const loading = ref(false);
+  const formRef = ref(null);
+  const isEdit = ref(false);
+
+  // 鍩硅鏂瑰紡閫夋嫨鍣�
+  const trainingModeSheetVisible = ref(false);
+  const trainingModeName = ref("");
+  const trainingModeOptions = ref([]);
+
+  // 鏃堕棿閫夋嫨鍣�
+  const trainingDateVisible = ref(false);
+  const openingTimeVisible = ref(false);
+  const endTimeVisible = ref(false);
+  const nowDate = ref(new Date());
+
+  const showTrainingDatePicker = () => {
+    trainingDateVisible.value = true;
+  };
+
+  const showOpeningTimePicker = () => {
+    openingTimeVisible.value = true;
+  };
+
+  const showEndTimePicker = () => {
+    endTimeVisible.value = true;
+  };
+
+  const handleTrainingDateConfirm = e => {
+    form.value.trainingDate = dayjs(e.value).format("YYYY-MM-DD");
+    nowDate.value = e.value;
+    trainingDateVisible.value = false;
+  };
+
+  const handleOpeningTimeConfirm = e => {
+    console.log(e);
+    form.value.openingTime = e.value;
+    openingTimeVisible.value = false;
+  };
+
+  const handleEndTimeConfirm = e => {
+    form.value.endTime = e.value;
+    endTimeVisible.value = false;
+  };
+
+  // 鏄剧ず鍩硅鏂瑰紡閫夋嫨鍣�
+  const showTrainingModeSheet = () => {
+    trainingModeSheetVisible.value = true;
+  };
+
+  // 澶勭悊鍩硅鏂瑰紡閫夋嫨
+  const handleTrainingModeSelect = item => {
+    form.value.trainingMode = item.value;
+    trainingModeName.value = item.name;
+    trainingModeSheetVisible.value = false;
+  };
+
+  // 杩斿洖涓婁竴椤�
+  const goBack = () => {
+    uni.removeStorageSync("safetyTraining");
+    uni.navigateBack();
+  };
+
+  // 鎻愪氦琛ㄥ崟
+  const handleSubmit = async () => {
+    if (!form.value.trainingDate) {
+      showToast("璇烽�夋嫨鍩硅鏃ユ湡");
+      return;
+    }
+
+    if (!form.value.openingTime) {
+      showToast("璇烽�夋嫨寮�濮嬫椂闂�");
+      return;
+    }
+
+    if (!form.value.endTime) {
+      showToast("璇烽�夋嫨缁撴潫鏃堕棿");
+      return;
+    }
+    if (!form.value.trainingContent) {
+      showToast("璇疯緭鍏ュ煿璁唴瀹�");
+      return;
+    }
+
+    if (!form.value.trainingLecturer) {
+      showToast("璇疯緭鍏ュ煿璁甯�");
+      return;
+    }
+
+    if (!form.value.classHour) {
+      showToast("璇疯緭鍏ヨ鏃�");
+      return;
+    }
+    if (
+      form.value.projectCredits &&
+      (isNaN(Number(form.value.projectCredits)) ||
+        Number(form.value.projectCredits) <= 0)
+    ) {
+      showToast("瀛﹀垎蹇呴』鏄ぇ浜�0鐨勬暟瀛�");
+      return;
+    }
+    form.value.openingTime = form.value.openingTime + ":00";
+    form.value.endTime = form.value.endTime + ":00";
+
+    if (
+      form.value.classHour &&
+      (isNaN(Number(form.value.classHour)) || Number(form.value.classHour) <= 0)
+    ) {
+      showToast("璇炬椂蹇呴』鏄ぇ浜�0鐨勬暟瀛�");
+      return;
+    }
+
+    try {
+      loading.value = true;
+
+      // 浣跨敤瀹夊叏娴呮嫹璐�
+      const source =
+        form.value && typeof form.value === "object" ? form.value : {};
+      const submitData = {};
+      Object.keys(source).forEach(k => {
+        submitData[k] = source[k];
+      });
+
+      if (isEdit.value) {
+        const { code } = await safeTrainingAdd(submitData);
+        if (code === 200) {
+          showToast("淇敼鎴愬姛");
+          setTimeout(() => {
+            goBack();
+          }, 500);
+        } else {
+          loading.value = false;
+          showToast("淇敼澶辫触锛岃閲嶈瘯");
+        }
+      } else {
+        const { code } = await safeTrainingAdd(submitData);
+        if (code === 200) {
+          showToast("鏂板鎴愬姛");
+          setTimeout(() => {
+            goBack();
+          }, 500);
+        } else {
+          loading.value = false;
+          showToast("鏂板澶辫触锛岃閲嶈瘯");
+        }
+      }
+    } catch (e) {
+      loading.value = false;
+      console.error("鎻愪氦澶辫触:", e);
+      showToast("鎻愪氦澶辫触锛岃閲嶈瘯");
+    }
+  };
+
+  onLoad(() => {
+    // 缂栬緫鍩硅鏃讹紝浠庢湰鍦板瓨鍌ㄨ幏鍙栨暟鎹�
+    const safetyTraining = uni.getStorageSync("safetyTraining");
+    if (safetyTraining.id) {
+      form.value = safetyTraining;
+      nowDate.value = dayjs(form.value.trainingDate).toDate();
+      form.value.openingTime = form.value.openingTime
+        ? form.value.openingTime.slice(0, 5)
+        : "";
+      form.value.endTime = form.value.endTime
+        ? form.value.endTime.slice(0, 5)
+        : "";
+      isEdit.value = true;
+    } else {
+      isEdit.value = false;
+      // 榛樿鍩硅鏃ユ湡涓轰粖澶�
+      form.value.trainingDate = dayjs().format("YYYY-MM-DD");
+    }
+  });
+
+  onMounted(() => {
+    // 鍒濆鍖栧煿璁柟寮忛�夐」
+    if (safe_training_methods && Array.isArray(safe_training_methods.value)) {
+      trainingModeOptions.value =
+        safe_training_methods.value.map(item => ({
+          value: item.value,
+          name: item.label,
+        })) || [];
+    } else {
+      trainingModeOptions.value = [];
+    }
+
+    // 璁剧疆宸查�夊�肩殑鏄剧ず鏂囨湰
+    if (form.value.trainingMode) {
+      const modeItem = trainingModeOptions.value.find(
+        item => String(item.value) === String(form.value.trainingMode)
+      );
+      trainingModeName.value = modeItem ? modeItem.name : "";
+    }
+  });
+</script>
+
+<style scoped lang="scss">
+  @import "@/static/scss/form-common.scss";
+
+  .danger-investigation-detail {
+    min-height: 100vh;
+    background: #f8f9fa;
+    padding-bottom: 100px;
+  }
+
+  .footer-btns {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: #fff;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    padding: 0.75rem 0;
+    box-shadow: 0 -0.125rem 0.5rem rgba(0, 0, 0, 0.05);
+    z-index: 1000;
+  }
+
+  .cancel-btn {
+    font-weight: 400;
+    font-size: 1rem;
+    color: #666;
+    background: #f5f5f5;
+    border: 1px solid #ddd;
+    width: 45%;
+    height: 2.5rem;
+    border-radius: 2.5rem;
+  }
+
+  .sign-btn {
+    font-weight: 500;
+    font-size: 1rem;
+    color: #fff;
+    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    border: none;
+    width: 45%;
+    height: 2.5rem;
+    border-radius: 2.5rem;
+  }
+</style>
\ No newline at end of file

--
Gitblit v1.9.3