| | |
| | | <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> |
| | |
| | | </form> |
| | | </view> |
| | | |
| | | <view class="list-container"> |
| | | <!-- 表格容器 - 高级卡片设计 --> |
| | | <view class="table-card"> |
| | | <uni-table ref="table" border emptyText="暂无更多数据"> |
| | | <uni-tr> |
| | | <uni-th align="center" class="th" style="color: #FFFFFF;">检验项目</uni-th> |
| | | <uni-th align="center" class="th" style="color: #FFFFFF">是否合格</uni-th> |
| | | <uni-th align="center" class="th" style="color: #FFFFFF">记录(点击)</uni-th> |
| | | <uni-th align="center" class="th">检验项目</uni-th> |
| | | <uni-th align="center" class="th">是否合格</uni-th> |
| | | <uni-th align="center" class="th">记录(点击)</uni-th> |
| | | </uni-tr> |
| | | <uni-tr v-for="(item, index) in tableData" :key="index"> |
| | | <uni-td align="center"> |
| | |
| | | </uni-td> |
| | | <uni-td> |
| | | <view class="uni-group"> |
| | | <button v-if="item.isCheck >=item.levelNum" type="default" @click="toDetail(item)"> |
| | | <button v-if="item.isCheck >= item.levelNum" type="default" @click="toDetail(item)" class="record-btn success"> |
| | | {{ item.levelNum + '/' + item.isCheck }} |
| | | </button> |
| | | <button v-else type="warn" @click="toDetail(item)"> |
| | | <button v-else type="warn" @click="toDetail(item)" class="record-btn warning"> |
| | | {{ item.levelNum + '/' + item.isCheck }} |
| | | </button> |
| | | </view> |
| | |
| | | </uni-table> |
| | | </view> |
| | | |
| | | <view class="plus-button"> |
| | | <button type="warn" v-if="isUpdate && !isShowTable" @click="getItem">创建检验单并生成部分默认值</button> |
| | | </view> |
| | | <view class="plus-button"> |
| | | <button type="warn" v-if="!isUpdate && !isShowTable" @click="toImage">上传/查看图片</button> |
| | | </view> |
| | | <view class="plus-button"> |
| | | <button type="warn" v-if="!isUpdate && !formData.fcheckResu && !isShowTable" @click="removeXJ">删除单据</button> |
| | | </view> |
| | | <view class="plus-button"> |
| | | <button type="warn" v-if="!isUpdate && !isShowTable" @click="saveRemarks">添加不合格描述</button> |
| | | <!-- 操作按钮组 - 优化布局 --> |
| | | <view class="action-buttons"> |
| | | <view class="button-group"> |
| | | <button type="warn" v-if="!isUpdate && !isShowTable" @click="submit" class="action-btn primary"> |
| | | 审核单据 |
| | | </button> |
| | | <button type="warn" v-if="isUpdate && !isShowTable" @click="getItem" class="action-btn secondary"> |
| | | 创建检验单并生成部分默认值 |
| | | </button> |
| | | </view> |
| | | <view class="button-group"> |
| | | <button type="warn" v-if="!isUpdate && !isShowTable" @click="toImage" class="action-btn secondary"> |
| | | 上传/查看图片 |
| | | </button> |
| | | </view> |
| | | <view class="button-group"> |
| | | <button type="warn" v-if="!isUpdate && !isShowTable" @click="saveRemarks" class="action-btn secondary"> |
| | | 添加不合格描述 |
| | | </button> |
| | | </view> |
| | | <view class="button-group"> |
| | | <button type="warn" v-if="isShowTable" @click="getTable" class="action-btn secondary"> |
| | | 获取检验项目 |
| | | </button> |
| | | </view> |
| | | <view class="button-group"> |
| | | <button type="warn" v-if="isShowTable && isUpdate" @click="saveTable" class="action-btn secondary"> |
| | | 生成检验项目 |
| | | </button> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="plus-button"> |
| | | <button type="warn" v-if="isShowTable" @click="getTable">获取检验项目</button> |
| | | </view> |
| | | <view class="plus-button"> |
| | | <button type="warn" v-if="isShowTable && isUpdate" @click="saveTable">生成检验项目</button> |
| | | </view> |
| | | <!-- 弹出层 - 带动画效果 --> |
| | | <view v-if="remarksPopup" class="overlay"> |
| | | <view class="popup"> |
| | | <view class="popup" :class="{ 'popup-animate': remarksPopup }"> |
| | | <h3>修改不合格描述</h3> |
| | | <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> |
| | | <button type="warn" @click="editRemarks" class="action-btn primary"> |
| | | 修改 |
| | | </button> |
| | | <button @click="remarksPopup = !remarksPopup" class="action-btn cancel"> |
| | | 取消 |
| | | </button> |
| | | </form> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | |
| | | planQty: "", |
| | | mocode: "", |
| | | boardStyle: "", |
| | | itemId: "", |
| | | itemId: "", |
| | | }, |
| | | |
| | | DAA020List: [], |
| | |
| | | }, |
| | | onLoad(options) { |
| | | //options中包含了url附带的参数 |
| | | |
| | | let params = options; |
| | | |
| | | if (params["id"]) { |
| | |
| | | } |
| | | }, |
| | | getItem() { |
| | | |
| | | if (this.isSubmit) { |
| | | this.$showMessage("此物料无启用的检验项目,请维护!"); |
| | | return; |
| | |
| | | }); |
| | | }); |
| | | }, |
| | | submit() { |
| | | this.$post({ |
| | | url: "/XJ/XJQaSubmit", |
| | | data: { |
| | | userNo: this.$loginInfo.account, |
| | | gid: this.formData.id |
| | | } |
| | | }).then(res => { |
| | | //2024-11-28 kyy 校验合格提交增加提示 |
| | | console.log("Status Code的值:", res.statusCode); |
| | | if (res.statusCode === 200) { |
| | | this.$showMessage("成功提交检验"); |
| | | // 使用setTimeout在7秒后隐藏消息 |
| | | setTimeout(() => { |
| | | this.hideCustomMessage(); |
| | | }, 7000); // 7000毫秒等于7秒 |
| | | } else { |
| | | this.$showMessage(res.data.message); |
| | | } |
| | | }) |
| | | }, |
| | | init() { |
| | | this.$post({ |
| | | url: "/XJ/getPage", |
| | |
| | | }); |
| | | } else { |
| | | uni.navigateTo({ |
| | | url: 'detail?id=' + item.id + '&billNo=' + this.formData.billNo + '&gid=' + this.formData |
| | | .id |
| | | url: 'detail?id=' + item.id + '&billNo=' + this.formData.billNo + '&gid=' + this.formData.id |
| | | }); |
| | | } |
| | | }, saveRemarks() { |
| | | }, |
| | | saveRemarks() { |
| | | this.remarksPopup = !this.remarksPopup; |
| | | this.remarks = this.formData.remarks; |
| | | }, |
| | |
| | | } |
| | | }; |
| | | </script> |
| | | <style> |
| | | |
| | | <style lang="scss"> |
| | | /* 全局样式 - 莫兰迪色系 */ |
| | | :root { |
| | | --primary: #5B6EF4; /* 主色调 - 灰蓝色 */ |
| | | --primary-light: #E8EBFF; /* 主色浅色 */ |
| | | --secondary: #86909C; /* 次要色 - 浅灰色 */ |
| | | --success: #00B42A; /* 成功色 - 橄榄绿 */ |
| | | --warning: #F7BA1E; /* 警告色 - 琥珀黄 */ |
| | | --danger: #F53F3F; /* 危险色 - 珊瑚红 */ |
| | | --text-primary: #1D2129; /* 主文本色 */ |
| | | --text-secondary: #4E5969; /* 次文本色 */ |
| | | --bg-primary: #F2F3F5; /* 背景色 */ |
| | | --bg-card: #FFFFFF; /* 卡片背景 */ |
| | | --border-color: #E5E6EB; /* 边框色 */ |
| | | } |
| | | |
| | | page { |
| | | background-color: var(--bg-primary); |
| | | display: flex; |
| | | flex-direction: column; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | /* 页面容器 */ |
| | | .page-container { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 24px; |
| | | } |
| | | |
| | | /* 卡片样式 - 高级设计 */ |
| | | .form-card, .table-card { |
| | | background: var(--bg-card); |
| | | border-radius: 20px; |
| | | box-shadow: 0 8px 30px rgba(91, 110, 244, 0.12); |
| | | padding: 28px; |
| | | transition: all 0.3s ease; |
| | | position: relative; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .form-card::before, .table-card::before { |
| | | content: ""; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | width: 6px; |
| | | height: 100%; |
| | | background: linear-gradient(to bottom, var(--primary), #8A94FF); |
| | | border-radius: 20px 0 0 20px; |
| | | } |
| | | |
| | | .form-card:hover, .table-card:hover { |
| | | box-shadow: 0 12px 40px rgba(91, 110, 244, 0.18); |
| | | transform: translateY(-5px); |
| | | } |
| | | |
| | | /* 表单组样式 */ |
| | | .form-group { |
| | | display: flex; |
| | | align-items: center; |
| | | border-bottom: 1px solid #c9c9c9; |
| | | padding: 16px 0; |
| | | border-bottom: 1px solid var(--border-color); |
| | | transition: all 0.2s ease; |
| | | } |
| | | |
| | | .form-group:last-child { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .form-group:hover { |
| | | background-color: var(--primary-light); |
| | | border-radius: 12px; |
| | | } |
| | | |
| | | .form-label { |
| | | margin-bottom: 0; |
| | | padding: 5px; |
| | | min-width: 120px; |
| | | color: var(--text-primary); |
| | | font-weight: 500; |
| | | margin-right: 18px; |
| | | font-size: 15px; |
| | | } |
| | | |
| | | .form-input { |
| | | flex: 1; |
| | | margin-bottom: 0; |
| | | padding: 5px; |
| | | padding: 14px 20px; |
| | | border: 1px solid var(--border-color); |
| | | border-radius: 12px; |
| | | background-color: var(--bg-card); |
| | | color: var(--text-primary); |
| | | font-size: 15px; |
| | | transition: all 0.2s ease; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); |
| | | } |
| | | .picker { |
| | | flex: 1; |
| | | margin-bottom: 0; |
| | | padding: 5px; |
| | | font-size: 12px; |
| | | |
| | | .form-input:focus { |
| | | border-color: var(--primary); |
| | | box-shadow: 0 0 0 3px rgba(91, 110, 244, 0.2); |
| | | outline: none; |
| | | } |
| | | |
| | | /* 下拉选择器样式 */ |
| | | .uni-form-item { |
| | | display: flex; |
| | | border-bottom: 1px solid #c9c9c9; |
| | | align-items: center; |
| | | padding: 16px 0; |
| | | border-bottom: 1px solid var(--border-color); |
| | | transition: all 0.2s ease; |
| | | } |
| | | |
| | | .uni-form-item:last-child { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .uni-form-item:hover { |
| | | background-color: var(--primary-light); |
| | | border-radius: 12px; |
| | | } |
| | | |
| | | .picker { |
| | | flex: 1; |
| | | padding: 14px 20px; |
| | | border: 1px solid var(--border-color); |
| | | border-radius: 12px; |
| | | background-color: var(--bg-card); |
| | | color: var(--text-primary); |
| | | font-size: 15px; |
| | | appearance: none; |
| | | position: relative; |
| | | overflow: hidden; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); |
| | | } |
| | | |
| | | .picker::after { |
| | | content: "▼"; |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 50%; |
| | | transform: translateY(-50%); |
| | | color: var(--text-secondary); |
| | | pointer-events: none; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .edit { |
| | | background-color: white; |
| | | background-color: var(--bg-card); |
| | | } |
| | | /* 默认样式 */ |
| | | |
| | | /* 表格样式 */ |
| | | .list-container { |
| | | height: 60vh; |
| | | /* 设置列表容器的高度为剩余空间,并减去表单容器的高度 */ |
| | | overflow-y: auto; |
| | | /* 允许列表容器垂直滚动 */ |
| | | padding: 10px; |
| | | /* 可选:添加一些内边距,使列表内容更美观 */ |
| | | } |
| | | /* 在小屏幕设备上,重置高度为适应屏幕 */ |
| | | @media (max-width: 768px) { |
| | | .list-container { |
| | | height: calc(100vh - 376px); |
| | | /* 适当调整高度 */ |
| | | } |
| | | } |
| | | .form-container { |
| | | padding: 10px; |
| | | /* 可选:添加一些内边距,使表单内容更美观 */ |
| | | } |
| | | |
| | | .th { |
| | | background-color: lightskyblue; |
| | | color: #FFFFFF; |
| | | background-color: var(--primary); |
| | | color: white; |
| | | font-weight: 600; |
| | | padding: 16px 20px; |
| | | font-size: 15px; |
| | | border-radius: 12px 12px 0 0; |
| | | } |
| | | .plus-button { |
| | | line-height: 59px; |
| | | font-size: 24px; |
| | | cursor: pointer; |
| | | z-index: 1000; |
| | | margin-bottom: 10px; |
| | | |
| | | .uni-tr { |
| | | border-bottom: 1px solid var(--border-color); |
| | | transition: all 0.2s ease; |
| | | } |
| | | |
| | | .uni-tr:last-child { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .uni-tr:hover { |
| | | background-color: var(--primary-light); |
| | | } |
| | | |
| | | .uni-td { |
| | | padding: 16px 20px; |
| | | border-bottom: 1px solid var(--border-color); |
| | | font-size: 15px; |
| | | color: var(--text-primary); |
| | | } |
| | | |
| | | .uni-td:last-child { |
| | | border-right: none; |
| | | } |
| | | |
| | | /* 记录按钮样式 */ |
| | | .record-btn { |
| | | padding: 8px 16px; |
| | | border-radius: 20px; |
| | | font-weight: 500; |
| | | transition: all 0.2s ease; |
| | | display: inline-flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | height: 36px; |
| | | border: none; |
| | | font-size: 14px; |
| | | min-width: 80px; |
| | | } |
| | | |
| | | .success { |
| | | background-color: rgba(0, 180, 42, 0.1); |
| | | color: var(--success); |
| | | border: 1px solid rgba(0, 180, 42, 0.2); |
| | | } |
| | | |
| | | .success:hover { |
| | | background-color: rgba(0, 180, 42, 0.2); |
| | | } |
| | | |
| | | .warning { |
| | | background-color: rgba(247, 186, 30, 0.1); |
| | | color: var(--warning); |
| | | border: 1px solid rgba(247, 186, 30, 0.2); |
| | | } |
| | | |
| | | .warning:hover { |
| | | background-color: rgba(247, 186, 30, 0.2); |
| | | } |
| | | |
| | | /* 操作按钮组 */ |
| | | .action-buttons { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 18px; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .button-group { |
| | | flex: 1; |
| | | min-width: 140px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .action-btn { |
| | | padding: 14px 20px; |
| | | border-radius: 24px; |
| | | font-weight: 500; |
| | | transition: all 0.2s ease; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | height: 56px; |
| | | border: none; |
| | | font-size: 15px; |
| | | box-shadow: 0 4px 12px rgba(91, 110, 244, 0.15); |
| | | position: relative; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .action-btn::before { |
| | | content: ""; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | background: linear-gradient(135deg, transparent, rgba(255, 255, 255, 0.2), transparent); |
| | | transform: translateX(-100%); |
| | | transition: transform 0.6s ease; |
| | | } |
| | | |
| | | .action-btn:hover::before { |
| | | transform: translateX(100%); |
| | | } |
| | | |
| | | .action-btn:active { |
| | | transform: scale(0.96); |
| | | box-shadow: 0 2px 8px rgba(91, 110, 244, 0.1); |
| | | } |
| | | |
| | | .primary { |
| | | background: linear-gradient(135deg, var(--primary), #7B88FF); |
| | | color: white; |
| | | } |
| | | |
| | | .secondary { |
| | | background-color: white; |
| | | color: var(--primary); |
| | | border: 1px solid var(--border-color); |
| | | } |
| | | |
| | | .secondary:hover { |
| | | background-color: var(--primary-light); |
| | | } |
| | | |
| | | .cancel { |
| | | background-color: #F2F3F5; |
| | | color: var(--text-secondary); |
| | | border: 1px solid var(--border-color); |
| | | } |
| | | |
| | | .cancel:hover { |
| | | background-color: #E5E6EB; |
| | | } |
| | | |
| | | /* 弹出层样式 */ |
| | | .overlay { |
| | | position: fixed; |
| | | top: 0; |
| | |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | z-index: 1000; |
| | | animation: fadeIn 0.3s ease; |
| | | } |
| | | |
| | | .popup { |
| | | background-color: #fff; |
| | | padding: 20px; |
| | | border: 1px solid #ccc; |
| | | box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); |
| | | width: 68vw; |
| | | /* 设置宽度为视口宽度的80% */ |
| | | height: 25vh; |
| | | /* 设置高度为视口高度的80% */ |
| | | background-color: white; |
| | | border-radius: 24px; |
| | | box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1); |
| | | padding: 32px; |
| | | width: 90%; |
| | | max-width: 560px; |
| | | position: relative; |
| | | opacity: 0; |
| | | transform: translateY(30px); |
| | | transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); |
| | | } |
| | | |
| | | .popup-animate { |
| | | opacity: 1; |
| | | transform: translateY(0); |
| | | } |
| | | |
| | | .popup h3 { |
| | | color: var(--text-primary); |
| | | font-size: 20px; |
| | | font-weight: 600; |
| | | margin-bottom: 24px; |
| | | border-bottom: 1px solid var(--border-color); |
| | | padding-bottom: 18px; |
| | | } |
| | | |
| | | /* 响应式设计 */ |
| | | @media (max-width: 768px) { |
| | | .form-card, .table-card { |
| | | padding: 20px; |
| | | } |
| | | |
| | | .action-buttons { |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .button-group { |
| | | min-width: 100%; |
| | | } |
| | | |
| | | .form-label { |
| | | min-width: 90px; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .form-input, .picker { |
| | | padding: 12px 16px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | /* 动画效果 */ |
| | | @keyframes fadeIn { |
| | | from { |
| | | opacity: 0; |
| | | } |
| | | to { |
| | | opacity: 1; |
| | | } |
| | | } |
| | | </style> |