| src/api/safeProduction/dangerInvestigation.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/safeProduction/dangerInvestigation/acceptance.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/safeProduction/dangerInvestigation/detail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/safeProduction/dangerInvestigation/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/safeProduction/dangerInvestigation/rectify.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/safeProduction/dangerInvestigation/view.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/safeProduction/dangerInvestigation.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,61 @@ // åè´§å°è´¦é¡µé¢æ¥å£ import request from "@/utils/request"; // å页æ¥è¯¢ export function dangerInvestigationListPage(query) { return request({ url: "/safeHidden/page", method: "get", params: query, }); } // æ°å¢å®å ¨è§ç¨ä¸èµè´¨ç®¡ç export function safeHiddenAdd(query) { return request({ url: '/safeHidden', method: 'post', data: query }) } // ä¿®æ¹å®å ¨è§ç¨ä¸èµè´¨ç®¡ç export function safeHiddenUpdate(query) { return request({ url: '/safeHidden', method: 'put', data: query }) } // å é¤å®å ¨è§ç¨ä¸èµè´¨ç®¡ç export function safeHiddenDel(ids) { return request({ url: '/safeHidden/' + ids, method: 'delete', data: ids }) } // æ¥è¯¢éä»¶å表 export function fileListPage(query) { return request({ url: "/safeHiddenFile/listPage", method: "get", params: query, }); } // æ·»å éä»¶ export function safeHiddenFileAdd(query) { return request({ url: '/safeHiddenFile/add', method: 'post', data: query }) } // å é¤éä»¶ export function safeHiddenFileDel(ids) { return request({ url: '/safeHiddenFile/del', method: 'delete', data: ids }) } src/pages.json
@@ -717,6 +717,41 @@ "navigationStyle": "custom" } }, { "path": "pages/safeProduction/dangerInvestigation/index", "style": { "navigationBarTitleText": "éæ£ææ¥ä¸æ¥", "navigationStyle": "custom" } }, { "path": "pages/safeProduction/dangerInvestigation/detail", "style": { "navigationBarTitleText": "鿣䏿¥è¯¦æ ", "navigationStyle": "custom" } }, { "path": "pages/safeProduction/dangerInvestigation/view", "style": { "navigationBarTitleText": "éæ£è¯¦æ ", "navigationStyle": "custom" } }, { "path": "pages/safeProduction/dangerInvestigation/rectify", "style": { "navigationBarTitleText": "éæ£æ´æ¹", "navigationStyle": "custom" } }, { "path": "pages/safeProduction/dangerInvestigation/acceptance", "style": { "navigationBarTitleText": "éæ£éªæ¶", "navigationStyle": "custom" } }, ], "subPackages": [ { src/pages/index.vue
@@ -311,6 +311,14 @@ icon: "/static/images/icon/caigoutaizhang@2x.png", label: "å±é©ä½ä¸", }, { icon: "/static/images/icon/xunjianshangchuan@2x.png", label: "å·¡æ£ä¸ä¼ ", }, { icon: "/static/images/icon/guzhangfenxi@2x.png", label: "éæ£ææ¥", }, ]); // åååå ¬åè½æ°æ® const collaborationItems = reactive([ @@ -398,10 +406,6 @@ { icon: "/static/images/icon/shbeibaoyang@2x.png", label: "设å¤ä¿å »", }, { icon: "/static/images/icon/xunjianshangchuan@2x.png", label: "å·¡æ£ä¸ä¼ ", }, { icon: "/static/images/icon/guzhangfenxi@2x.png", @@ -688,6 +692,11 @@ url: "/pages/cooperativeOffice/collaborativeApproval/index8", }); break; case "éæ£ææ¥": uni.navigateTo({ url: "/pages/safeProduction/dangerInvestigation/index", }); break; default: uni.showToast({ title: `ç¹å»äº${item.label}`, src/pages/safeProduction/dangerInvestigation/acceptance.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,376 @@ <template> <view class="danger-investigation-acceptance"> <PageHeader title="éæ£éªæ¶" @back="goBack" /> <view class="section"> <view class="section-title">éæ£ä¿¡æ¯</view> <view class="info-item"> <text class="info-label">鿣ç¼å·</text> <text class="info-value">{{ form.hiddenCode || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éæ£ç±»å</text> <text class="info-value">{{ hidden_danger_type.find(i => String(i.value) === String(form.type))?.label || '-' }}</text> </view> <view class="info-item"> <text class="info-label">é£é©ç级</text> <text class="info-value">{{ form.riskLevel || '-' }}</text> </view> <view class="info-item"> <text class="info-label">鿣æè¿°</text> <text class="info-value">{{ form.hiddenDesc || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éæ£å ·ä½ä½ç½®</text> <text class="info-value">{{ form.location || '-' }}</text> </view> <view class="info-item"> <text class="info-label">䏿¥äºº</text> <text class="info-value">{{ form.createUserName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">䏿¥æ¶é´</text> <text class="info-value">{{ form.createTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹å®ææé</text> <text class="info-value">{{ form.rectifyTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹è´£ä»»äºº</text> <text class="info-value">{{ form.rectifyUserName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹è´£ä»»äººèç³»æ¹å¼</text> <text class="info-value">{{ form.rectifyUserMobile || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹å ·ä½æªæ½</text> <text class="info-value">{{ form.rectifyMeasures || '-' }}</text> </view> <view class="info-item"> <text class="info-label">å®é æ´æ¹å®ææ¶é´</text> <text class="info-value">{{ form.rectifyActualTime || '-' }}</text> </view> </view> <u-form @submit="handleSubmit" ref="formRef" label-width="110"> <!-- éªæ¶ä¿¡æ¯ --> <u-cell-group title="éªæ¶ä¿¡æ¯"> <u-form-item label="éªæ¶æ¶é´" prop="verifyTime" border-bottom> <u-input v-model="form.verifyTime" placeholder="è¯·éæ©éªæ¶æ¶é´" disabled /> </u-form-item> <u-form-item label="éªæ¶äºº" prop="verifyUserName" border-bottom> <u-input v-model="form.verifyUserName" disabled placeholder="请è¾å ¥éªæ¶äºº" /> </u-form-item> <u-form-item label="éªæ¶ç»æ" prop="verifyResult" required border-bottom> <u-input v-model="verifyResultName" placeholder="è¯·éæ©éªæ¶ç»æ" @click="showVerifyResultSheet" readonly /> <template #right> <up-icon name="arrow-right" @click="showVerifyResultSheet"></up-icon> </template> </u-form-item> <u-form-item label="éªæ¶æè§" prop="verifyRemark" required border-bottom> <u-textarea v-model="form.verifyRemark" placeholder="请è¾å ¥éªæ¶æè§" :maxlength="200" count :autoHeight="true" /> </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">æäº¤éªæ¶</u-button> </view> </u-form> <!-- æ¶é´éæ©å¨ --> <up-datetime-picker :show="showTime" v-model="currentTime" @confirm="onTimeConfirm" @cancel="showTime = false" mode="date" /> <!-- éªæ¶ç»æéæ©å¨ --> <up-action-sheet :show="verifyResultSheetVisible" :actions="verifyResultOptions" @select="handleVerifyResultSelect" title="éæ©éªæ¶ç»æ" /> </view> </template> <script setup> // æ¿æ¢ toast æ¹æ³ defineOptions({ name: "danger-investigation-acceptance" }); const showToast = message => { uni.showToast({ title: message, icon: "none", }); }; import { ref, onMounted } from "vue"; import PageHeader from "@/components/PageHeader.vue"; import { safeHiddenUpdate } from "@/api/safeProduction/dangerInvestigation"; import useUserStore from "@/store/modules/user"; import dayjs from "dayjs"; import { onLoad } from "@dcloudio/uni-app"; import { useDict } from "@/utils/dict"; const { hidden_danger_type } = useDict("hidden_danger_type"); const userStore = useUserStore(); // è¡¨åæ°æ® const form = ref({ id: "", hiddenCode: "", hiddenDesc: "", location: "", rectifyTime: "", rectifyActualTime: "", rectifyResult: "", verifyTime: "", verifyRemark: "", verifyResult: "", }); // 页é¢ç¶æ const loading = ref(false); const formRef = ref(null); // æ¶é´ç¸å ³ const currentTime = ref(Date.now()); const showTime = ref(false); // éªæ¶ç»æéæ©å¨ const verifyResultSheetVisible = ref(false); const verifyResultName = ref(""); const verifyResultOptions = ref([ { value: "éè¿", name: "éè¿" }, { value: "ä¸éè¿", name: "ä¸éè¿" }, ]); const showVerifyResultSheet = () => { verifyResultSheetVisible.value = true; }; const handleVerifyResultSelect = item => { form.value.verifyResult = item.value; verifyResultName.value = item.name; verifyResultSheetVisible.value = false; }; // è¿åä¸ä¸é¡µ const goBack = () => { // è¿åæ¶æ¸ 餿¬å°åå¨çæ°æ® uni.removeStorageSync("dangerInvestigation"); uni.navigateBack(); }; // æ¾ç¤ºæ¶é´éæ©å¨ const showTimePicker = () => { showTime.value = true; }; // 确认æ¶é´éæ© const onTimeConfirm = e => { form.value.verifyTime = dayjs(e.value).format("YYYY-MM-DD"); currentTime.value = e.value; showTime.value = false; }; // æäº¤è¡¨å const handleSubmit = async () => { if (!form.value.verifyRemark) { showToast("请è¾å ¥éªæ¶æè§"); return; } if (!form.value.verifyResult) { showToast("è¯·éæ©éªæ¶ç»æ"); 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]; }); console.log("submitData", submitData); const { code } = await safeHiddenUpdate(submitData); if (code === 200) { showToast("éªæ¶æäº¤æå"); setTimeout(() => { goBack(); }, 500); } else { loading.value = false; showToast("éªæ¶æäº¤å¤±è´¥ï¼è¯·éè¯"); } } catch (e) { loading.value = false; console.error("æäº¤å¤±è´¥:", e); showToast("æäº¤å¤±è´¥ï¼è¯·éè¯"); } }; onLoad(() => { // 仿¬å°åå¨è·åéæ£æ°æ® const dangerInvestigation = uni.getStorageSync("dangerInvestigation"); if (dangerInvestigation && dangerInvestigation.id) { form.value = dangerInvestigation; console.log("form.value", form.value); } else { showToast("ææ éæ£æ°æ®"); } }); // åå§å页颿°æ® const initPageData = () => { // 设置é»è®¤éªæ¶æ¶é´ä¸ºå½åæ¶é´ if (!form.value.verifyTime) { form.value.verifyTime = dayjs().format("YYYY-MM-DD"); currentTime.value = Date.now(); } // 设置已ééªæ¶ç»æçæ¾ç¤ºææ¬ if (form.value.verifyResult) { verifyResultName.value = verifyResultOptions.value.find( item => item.value === form.value.verifyResult )?.name || ""; } // è®¾ç½®éªæ¶äºº if (!form.value.verifyUserName) { userStore.getInfo().then(res => { form.value.verifyUserId = res.user.userId; form.value.verifyUserName = res.user.nickName; }); } console.log("form.value", form.value); }; onMounted(() => { initPageData(); }); </script> <style scoped lang="scss"> @import "@/static/scss/form-common.scss"; .danger-investigation-acceptance { min-height: 100vh; background-color: #f8f9fa; padding-bottom: 160rpx; } .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 2.5rem 2.5rem 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 2.5rem 2.5rem 2.5rem; } .section { background-color: #ffffff; margin-bottom: 16px; overflow: hidden; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); } .section-title { font-size: 16px; font-weight: 600; color: #333333; padding: 16px 16px 12px; border-bottom: 1px solid #f0f0f0; } .info-item { display: flex; padding: 14px 16px; border-bottom: 1px solid #f8f8f8; align-items: flex-start; } .info-item:last-child { border-bottom: none; } .info-label { font-size: 14px; color: #666666; min-width: 80px; flex-shrink: 0; line-height: 22px; } .info-value { font-size: 14px; color: #333333; flex: 1; line-height: 22px; text-align: right; } .multi-line { text-align: left; word-break: break-all; line-height: 1.6; } .remark-item { padding-bottom: 16px; } </style> src/pages/safeProduction/dangerInvestigation/detail.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,446 @@ <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="hiddenCode" border-bottom> <u-input v-model="form.hiddenCode" placeholder="ç³»ç»èªå¨çæ" readonly /> </u-form-item> <u-form-item label="éæ£ç±»å" prop="type" required border-bottom> <u-input v-model="hiddenTypeName" placeholder="è¯·éæ©éæ£ç±»å" @click="showHiddenTypeSheet" readonly /> <template #right> <up-icon name="arrow-right" @click="showHiddenTypeSheet"></up-icon> </template> </u-form-item> <u-form-item label="é£é©ç级" prop="riskLevel" required border-bottom> <u-input v-model="riskLevelName" placeholder="è¯·éæ©é£é©ç级" @click="showRiskLevelSheet" readonly /> <template #right> <up-icon name="arrow-right" @click="showRiskLevelSheet"></up-icon> </template> </u-form-item> <u-form-item label="鿣æè¿°" prop="hiddenDesc" required border-bottom> <u-textarea v-model="form.hiddenDesc" placeholder="请è¾å ¥éæ£æè¿°" :maxlength="200" count :autoHeight="true" /> </u-form-item> <u-form-item label="éæ£å ·ä½ä½ç½®" prop="location" required border-bottom> <u-input v-model="form.location" placeholder="请è¾å ¥éæ£å ·ä½ä½ç½®" /> </u-form-item> <u-form-item label="æ´æ¹å®ææé" prop="rectifyTime" required border-bottom> <u-input v-model="form.rectifyTime" placeholder="è¯·éæ©æ´æ¹å®ææé" @click="showTimePicker" /> <template #right> <up-icon name="arrow-right" @click="showTimePicker"></up-icon> </template> </u-form-item> <u-form-item label="æ´æ¹è´£ä»»äºº" prop="rectifyUserName" required border-bottom> <u-input v-model="form.rectifyUserName" placeholder="è¯·éæ©æ´æ¹è´£ä»»äºº" @click="showPrincipalSheet" readonly /> <template #right> <up-icon name="arrow-right" @click="showPrincipalSheet"></up-icon> </template> </u-form-item> <u-form-item label="䏿¥äºº" prop="createUserName" border-bottom> <u-input v-model="form.createUserName" disabled placeholder="请è¾å ¥ä¸æ¥äºº" /> </u-form-item> <u-form-item label="䏿¥æ¶é´" prop="createTime" border-bottom> <u-input v-model="form.createTime" disabled placeholder="请è¾å ¥ä¸æ¥æ¶é´" /> </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="showTime" v-model="currentTime" @confirm="onTimeConfirm" @cancel="showTime = false" mode="date" /> <!-- éæ£ç±»åéæ©å¨ --> <up-action-sheet :show="hiddenTypeSheetVisible" :actions="hiddenTypeOptions" @select="handleHiddenTypeSelect" title="éæ©éæ£ç±»å" /> <!-- é£é©ççº§éæ©å¨ --> <up-action-sheet :show="riskLevelSheetVisible" :actions="riskLevelOptions" @select="handleRiskLevelSelect" title="éæ©é£é©ç级" /> <!-- æ´æ¹è´£ä»»äººéæ©å¨ --> <up-action-sheet :show="principalSheetVisible" :actions="principalOptions" @select="handlePrincipalSelect" 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 { safeHiddenAdd, safeHiddenUpdate, } from "@/api/safeProduction/dangerInvestigation"; import { userListNoPageByTenantId } from "@/api/system/user"; import useUserStore from "@/store/modules/user"; import { useDict } from "@/utils/dict"; import dayjs from "dayjs"; import { onLoad } from "@dcloudio/uni-app"; // è·ååå ¸æ°æ® const { hidden_danger_type } = useDict("hidden_danger_type"); const userStore = useUserStore(); // è¡¨åæ°æ® const form = ref({ hiddenCode: "", type: "", riskLevel: "", hiddenDesc: "", location: "", rectifyTime: "", rectifyUserName: "", rectifyUserMobile: "", rectifyMeasures: "", }); // 页é¢ç¶æ const loading = ref(false); const formRef = ref(null); const isEdit = ref(false); // æ¶é´ç¸å ³ const currentTime = ref(Date.now()); const showTime = ref(false); // éæ£ç±»åéæ©å¨ const hiddenTypeSheetVisible = ref(false); const hiddenTypeName = ref(""); const hiddenTypeOptions = ref([]); const showHiddenTypeSheet = () => { hiddenTypeSheetVisible.value = true; }; const handleHiddenTypeSelect = item => { form.value.type = item.value; hiddenTypeName.value = item.name; hiddenTypeSheetVisible.value = false; }; // é£é©ççº§éæ©å¨ const riskLevelSheetVisible = ref(false); const riskLevelName = ref(""); const riskLevelOptions = ref([]); const showRiskLevelSheet = () => { riskLevelSheetVisible.value = true; }; const handleRiskLevelSelect = item => { form.value.riskLevel = item.value; riskLevelName.value = item.name; riskLevelSheetVisible.value = false; }; // æ´æ¹è´£ä»»äººéæ©å¨ const principalSheetVisible = ref(false); const userList = ref([]); const principalOptions = ref([]); const showPrincipalSheet = () => { if (principalOptions.value.length === 0) { getUserList(); } else { principalSheetVisible.value = true; } }; const handlePrincipalSelect = item => { form.value.rectifyUserId = item.value; form.value.rectifyUserName = item.name; form.value.rectifyUserMobile = item.mobile; principalSheetVisible.value = false; }; // è·åç¨æ·å表 const getUserList = () => { userListNoPageByTenantId().then(res => { if (res.code === 200) { userList.value = res.data; principalOptions.value = res.data.map(user => ({ value: user.userId, name: user.nickName, mobile: user.phonenumber, })); principalSheetVisible.value = true; } }); }; // è¿åä¸ä¸é¡µ const goBack = () => { // è¿åæ¶æ¸ 餿¬å°åå¨çæ°æ® uni.removeStorageSync("dangerInvestigation"); uni.navigateBack(); }; // æ¾ç¤ºæ¶é´éæ©å¨ const showTimePicker = () => { showTime.value = true; }; // 确认æ¶é´éæ© const onTimeConfirm = e => { form.value.rectifyTime = dayjs(e.value).format("YYYY-MM-DD"); currentTime.value = e.value; showTime.value = false; }; // æäº¤è¡¨å const handleSubmit = async () => { console.log("form.value", form.value); if (!form.value.type) { showToast("è¯·éæ©éæ£ç±»å"); return; } if (!form.value.riskLevel) { showToast("è¯·éæ©é£é©ç级"); return; } if (!form.value.hiddenDesc) { showToast("请è¾å ¥éæ£æè¿°"); return; } if (!form.value.location) { showToast("请è¾å ¥éæ£å ·ä½ä½ç½®"); return; } if (!form.value.rectifyTime) { showToast("è¯·éæ©æ´æ¹å®ææé"); return; } if (!form.value.rectifyUserName) { showToast("è¯·éæ©æ´æ¹è´£ä»»äºº"); return; } if (!form.value.rectifyUserMobile) { showToast("请è¾å ¥æ´æ¹è´£ä»»äººèç³»æ¹å¼"); 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]; }); console.log("submitData", submitData); if (isEdit.value) { const { code } = await safeHiddenUpdate(submitData); if (code === 200) { showToast("ä¿®æ¹æå"); setTimeout(() => { goBack(); }, 500); } else { loading.value = false; showToast("ä¿®æ¹å¤±è´¥ï¼è¯·éè¯"); } } else { const { code } = await safeHiddenAdd(submitData); if (code === 200) { showToast("æ°å¢æå"); setTimeout(() => { goBack(); }, 500); } else { loading.value = false; showToast("æ°å¢å¤±è´¥ï¼è¯·éè¯"); } } } catch (e) { loading.value = false; console.error("æäº¤å¤±è´¥:", e); showToast("æäº¤å¤±è´¥ï¼è¯·éè¯"); } }; onLoad(() => { // ç¼è¾éæ£æ¶ï¼ä»æ¬å°åå¨è·åæ°æ® const dangerInvestigation = uni.getStorageSync("dangerInvestigation"); if (dangerInvestigation && dangerInvestigation.id) { form.value = dangerInvestigation; isEdit.value = true; } else { isEdit.value = false; } userStore.getInfo().then(res => { form.value.createUser = res.user.userId; form.value.createUserName = res.user.nickName; }); form.value.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss"); }); // åå§å页颿°æ® const initPageData = () => { // 设置é»è®¤æ´æ¹å®ææé为å½åæ¶é´ if (!isEdit.value) { form.value.rectifyTime = dayjs().format("YYYY-MM-DD"); currentTime.value = Date.now(); } }; onMounted(() => { initPageData(); // åå§åéé¡¹æ°æ® hiddenTypeOptions.value = hidden_danger_type.value.map(item => ({ value: item.value, name: item.label, })); riskLevelOptions.value = [ { value: "é大é£é©", name: "é大é£é©", }, { value: "è¾å¤§é£é©", name: "è¾å¤§é£é©", }, { value: "ä¸è¬é£é©", name: "ä¸è¬é£é©", }, { value: "ä½é£é©", name: "ä½é£é©", }, ]; // 设置已éå¼çæ¾ç¤ºææ¬ if (form.value.type) { hiddenTypeName.value = hiddenTypeOptions.value.find(item => item.value == form.value.type) ?.name || ""; } if (form.value.riskLevel) { riskLevelName.value = riskLevelOptions.value.find(item => item.value == form.value.riskLevel) ?.name || ""; } }); </script> <style scoped lang="scss"> @import "@/static/scss/form-common.scss"; .danger-investigation-detail { min-height: 100vh; background-color: #f8f9fa; } .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 2.5rem 2.5rem 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 2.5rem 2.5rem 2.5rem; } </style> src/pages/safeProduction/dangerInvestigation/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,353 @@ <template> <view class="sales-accoun"> <!-- 使ç¨éç¨é¡µé¢å¤´é¨ç»ä»¶ --> <PageHeader title="éæ£ææ¥ä¸æ¥" @back="goBack" /> <!-- æç´¢åçéåºå --> <!-- <view class="search-section"> <view class="search-bar"> <view class="search-input"> <up-input class="search-text" placeholder="请è¾å ¥å±é©æºåç§°" v-model="customerName" @blur="getList" clearable /> </view> <view class="filter-button" @click="getList"> <u-icon name="search" size="24" color="#999"></u-icon> </view> </view> </view> --> <!-- æè®¿è®°å½å表 --> <view class="ledger-list" v-if="visitList.length > 0"> <view v-for="(item, index) in visitList" :key="index"> <view class="ledger-item"> <view class="item-header"> <view class="item-left"> <view class="document-icon"> <up-icon name="file-text" size="16" color="#ffffff"></up-icon> </view> <text class="item-id">鿣ç¼å·ï¼{{ item.hiddenCode }}</text> </view> </view> <up-divider></up-divider> <view class="item-details" @click="viewDetail(item)"> <view class="detail-row"> <text class="detail-label">鿣æè¿°</text> <text class="detail-value">{{ item.hiddenDesc || '-' }}</text> </view> <view class="detail-row"> <text class="detail-label">éæ£ç±»å</text> <text class="detail-value">{{ hidden_danger_type.find(i => String(i.value) === String(item.type))?.label || '-' }}</text> </view> <view class="detail-row"> <text class="detail-label">é£é©ç级</text> <u-tag :type="getRiskLevelType(item.riskLevel)"> {{ item.riskLevel || '-' }} </u-tag> </view> <view class="detail-row"> <text class="detail-label">éæ£å ·ä½ä½ç½®</text> <text class="detail-value">{{ item.location || '-' }}</text> </view> <view class="detail-row"> <text class="detail-label">䏿¥äºº</text> <text class="detail-value">{{ item.createUserName || '-' }}</text> </view> <view class="detail-row"> <text class="detail-label">䏿¥æ¶é´</text> <text class="detail-value">{{ item.createTime || '-' }}</text> </view> <view class="detail-row"> <text class="detail-label">æ´æ¹å®ææé</text> <text class="detail-value">{{ item.rectifyTime || '-' }}</text> </view> <view class="detail-row"> <text class="detail-label">æ´æ¹è´£ä»»äºº</text> <text class="detail-value">{{ item.rectifyUserName || '-' }}</text> </view> <view class="detail-row"> <text class="detail-label">æ´æ¹è´£ä»»äººèç³»æ¹å¼</text> <text class="detail-value">{{ item.rectifyUserMobile || '-' }}</text> </view> <view v-if="item.rectifyActualTime" class="detail-row"> <text class="detail-label">æ´æ¹å ·ä½æªæ½</text> <text class="detail-value">{{ item.rectifyMeasures || '-' }}</text> </view> <view v-if="item.rectifyActualTime" class="detail-row"> <text class="detail-label">å®é æ´æ¹å®ææ¶é´</text> <text class="detail-value">{{ item.rectifyActualTime || '-' }}</text> </view> <view v-if="item.verifyTime" class="detail-row"> <text class="detail-label">éªæ¶æè§</text> <text class="detail-value">{{ item.verifyRemark || '-' }}</text> </view> <view v-if="item.verifyTime" class="detail-row"> <text class="detail-label">éªæ¶æ¶é´</text> <text class="detail-value">{{ item.verifyTime || '-' }}</text> </view> <view v-if="item.verifyTime" class="detail-row"> <text class="detail-label">éªæ¶äºº</text> <text class="detail-value">{{ item.verifyUserName || '-' }}</text> </view> <view v-if="item.verifyTime" class="detail-row"> <text class="detail-label">éªæ¶ç»æ</text> <text class="detail-value">{{ item.verifyResult || '-' }}</text> </view> </view> <!-- æé®åºå --> <view class="action-buttons"> <!-- <u-button type="info" size="small" class="action-btn" @click="viewDetail(item)"> æ¥ç详æ </u-button> --> <u-button type="primary" size="small" class="action-btn" @click="editVisit(item)"> ç¼è¾ </u-button> <u-button type="warning" size="small" class="action-btn" :disabled="item.isRectify" @click="rectifyVisit(item)"> æ´æ¹ </u-button> <u-button type="success" size="small" class="action-btn" :disabled="!item.rectifyActualTime" @click="acceptanceVisit(item)"> éªæ¶ </u-button> <u-button type="error" size="small" class="action-btn" @click="deleteVisit(item)"> å é¤ </u-button> </view> </view> </view> </view> <view v-else class="no-data"> <text>ææ æè®¿è®°å½</text> </view> <!-- æµ®å¨æ°å¢æé® --> <view class="fab-button" @click="addVisit"> <up-icon name="plus" size="24" color="#ffffff"></up-icon> </view> </view> </template> <script setup> import { ref, onMounted } from "vue"; import { onShow } from "@dcloudio/uni-app"; import PageHeader from "@/components/PageHeader.vue"; import { dangerInvestigationListPage, safeHiddenDel, } from "@/api/safeProduction/dangerInvestigation"; import useUserStore from "@/store/modules/user"; import { useDict } from "@/utils/dict"; // æ¿æ¢ toast æ¹æ³ defineOptions({ name: "client-visit-index" }); const showToast = message => { uni.showToast({ title: message, icon: "none", }); }; const getRiskLevelType = riskLevel => { const typeMap = { ä½é£é©: "info", ä¸è¬é£é©: "info", è¾å¤§é£é©: "warning", é大é£é©: "error", }; return typeMap[riskLevel] || "info"; }; import dayjs from "dayjs"; const userStore = useUserStore(); // æç´¢å ³é®è¯ const customerName = ref(""); // æè®¿è®°å½æ°æ® const visitList = ref([]); // è¿åä¸ä¸é¡µ const goBack = () => { uni.navigateBack(); }; // æ¥è¯¢å表 const getList = () => { showLoadingToast("å è½½ä¸..."); const params = { current: -1, size: -1, }; dangerInvestigationListPage(params) .then(res => { visitList.value = res.records || res.data?.records || []; userStore.getInfo().then(res => { visitList.value.forEach(item => { console.log(item.rectifyUserId, res.user.userId); if (Number(item.rectifyUserId) != Number(res.user.userId)) { item.isRectify = true; } else { item.isRectify = false; } }); }); closeToast(); }) .catch(() => { closeToast(); showToast("è·åæ°æ®å¤±è´¥"); }); }; // æ¾ç¤ºå è½½æç¤º const showLoadingToast = message => { uni.showLoading({ title: message, mask: true, }); }; // å ³éæç¤º const closeToast = () => { uni.hideLoading(); }; // æ°å¢éæ£ const addVisit = () => { uni.setStorageSync("dangerInvestigation", {}); uni.navigateTo({ url: "/pages/safeProduction/dangerInvestigation/detail", }); }; // ç¼è¾éæ£ const editVisit = item => { uni.setStorageSync("dangerInvestigation", item); uni.navigateTo({ url: "/pages/safeProduction/dangerInvestigation/detail", }); }; // æ´æ¹éæ£ const rectifyVisit = item => { uni.setStorageSync("dangerInvestigation", item); uni.navigateTo({ url: "/pages/safeProduction/dangerInvestigation/rectify", }); }; // éªæ¶éæ£ const acceptanceVisit = item => { uni.setStorageSync("dangerInvestigation", item); uni.navigateTo({ url: "/pages/safeProduction/dangerInvestigation/acceptance", }); }; // å é¤éæ£ const deleteVisit = item => { uni.showModal({ title: "å é¤ç¡®è®¤", content: `ç¡®å®è¦å é¤è¯¥éæ£åï¼`, success: res => { if (res.confirm) { deleteClientVisit(item.id); } }, }); }; const { hidden_danger_type } = useDict("hidden_danger_type"); // å é¤éæ£è®°å½ const deleteClientVisit = id => { showLoadingToast("å é¤ä¸..."); safeHiddenDel([id]) .then(() => { closeToast(); showToast("å 餿å"); getList(); }) .catch(() => { closeToast(); showToast("å é¤å¤±è´¥"); }); }; // æ¥ç详æ const viewDetail = item => { uni.setStorageSync("dangerInvestigation", item); uni.navigateTo({ url: "/pages/safeProduction/dangerInvestigation/view", }); }; onMounted(() => { getList(); }); onShow(() => { getList(); }); </script> <style scoped lang="scss"> @import "../../../styles/sales-common.scss"; // 页é¢ç¹å®çæ ·å¼è¦ç .sales-accoun { min-height: 100vh; background: #f8f9fa; position: relative; padding-bottom: 80px; } // ç¹å®ç徿 æ ·å¼ .document-icon { background: #667eea; // ä¿æé¡µé¢ç¹æçèæ¯è² } // ç¹ææ ·å¼ .visit-status { display: flex; align-items: center; } .detail-value { word-break: break-all; // ä¿ç页é¢ç¹æçææ¬æ¢è¡æ ·å¼ } // ç¹å®çæµ®å¨æé®æ ·å¼ .fab-button { background: #667eea; // ä¿æé¡µé¢ç¹æçèæ¯è² box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3); // ä¿æé¡µé¢ç¹æçé´å½±ææ } </style> src/pages/safeProduction/dangerInvestigation/rectify.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,312 @@ <template> <view class="danger-investigation-rectify"> <PageHeader title="éæ£æ´æ¹" @back="goBack" /> <view class="section"> <view class="section-title">éæ£ä¿¡æ¯</view> <view class="info-item"> <text class="info-label">鿣ç¼å·</text> <text class="info-value">{{ form.hiddenCode || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éæ£ç±»å</text> <text class="info-value">{{ hidden_danger_type.find(i => String(i.value) === String(form.type))?.label || '-' }}</text> </view> <view class="info-item"> <text class="info-label">é£é©ç级</text> <text class="info-value">{{ form.riskLevel || '-' }}</text> </view> <view class="info-item"> <text class="info-label">鿣æè¿°</text> <text class="info-value">{{ form.hiddenDesc || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éæ£å ·ä½ä½ç½®</text> <text class="info-value">{{ form.location || '-' }}</text> </view> <view class="info-item"> <text class="info-label">䏿¥äºº</text> <text class="info-value">{{ form.createUserName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">䏿¥æ¶é´</text> <text class="info-value">{{ form.createTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹å®ææé</text> <text class="info-value">{{ form.rectifyTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹è´£ä»»äºº</text> <text class="info-value">{{ form.rectifyUserName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹è´£ä»»äººèç³»æ¹å¼</text> <text class="info-value">{{ form.rectifyUserMobile || '-' }}</text> </view> </view> <u-form @submit="handleSubmit" ref="formRef" label-width="130"> <!-- æ´æ¹ä¿¡æ¯ --> <u-cell-group title="æ´æ¹ä¿¡æ¯"> <u-form-item label="å®é æ´æ¹å®ææ¶é´" prop="rectifyActualTime" required border-bottom> <u-input v-model="form.rectifyActualTime" placeholder="è¯·éæ©å®é æ´æ¹å®ææ¶é´" @click="showTimePicker" /> <template #right> <up-icon name="arrow-right" @click="showTimePicker"></up-icon> </template> </u-form-item> <u-form-item label="æ´æ¹å ·ä½æªæ½" required border-bottom> <u-textarea v-model="form.rectifyMeasures" readonly :autoHeight="true" /> </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">æäº¤æ´æ¹</u-button> </view> </u-form> <!-- æ¶é´éæ©å¨ --> <up-datetime-picker :show="showTime" v-model="currentTime" @confirm="onTimeConfirm" @cancel="showTime = false" mode="date" /> </view> </template> <script setup> // æ¿æ¢ toast æ¹æ³ defineOptions({ name: "danger-investigation-rectify" }); const showToast = message => { uni.showToast({ title: message, icon: "none", }); }; import { ref, onMounted } from "vue"; import PageHeader from "@/components/PageHeader.vue"; import { safeHiddenUpdate } from "@/api/safeProduction/dangerInvestigation"; import useUserStore from "@/store/modules/user"; import dayjs from "dayjs"; import { onLoad } from "@dcloudio/uni-app"; import { useDict } from "@/utils/dict"; const userStore = useUserStore(); const { hidden_danger_type } = useDict("hidden_danger_type"); // è¡¨åæ°æ® const form = ref({ id: "", hiddenCode: "", hiddenDesc: "", location: "", rectifyTime: "", rectifyUserName: "", rectifyUserMobile: "", rectifyMeasures: "", rectifyActualTime: "", rectifyResult: "", }); // 页é¢ç¶æ const loading = ref(false); const formRef = ref(null); // æ¶é´ç¸å ³ const currentTime = ref(Date.now()); const showTime = ref(false); // è¿åä¸ä¸é¡µ const goBack = () => { // è¿åæ¶æ¸ 餿¬å°åå¨çæ°æ® uni.removeStorageSync("dangerInvestigation"); uni.navigateBack(); }; // æ¾ç¤ºæ¶é´éæ©å¨ const showTimePicker = () => { showTime.value = true; }; // 确认æ¶é´éæ© const onTimeConfirm = e => { form.value.rectifyActualTime = dayjs(e.value).format("YYYY-MM-DD"); currentTime.value = e.value; showTime.value = false; }; // æäº¤è¡¨å const handleSubmit = async () => { if (!form.value.rectifyActualTime) { showToast("è¯·éæ©å®é æ´æ¹å®ææ¶é´"); return; } if (!form.value.rectifyMeasures) { showToast("请è¾å ¥æ´æ¹å ·ä½æªæ½"); 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]; }); console.log("submitData", submitData); const { code } = await safeHiddenUpdate(submitData); if (code === 200) { showToast("æ´æ¹æäº¤æå"); setTimeout(() => { goBack(); }, 500); } else { loading.value = false; showToast("æ´æ¹æäº¤å¤±è´¥ï¼è¯·éè¯"); } } catch (e) { loading.value = false; console.error("æäº¤å¤±è´¥:", e); showToast("æäº¤å¤±è´¥ï¼è¯·éè¯"); } }; onLoad(() => { // 仿¬å°åå¨è·åéæ£æ°æ® const dangerInvestigation = uni.getStorageSync("dangerInvestigation"); if (dangerInvestigation && dangerInvestigation.id) { form.value = dangerInvestigation; console.log("form.value", form.value); } else { showToast("ææ éæ£æ°æ®"); } }); // åå§å页颿°æ® const initPageData = () => { // 设置é»è®¤å®é æ´æ¹å®ææ¶é´ä¸ºå½åæ¶é´ if (!form.value.rectifyActualTime) { form.value.rectifyActualTime = dayjs().format("YYYY-MM-DD"); currentTime.value = Date.now(); } }; onMounted(() => { initPageData(); }); </script> <style scoped lang="scss"> @import "@/static/scss/form-common.scss"; .danger-investigation-rectify { min-height: 100vh; background-color: #f8f9fa; padding-bottom: 160rpx; } .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 2.5rem 2.5rem 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 2.5rem 2.5rem 2.5rem; } .section { background-color: #ffffff; margin-bottom: 16px; overflow: hidden; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); } .section-title { font-size: 16px; font-weight: 600; color: #333333; padding: 16px 16px 12px; border-bottom: 1px solid #f0f0f0; } .info-item { display: flex; padding: 14px 16px; border-bottom: 1px solid #f8f8f8; align-items: flex-start; } .info-item:last-child { border-bottom: none; } .info-label { font-size: 14px; color: #666666; min-width: 80px; flex-shrink: 0; line-height: 22px; } .info-value { font-size: 14px; color: #333333; flex: 1; line-height: 22px; text-align: right; } .multi-line { text-align: left; word-break: break-all; line-height: 1.6; } .remark-item { padding-bottom: 16px; } </style> src/pages/safeProduction/dangerInvestigation/view.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,203 @@ <template> <view class="danger-investigation-view"> <PageHeader title="éæ£è¯¦æ " @back="goBack" /> <!-- å å®¹å®¹å¨ --> <view class="content-container"> <!-- éæ£ä¿¡æ¯ --> <view class="section"> <view class="section-title">éæ£ä¿¡æ¯</view> <view class="info-item"> <text class="info-label">鿣ç¼å·</text> <text class="info-value">{{ form.hiddenCode || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éæ£ç±»å</text> <text class="info-value">{{ hidden_danger_type.find(i => String(i.value) === String(form.type))?.label || '-' }}</text> </view> <view class="info-item"> <text class="info-label">é£é©ç级</text> <text class="info-value">{{ form.riskLevel || '-' }}</text> </view> <view class="info-item"> <text class="info-label">鿣æè¿°</text> <text class="info-value">{{ form.hiddenDesc || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éæ£å ·ä½ä½ç½®</text> <text class="info-value">{{ form.location || '-' }}</text> </view> <view class="info-item"> <text class="info-label">䏿¥äºº</text> <text class="info-value">{{ form.createUserName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">䏿¥æ¶é´</text> <text class="info-value">{{ form.createTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹å®ææé</text> <text class="info-value">{{ form.rectifyTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹è´£ä»»äºº</text> <text class="info-value">{{ form.rectifyUserName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹è´£ä»»äººèç³»æ¹å¼</text> <text class="info-value">{{ form.rectifyUserMobile || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æ´æ¹å ·ä½æªæ½</text> <text class="info-value">{{ form.rectifyMeasures || '-' }}</text> </view> <view class="info-item"> <text class="info-label">å®é æ´æ¹å®ææ¶é´</text> <text class="info-value">{{ form.rectifyActualTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éªæ¶æ¶é´</text> <text class="info-value">{{ form.verifyTime || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éªæ¶äºº</text> <text class="info-value">{{ form.verifyUserName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éªæ¶ç»æ</text> <text class="info-value">{{ form.verifyResult || '-' }}</text> </view> <view class="info-item"> <text class="info-label">éªæ¶æè§</text> <text class="info-value">{{ form.verifyRemark || '-' }}</text> </view> </view> </view> </view> </template> <script setup> // æ¿æ¢ toast æ¹æ³ const showToast = message => { uni.showToast({ title: message, icon: "none", }); }; import { ref, onMounted } from "vue"; import PageHeader from "@/components/PageHeader.vue"; import useUserStore from "@/store/modules/user"; import { onLoad } from "@dcloudio/uni-app"; import { useDict } from "@/utils/dict"; const { hidden_danger_type } = useDict("hidden_danger_type"); const userStore = useUserStore(); // è¡¨åæ°æ® const form = ref({ hiddenCode: "", hiddenType: "", riskLevel: "", hiddenDesc: "", location: "", createUserName: "", createTime: "", rectifyTime: "", rectifyUserName: "", rectifyUserMobile: "", rectifyMeasures: "", rectifyActualTime: "", rectifyResult: "", acceptanceTime: "", acceptanceOpinion: "", verifyResult: "", }); // è¿åä¸ä¸é¡µ const goBack = () => { // è¿åæ¶æ¸ 餿¬å°åå¨çæ°æ® uni.removeStorageSync("dangerInvestigation"); uni.navigateBack(); }; // åå§å页颿°æ® const initPageData = () => { // 仿¬å°åå¨è·åéæ£è¯¦æ const row = uni.getStorageSync("dangerInvestigation"); if (row) { form.value = { ...row }; } else { showToast("ææ éæ£æ°æ®"); } }; onMounted(() => { initPageData(); }); </script> <style scoped lang="scss"> @import "@/static/scss/form-common.scss"; .danger-investigation-view { min-height: 100vh; background-color: #f8f9fa; } .content-container { padding: 16px; } .section { background-color: #ffffff; border-radius: 12px; margin-bottom: 16px; overflow: hidden; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); } .section-title { font-size: 16px; font-weight: 600; color: #333333; padding: 16px 16px 12px; border-bottom: 1px solid #f0f0f0; } .info-item { display: flex; padding: 14px 16px; border-bottom: 1px solid #f8f8f8; align-items: flex-start; } .info-item:last-child { border-bottom: none; } .info-label { font-size: 14px; color: #666666; min-width: 80px; flex-shrink: 0; line-height: 22px; } .info-value { font-size: 14px; color: #333333; flex: 1; line-height: 22px; text-align: right; } .multi-line { text-align: left; word-break: break-all; line-height: 1.6; } .remark-item { padding-bottom: 16px; } </style>