|
|
- <template>
- <view class="container">
- <view class="header">
-
- <!-- 大Tab:维修记录/保养记录 -->
- <view class="main-tabs">
- <view
- class="tab-item"
- :class="{ active: activeMainTab === 'repair' }"
- @click="switchMainTab('repair')"
- >
- <text class="tab-text">维修记录</text>
- <view class="tab-underline" v-if="activeMainTab === 'repair'"></view>
- </view>
- <view
- class="tab-item"
- :class="{ active: activeMainTab === 'maintain' }"
- @click="switchMainTab('maintain')"
- >
- <text class="tab-text">保养记录</text>
- <view class="tab-underline" v-if="activeMainTab === 'maintain'"></view>
- </view>
- </view>
-
- <!-- 筛选按钮区域 -->
- <view class="picker-buttons">
- <view class="picker-btn" :class="{ active: selectedTime }" @click="showTimePicker" >
- <text class="btn-text">{{ selectedTime || '时间' }}</text>
- <text class="arrow-icon">▼</text>
- </view>
- <view class="picker-btn" :class="{ active: selectedPerson }" @click="showPersonPicker" >
- <text class="btn-text">{{ selectedPerson || '人员' }}</text>
- <text class="arrow-icon">▼</text>
- </view>
- </view>
- </view>
- <!-- 时间选择器 -->
- <uv-picker
- ref="timePicker"
- :columns="timeColumns"
- @confirm="onTimeConfirm"
- @cancel="onTimeCancel"
- title="选择时间范围"
- confirmColor="#C70019"
- ></uv-picker>
-
- <!-- 人员选择器 -->
- <uv-picker
- ref="personPicker"
- :columns="personColumns"
- @confirm="onPersonConfirm"
- @cancel="onPersonCancel"
- title="选择人员"
- confirmColor="#C70019"
- ></uv-picker>
-
- <!-- 内容区域 -->
- <view class="content-area">
- <!-- 记录item -->
- <view class="record-item" v-for="(record, index) in list" :key="index">
- <!-- 维修记录 -->
- <template v-if="activeMainTab === 'repair'">
- <!-- 基本信息 -->
- <view class="info-row">
- <text class="label">维修人</text>
- <text class="value">{{ record.repairPerson }}</text>
- </view>
-
- <view class="info-row">
- <text class="label">联系方式</text>
- <text class="value">{{ record.contactPhone }}</text>
- </view>
-
- <view class="info-row">
- <text class="label">维修日期</text>
- <text class="value">{{ record.repairDate }}</text>
- </view>
-
- <view class="info-row">
- <text class="label">处理内容</text>
- </view>
-
- <!-- 处理内容文本区域 -->
- <view class="content-text">
- <text>{{ record.processContent }}</text>
- </view>
-
- <!-- 上传图片 -->
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">上传图片</text>
- </view>
-
- <view class="image-container" v-if="!record.isCollapsed">
- <image class="uploaded-image" :src="record.uploadImage" mode="aspectFill"></image>
- </view>
-
- <!-- 是否产生费用 -->
- <view class="info-row">
- <text class="label">是否产生费用</text>
- <text class="value red-text">{{ record.hasCost }}</text>
- </view>
- </template>
-
- <!-- 保养记录 -->
- <template v-else>
- <!-- 基本信息 -->
- <view class="info-row">
- <text class="label">保养人</text>
- <text class="value">{{ record.maintainPerson }}</text>
- </view>
-
- <view class="info-row">
- <text class="label">保养日期</text>
- <text class="value">{{ record.maintainDate }}</text>
- </view>
-
- <view class="info-row">
- <text class="label">保养前状态</text>
- </view>
-
- <!-- 保养前状态文本区域 -->
- <view class="content-text">
- <text>{{ record.beforeStatus }}</text>
- </view>
-
- <!-- 保养前图片 -->
- <view class="image-container" v-if="!record.isCollapsed">
- <image
- class="uploaded-image"
- v-for="(img, imgIndex) in record.beforeImages"
- :key="imgIndex"
- :src="img"
- mode="aspectFill"
- ></image>
- </view>
-
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">保养后状态</text>
- </view>
-
- <!-- 保养后状态文本区域 -->
- <view class="content-text" v-if="!record.isCollapsed">
- <text>{{ record.afterStatus }}</text>
- </view>
-
- <!-- 保养后图片 -->
- <view class="image-container" v-if="!record.isCollapsed">
- <image
- class="uploaded-image"
- v-for="(img, imgIndex) in record.afterImages"
- :key="'after-' + imgIndex"
- :src="img"
- mode="aspectFill"
- ></image>
- </view>
-
- <!-- 是否产生费用 -->
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">是否产生费用</text>
- <text class="value red-text">{{ record.hasCost }}</text>
- </view>
- </template>
-
- <!-- 查看全部按钮(收起状态时显示) -->
- <!-- <view class="view-all-btn" v-if="record.isCollapsed" @click="toggleCollapse(index)">
- <text class="view-all-text">查看全部</text>
- <text class="view-all-icon">▼</text>
- </view> -->
-
- <!-- 产生费用 -->
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">产生费用</text>
- <text class="value red-text">{{ record.totalCost }}</text>
- </view>
-
- <!-- 费用详情表格 -->
- <view class="cost-table" v-if="!record.isCollapsed">
- <view class="table-header">
- <text class="header-cell">费用名称</text>
- <text class="header-cell">数量</text>
- <text class="header-cell">金额</text>
- </view>
-
- <view class="table-row" v-for="(item, index) in record.costDetails" :key="index">
- <text class="cell">{{ item.name }}</text>
- <text class="cell">{{ item.quantity }}</text>
- <text class="cell">{{ item.amount }}</text>
- </view>
- </view>
-
- <!-- 维修记录特有字段 -->
- <template v-if="activeMainTab === 'repair'">
- <!-- 问题是否解决 -->
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">问题是否解决</text>
- <text class="value red-text">{{ record.isResolved }}</text>
- </view>
-
- <!-- 备注 -->
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">备注</text>
- </view>
-
- <!-- 备注文本区域 -->
- <view class="content-text" v-if="!record.isCollapsed">
- <text>{{ record.remark }}</text>
- </view>
- </template>
-
- <!-- 保养记录特有字段 -->
- <template v-else>
- <!-- 附件信息 -->
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">附件信息</text>
- </view>
-
- <!-- 附件信息文本区域 -->
- <view class="content-text" v-if="!record.isCollapsed">
- <text>{{ record.attachmentInfo }}</text>
- </view>
-
- <!-- 附件图片 -->
- <view class="image-container" v-if="!record.isCollapsed">
- <image class="uploaded-image" :src="record.attachmentImage" mode="aspectFill"></image>
- </view>
-
- <!-- 保养备注 -->
- <view class="info-row" v-if="!record.isCollapsed">
- <text class="label">备注</text>
- </view>
-
- <!-- 保养备注文本区域 -->
- <view class="content-text" v-if="!record.isCollapsed">
- <text>{{ record.maintainRemark }}</text>
- </view>
- </template>
-
- <!-- 收起按钮 -->
- <view class="collapse-btn" @click="toggleCollapse(index)">
- <text class="collapse-text">{{ record.isCollapsed ? '查看全部' : '收起' }}</text>
- <text class="collapse-icon">{{ record.isCollapsed ? '▼' : '▲' }}</text>
- </view>
- </view>
- </view>
- </view>
- </template>
-
- <script>
- import ListMixin from '@/mixins/list'
-
- export default {
- mixins: [ListMixin],
- data() {
- return {
- showpieceId: '',
- mixinListApi: 'exhibit.queryRepairList',
- activeMainTab: 'repair', // 当前激活的主Tab
- activeFilter: 0, // 当前激活的筛选器
- filterOptions: [
- { name: '时间' },
- { name: '人员' }
- ],
- selectedTime: '', // 选中的时间
- selectedPerson: '', // 选中的人员
- timeColumns: [
- ['今天', '昨天', '本周', '本月', '上月', '自定义']
- ],
- personColumns: [
- ['张三', '李四', '王五', '赵六', '钱七', '孙八']
- ],
- // 维修记录数据
- repairData: [
- {
- repairPerson: '李华',
- contactPhone: '15845623255',
- repairDate: '2025-08-14',
- processContent: '文字内容文字内容文字内容',
- uploadImage: '/static/商城_商品2.png',
- hasCost: '是',
- totalCost: '300.00',
- costDetails: [
- { name: '天然粘胶剂', quantity: '2', amount: '100.00' },
- { name: '达玛树脂', quantity: '1', amount: '200.00' }
- ],
- isResolved: '是',
- remark: '文字内容',
- isCollapsed: true // 控制收起状态
- },
- {
- repairPerson: '李华',
- contactPhone: '15845623255',
- repairDate: '2025-08-14',
- processContent: '文字内容文字内容文字内容',
- uploadImage: '/static/商城_商品2.png',
- hasCost: '是',
- totalCost: '300.00',
- costDetails: [
- { name: '天然粘胶剂', quantity: '2', amount: '100.00' },
- { name: '达玛树脂', quantity: '1', amount: '200.00' }
- ],
- isResolved: '是',
- remark: '文字内容',
- isCollapsed: true // 控制收起状态
- },
- ],
- // 保养记录数据
- maintainData: [
- {
- maintainPerson: '李华',
- maintainDate: '2025-08-19',
- beforeStatus: '文字内容文字内容文字内容',
- beforeImages: ['/static/商城_商品2.png', '/static/商城_商品2.png'],
- afterStatus: '文字内容文字内容文字内容',
- afterImages: ['/static/商城_商品2.png', '/static/商城_商品2.png'],
- hasCost: '是',
- totalCost: '300.00',
- costDetails: [
- { name: '天然粘胶剂', quantity: '2', amount: '100.00' },
- { name: '达玛树脂', quantity: '1', amount: '200.00' }
- ],
- attachmentInfo: '附件信息',
- maintainRemark: '文字内容',
- attachmentImage: '/static/商城_商品2.png',
- isCollapsed: true // 控制收起状态
- },
- {
- maintainPerson: '李华',
- maintainDate: '2025-08-19',
- beforeStatus: '文字内容文字内容文字内容',
- beforeImages: ['/static/商城_商品2.png', '/static/商城_商品2.png'],
- afterStatus: '文字内容文字内容文字内容',
- afterImages: ['/static/商城_商品2.png', '/static/商城_商品2.png'],
- hasCost: '是',
- totalCost: '300.00',
- costDetails: [
- { name: '天然粘胶剂', quantity: '2', amount: '100.00' },
- { name: '达玛树脂', quantity: '1', amount: '200.00' }
- ],
- attachmentInfo: '附件信息',
- maintainRemark: '文字内容',
- attachmentImage: '/static/商城_商品2.png',
- isCollapsed: true // 控制收起状态
- }
- ]
- }
- },
- computed: {
- // list() {
- // return this.activeMainTab === 'repair' ? this.repairData : this.maintainData
- // },
- contentText() {
- const tabText = this.activeMainTab === 'repair' ? '维修' : '保养'
- const filterText = this.filterOptions[this.activeFilter].name
- let selectedText = ''
-
- if (this.activeFilter === 0 && this.selectedTime) {
- selectedText = ` - ${this.selectedTime}`
- } else if (this.activeFilter === 1 && this.selectedPerson) {
- selectedText = ` - ${this.selectedPerson}`
- }
-
- return `${tabText}记录 - 按${filterText}筛选${selectedText}`
- }
- },
- methods: {
- mixinSetParams() {
- return {
- showpieceId: this.showpieceId
- }
- },
- switchMainTab(tab) {
- this.activeMainTab = tab
- },
- onFilterChange(index) {
- this.activeFilter = index
- // 切换筛选器时清空选择
- this.selectedTime = ''
- this.selectedPerson = ''
- },
- showTimePicker() {
- this.$refs.timePicker.open()
- },
- showPersonPicker() {
- this.$refs.personPicker.open()
- },
- onTimeConfirm(value) {
- this.selectedTime = value.value[0]
- console.log('选择的时间:', value)
- },
- onTimeCancel() {
- console.log('取消选择时间')
- },
- onPersonConfirm(value) {
- this.selectedPerson = value.value[0]
- console.log('选择的人员:', value)
- },
- onPersonCancel() {
- console.log('取消选择人员')
- },
- toggleCollapse(index) {
- if (this.activeMainTab === 'repair') {
- this.repairData[index].isCollapsed = !this.repairData[index].isCollapsed
- console.log('收起/展开费用详情', this.repairData[index].isCollapsed)
- } else {
- this.maintainData[index].isCollapsed = !this.maintainData[index].isCollapsed
- console.log('收起/展开费用详情', this.maintainData[index].isCollapsed)
- }
- }
- },
- onLoad(args){{
- this.showpieceId = args.id
- }}
- }
- </script>
-
- <style lang="scss" scoped>
- .container {
-
- background-color: #f5f5f5;
- min-height: 100vh;
- }
- .header{
- padding: 16rpx 39rpx 23rpx;
- background: #fff;
- }
- .main-tabs {
- display: flex;
- margin-bottom: 48rpx;
- // border-bottom: 2rpx solid #f0f0f0;
-
- .tab-item {
- flex: 1;
- position: relative;
- padding: 13rpx 0;
- text-align: center;
-
- .tab-text {
- font-size: 28rpx;
- color: $secondary-text-color;
- font-weight: 400;
- transition: all 0.3s ease;
- }
-
- &.active {
- .tab-text {
- color: $primary-color;
- // font-weight: 600;
- }
- }
-
- .tab-underline {
- position: absolute;
- bottom: 0;
- left: 50%;
- transform: translateX(-50%);
- width: 60rpx;
- height: 4rpx;
- background-color: $primary-color;
- border-radius: 2rpx;
- }
- }
- }
-
- .filter-section {
- margin-bottom: 32rpx;
- }
-
- .picker-buttons {
- // margin-bottom: 32rpx;
- display: flex;
- gap: 55rpx;
-
- .picker-btn {
- display: flex;
- align-items: center;
- justify-content: flex-start;
- padding: 0;
- background-color: transparent;
- color: $primary-text-color;
- &.active {
- color: $primary-color;
- }
- .btn-text {
- font-size: 28rpx;
- // color: $primary-color;
- margin-right: 10rpx;
- }
-
- .arrow-icon {
- font-size: 20rpx;
- // color: $primary-color;
- }
- }
- }
-
- .content-area {
- padding: 22rpx 29rpx;
-
- .record-item {
- background: #fff;
- border-radius: 16rpx;
- padding: 29rpx;
- margin-bottom: 37rpx;
- border-radius: 15rpx;
- box-shadow: 0 3rpx 6rpx 0rpx rgba(0,0,0,0.16);
- .info-row {
- display: flex;
- justify-content: space-between;
- align-items: flex-start;
- margin-bottom: 38rpx;
-
- .label {
- font-size: 28rpx;
- color: $primary-text-color;
- // font-weight: 400;
- flex-shrink: 0;
- }
-
- .value {
- font-size: 28rpx;
- color: $primary-text-color;
- text-align: right;
- flex: 1;
- margin-left: 32rpx;
-
- &.red-text {
- color: $primary-color;
- }
- }
- }
-
- .content-text {
- background: #f5f5f5;
- border-radius: 15rpx;
- padding: 24rpx;
- margin-bottom: 24rpx;
- min-height: 120rpx;
- text {
- font-size: 28rpx;
- color: $primary-text-color;
- line-height: 1.5;
- }
- }
-
- .image-container {
- margin-bottom: 29rpx;
-
- .uploaded-image {
- width: 157rpx;
- height: 157rpx;
- // border-radius: 8rpx;
- }
- }
-
- .cost-table {
- margin-bottom: 24rpx;
-
- .table-header {
- display: flex;
- // background: #f8f8f8;
- // border-radius: 8rpx 8rpx 0 0;
- padding: 30rpx 0;
- justify-content: space-between;
- .header-cell {
- flex: 1;
- font-size: 30rpx;
- color: $secondary-text-color;
- &:nth-child(1) {
- text-align: left;
- }
-
- &:nth-child(2) {
- text-align: center;
- }
-
- &:nth-child(3) {
- text-align: right;
- }
- // font-weight: 500;
- }
- }
-
- .table-row {
- display: flex;
- border-bottom: 1rpx solid #f0f0f0;
- padding: 30rpx 0;
- // justify-content: space-between;
-
-
- .cell {
- flex: 1;
- font-size: 30rpx;
- color: $primary-text-color;
-
- &:nth-child(1) {
- text-align: left;
- }
-
- &:nth-child(2) {
- text-align: center;
- }
-
- &:nth-child(3) {
- text-align: right;
- }
- }
- // .cell:first-child {
- // text-align: center;
- // }
- }
- }
-
- .view-all-btn {
- display: flex;
- justify-content: center;
- align-items: center;
- padding: 16rpx 0;
- margin-top: 16rpx;
-
- .view-all-text {
- font-size: 26rpx;
- color: $primary-color;
- margin-right: 8rpx;
- }
-
- .view-all-icon {
- font-size: 20rpx;
- color: $primary-color;
- }
- }
-
- .collapse-btn {
- display: flex;
- justify-content: center;
- align-items: center;
- padding: 16rpx 0;
- margin-top: 16rpx;
-
- .collapse-text {
- font-size: 26rpx;
- color: $primary-color;
- margin-right: 8rpx;
- }
-
- .collapse-icon {
- font-size: 20rpx;
- color: $primary-color;
- }
- }
- }
- }
- </style>
|