From b973bcee308e99b5fd8a69640f11069e810346f4 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 27 一月 2026 16:37:55 +0800
Subject: [PATCH] 采购台账重构
---
src/pages/equipmentManagement/upkeep/index.vue | 491 ++++++++++++++++++++++++++++--------------------------
1 files changed, 256 insertions(+), 235 deletions(-)
diff --git a/src/pages/equipmentManagement/upkeep/index.vue b/src/pages/equipmentManagement/upkeep/index.vue
index d11eb48..cca1b04 100644
--- a/src/pages/equipmentManagement/upkeep/index.vue
+++ b/src/pages/equipmentManagement/upkeep/index.vue
@@ -1,44 +1,50 @@
<template>
<view class="sales-account">
<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
- <PageHeader title="璁惧淇濆吇" @back="goBack" />
-
+ <PageHeader title="璁惧淇濆吇"
+ @back="goBack" />
<!-- 鎼滅储鍖哄煙 -->
<view class="search-section">
<view class="search-bar">
<view class="search-input">
- <up-input
- class="search-text"
- placeholder="璇疯緭鍏ヨ澶囧悕绉版悳绱�"
- v-model="searchKeyword"
- @change="getList"
- clearable
- />
+ <up-input class="search-text"
+ placeholder="璇疯緭鍏ヨ澶囧悕绉版悳绱�"
+ v-model="searchKeyword"
+ @change="getList"
+ clearable />
</view>
- <view class="filter-button" @click="getList">
- <up-icon name="search" size="24" color="#999"></up-icon>
+ <view class="filter-button"
+ @click="getList">
+ <up-icon name="search"
+ size="24"
+ color="#999"></up-icon>
</view>
</view>
</view>
-
<!-- 璁惧淇濆吇鍒楄〃 -->
- <view class="ledger-list" v-if="upkeepList.length > 0">
- <view v-for="(item, index) in upkeepList" :key="index">
- <view class="ledger-item" @click="toggleSelection(item)">
+ <view class="ledger-list"
+ v-if="upkeepList.length > 0">
+ <view v-for="(item, index) in upkeepList"
+ :key="index">
+ <view class="ledger-item"
+ @click="toggleSelection(item)">
<view class="item-header">
<view class="item-left">
<view class="document-icon">
- <up-icon name="file-text" size="16" color="#ffffff"></up-icon>
+ <up-icon name="file-text"
+ size="16"
+ color="#ffffff"></up-icon>
</view>
<text class="item-id">璁惧鍚嶇О锛歿{ item.deviceName }}</text>
</view>
<view class="status-tag">
- <u-tag v-if="item.status === 1" type="success">瀹岀粨</u-tag>
- <u-tag v-if="item.status === 0" type="error">寰呬繚鍏�</u-tag>
+ <u-tag v-if="item.status === 1"
+ type="success">瀹岀粨</u-tag>
+ <u-tag v-if="item.status === 0"
+ type="error">寰呬繚鍏�</u-tag>
</view>
</view>
<up-divider></up-divider>
-
<view class="item-details">
<view class="detail-row">
<text class="detail-label">瑙勬牸鍨嬪彿</text>
@@ -67,267 +73,282 @@
<view class="detail-row">
<text class="detail-label">淇濆吇缁撴灉</text>
<view class="detail-value">
- <u-tag v-if="item.maintenanceResult === 1" type="success" size="mini">
- 瀹屽ソ
- </u-tag>
- <u-tag v-if="item.maintenanceResult === 0" type="error" size="mini">
- 缁翠慨
- </u-tag>
- <text v-if="item.maintenanceResult === undefined || item.maintenanceResult === null">-</text>
- </view>
+ <u-tag v-if="item.maintenanceResult === 1"
+ type="success"
+ size="mini">
+ 瀹屽ソ
+ </u-tag>
+ <u-tag v-if="item.maintenanceResult === 0"
+ type="error"
+ size="mini">
+ 缁翠慨
+ </u-tag>
+ <text v-if="item.maintenanceResult === undefined || item.maintenanceResult === null">-</text>
+ </view>
</view>
</view>
-
<!-- 鎸夐挳鍖哄煙 -->
<view class="action-buttons">
- <u-button
- type="primary"
- size="small"
- class="action-btn"
- :disabled="item.status === 1"
- @click.stop="edit(item.id)"
- >
+ <u-button type="primary"
+ size="small"
+ class="action-btn"
+ :disabled="item.status === 1"
+ @click.stop="edit(item.id)">
缂栬緫
</u-button>
- <u-button
- type="warning"
- size="small"
- class="action-btn"
- :disabled="item.status === 1"
- @click.stop="addMaintain(item.id)"
- >
+ <u-button type="warning"
+ size="small"
+ class="action-btn"
+ :disabled="item.status === 1"
+ @click.stop="addMaintain(item.id)">
淇濆吇
</u-button>
- <u-button
- type="error"
- size="small"
- plain
- class="action-btn"
- @click.stop="delUpkeepByIds(item.id)"
- >
+ <u-button type="error"
+ size="small"
+ plain
+ class="action-btn"
+ @click.stop="delUpkeepByIds(item.id)">
鍒犻櫎
+ </u-button>
+ <u-button type="warning"
+ size="small"
+ class="action-btn"
+ @click.stop="addFile(item.id)">
+ 闄勪欢
</u-button>
</view>
</view>
</view>
</view>
-
- <view v-else class="no-data">
+ <view v-else
+ class="no-data">
<text>鏆傛棤璁惧淇濆吇鏁版嵁</text>
</view>
-
<!-- 娴姩鏂板鎸夐挳 -->
- <view class="fab-button" @click="addPlan">
- <up-icon name="plus" size="24" color="#ffffff"></up-icon>
+ <view class="fab-button"
+ @click="addPlan">
+ <up-icon name="plus"
+ size="24"
+ color="#ffffff"></up-icon>
</view>
</view>
</template>
<script setup>
-import { ref, onMounted } from 'vue'
-import { onShow } from '@dcloudio/uni-app'
-import PageHeader from '@/components/PageHeader.vue'
-import { getUpkeepPage, delUpkeep } from '@/api/equipmentManagement/upkeep'
-import useUserStore from "@/store/modules/user"
-// 鏄剧ず鎻愮ず淇℃伅
-const showToast = (message) => {
- uni.showToast({
- title: message,
- icon: 'none'
- })
-};
-import dayjs from "dayjs"
+ import { ref, onMounted } from "vue";
+ import { onShow } from "@dcloudio/uni-app";
+ import PageHeader from "@/components/PageHeader.vue";
+ import { getUpkeepPage, delUpkeep } from "@/api/equipmentManagement/upkeep";
+ import useUserStore from "@/store/modules/user";
+ // 鏄剧ず鎻愮ず淇℃伅
+ const showToast = message => {
+ uni.showToast({
+ title: message,
+ icon: "none",
+ });
+ };
+ import dayjs from "dayjs";
-const userStore = useUserStore()
+ const userStore = useUserStore();
-// 鎼滅储鍏抽敭璇�
-const searchKeyword = ref('')
+ // 鎼滅储鍏抽敭璇�
+ const searchKeyword = ref("");
-// 璁惧淇濆吇鏁版嵁
-const upkeepList = ref([])
+ // 璁惧淇濆吇鏁版嵁
+ const upkeepList = ref([]);
-// 澶氶�夊垪琛�
-const multipleList = ref([])
+ // 澶氶�夊垪琛�
+ const multipleList = ref([]);
-// 杩斿洖涓婁竴椤�
-const goBack = () => {
- uni.navigateBack()
-}
+ // 杩斿洖涓婁竴椤�
+ const goBack = () => {
+ uni.navigateBack();
+ };
-// 鏍煎紡鍖栨棩鏈�
-const formatDate = (dateStr) => {
- if (!dateStr) return ''
- return dayjs(dateStr).format("YYYY-MM-DD")
-}
+ // 鏍煎紡鍖栨棩鏈�
+ const formatDate = dateStr => {
+ if (!dateStr) return "";
+ return dayjs(dateStr).format("YYYY-MM-DD");
+ };
-// 鏍煎紡鍖栨棩鏈熸椂闂�
-const formatDateTime = (dateStr) => {
- if (!dateStr) return ''
- return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss")
-}
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ const formatDateTime = dateStr => {
+ if (!dateStr) return "";
+ return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss");
+ };
-// 鏌ヨ鍒楄〃
-const getList = () => {
- showLoadingToast('鍔犺浇涓�...')
- const params = {
- current: -1,
- size: -1,
- deviceName: searchKeyword.value || undefined
- }
- getUpkeepPage(params)
- .then((res) => {
- // 濡傛灉res.data涓嶆槸鏁扮粍锛岃缃负绌烘暟缁�
- upkeepList.value = res.records || res.data?.records || []
- closeToast()
- })
- .catch(() => {
- closeToast()
- showToast('鑾峰彇鏁版嵁澶辫触')
- })
-}
+ // 鏌ヨ鍒楄〃
+ const getList = () => {
+ showLoadingToast("鍔犺浇涓�...");
+ const params = {
+ current: -1,
+ size: -1,
+ deviceName: searchKeyword.value || undefined,
+ };
+ getUpkeepPage(params)
+ .then(res => {
+ // 濡傛灉res.data涓嶆槸鏁扮粍锛岃缃负绌烘暟缁�
+ upkeepList.value = res.records || res.data?.records || [];
+ closeToast();
+ })
+ .catch(() => {
+ closeToast();
+ showToast("鑾峰彇鏁版嵁澶辫触");
+ });
+ };
+ // 鏂板闄勪欢 - 璺宠浆鍒伴檮浠堕〉闈�
+ const addFile = id => {
+ // 浣跨敤鏈湴瀛樺偍浼犻�抜d
+ uni.setStorageSync("upkeepId", id);
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/fileList",
+ });
+ };
-// 鏄剧ず鍔犺浇鎻愮ず
-const showLoadingToast = (message) => {
- uni.showLoading({
- title: message,
- mask: true
- });
-};
+ // 鏄剧ず鍔犺浇鎻愮ず
+ const showLoadingToast = message => {
+ uni.showLoading({
+ title: message,
+ mask: true,
+ });
+ };
-// 鍏抽棴鎻愮ず
-const closeToast = () => {
- uni.hideLoading();
-};
+ // 鍏抽棴鎻愮ず
+ const closeToast = () => {
+ uni.hideLoading();
+ };
-// 鍒囨崲閫夋嫨鐘舵��
-const toggleSelection = (item) => {
- const index = multipleList.value.findIndex(selected => selected.id === item.id)
- if (index > -1) {
- multipleList.value.splice(index, 1)
- } else {
- multipleList.value.push(item)
- }
-}
-
-// 妫�鏌ユ槸鍚﹀凡閫夋嫨
-const isSelected = (item) => {
- return multipleList.value.some(selected => selected.id === item.id)
-}
-
-// 鏂板淇濆吇 - 璺宠浆鍒颁繚鍏婚〉闈�
-const addMaintain = (id) => {
- if (!id && multipleList.value.length !== 1) {
- showToast('璇烽�夋嫨涓�鏉¤褰�')
- return
- }
- const targetId = id || multipleList.value[0].id
- // 浣跨敤鏈湴瀛樺偍浼犻�抜d
- uni.setStorageSync('repairId', targetId)
- uni.navigateTo({
- url: '/pages/equipmentManagement/upkeep/maintain'
- })
-}
-
-// 鏂板璁″垝 - 璺宠浆鍒版柊澧為〉闈�
-const addPlan = () => {
- uni.navigateTo({
- url: '/pages/equipmentManagement/upkeep/add'
- })
-}
-
-// 缂栬緫 - 璺宠浆鍒癮dd椤甸潰锛岄�氳繃id鍖哄垎鏂板杩樻槸缂栬緫
-const edit = (id) => {
- if (!id) return
- // 浣跨敤鏈湴瀛樺偍浼犻�抜d
- uni.setStorageSync('repairId', id)
- uni.navigateTo({
- url: '/pages/equipmentManagement/upkeep/add'
- })
-}
-
-// 鍒犻櫎淇濆吇鏁版嵁
-const delUpkeepByIds = async (ids) => {
- const deleteIds = Array.isArray(ids) ? ids : [ids]
- if (deleteIds.length === 0) {
- showToast('璇烽�夋嫨瑕佸垹闄ょ殑璁板綍')
- return
- }
-
- uni.showModal({
- title: '璀﹀憡',
- content: '纭鍒犻櫎淇濆吇鏁版嵁, 姝ゆ搷浣滀笉鍙��?',
- confirmText: '纭畾',
- cancelText: '鍙栨秷',
- success: async (res) => {
- if (!res.confirm) return
- try {
- // 閫愪釜鍒犻櫎
- for (const id of deleteIds) {
- const response = await delUpkeep(id)
- if (response.code !== 200) {
- showToast('鍒犻櫎澶辫触')
- return
- }
- }
- showToast('鍒犻櫎鎴愬姛')
- multipleList.value = []
- getList()
- } catch (e) {
- showToast('鍒犻櫎澶辫触')
- }
+ // 鍒囨崲閫夋嫨鐘舵��
+ const toggleSelection = item => {
+ const index = multipleList.value.findIndex(
+ selected => selected.id === item.id
+ );
+ if (index > -1) {
+ multipleList.value.splice(index, 1);
+ } else {
+ multipleList.value.push(item);
}
- })
-}
+ };
-onMounted(() => {
- getList()
-})
+ // 妫�鏌ユ槸鍚﹀凡閫夋嫨
+ const isSelected = item => {
+ return multipleList.value.some(selected => selected.id === item.id);
+ };
-onShow(() => {
- getList()
-})
+ // 鏂板淇濆吇 - 璺宠浆鍒颁繚鍏婚〉闈�
+ const addMaintain = id => {
+ if (!id && multipleList.value.length !== 1) {
+ showToast("璇烽�夋嫨涓�鏉¤褰�");
+ return;
+ }
+ const targetId = id || multipleList.value[0].id;
+ // 浣跨敤鏈湴瀛樺偍浼犻�抜d
+ uni.setStorageSync("repairId", targetId);
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/maintain",
+ });
+ };
+
+ // 鏂板璁″垝 - 璺宠浆鍒版柊澧為〉闈�
+ const addPlan = () => {
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/add",
+ });
+ };
+
+ // 缂栬緫 - 璺宠浆鍒癮dd椤甸潰锛岄�氳繃id鍖哄垎鏂板杩樻槸缂栬緫
+ const edit = id => {
+ if (!id) return;
+ // 浣跨敤鏈湴瀛樺偍浼犻�抜d
+ uni.setStorageSync("repairId", id);
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/add",
+ });
+ };
+
+ // 鍒犻櫎淇濆吇鏁版嵁
+ const delUpkeepByIds = async ids => {
+ const deleteIds = Array.isArray(ids) ? ids : [ids];
+ if (deleteIds.length === 0) {
+ showToast("璇烽�夋嫨瑕佸垹闄ょ殑璁板綍");
+ return;
+ }
+
+ uni.showModal({
+ title: "璀﹀憡",
+ content: "纭鍒犻櫎淇濆吇鏁版嵁, 姝ゆ搷浣滀笉鍙��?",
+ confirmText: "纭畾",
+ cancelText: "鍙栨秷",
+ success: async res => {
+ if (!res.confirm) return;
+ try {
+ // 閫愪釜鍒犻櫎
+ for (const id of deleteIds) {
+ const response = await delUpkeep(id);
+ if (response.code !== 200) {
+ showToast("鍒犻櫎澶辫触");
+ return;
+ }
+ }
+ showToast("鍒犻櫎鎴愬姛");
+ multipleList.value = [];
+ getList();
+ } catch (e) {
+ showToast("鍒犻櫎澶辫触");
+ }
+ },
+ });
+ };
+
+ onMounted(() => {
+ getList();
+ });
+
+ onShow(() => {
+ getList();
+ });
</script>
<style scoped lang="scss">
-@import '@/styles/sales-common.scss';
+ @import "@/styles/sales-common.scss";
-// 璁惧淇濆吇鐗规湁鏍峰紡
-.sales-account {
- padding-bottom: 80px; // 涓烘诞鍔ㄦ寜閽暀鍑虹┖闂�
-}
+ // 璁惧淇濆吇鐗规湁鏍峰紡
+ .sales-account {
+ padding-bottom: 80px; // 涓烘诞鍔ㄦ寜閽暀鍑虹┖闂�
+ }
-.action-section {
- padding: 10px 20px;
- background: #ffffff;
- border-bottom: 1px solid #f0f0f0;
-}
+ .action-section {
+ padding: 10px 20px;
+ background: #ffffff;
+ border-bottom: 1px solid #f0f0f0;
+ }
-.action-section .action-buttons {
- gap: 8px; // 涓庡叕鍏辨牱寮忎腑鐨� 12px 涓嶅悓
- justify-content: flex-start;
-}
+ .action-section .action-buttons {
+ gap: 8px; // 涓庡叕鍏辨牱寮忎腑鐨� 12px 涓嶅悓
+ justify-content: flex-start;
+ }
-.checkbox-wrapper {
- display: flex;
- align-items: center;
-}
+ .checkbox-wrapper {
+ display: flex;
+ align-items: center;
+ }
-.status-tag {
- display: flex;
- align-items: center;
-}
+ .status-tag {
+ display: flex;
+ align-items: center;
+ }
-.detail-label {
- min-width: 80px; // 涓庡叕鍏辨牱寮忎腑鐨� 60px 涓嶅悓
-}
+ .detail-label {
+ min-width: 80px; // 涓庡叕鍏辨牱寮忎腑鐨� 60px 涓嶅悓
+ }
-.detail-value {
- display: flex;
- justify-content: flex-end;
- align-items: center;
-}
+ .detail-value {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ }
-.ledger-item .action-buttons {
- gap: 8px; // 涓庡叕鍏辨牱寮忎腑鐨� 12px 涓嶅悓
-}
+ .ledger-item .action-buttons {
+ gap: 8px; // 涓庡叕鍏辨牱寮忎腑鐨� 12px 涓嶅悓
+ }
</style>
\ No newline at end of file
--
Gitblit v1.9.3