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