| | |
| | | <template> |
| | | <view class="inspection-app"> |
| | | <!-- 顶部筛选区 --> |
| | | <view class="filter-section"> |
| | | <view class="filter-controls"> |
| | | <view class="dropdown-filter"> |
| | | <picker @change="onProjectChange" :value="projectIndex" :range="projects"> |
| | | <view class="picker">{{projects[projectIndex]}}</view> |
| | | </picker> |
| | | |
| | | </view> |
| | | <view class="dropdown-filter"> |
| | | <picker @change="onOptionsChange" :value="optionsIndex" :range="options"> |
| | | <view class="picker">{{options[optionsIndex]}}</view> |
| | | </picker> |
| | | </view> |
| | | <!-- 新增搜索框和按钮 --> |
| | | <view class="search-container"> |
| | | <input |
| | | class="search-input" |
| | | v-model="searchValue" |
| | | :placeholder="'请输入'+options[optionsIndex]" |
| | | @confirm="handleSearch" |
| | | /> |
| | | <button class="search-button" @click="handleSearch">搜索</button> |
| | | </view> |
| | | |
| | | <view class="status-tabs"> |
| | | <button |
| | | :class="['tab-button', activeTab === 0 ? 'active' : '']" |
| | | @click="switchTab(0)" |
| | | >未检验({{uncheckedCount}})</button> |
| | | <button |
| | | :class="['tab-button', activeTab === 1 ? 'active' : '']" |
| | | @click="switchTab(1)" |
| | | >{{checkedCount}}</button> |
| | | </view> |
| | | |
| | | </view> |
| | | </view> |
| | | <view class="inspection-app"> |
| | | <!-- 顶部筛选区 --> |
| | | <view class="filter-section"> |
| | | <view class="filter-controls"> |
| | | <view class="dropdown-filter"> |
| | | <picker @change="onProjectChange" :value="projectIndex" :range="projects"> |
| | | <view class="picker">{{projects[projectIndex]}}</view> |
| | | </picker> |
| | | |
| | | <!-- 检验单列表 --> |
| | | <view class="inspection-list"> |
| | | <!-- 检验单卡片1 --> |
| | | <view class="inspection-card" v-for="(item, index) in inspectionList" :key="index"> |
| | | <view class="card-header"> |
| | | <text class="badge urgent" v-if="item.urgentFlag == 1">急料</text> |
| | | <text class="badge urgent" v-if="item.jycs == 1">超时</text> |
| | | <text class="badge normal" v-if="item.ftype == 1">委外</text> |
| | | <text class="badge normal" v-if="item.first == 1">首次来料</text> |
| | | <text class="card-title">检验单号: {{item.releaseNo}}</text> |
| | | <text class="status pending" v-if="item.userName==null && item.activeTab==0">待分配</text> |
| | | <text class="status assigned" v-if="item.userName!=null && item.activeTab==0">已分配</text> |
| | | <text class="status pass" v-if="item.fcheckResu=='合格' && item.activeTab==1">合格</text> |
| | | <text class="status Unqualified" v-if="item.fcheckResu=='不合格' && item.activeTab==1">不合格</text> |
| | | </view> |
| | | |
| | | <view class="card-body"> |
| | | <view class="info-row"> |
| | | <view class="info-item"> |
| | | <text class="info-label">物料信息</text> |
| | | <text class="info-content">{{item.itemNo}} | {{item.itemName}}<br>{{item.itemModel}}</text> |
| | | </view> |
| | | <view class="info-item"> |
| | | <text class="info-label">数量</text> |
| | | <text class="info-content highlight">{{item.fcovertQty}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="info-row"> |
| | | <view class="info-item"> |
| | | <text class="info-label">供应商</text> |
| | | <text class="info-content">{{item.suppName}}</text> |
| | | </view> |
| | | <view class="info-item"> |
| | | <text class="info-label">项目</text> |
| | | <text class="info-content">{{item.projectCodes}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="info-row" > |
| | | <view class="info-item" v-if="item.newFngDesc!=null"> |
| | | <text class="info-label">上次不良描述</text> |
| | | <text class="info-content">{{item.newFngDesc}}</text> |
| | | </view> |
| | | <view class="info-item" v-if="item.fngDesc!=null"> |
| | | <text class="info-label">不良描述</text> |
| | | <text class="info-content">{{item.fngDesc}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="dropdown-filter"> |
| | | <picker @change="onOptionsChange" :value="optionsIndex" :range="options"> |
| | | <view class="picker">{{options[optionsIndex]}}</view> |
| | | </picker> |
| | | </view> |
| | | <!-- 新增搜索框和按钮 --> |
| | | <view class="search-container"> |
| | | <input class="search-input" v-model="searchValue" :placeholder="'请输入'+options[optionsIndex]" |
| | | @confirm="handleSearch" /> |
| | | <button class="search-button" @click="handleSearch">搜索</button> |
| | | </view> |
| | | |
| | | <view class="status-tabs"> |
| | | <button :class="['tab-button', activeTab === 0 ? 'active' : '']" |
| | | @click="switchTab(0)">未检验({{uncheckedCount}})</button> |
| | | <button :class="['tab-button', activeTab === 1 ? 'active' : '']" |
| | | @click="switchTab(1)">{{checkedCount}}</button> |
| | | </view> |
| | | |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="meta-info"> |
| | | <text class="meta-item"><uni-icons type="calendar" size="14" color="#95a5a6"></uni-icons> {{item.createDate}}</text> |
| | | <text class="meta-item"><uni-icons type="person" size="14" color="#95a5a6"></uni-icons> {{item.userName}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="card-actions"> |
| | | <button v-if="item.activeTab==0 && item.IQCJL==1" @click="assignTask(item)">{{item.userName == null ? '分配' : '重新分配'}}</button> |
| | | <button v-if="item.activeTab==0" class="primary" @click="startInspection(item)">开始检验</button> |
| | | <button v-if="item.activeTab==1" class="primary" @click="startInspection(item)">查看</button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 检验单列表 --> |
| | | <view class="inspection-list"> |
| | | <!-- 检验单卡片1 --> |
| | | <view class="inspection-card" v-for="(item, index) in inspectionList" :key="index"> |
| | | <view class="card-header"> |
| | | <text class="badge urgent" v-if="item.urgentFlag == 1">急料</text> |
| | | <text class="badge urgent" v-if="item.jycs == 1">超时</text> |
| | | <text class="badge normal" v-if="item.ftype == 1">委外</text> |
| | | <text class="badge normal" v-if="item.first == 1">首次来料</text> |
| | | <text class="card-title">检验单号: {{item.releaseNo}}</text> |
| | | <text class="status pending" v-if="item.userName==null && item.activeTab==0">待分配</text> |
| | | <text class="status assigned" v-if="item.userName!=null && item.activeTab==0">已分配</text> |
| | | <text class="status pass" v-if="item.fcheckResu=='合格' && item.activeTab==1">合格</text> |
| | | <text class="status Unqualified" v-if="item.fcheckResu=='不合格' && item.activeTab==1">不合格</text> |
| | | </view> |
| | | |
| | | <view class="card-body"> |
| | | <view class="info-row"> |
| | | <view class="info-item"> |
| | | <text class="info-label">物料信息</text> |
| | | <text class="info-content">{{item.itemNo}} | {{item.itemName}}<br>{{item.itemModel}}</text> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | <view class="info-row"> |
| | | <view class="info-item"> |
| | | <text class="info-label">供应商</text> |
| | | <text class="info-content">{{item.suppName}}</text> |
| | | </view> |
| | | <view class="info-item"> |
| | | <text class="info-label">项目</text> |
| | | <text class="info-content">{{item.projectCodes}}</text> |
| | | </view> |
| | | <view class="info-item" v-if="item.extendNo1!=null"> |
| | | <text class="info-label">技改状态</text> |
| | | <text class="info-content">{{item.extendNo1}}</text> |
| | | </view> |
| | | <view class="info-item"> |
| | | <text class="info-label">数量</text> |
| | | <text class="info-content highlight">{{item.fcovertQty}}</text> |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="info-row"> |
| | | |
| | | </view> |
| | | <view class="info-row"> |
| | | <view class="info-item" v-if="item.newFngDesc!=null"> |
| | | <text class="info-label">上次不良描述</text> |
| | | <text class="info-content">{{item.newFngDesc}}</text> |
| | | </view> |
| | | <view class="info-item" v-if="item.fngDesc!=null"> |
| | | <text class="info-label">不良描述</text> |
| | | <text class="info-content">{{item.fngDesc}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="meta-info"> |
| | | <text class="meta-item"><uni-icons type="calendar" size="14" color="#95a5a6"></uni-icons> |
| | | {{item.createDate}}</text> |
| | | <text class="meta-item"><uni-icons type="person" size="14" color="#95a5a6"></uni-icons> |
| | | {{item.userName}}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="card-actions"> |
| | | <button v-if="item.activeTab==0 && item.IQCJL==1" |
| | | @click="assignTask(item)">{{item.userName == null ? '分配' : '重新分配'}}</button> |
| | | <button v-if="item.activeTab==0" class="primary" @click="startInspection(item)">开始检验</button> |
| | | <button v-if="item.activeTab==1" class="primary" @click="startInspection(item)">查看</button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | projectIndex: 0, |
| | | optionsIndex:0, |
| | | projects: ['当前', '全部'], |
| | | activeTab: 0, // 0-未检验, 1-已检验 |
| | | uncheckedCount: 0, |
| | | checkedCount: '已检验', |
| | | inspectionList: [], |
| | | pageIndex: 1, |
| | | limit: 20, |
| | | IQCJL:0, |
| | | options: ['项目', '物料编号', '物料名称', '供应商', '采购员'], |
| | | searchValue:'' |
| | | |
| | | } |
| | | }, |
| | | onLoad() { |
| | | //页面加载时调用的事件 |
| | | this.init(); |
| | | }, |
| | | methods: { |
| | | //搜索 |
| | | onOptionsChange(e) { |
| | | this.optionsIndex = e.detail.value; |
| | | // 根据选择的选项设置搜索字段 |
| | | const fieldMap = { |
| | | 0: 'projectCodes', // 项目 |
| | | 1: 'itemNo', // 物料编号 |
| | | 2: 'itemName', // 物料名称 |
| | | 3: 'suppName', // 供应商 |
| | | 4: 'purchaser' // 采购员 |
| | | }; |
| | | this.selectedField = fieldMap[this.optionsIndex]; |
| | | }, |
| | | //搜索按钮点击事件 |
| | | handleSearch() { |
| | | this.init(); |
| | | }, |
| | | init() { |
| | | |
| | | let result = "未完成"; |
| | | if (this.activeTab === 1) { |
| | | result = "已完成"; |
| | | } |
| | | |
| | | if (this.isLoading) return; // 如果正在加载则不继续执行 |
| | | |
| | | this.isLoading = true; |
| | | |
| | | //获取当前登录的用户 |
| | | let userName = this.$loginInfo.account; |
| | | |
| | | |
| | | //页面加载时调用的事件 |
| | | this.$post({ |
| | | url: "/LLJ/getPage", |
| | | data: { |
| | | pageIndex: this.pageIndex, |
| | | limit: this.limit, |
| | | createUser: userName, |
| | | result: result, |
| | | SearchValue:this.searchValue, |
| | | selectedIndex:this.optionsIndex,//下拉框筛选条件 |
| | | userIndex:this.projectIndex |
| | | } |
| | | }).then(res => { |
| | | if (this.pageIndex === 1) { |
| | | // 如果是第一页,直接覆盖原数据 |
| | | this.inspectionList = res.data.tbBillList; |
| | | //添加Tab信息,判断是已检还是未检数据 |
| | | this.inspectionList.forEach((item, index) => { |
| | | this.$set(item, 'activeTab', this.activeTab); |
| | | this.$set(item, 'IQCJL', this.IQCJL); |
| | | }); |
| | | } else { |
| | | |
| | | if (res.data.tbBillList.length > 0) { |
| | | // 如果是下一页,追加新数据 |
| | | this.inspectionList = [...this.inspectionList, ...res.data.tbBillList]; |
| | | //添加Tab信息,判断是已检还是未检数据 |
| | | this.inspectionList.forEach((item, index) => { |
| | | this.$set(item, 'activeTab', this.activeTab); |
| | | this.$set(item, 'IQCJL', this.IQCJL); |
| | | }); |
| | | } |
| | | |
| | | } |
| | | console.log(this.inspectionList) |
| | | this.totalCount = res.data.totalCount; |
| | | this.totalPage = Math.ceil(this.totalCount / this.limit); |
| | | |
| | | this.noData = this.pageIndex >= this.totalPage; |
| | | this.isLoading = false; // 结束加载 |
| | | if (this.activeTab === 1) { |
| | | this.checkedCount='已检验('+res.totalCount+')'; |
| | | }else{ |
| | | this.uncheckedCount=res.totalCount; |
| | | export default { |
| | | data() { |
| | | return { |
| | | projectIndex: 0, |
| | | optionsIndex: 0, |
| | | projects: ['当前', '全部'], |
| | | activeTab: 0, // 0-未检验, 1-已检验 |
| | | uncheckedCount: 0, |
| | | checkedCount: '已检验', |
| | | inspectionList: [], |
| | | pageIndex: 1, |
| | | limit: 20, |
| | | IQCJL: 0, |
| | | options: ['项目', '物料编号', '物料名称', '供应商', '采购员'], |
| | | searchValue: '' |
| | | |
| | | } |
| | | }).catch(() => { |
| | | this.isLoading = false; // 出现错误时结束加载 |
| | | }); |
| | | }, |
| | | onProjectChange(e) { |
| | | this.projectIndex = e.detail.value |
| | | // 这里可以添加筛选逻辑 |
| | | // uni.showToast({ |
| | | // title: `已选择项目: ${this.projects[this.projectIndex]}`, |
| | | // icon: 'none' |
| | | // }) |
| | | this.init(); |
| | | }, |
| | | onOptionsChange(e) { |
| | | this.optionsIndex = e.detail.value |
| | | // 这里可以添加筛选逻辑 |
| | | // uni.showToast({ |
| | | // title: `已选择项目: ${this.projects[this.projectIndex]}`, |
| | | // icon: 'none' |
| | | // }) |
| | | |
| | | }, |
| | | switchTab(index) { |
| | | this.activeTab = index |
| | | // 这里可以添加切换标签页的逻辑 |
| | | this.inspectionList=[]; |
| | | this.init(); |
| | | }, |
| | | //跳转检验单 |
| | | startInspection(item) { |
| | | if (this.activeTab === 1) { |
| | | uni.navigateTo({ |
| | | url: 'Add?id='+item.id+'&lotNo='+item.lotNo+'&releaseNo='+item.releaseNo+'¤t=1' |
| | | }) |
| | | }else{ |
| | | uni.navigateTo({ |
| | | url: 'Add?id='+item.id+'&lotNo='+item.lotNo+'&releaseNo='+item.releaseNo+'¤t=0' |
| | | }) |
| | | }, |
| | | onLoad() { |
| | | //页面加载时调用的事件 |
| | | this.init(); |
| | | }, |
| | | methods: { |
| | | //搜索 |
| | | onOptionsChange(e) { |
| | | this.optionsIndex = e.detail.value; |
| | | // 根据选择的选项设置搜索字段 |
| | | const fieldMap = { |
| | | 0: 'projectCodes', // 项目 |
| | | 1: 'itemNo', // 物料编号 |
| | | 2: 'itemName', // 物料名称 |
| | | 3: 'suppName', // 供应商 |
| | | 4: 'purchaser' // 采购员 |
| | | }; |
| | | this.selectedField = fieldMap[this.optionsIndex]; |
| | | }, |
| | | //搜索按钮点击事件 |
| | | handleSearch() { |
| | | this.init(); |
| | | }, |
| | | init() { |
| | | |
| | | let result = "未完成"; |
| | | if (this.activeTab === 1) { |
| | | result = "已完成"; |
| | | } |
| | | |
| | | if (this.isLoading) return; // 如果正在加载则不继续执行 |
| | | |
| | | this.isLoading = true; |
| | | |
| | | //获取当前登录的用户 |
| | | let userName = this.$loginInfo.account; |
| | | |
| | | |
| | | //页面加载时调用的事件 |
| | | this.$post({ |
| | | url: "/LLJ/getPage", |
| | | data: { |
| | | pageIndex: this.pageIndex, |
| | | limit: this.limit, |
| | | createUser: userName, |
| | | result: result, |
| | | SearchValue: this.searchValue, |
| | | selectedIndex: this.optionsIndex, //下拉框筛选条件 |
| | | userIndex: this.projectIndex |
| | | } |
| | | }).then(res => { |
| | | if (this.pageIndex === 1) { |
| | | // 如果是第一页,直接覆盖原数据 |
| | | this.inspectionList = res.data.tbBillList; |
| | | //添加Tab信息,判断是已检还是未检数据 |
| | | this.inspectionList.forEach((item, index) => { |
| | | this.$set(item, 'activeTab', this.activeTab); |
| | | this.$set(item, 'IQCJL', this.IQCJL); |
| | | }); |
| | | } else { |
| | | |
| | | if (res.data.tbBillList.length > 0) { |
| | | // 如果是下一页,追加新数据 |
| | | this.inspectionList = [...this.inspectionList, ...res.data.tbBillList]; |
| | | //添加Tab信息,判断是已检还是未检数据 |
| | | this.inspectionList.forEach((item, index) => { |
| | | this.$set(item, 'activeTab', this.activeTab); |
| | | this.$set(item, 'IQCJL', this.IQCJL); |
| | | }); |
| | | } |
| | | |
| | | } |
| | | console.log(this.inspectionList) |
| | | this.totalCount = res.data.totalCount; |
| | | this.totalPage = Math.ceil(this.totalCount / this.limit); |
| | | |
| | | this.noData = this.pageIndex >= this.totalPage; |
| | | this.isLoading = false; // 结束加载 |
| | | if (this.activeTab === 1) { |
| | | this.checkedCount = '已检验(' + res.totalCount + ')'; |
| | | } else { |
| | | this.uncheckedCount = res.totalCount; |
| | | } |
| | | }).catch(() => { |
| | | this.isLoading = false; // 出现错误时结束加载 |
| | | }); |
| | | }, |
| | | onProjectChange(e) { |
| | | this.projectIndex = e.detail.value |
| | | // 这里可以添加筛选逻辑 |
| | | // uni.showToast({ |
| | | // title: `已选择项目: ${this.projects[this.projectIndex]}`, |
| | | // icon: 'none' |
| | | // }) |
| | | this.init(); |
| | | }, |
| | | onOptionsChange(e) { |
| | | this.optionsIndex = e.detail.value |
| | | // 这里可以添加筛选逻辑 |
| | | // uni.showToast({ |
| | | // title: `已选择项目: ${this.projects[this.projectIndex]}`, |
| | | // icon: 'none' |
| | | // }) |
| | | |
| | | }, |
| | | switchTab(index) { |
| | | this.activeTab = index |
| | | // 这里可以添加切换标签页的逻辑 |
| | | this.inspectionList = []; |
| | | this.init(); |
| | | }, |
| | | //跳转检验单 |
| | | startInspection(item) { |
| | | console.log(this.activeTab); |
| | | if (this.activeTab === 1) { |
| | | uni.navigateTo({ |
| | | url: 'Add?id=' + item.id + '&lotNo=' + item.lotNo + '&releaseNo=' + item.releaseNo + |
| | | '¤t=B' |
| | | }) |
| | | } else { |
| | | uni.navigateTo({ |
| | | url: 'Add?id=' + item.id + '&lotNo=' + item.lotNo + '&releaseNo=' + item.releaseNo + |
| | | '¤t=A' |
| | | }) |
| | | } |
| | | |
| | | }, |
| | | assignTask(item) { |
| | | // uni.showToast({ |
| | | // title: `${item.statusClass === 'assigned' ? '重新分配' : '分配'}检验单: ${item.releaseNo}`, |
| | | // icon: 'none' |
| | | // }) |
| | | // 这里可以添加分配任务的逻辑 |
| | | uni.navigateTo({ |
| | | url: 'UpdateCheckBy?releaseNo=' + item.releaseNo + '&userID=' + this.$loginInfo.account + |
| | | '&staffName=' + item.userName |
| | | }); |
| | | }, |
| | | /** |
| | | * 下拉刷新回调函数 |
| | | */ |
| | | onPullDownRefresh() { |
| | | |
| | | this.pageIndex = 1; |
| | | //重新执行一遍查询 |
| | | this.init(); |
| | | // this.tipShow = true; |
| | | //关闭动画 |
| | | uni.stopPullDownRefresh(); |
| | | |
| | | // setTimeout(function () { |
| | | // this.tipShow = false; |
| | | // }, 6000); |
| | | |
| | | }, |
| | | /** |
| | | * 上拉加载回调函数 |
| | | */ |
| | | onReachBottom() { |
| | | if (this.noData || this.isLoading) return; |
| | | this.pageIndex++; |
| | | this.init(); // 加载更多数据 |
| | | }, |
| | | onShow() { |
| | | //每次进入页面都会执行的方法 |
| | | // this.pageIndex = 1; |
| | | // this.data = []; |
| | | // //this.current = 0 |
| | | this.init(); |
| | | }, |
| | | async onLoad() { |
| | | if (this.$loginInfo.roleid.indexOf("90134") != -1 || this.$loginInfo.account == "PL017") { |
| | | this.IQCJL = 1; |
| | | } else { |
| | | this.IQCJL = 0; |
| | | } |
| | | await this.init(); // 自定义的刷新函数 |
| | | |
| | | } |
| | | } |
| | | |
| | | }, |
| | | assignTask(item) { |
| | | // uni.showToast({ |
| | | // title: `${item.statusClass === 'assigned' ? '重新分配' : '分配'}检验单: ${item.releaseNo}`, |
| | | // icon: 'none' |
| | | // }) |
| | | // 这里可以添加分配任务的逻辑 |
| | | uni.navigateTo({ |
| | | url: 'UpdateCheckBy?releaseNo=' + item.releaseNo+'&userID='+this.$loginInfo.account+'&staffName='+item.userName |
| | | }); |
| | | }, |
| | | /** |
| | | * 下拉刷新回调函数 |
| | | */ |
| | | onPullDownRefresh() { |
| | | |
| | | this.pageIndex = 1; |
| | | //重新执行一遍查询 |
| | | this.init(); |
| | | // this.tipShow = true; |
| | | //关闭动画 |
| | | uni.stopPullDownRefresh(); |
| | | |
| | | // setTimeout(function () { |
| | | // this.tipShow = false; |
| | | // }, 6000); |
| | | |
| | | }, |
| | | /** |
| | | * 上拉加载回调函数 |
| | | */ |
| | | onReachBottom() { |
| | | if (this.noData || this.isLoading) return; |
| | | this.pageIndex++; |
| | | this.init(); // 加载更多数据 |
| | | }, |
| | | onShow() { |
| | | //每次进入页面都会执行的方法 |
| | | // this.pageIndex = 1; |
| | | // this.data = []; |
| | | // //this.current = 0 |
| | | this.init(); |
| | | }, |
| | | async onLoad() { |
| | | if(this.$loginInfo.roleid.indexOf("90134") != -1 || this.$loginInfo.account=="PL017") |
| | | { |
| | | this.IQCJL=1; |
| | | }else |
| | | { |
| | | this.IQCJL=0; |
| | | } |
| | | await this.init(); // 自定义的刷新函数 |
| | | |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | /* 基础样式重置 */ |
| | | .inspection-app { |
| | | padding: 10px; |
| | | background-color: #f5f7fa; |
| | | min-height: 100vh; |
| | | } |
| | | /* 基础样式重置 */ |
| | | .inspection-app { |
| | | padding: 10px; |
| | | background-color: #f5f7fa; |
| | | min-height: 100vh; |
| | | } |
| | | |
| | | /* 顶部筛选区 */ |
| | | .filter-section { |
| | | margin-bottom: 24px; |
| | | } |
| | | /* 顶部筛选区 */ |
| | | .filter-section { |
| | | margin-bottom: 24px; |
| | | } |
| | | |
| | | .filter-section h1 { |
| | | font-size: 24px; |
| | | font-weight: 600; |
| | | color: #2c3e50; |
| | | margin-bottom: 16px; |
| | | } |
| | | /* 新增搜索框样式 */ |
| | | .search-container { |
| | | display: flex; |
| | | flex: 1; |
| | | margin: 0 10px; |
| | | height: 36px; /* 与其他控件高度一致 */ |
| | | } |
| | | .filter-section h1 { |
| | | font-size: 24px; |
| | | font-weight: 600; |
| | | color: #2c3e50; |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .search-input { |
| | | flex: 1; |
| | | padding: 8px 12px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px 0 0 4px; |
| | | font-size: 14px; |
| | | background-color: white; |
| | | } |
| | | /* 新增搜索框样式 */ |
| | | .search-container { |
| | | display: flex; |
| | | flex: 1; |
| | | margin: 0 10px; |
| | | height: 36px; |
| | | /* 与其他控件高度一致 */ |
| | | } |
| | | |
| | | .search-button { |
| | | padding: 0 12px; |
| | | border: 1px solid #3498db; |
| | | border-radius: 0 4px 4px 0; |
| | | background-color: #3498db; |
| | | color: white; |
| | | font-size: 14px; |
| | | margin: 0; |
| | | } |
| | | /* .filter-controls { |
| | | .search-input { |
| | | flex: 1; |
| | | padding: 8px 12px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px 0 0 4px; |
| | | font-size: 14px; |
| | | background-color: white; |
| | | } |
| | | |
| | | .search-button { |
| | | padding: 0 12px; |
| | | border: 1px solid #3498db; |
| | | border-radius: 0 4px 4px 0; |
| | | background-color: #3498db; |
| | | color: white; |
| | | font-size: 14px; |
| | | margin: 0; |
| | | } |
| | | |
| | | /* .filter-controls { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | |
| | | align-items: center; |
| | | gap: 8px; |
| | | } */ |
| | | .filter-controls { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 10px; |
| | | } |
| | | .filter-controls { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 10px; |
| | | } |
| | | |
| | | .dropdown-filter { |
| | | min-width: 70px; |
| | | } |
| | | .filter-label { |
| | | font-size: 14px; |
| | | color: #7f8c8d; |
| | | } |
| | | .dropdown-filter { |
| | | min-width: 70px; |
| | | } |
| | | |
| | | .picker { |
| | | padding: 8px 12px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | background-color: white; |
| | | font-size: 14px; |
| | | min-width: 120px; |
| | | } |
| | | .filter-label { |
| | | font-size: 14px; |
| | | color: #7f8c8d; |
| | | } |
| | | |
| | | .status-tabs { |
| | | display: flex; |
| | | border-radius: 4px; |
| | | overflow: hidden; |
| | | background-color: #ecf0f1; |
| | | } |
| | | .status-tabs { |
| | | flex: 1; |
| | | min-width: 200px; |
| | | } |
| | | .tab-button { |
| | | padding: 0px 16px; |
| | | border: none; |
| | | background: none; |
| | | font-size: 14px; |
| | | transition: all 0.3s; |
| | | margin: 0; |
| | | height: 35px; |
| | | } |
| | | .picker { |
| | | padding: 8px 12px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | background-color: white; |
| | | font-size: 14px; |
| | | min-width: 120px; |
| | | } |
| | | |
| | | .tab-button.active { |
| | | background-color: #3498db; |
| | | color: white; |
| | | } |
| | | .status-tabs { |
| | | display: flex; |
| | | border-radius: 4px; |
| | | overflow: hidden; |
| | | background-color: #ecf0f1; |
| | | } |
| | | |
| | | /* 检验单列表 */ |
| | | .inspection-list { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 20px; |
| | | } |
| | | .status-tabs { |
| | | flex: 1; |
| | | min-width: 200px; |
| | | } |
| | | |
| | | /* 检验单卡片 */ |
| | | .inspection-card { |
| | | background-color: white; |
| | | border-radius: 8px; |
| | | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); |
| | | overflow: hidden; |
| | | transition: all 0.3s; |
| | | } |
| | | .tab-button { |
| | | padding: 0px 16px; |
| | | border: none; |
| | | background: none; |
| | | font-size: 14px; |
| | | transition: all 0.3s; |
| | | margin: 0; |
| | | height: 35px; |
| | | } |
| | | |
| | | .card-header { |
| | | padding: 16px; |
| | | border-bottom: 1px solid #eee; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .tab-button.active { |
| | | background-color: #3498db; |
| | | color: white; |
| | | } |
| | | |
| | | .card-title { |
| | | font-size: 16px; |
| | | font-weight: 600; |
| | | flex: 1; |
| | | margin: 0 8px; |
| | | } |
| | | /* 检验单列表 */ |
| | | .inspection-list { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 20px; |
| | | } |
| | | |
| | | .badge { |
| | | font-size: 12px; |
| | | padding: 2px 6px; |
| | | border-radius: 10px; |
| | | margin-right: 8px; |
| | | } |
| | | /* 检验单卡片 */ |
| | | .inspection-card { |
| | | background-color: white; |
| | | border-radius: 8px; |
| | | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); |
| | | overflow: hidden; |
| | | transition: all 0.3s; |
| | | } |
| | | |
| | | .badge.urgent { |
| | | background-color: #e74c3c; |
| | | color: white; |
| | | } |
| | | .badge.normal { |
| | | background-color: #ffaa00; |
| | | color: white; |
| | | } |
| | | .card-header { |
| | | padding: 16px; |
| | | border-bottom: 1px solid #eee; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .status { |
| | | font-size: 12px; |
| | | padding: 4px 8px; |
| | | border-radius: 4px; |
| | | font-weight: 500; |
| | | } |
| | | .card-title { |
| | | font-size: 16px; |
| | | font-weight: 600; |
| | | flex: 1; |
| | | margin: 0 8px; |
| | | } |
| | | |
| | | .status.pending { |
| | | background-color: #f39c12; |
| | | color: white; |
| | | } |
| | | .badge { |
| | | font-size: 12px; |
| | | padding: 2px 6px; |
| | | border-radius: 10px; |
| | | margin-right: 8px; |
| | | } |
| | | |
| | | .status.assigned { |
| | | background-color: #3498db; |
| | | color: white; |
| | | } |
| | | .status.pass { |
| | | background-color: #00cd00; |
| | | color: white; |
| | | } |
| | | .status.Unqualified { |
| | | background-color: #ff0000; |
| | | color: white; |
| | | } |
| | | .badge.urgent { |
| | | background-color: #e74c3c; |
| | | color: white; |
| | | } |
| | | |
| | | .card-body { |
| | | padding: 16px; |
| | | } |
| | | .badge.normal { |
| | | background-color: #ffaa00; |
| | | color: white; |
| | | } |
| | | |
| | | .info-row { |
| | | display: flex; |
| | | margin-bottom: 12px; |
| | | gap: 16px; |
| | | } |
| | | .status { |
| | | font-size: 12px; |
| | | padding: 4px 8px; |
| | | border-radius: 4px; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .info-item { |
| | | flex: 1; |
| | | } |
| | | .status.pending { |
| | | background-color: #f39c12; |
| | | color: white; |
| | | } |
| | | |
| | | .info-label { |
| | | display: block; |
| | | font-size: 12px; |
| | | color: #7f8c8d; |
| | | margin-bottom: 4px; |
| | | } |
| | | .status.assigned { |
| | | background-color: #3498db; |
| | | color: white; |
| | | } |
| | | |
| | | .info-content { |
| | | font-size: 14px; |
| | | color: #2c3e50; |
| | | line-height: 1.5; |
| | | } |
| | | .status.pass { |
| | | background-color: #00cd00; |
| | | color: white; |
| | | } |
| | | |
| | | .highlight { |
| | | font-weight: 600; |
| | | color: #2c3e50; |
| | | font-size: 16px; |
| | | } |
| | | .status.Unqualified { |
| | | background-color: #ff0000; |
| | | color: white; |
| | | } |
| | | |
| | | .meta-info { |
| | | display: flex; |
| | | gap: 16px; |
| | | font-size: 12px; |
| | | color: #95a5a6; |
| | | margin-top: 12px; |
| | | } |
| | | .card-body { |
| | | padding: 16px; |
| | | } |
| | | |
| | | .meta-item { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 4px; |
| | | } |
| | | .info-row { |
| | | display: flex; |
| | | margin-bottom: 12px; |
| | | gap: 16px; |
| | | } |
| | | |
| | | .card-actions { |
| | | padding: 12px 16px; |
| | | border-top: 1px solid #eee; |
| | | display: flex; |
| | | gap: 8px; |
| | | } |
| | | .info-item { |
| | | flex: 1; |
| | | } |
| | | |
| | | button { |
| | | padding: 8px 16px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | background-color: white; |
| | | font-size: 14px; |
| | | transition: all 0.2s; |
| | | flex: 1; |
| | | } |
| | | .info-label { |
| | | display: block; |
| | | font-size: 12px; |
| | | color: #7f8c8d; |
| | | margin-bottom: 4px; |
| | | } |
| | | |
| | | button.primary { |
| | | background-color: #3498db; |
| | | color: white; |
| | | border-color: #2980b9; |
| | | } |
| | | .info-content { |
| | | font-size: 14px; |
| | | color: #2c3e50; |
| | | line-height: 1.5; |
| | | } |
| | | |
| | | /* 响应式设计 */ |
| | | @media (min-width: 768px) { |
| | | .inspection-list { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); |
| | | } |
| | | |
| | | .info-row { |
| | | flex-direction: row; |
| | | } |
| | | |
| | | } |
| | | /* 响应式设计 */ |
| | | @media (min-width: 300px) { |
| | | .inspection-list { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); |
| | | } |
| | | |
| | | .info-row { |
| | | flex-direction: row; |
| | | } |
| | | .picker { |
| | | padding: 8px 12px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | background-color: white; |
| | | font-size: 14px; |
| | | min-width: 10px; |
| | | } |
| | | /* .search-container { |
| | | .highlight { |
| | | font-weight: 600; |
| | | color: #2c3e50; |
| | | font-size: 16px; |
| | | } |
| | | |
| | | .meta-info { |
| | | display: flex; |
| | | gap: 16px; |
| | | font-size: 12px; |
| | | color: #95a5a6; |
| | | margin-top: 12px; |
| | | } |
| | | |
| | | .meta-item { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 4px; |
| | | } |
| | | |
| | | .card-actions { |
| | | padding: 12px 16px; |
| | | border-top: 1px solid #eee; |
| | | display: flex; |
| | | gap: 8px; |
| | | } |
| | | |
| | | button { |
| | | padding: 8px 16px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | background-color: white; |
| | | font-size: 14px; |
| | | transition: all 0.2s; |
| | | flex: 1; |
| | | } |
| | | |
| | | button.primary { |
| | | background-color: #3498db; |
| | | color: white; |
| | | border-color: #2980b9; |
| | | } |
| | | |
| | | /* 响应式设计 */ |
| | | @media (min-width: 768px) { |
| | | .inspection-list { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); |
| | | } |
| | | |
| | | .info-row { |
| | | flex-direction: row; |
| | | } |
| | | |
| | | } |
| | | |
| | | /* 响应式设计 */ |
| | | @media (min-width: 300px) { |
| | | .inspection-list { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); |
| | | } |
| | | |
| | | .info-row { |
| | | flex-direction: row; |
| | | } |
| | | |
| | | .picker { |
| | | padding: 8px 12px; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | background-color: white; |
| | | font-size: 14px; |
| | | min-width: 10px; |
| | | } |
| | | |
| | | /* .search-container { |
| | | order: 3; |
| | | width: 100%; |
| | | margin: 0px 0 0 0; |
| | |
| | | order: 4; |
| | | width: 100%; |
| | | } */ |
| | | } |
| | | } |
| | | </style> |