| | |
| | | <wd-tag v-else-if="model.status === '2'" class="ml-2" type="danger">停用</wd-tag> |
| | | <wd-tag v-else-if="model.status === '3'" class="ml-2" bg-color="pink">报废</wd-tag> |
| | | <wd-tag v-else-if="model.status === '4'" class="ml-2" type="warning">闲置</wd-tag> |
| | | <wd-tag v-else-if="model.status === '5'" class="ml-2">新增</wd-tag> |
| | | <wd-tag v-else class="ml-2">新增</wd-tag> |
| | | </view> |
| | | |
| | | <view @click="handleInfo"> |
| | | <text class="icon-color-base">详情</text> |
| | | <text class="icon-color-base">状态变更</text> |
| | | <wd-icon name="arrow-right" custom-class="icon-color-base"></wd-icon> |
| | | </view> |
| | | </view> |
| | |
| | | <view class="h-[1px] bg-base"></view> |
| | | <view class="bg-white flex justify-around py-4"> |
| | | <wd-button icon="edit-outline" @click.stop="handleInsp">点检</wd-button> |
| | | <wd-button icon="laptop" @click.stop="handMaint">保养</wd-button> |
| | | <wd-button icon="tools" @click.stop="showActions">维修</wd-button> |
| | | <wd-button icon="laptop" v-if="isRepair() || isLeader()" @click.stop="handMaint"> |
| | | 保养 |
| | | </wd-button> |
| | | <wd-button icon="laptop" @click.stop="handleRequest">报修</wd-button> |
| | | <!-- <wd-button icon="tools" @click.stop="showActions">维修</wd-button>--> |
| | | </view> |
| | | </view> |
| | | <view class="h-[10px] bg-base"></view> |
| | | <wd-tabs v-model="tab"> |
| | | |
| | | <wd-tab title="报修单"> |
| | | <view class="h-[10px] bg-base"></view> |
| | | <!-- 维修请求区域 --> |
| | | <view class="mt-2" v-if="reqList.length > 0"> |
| | | |
| | | |
| | | <view class="bg-base"> |
| | | <req-card |
| | | v-for="item in reqList" |
| | | :key="item.id" |
| | | :item="item" |
| | | @click="handleReqClick" |
| | | /> |
| | | </view> |
| | | </view> |
| | | </wd-tab> |
| | | <wd-tab title="维修单"> |
| | | <view class="h-[10px] bg-base"></view> |
| | | <!-- 维修单区域 --> |
| | | <view class="mt-2" v-if="resList.length > 0"> |
| | | |
| | | |
| | | <view class="bg-base"> |
| | | <res-card v-for="item in resList" :key="item.id" :item="item" /> |
| | | </view> |
| | | </view> |
| | | </wd-tab> |
| | | </wd-tabs> |
| | | |
| | | <wd-action-sheet |
| | | v-model="show" |
| | |
| | | @select="select" |
| | | cancel-text="取消" |
| | | /> |
| | | |
| | | <wd-popup v-model="showStatusDialog" position="center" round :close-on-click-modal="false"> |
| | | <view class="popup-container"> |
| | | <view class="popup-title">设备状态变更</view> |
| | | <view class="flex flex-wrap justify-between mb-4"> |
| | | <view |
| | | v-for="item in statusOptions" |
| | | :key="item.value" |
| | | :class="['status-option', selectedStatus === item.value ? 'active' : '']" |
| | | @click="selectStatus(item.value)" |
| | | > |
| | | {{ item.label }} |
| | | </view> |
| | | </view> |
| | | <wd-textarea |
| | | v-model="changeReason" |
| | | placeholder="请输入变更原因" |
| | | :maxlength="100" |
| | | show-word-limit |
| | | required |
| | | /> |
| | | <view class="popup-actions"> |
| | | <wd-button block @click="handleStatusChangeCancel">取消</wd-button> |
| | | <wd-button type="primary" block class="ml-2" @click="handleStatusChangeConfirm">确定</wd-button> |
| | | </view> |
| | | </view> |
| | | </wd-popup> |
| | | </view> |
| | | <view v-else> |
| | | <wd-status-tip image="search" tip="当前搜索无结果" /> |
| | |
| | | <script setup lang="ts"> |
| | | import dayjs from 'dayjs' |
| | | import type { EquVO } from '@/service/equ.d' |
| | | import type { RepairReqVO, RepairResVO } from '@/service/repair.d' |
| | | import { useToast, useMessage } from 'wot-design-uni' |
| | | import { getEquByAssetNo } from '@/service/equ' |
| | | import { getInspStByStId } from '@/service/inspect' |
| | | import { isLeader, isRepair } from '@/utils/RoleUtils' |
| | | import { getRepairReqList, getRepairResList } from '@/service/repair' |
| | | import ReqCard from '@/components/repair/req-card.vue' |
| | | import ResCard from '@/components/repair/res-card.vue' |
| | | import { useUserStore } from '@/store' |
| | | import { addEquStatu } from '@/service/equ_status' |
| | | import type { EimsEquStatuBo } from '@/service/equ_status.d' |
| | | const tab = ref<number>(0) |
| | | const message = useMessage() |
| | | const toast = useToast() |
| | | const model = reactive<EquVO>({}) |
| | | |
| | | const userStore = useUserStore() |
| | | const scanResult = ref<string>('') |
| | | const show = ref<boolean>(false) |
| | | const exist = ref<boolean>(false) |
| | | const reqList = ref<RepairReqVO[]>([]) |
| | | const resList = ref<RepairResVO[]>([]) |
| | | const actions = ref([ |
| | | { |
| | | name: '新增报修', |
| | |
| | | name: '去维修', |
| | | }, |
| | | ]) |
| | | const showStatusDialog = ref(false) |
| | | const selectedStatus = ref<string>('') |
| | | const changeReason = ref<string>('') |
| | | const statusOptions = [ |
| | | { label: '试用', value: '0' }, |
| | | { label: '使用', value: '1' }, |
| | | { label: '停用', value: '2' }, |
| | | { label: '报废', value: '3' }, |
| | | { label: '闲置', value: '4' }, |
| | | { label: '新增', value: '5' }, |
| | | ] |
| | | |
| | | function initData(assetNo: any) { |
| | | getEquByAssetNo(assetNo) |
| | |
| | | if (res?.equId) { |
| | | exist.value = true |
| | | Object.assign(model, res) |
| | | // 加载维修请求和维修单数据 |
| | | loadRepairData() |
| | | } else { |
| | | toast.error('未查询到该资产编号相关数据!') |
| | | } |
| | |
| | | toast.error(res?.data?.msg || '请求失败') |
| | | }) |
| | | } |
| | | function handleInfo() { |
| | | uni.showToast({ |
| | | title: '功能开发中', |
| | | icon: 'none', |
| | | |
| | | // 加载维修请求和维修单数据 |
| | | function loadRepairData() { |
| | | // 加载未接单的维修请求 |
| | | getRepairReqList({ |
| | | equId: model.equId, |
| | | status: '0', |
| | | }).then((res: any) => { |
| | | if (res?.rows) { |
| | | reqList.value = res.rows |
| | | } |
| | | }) |
| | | |
| | | // 加载未完成的维修单 |
| | | const params = { |
| | | equId: model.equId, |
| | | params: { |
| | | status: '0,1,2', |
| | | }, |
| | | } |
| | | // 如果是维修工则加载本要接单的维修单 |
| | | if (isRepair()) { |
| | | params.resUser = userStore?.userInfo?.userId |
| | | params.params.status = '0,1,2' |
| | | } |
| | | getRepairResList(params).then((res: any) => { |
| | | if (res?.rows) { |
| | | resList.value = res.rows |
| | | } |
| | | }) |
| | | } |
| | | |
| | | function handleInfo() { |
| | | if (!model?.equId) { |
| | | uni.showToast({ title: '未查询到设备,请联系管理员!', icon: 'none' }) |
| | | return |
| | | } |
| | | console.log("model::",model) |
| | | selectedStatus.value = model.status || '5' |
| | | changeReason.value = '' |
| | | showStatusDialog.value = true |
| | | } |
| | | |
| | | function handleInsp() { |
| | |
| | | }) |
| | | } |
| | | |
| | | function handleRequest() { |
| | | if (!model?.assetNo) { |
| | | uni.showToast({ |
| | | title: '未查询到设备,请联系管理员!', |
| | | icon: 'none', |
| | | }) |
| | | return false |
| | | } |
| | | uni.navigateTo({ |
| | | url: `/pages/repair/repair-add?equId=${model?.equId}&equName=${model?.equName}&from=scan`, |
| | | }) |
| | | } |
| | | |
| | | function showActions() { |
| | | show.value = true |
| | | } |
| | |
| | | function close() { |
| | | show.value = false |
| | | } |
| | | |
| | | function select({ item, index }) { |
| | | console.error(model?.equId) |
| | | console.error(!model?.equId) |
| | |
| | | break |
| | | } |
| | | } |
| | | |
| | | // 处理维修请求点击事件 |
| | | function handleReqClick(item) { |
| | | uni.navigateTo({ |
| | | url: `/pages/repair/req-detail?id=${item.id}`, |
| | | }) |
| | | } |
| | | |
| | | defineExpose({ handleReqClick }) |
| | | |
| | | function selectStatus(val: string) { |
| | | selectedStatus.value = val |
| | | } |
| | | |
| | | function handleStatusChangeCancel() { |
| | | showStatusDialog.value = false |
| | | } |
| | | |
| | | async function handleStatusChangeConfirm() { |
| | | if (!selectedStatus.value) { |
| | | uni.showToast({ title: '请选择设备状态', icon: 'none' }) |
| | | return |
| | | } |
| | | if (!changeReason.value.trim()) { |
| | | uni.showToast({ title: '请填写变更原因', icon: 'none' }) |
| | | return |
| | | } |
| | | const params: EimsEquStatuBo = { |
| | | equId: model.equId, |
| | | beforeChange: model.status, |
| | | afterChange: selectedStatus.value, |
| | | changeDesc: changeReason.value, |
| | | orderStatus: '0', |
| | | } |
| | | try { |
| | | await addEquStatu(params) |
| | | uni.showToast({ title: '提交成功,待管理员确认', icon: 'success' }) |
| | | showStatusDialog.value = false |
| | | // 可选:刷新设备信息 |
| | | initData(model.assetNo) |
| | | } catch (e) { |
| | | uni.showToast({ title: '提交失败', icon: 'none' }) |
| | | } |
| | | } |
| | | |
| | | onLoad((options) => { |
| | | uni.$on('list-refresh', loadRepairData) |
| | | scanResult.value = options?.result |
| | | initData(options?.result) |
| | | }) |
| | | onUnload(() => { |
| | | uni.$off('list-refresh', loadRepairData) |
| | | }) |
| | | </script> |
| | | |
| | |
| | | :deep(.wd-card__title-content) { |
| | | padding: 16rpx 0 !important; |
| | | } |
| | | .status-option { |
| | | display: inline-block; |
| | | padding: 10rpx 24rpx; |
| | | margin: 8rpx 8rpx 8rpx 0; |
| | | border-radius: 8rpx; |
| | | border: 1px solid #eee; |
| | | background: #f7f7f7; |
| | | color: #666; |
| | | cursor: pointer; |
| | | } |
| | | .status-option.active { |
| | | background: $uni-color-primary; |
| | | color: #fff; |
| | | border-color: $uni-color-primary; |
| | | } |
| | | .popup-container { |
| | | width: 600rpx; |
| | | background: #fff; |
| | | border-radius: 16rpx; |
| | | padding: 32rpx 24rpx 24rpx 24rpx; |
| | | } |
| | | .popup-title { |
| | | font-size: 32rpx; |
| | | font-weight: bold; |
| | | text-align: center; |
| | | margin-bottom: 24rpx; |
| | | } |
| | | .popup-actions { |
| | | display: flex; |
| | | margin-top: 24rpx; |
| | | gap: 16rpx; |
| | | justify-content: space-around; |
| | | } |
| | | </style> |