From ab826d12b52265bc4f25044d43a042df2104f972 Mon Sep 17 00:00:00 2001 From: kyy <3283105747@qq.com> Date: 星期一, 14 七月 2025 21:34:10 +0800 Subject: [PATCH] 最新代码 --- pages/QC/SJ/detail.vue | 567 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 424 insertions(+), 143 deletions(-) diff --git a/pages/QC/SJ/detail.vue b/pages/QC/SJ/detail.vue index 4de2ef6..0d9ee3a 100644 --- a/pages/QC/SJ/detail.vue +++ b/pages/QC/SJ/detail.vue @@ -1,91 +1,97 @@ <template> - <view> - <view class="form-container"> + <view class="page-container"> + <view class="form-card"> <form :modelValue="formData"> - <view class="form-group"> - <label class="form-label">椤圭洰鍚嶇О:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.projName"/> + <view class="form-grid"> + <view class="form-item"> + <label class="form-label">椤圭洰鍚嶇О:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.projName"/> + </view> + <view class="form-item"> + <label class="form-label">璐ㄩ噺瑕佹眰:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.itemMod"/> + </view> + <view class="form-item"> + <label class="form-label">妫�楠屾柟娉�:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.inspectionMethod"/> + </view> + <view class="form-item"> + <label class="form-label">浣跨敤浠〃:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.usingInstruments"/> + </view> + <view class="form-item"> + <label class="form-label">妫�楠屾暟:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.levelNum"/> + </view> + <view class="form-item"> + <label class="form-label">涓嬮檺:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.minValue"/> + </view> + <view class="form-item"> + <label class="form-label">鏍囧噯鍊�:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.standardValue"/> + </view> + <view class="form-item"> + <label class="form-label">涓婇檺:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.maxValue"/> + </view> + <view class="form-item"> + <label class="form-label">鏇存柊浜�:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.updater"/> + </view> + <view class="form-item"> + <label class="form-label">鏇存柊鏃堕棿:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.updateTime"/> + </view> + <view class="form-item"> + <label class="form-label">棰勮缁撴灉:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.result"/> + </view> + <view class="form-item"> + <label class="form-label">涓嶅悎鏍兼弿杩�:</label> + <input class="form-input readonly" disabled="true" type="text" v-model="formData.remarks"/> + </view> + <view class="form-item edit-item"> + <input class="form-input info-text" style="color: #e64340" disabled="true" type="text" + value="娌℃湁鏈�澶у�煎拰鏈�灏忓�兼椂濉啓0锛堟湭閫氳繃妫�楠岋級鎴�1锛堥�氳繃妫�楠岋級"/> + </view> + <view class="form-item edit-item"> + <label class="form-label">妫�娴嬬粨鏋�:</label> + <input class="form-input editable" type="number" v-model="formData.fcheckResu"/> + </view> </view> - <view class="form-group"> - <label class="form-label">璐ㄩ噺瑕佹眰:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.itemMod"/> + <view class="form-actions"> + <button type="primary" v-if="tableData.length < formData.levelNum" @click="submit" class="btn-primary">淇濆瓨</button> </view> - <view class="form-group"> - <label class="form-label">妫�楠屾柟娉�:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.inspectionMethod"/> - </view> - <view class="form-group"> - <label class="form-label">浣跨敤浠〃:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.usingInstruments"/> - </view> - <view class="form-group"> - <label class="form-label">妫�楠屾暟:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.levelNum"/> - </view> - <view class="form-group"> - <label class="form-label">涓嬮檺:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.minValue"/> - </view> - <view class="form-group"> - <label class="form-label">鏍囧噯鍊�:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.standardValue"/> - </view> - <view class="form-group"> - <label class="form-label">涓婇檺:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.maxValue"/> - </view> - <view class="form-group"> - <label class="form-label">鏇存柊浜�:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.updater"/> - </view> - <view class="form-group"> - <label class="form-label">鏇存柊鏃堕棿:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.updateTime"/> - </view> - <view class="form-group"> - <label class="form-label">棰勮缁撴灉:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.result"/> - </view> - <view class="form-group"> - <label class="form-label">涓嶅悎鏍兼弿杩�:</label> - <input class="form-input" disabled="true" type="text" v-model="formData.remarks"/> - </view> - <view class="form-group edit"> - <input class="form-input" style="color: red" disabled="true" type="text" - value="娌℃湁鏈�澶у�煎拰鏈�灏忓�兼椂濉啓0锛堟湭閫氳繃妫�楠岋級鎴�1锛堥�氳繃妫�楠岋級"/> - </view> - <view class="form-group edit"> - <label class="form-label">妫�娴嬬粨鏋�:</label> - <input class="form-input" type="number" v-model="formData.fcheckResu"/> - </view> - <button type="primary" v-if="tableData.length < formData.levelNum" @click="submit">淇濆瓨</button> </form> </view> - <view> - <img v-if="isShowImg" :src="base64Image" style="width:100%" @click="previewImage"/> + + <view v-if="isShowImg" class="image-preview"> + <img :src="base64Image" style="width:100%" @click="previewImage" class="preview-image"/> </view> - <view class="list-container"> - <uni-table ref="table" border emptyText="鏆傛棤鏇村鏁版嵁"> - <uni-tr> - <uni-th align="center" style="color: #FFFFFF;background-color: lightskyblue;">缂栧彿</uni-th> - <uni-th align="center" style="color: #FFFFFF;background-color: lightskyblue;">鍒ゅ畾鏍囪瘑</uni-th> - <uni-th align="center" style="color: #FFFFFF;background-color: lightskyblue;">妫�楠岀粨鏋�</uni-th> - <uni-th width="150" align="center" style="color: #FFFFFF;background-color: lightskyblue;">淇敼</uni-th> + + <view class="table-container"> + <uni-table ref="table" border emptyText="鏆傛棤鏇村鏁版嵁" class="data-table"> + <uni-tr class="table-header"> + <uni-th align="center">缂栧彿</uni-th> + <uni-th align="center">鍒ゅ畾鏍囪瘑</uni-th> + <uni-th align="center">妫�楠岀粨鏋�</uni-th> + <uni-th width="150" align="center">淇敼</uni-th> </uni-tr> - <uni-tr v-for="(item, index) in tableData" :key="index"> - <uni-td align="center"> + <uni-tr v-for="(item, index) in tableData" :key="index" class="table-row" :class="index % 2 === 0 ? 'table-row-even' : 'table-row-odd'"> + <uni-td align="center" class="table-cell"> {{ index + 1 }} </uni-td> - <uni-td align="center"> - <input class="form-input" disabled="true" type="text" v-model="item.fstand"/> + <uni-td align="center" class="table-cell"> + <input class="form-input readonly" disabled="true" type="text" v-model="item.fstand"/> </uni-td> - <uni-td align="center"> - <input class="form-input" disabled="true" type="text" v-model="item.fcheckResu"/> + <uni-td align="center" class="table-cell"> + <input class="form-input readonly" disabled="true" type="text" v-model="item.fcheckResu"/> </uni-td> - <uni-td> - <view class="uni-group edit"> - <button type="warn" v-if="isNumber" @click="toDetail(item)">淇敼</button> - <button type="warn" v-if="!isNumber" @click="numberEdit(item)">{{ editResult(item.fcheckResu) }}</button> + <uni-td class="table-cell"> + <view class="action-group"> + <button type="warn" v-if="isNumber" @click="toDetail(item)" class="btn-warning">淇敼</button> + <button type="warn" v-if="!isNumber" @click="numberEdit(item)" class="btn-warning">{{ editResult(item.fcheckResu) }}</button> </view> </uni-td> </uni-tr> @@ -93,33 +99,46 @@ </view> <view class="plus-button"> - <button type="warn" @click="saveRemarks">娣诲姞涓嶅悎鏍兼弿杩�</button> + <button type="warn" @click="saveRemarks" class="btn-float"> + <text class="btn-icon">+</text> + <text class="btn-text">娣诲姞涓嶅悎鏍兼弿杩�</text> + </button> </view> - <view v-if="remarksPopup" class="overlay"> - <view class="popup"> - <h3>淇敼涓嶅悎鏍兼弿杩�</h3> - <form> + <view v-if="remarksPopup" class="modal-overlay" :class="{ 'show-modal': remarksPopup }"> + <view class="modal" :class="{ 'show-modal-content': remarksPopup }"> + <div class="modal-header"> + <h3>淇敼涓嶅悎鏍兼弿杩�</h3> + <span @click="remarksPopup = !remarksPopup" class="close-modal">脳</span> + </div> + <form class="modal-form"> <view class="form-group"> <label class="form-label">涓嶅悎鏍兼弿杩�:</label> <input class="form-input" type="text" v-model="remarks"/> </view> - <button type="warn" @click="editRemarks">淇敼</button> - <button @click="remarksPopup = !remarksPopup">鍙栨秷</button> + <view class="modal-actions"> + <button type="warn" @click="editRemarks" class="btn-warning">淇敼</button> + <button @click="remarksPopup = !remarksPopup" class="btn-secondary">鍙栨秷</button> + </view> </form> </view> </view> - <view v-if="showPopup" class="overlay"> - <view class="popup"> - <h3>淇敼妫�楠岀粨鏋�</h3> - <form :modelValue="editData"> + <view v-if="showPopup" class="modal-overlay" :class="{ 'show-modal': showPopup }"> + <view class="modal" :class="{ 'show-modal-content': showPopup }"> + <div class="modal-header"> + <h3>淇敼妫�楠岀粨鏋�</h3> + <span @click="showPopup = !showPopup" class="close-modal">脳</span> + </div> + <form :modelValue="editData" class="modal-form"> <view class="form-group"> <label class="form-label">妫�楠岀粨鏋�:</label> <input class="form-input" type="text" v-model="editData.fcheckResu"/> </view> - <button type="warn" @click="eidt">淇敼</button> - <button @click="showPopup = !showPopup">鍙栨秷</button> + <view class="modal-actions"> + <button type="warn" @click="eidt" class="btn-warning">淇敼</button> + <button @click="showPopup = !showPopup" class="btn-secondary">鍙栨秷</button> + </view> </form> </view> </view> @@ -146,7 +165,6 @@ } }, methods: { - previewImage() { uni.previewImage({ urls: [this.base64Image], @@ -160,13 +178,10 @@ } }, submit() { - let count = this.formData.levelNum; let fstand = "鈭�"; - //鏈夋渶澶у�煎拰鏈�灏忓�煎氨鏍规嵁鏄惁绗﹀悎鏍囧噯鍊兼洿鏂板垽瀹氱粨鏋滐紝娌℃湁鏈�澶у�煎拰鏈�灏忓�煎氨鏍规嵁鏄惁閫氳繃妫�楠屽垽瀹氱粨鏋� if (this.formData.maxValue && this.formData.minValue) { - if (!this.formData.fcheckResu) { this.$showMessage("璇疯緭鍏ユ楠屽��"); return; @@ -179,7 +194,6 @@ } count = 1; } else { - if (!this.formData.fcheckResu) { this.formData.fcheckResu = 1 } @@ -245,7 +259,6 @@ this.editData = item; }, eidt() { - if (!this.editData.fcheckResu) { this.$showMessage("璇疯緭鍏ユ楠岀粨鏋�"); } @@ -258,7 +271,6 @@ let fstand = "鈭�"; if (this.formData.maxValue && this.formData.minValue) { - if (!this.editData.fcheckResu) { this.$showMessage("璇疯緭鍏ユ楠屽��"); return; @@ -271,7 +283,6 @@ fstand = "脳"; } } else { - if (!this.editData.fcheckResu) { this.editData.fcheckResu = 1 } @@ -301,11 +312,10 @@ }).then(res => { this.showPopup = !this.showPopup; this.$showMessage("淇敼鎴愬姛"); - this.refreshResult();//鍒锋柊椤甸潰 + this.refreshResult(); }) }, numberEdit(item) { - let fstand = "鈭�"; let fcheckResu = 1; @@ -326,7 +336,7 @@ } }).then(res => { this.$showMessage("淇敼鎴愬姛"); - this.refreshResult(); //鍒锋柊椤甸潰 + this.refreshResult(); }) }, saveRemarks() { @@ -335,7 +345,6 @@ }, editRemarks() { if (this.remarks) { - //saveRemarksGid this.$post({ url: "/SJ/saveRemarksPid", data: { @@ -353,65 +362,266 @@ } }, onLoad(options) { -//options涓寘鍚簡url闄勫甫鐨勫弬鏁� let params = options; - this.id = params["id"]; this.billNo = params["billNo"]; this.gid = params["gid"]; - this.refreshResult(); } } </script> <style> +/* 鍩虹閰嶈壊鏂规 */ +:root { + --primary-color: #165DFF; /* 涓昏壊璋� - 钃濊壊 */ + --primary-light: #E8F3FF; /* 涓昏壊娴呰壊 */ + --success-color: #00B42A; /* 鎴愬姛鑹� - 缁胯壊 */ + --warning-color: #FF7D00; /* 璀﹀憡鑹� - 姗欒壊 */ + --danger-color: #F53F3F; /* 鍗遍櫓鑹� - 绾㈣壊 */ + --text-color: #1D2129; /* 涓绘枃鏈壊 */ + --text-secondary: #4E5969; /* 娆¤鏂囨湰鑹� */ + --bg-color: #F2F3F5; /* 鑳屾櫙鑹� */ + --card-bg: #FFFFFF; /* 鍗$墖鑳屾櫙鑹� */ + --border-color: #E5E6EB; /* 杈规鑹� */ +} -.form-group { +/* 椤甸潰鏁翠綋鏍峰紡 */ +.page-container { + padding: 16px; + background-color: var(--bg-color); + min-height: 100vh; +} + +/* 琛ㄥ崟鍗$墖鏍峰紡 */ +.form-card { + background-color: var(--card-bg); + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + padding: 24px; + margin-bottom: 20px; +} + +/* 琛ㄥ崟缃戞牸甯冨眬 */ +.form-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; +} + +/* 琛ㄥ崟椤圭洰鏍峰紡 */ +.form-item { display: flex; - align-items: center; - border: 1px solid #c9c9c9; - background-color: #d4d4d4; + flex-direction: column; } .form-label { - margin-bottom: 0; - padding: 5px; + font-size: 14px; + color: var(--text-color); + margin-bottom: 8px; + font-weight: 500; } .form-input { - flex: 1; - margin-bottom: 0; - padding: 5px; + padding: 12px 16px; + border: 1px solid var(--border-color); + border-radius: 8px; + font-size: 14px; + color: var(--text-color); + background-color: var(--card-bg); + transition: border-color 0.3s, box-shadow 0.3s; } -/* 榛樿鏍峰紡 */ -.list-container { - height: calc(100vh - 750px); - /* 璁剧疆鍒楄〃瀹瑰櫒鐨勯珮搴︿负鍓╀綑绌洪棿锛屽苟鍑忓幓琛ㄥ崟瀹瑰櫒鐨勯珮搴� */ - overflow-y: auto; - /* 鍏佽鍒楄〃瀹瑰櫒鍨傜洿婊氬姩 */ - padding: 10px; - /* 鍙�夛細娣诲姞涓�浜涘唴杈硅窛锛屼娇鍒楄〃鍐呭鏇寸編瑙� */ +.form-input:focus { + border-color: var(--primary-color); + outline: none; + box-shadow: 0 0 0 2px rgba(22, 93, 255, 0.2); } -/* 鍦ㄥ皬灞忓箷璁惧涓婏紝閲嶇疆楂樺害涓洪�傚簲灞忓箷 */ -@media (max-width: 768px) { - .list-container { - height: calc(100vh - 485px); - /* 閫傚綋璋冩暣楂樺害 */ - } +/* 鍙杈撳叆妗嗘牱寮� */ +.form-input.readonly { + background-color: #F7F8FA; + color: var(--text-secondary); + cursor: not-allowed; + border-color: #E5E6EB; } -.form-container { - /* 璁剧疆琛ㄥ崟瀹瑰櫒鐨勯珮搴︼紝浣垮叾鍙互婊氬姩 */ - overflow-y: auto; - /* 鍏佽琛ㄥ崟瀹瑰櫒鍨傜洿婊氬姩 */ - padding: 10px; - /* 鍙�夛細娣诲姞涓�浜涘唴杈硅窛锛屼娇琛ㄥ崟鍐呭鏇寸編瑙� */ +/* 缂栬緫椤规牱寮� */ +.edit-item { + grid-column: span 2; } -.overlay { +.info-text { + background-color: #FFF3F3; + color: var(--danger-color); + border-color: #FFE0E0; +} + +/* 琛ㄥ崟鎿嶄綔鎸夐挳 */ +.form-actions { + margin-top: 24px; + display: flex; + justify-content: flex-end; +} + +.btn-primary { + background-color: var(--primary-color); + border-color: var(--primary-color); + color: white; + padding: 10px 24px; + border-radius: 8px; + font-size: 14px; + font-weight: 500; + transition: background-color 0.3s; + display: flex; + align-items: center; +} + +.btn-primary:hover { + background-color: #0D47A1; +} + +.btn-primary:active { + transform: translateY(1px); +} + +/* 琛ㄦ牸瀹瑰櫒鏍峰紡 */ +.table-container { + background-color: var(--card-bg); + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + padding: 16px; + margin-bottom: 20px; +} + +.data-table { + width: 100%; +} + +.table-header { + background-color: var(--primary-color); + color: white; +} + +.table-row { + transition: background-color 0.2s; +} + +.table-row:hover { + background-color: #F7F8FA; +} + +.table-row-even { + background-color: #F9FAFC; +} + +.table-row-odd { + background-color: #F2F3F5; +} + +.table-cell { + padding: 14px 16px; + border-color: var(--border-color); + font-size: 14px; + color: var(--text-color); +} + +/* 鎿嶄綔鎸夐挳缁� */ +.action-group { + display: flex; + gap: 8px; + justify-content: center; +} + +.btn-warning { + background-color: var(--warning-color); + border-color: var(--warning-color); + color: white; + padding: 8px 16px; + border-radius: 8px; + font-size: 12px; + transition: background-color 0.3s; + display: flex; + align-items: center; + justify-content: center; +} + +.btn-warning:hover { + background-color: #D66600; +} + +.btn-secondary { + background-color: #FFFFFF; + border: 1px solid var(--border-color); + color: var(--text-color); + padding: 8px 16px; + border-radius: 8px; + font-size: 12px; + transition: background-color 0.3s, border-color 0.3s; +} + +.btn-secondary:hover { + background-color: #F7F8FA; + border-color: #C9CDD4; +} + +/* 鍥剧墖棰勮鏍峰紡 */ +.image-preview { + background-color: var(--card-bg); + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + padding: 16px; + margin-bottom: 20px; + text-align: center; +} + +.preview-image { + border-radius: 8px; + transition: transform 0.3s; +} + +.preview-image:hover { + transform: scale(1.02); +} + +/* 鎮诞鎸夐挳鏍峰紡 */ +.plus-button { + margin: 20px 0; + text-align: center; +} + +.btn-float { + background-color: var(--warning-color); + border-color: var(--warning-color); + color: white; + padding: 12px 24px; + border-radius: 32px; + font-size: 14px; + font-weight: 500; + box-shadow: 0 4px 12px rgba(255, 125, 0, 0.2); + transition: all 0.3s; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.btn-float:hover { + background-color: #D66600; + transform: translateY(-2px); + box-shadow: 0 6px 16px rgba(255, 125, 0, 0.3); +} + +.btn-float:active { + transform: translateY(1px); +} + +.btn-icon { + margin-right: 8px; + font-size: 18px; +} + +/* 妯℃�佹鏍峰紡 */ +.modal-overlay { position: fixed; top: 0; left: 0; @@ -421,18 +631,89 @@ display: flex; justify-content: center; align-items: center; + z-index: 1000; + opacity: 0; + visibility: hidden; + transition: opacity 0.3s, visibility 0.3s; } -.popup { - background-color: #fff; - padding: 20px; - border: 1px solid #ccc; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - width: 68vw; /* 璁剧疆瀹藉害涓鸿鍙e搴︾殑80% */ - height: 25vh; /* 璁剧疆楂樺害涓鸿鍙i珮搴︾殑80% */ +.show-modal { + opacity: 1; + visibility: visible; } -.edit { - background-color: white; +.modal { + background-color: var(--card-bg); + border-radius: 12px; + box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + width: 90%; + max-width: 500px; + max-height: 80vh; + overflow-y: auto; + transform: translateY(20px); + transition: transform 0.3s; + opacity: 0; +} + +.show-modal-content { + transform: translateY(0); + opacity: 1; +} + +.modal-header { + padding: 16px 24px; + border-bottom: 1px solid var(--border-color); + display: flex; + justify-content: space-between; + align-items: center; +} + +.modal-header h3 { + font-size: 18px; + color: var(--text-color); + margin: 0; + font-weight: 600; +} + +.close-modal { + font-size: 24px; + color: var(--text-secondary); + cursor: pointer; + transition: color 0.3s; +} + +.close-modal:hover { + color: var(--text-color); +} + +.modal-form { + padding: 24px; +} + +.modal-actions { + display: flex; + justify-content: flex-end; + gap: 12px; + margin-top: 24px; +} + +/* 鍝嶅簲寮忚璁� */ +@media (max-width: 768px) { + .form-grid { + grid-template-columns: 1fr; + } + + .edit-item { + grid-column: span 1; + } + + .table-container { + overflow-x: auto; + } + + .btn-float { + padding: 10px 20px; + font-size: 12px; + } } </style> \ No newline at end of file -- Gitblit v1.9.3