From b7b10f78abc7ba462e5c602ba7e70d4739e316b8 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期二, 24 六月 2025 09:00:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/main'

---
 eims-ui-mobile/src/pages/equ-status/list.vue |  174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 174 insertions(+), 0 deletions(-)

diff --git a/eims-ui-mobile/src/pages/equ-status/list.vue b/eims-ui-mobile/src/pages/equ-status/list.vue
new file mode 100644
index 0000000..1ce91e1
--- /dev/null
+++ b/eims-ui-mobile/src/pages/equ-status/list.vue
@@ -0,0 +1,174 @@
+<template>
+  <view class="bg-base">
+
+    <z-paging ref="paging" v-model="dataList" @query="queryList" class="bg-base">
+      <template #top>
+        <wd-search v-model="searchValue" placeholder="璁惧鍚嶇О/璧勪骇缂栧彿" @search="reloadData" />
+        <wd-tabs v-model="activeTab" @change="handleTabChange">
+          <wd-tab title="寰呯‘璁�"></wd-tab>
+          <wd-tab title="宸插悓鎰�"></wd-tab>
+          <wd-tab title="宸查┏鍥�"></wd-tab>
+        </wd-tabs>
+      </template>
+      <view v-for="item in dataList" :key="item.equStatuId" class="mb-2" >
+        <wd-card type="rectangle">
+          <template #title>
+            <view class="flex justify-between items-center menu-title-box">
+              <view class="flex items-center">
+                <view class="menu-indicator"></view>
+                <text class="ml-1 text-sm">{{ item.equName || '-' }}</text>
+                <text class="ml-2 text-color-gray text-mini">{{ item.assetNo || '-' }}</text>
+              </view>
+              <wd-tag v-if="item.orderStatus === '0'" type="warning">寰呯‘璁�</wd-tag>
+              <wd-tag v-else-if="item.orderStatus === '1'" type="success">宸插悓鎰�</wd-tag>
+              <wd-tag v-else type="error">宸查┏鍥�</wd-tag>
+            </view>
+          </template>
+          <view class="flex h-[200rpx] items-center">
+            <image class="slot-img text-center" src="/static/images/camera.png" />
+            <view class="flex-1">
+              <view class="text-color-base mt-1">鍙樻洿鍓嶏細{{ statusText(item.beforeChange) }} 鈫� 鍙樻洿鍚庯細{{ statusText(item.afterChange) }}</view>
+              <view class="text-color-gray text-sm mt-1">鍙樻洿鍘熷洜锛歿{ item.changeDesc }}</view>
+              <view class="text-color-gray text-sm mt-1">鍙樻洿鏃堕棿锛歿{ item.changeDate || '-' }}</view>
+              <view class="text-color-gray text-sm mt-1">鍙樻洿浜猴細{{ item.changeUserName || '-' }}</view>
+              <view v-if="item.orderStatus === '2' && item.remark" class="text-color-error text-sm mt-1">椹冲洖鐞嗙敱锛歿{ item.remark }}</view>
+            </view>
+            <view v-if="item.orderStatus === '0' && isEquAdmin()" class="flex flex-col gap-2 ml-2">
+              <wd-button size="small" type="success" @click="handleAgree(item)">鍚屾剰</wd-button>
+              <wd-button size="small" type="error" @click="openReject(item)">椹冲洖</wd-button>
+            </view>
+          </view>
+        </wd-card>
+      </view>
+    </z-paging>
+    <wd-popup v-model="showReject" position="center" round :close-on-click-modal="false">
+      <view class="popup-container">
+        <view class="popup-title">濉啓椹冲洖鐞嗙敱</view>
+        <wd-textarea v-model="rejectReason" placeholder="璇疯緭鍏ラ┏鍥炵悊鐢�" :maxlength="100" show-word-limit required />
+        <view class="popup-actions">
+          <wd-button block @click="showReject = false">鍙栨秷</wd-button>
+          <wd-button type="error" block class="ml-2" @click="handleRejectConfirm">纭畾</wd-button>
+        </view>
+      </view>
+    </wd-popup>
+  </view>
+</template>
+<script setup lang="ts">
+import { ref } from 'vue'
+import { getEquStatuList, updateEquStatu } from '@/service/equ_status'
+import { useToast } from 'wot-design-uni'
+import { isEquAdmin } from "@/utils/RoleUtils";
+const toast = useToast()
+const searchValue = ref('')
+const activeTab = ref(0)
+const dataList = ref<any[]>([])
+const paging = ref()
+const showReject = ref(false)
+const rejectReason = ref('')
+const rejectItem = ref<any>(null)
+
+const statusMap = [
+  { label: '璇曠敤', value: '0' },
+  { label: '浣跨敤', value: '1' },
+  { label: '鍋滅敤', value: '2' },
+  { label: '鎶ュ簾', value: '3' },
+  { label: '闂茬疆', value: '4' },
+  { label: '鏂板', value: '5' },
+]
+function statusText(val: string) {
+  return statusMap.find((s) => s.value === val)?.label || '-'
+}
+function handleTabChange({ index }) {
+  activeTab.value = index
+  reloadData()
+}
+function reloadData() {
+  paging.value.reload()
+}
+function queryList(pageNum?: number, pageSize?: number) {
+  const params: any = {
+    pageNum,
+    pageSize,
+    params: {
+      searchValue: searchValue.value,
+    },
+    orderStatus: String(activeTab.value),
+  }
+  getEquStatuList(params).then((res: any) => {
+    paging.value.completeByTotal(res.rows, res.total)
+  }).catch(() => {
+    paging.value.complete(false)
+  })
+}
+function handleAgree(item: any) {
+  updateEquStatu({
+    equStatuId: item.equStatuId,
+    orderStatus: '1',
+    remark: '',
+  }).then(() => {
+    toast.success('鎿嶄綔鎴愬姛')
+    reloadData()
+  })
+}
+function openReject(item: any) {
+  rejectItem.value = item
+  rejectReason.value = ''
+  showReject.value = true
+}
+function handleRejectConfirm() {
+  if (!rejectReason.value.trim()) {
+    toast.info('璇峰~鍐欓┏鍥炵悊鐢�')
+    return
+  }
+  updateEquStatu({
+    equStatuId: rejectItem.value.equStatuId,
+    orderStatus: '2',
+    remark: rejectReason.value,
+  }).then(() => {
+    toast.success('宸查┏鍥�')
+    showReject.value = false
+    reloadData()
+  })
+}
+</script>
+<style scoped lang="scss">
+.menu-title-box {
+}
+.slot-img {
+  width: 72rpx;
+  height: 72rpx;
+  margin-right: 24rpx;
+}
+.text-mini {
+  font-size: 24rpx;
+}
+.menu-indicator {
+  width: 6rpx;
+  height: 26rpx;
+  border-radius: 10rpx;
+  background-color: $uni-color-primary;
+}
+:deep(.wd-card__footer) {
+  padding: 10rpx !important;
+}
+:deep(.wd-card__title-content) {
+  padding: 24rpx 0 !important;
+}
+.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;
+}
+</style>

--
Gitblit v1.9.3