src/api/cooperativeOffice/clientVisit.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/cooperativeOffice/clientVisit/detail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/cooperativeOffice/clientVisit/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/cooperativeOffice/clientVisit/view.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/cooperativeOffice/clientVisit.js
@@ -18,28 +18,3 @@ params: query }) } // è·åæè®¿è®°å½è¯¦æ export function getVisitDetail(id) { return request({ url: `/cooperative/clientVisit/detail/${id}`, method: 'get' }) } // æ´æ°æè®¿è®°å½ export function updateVisitRecord(data) { return request({ url: '/cooperative/clientVisit/update', method: 'put', data: data }) } // å é¤æè®¿è®°å½ export function deleteVisitRecord(id) { return request({ url: `/cooperative/clientVisit/delete/${id}`, method: 'delete' }) } src/pages.json
@@ -282,6 +282,13 @@ } }, { "path": "pages/cooperativeOffice/clientVisit/view", "style": { "navigationBarTitleText": "å®¢æ·æè®¿è¯¦æ ", "navigationStyle": "custom" } }, { "path": "pages/cooperativeOffice/clientVisit/detail", "style": { "navigationBarTitleText": "æ·»å å®¢æ·æè®¿", src/pages/cooperativeOffice/clientVisit/detail.vue
@@ -37,7 +37,6 @@ <u-input v-model="form.purposeDate" placeholder="è¯·éæ©æè®¿æ¶é´" readonly @click="showTimePicker" /> <template #right> @@ -101,12 +100,10 @@ } import { ref, onMounted } from 'vue' import { onShow } from '@dcloudio/uni-app' import PageHeader from '@/components/PageHeader.vue' import { clientVisitSignIn } from '@/api/cooperativeOffice/clientVisit' import useUserStore from "@/store/modules/user" import dayjs from "dayjs" import { formatDateToYMD } from '@/utils/ruoyi' const userStore = useUserStore() @@ -135,6 +132,8 @@ // è¿åä¸ä¸é¡µ const goBack = () => { // è¿åæ¶æ¸ 餿¬å°åå¨çID uni.removeStorageSync('clientVisit') uni.navigateBack() } @@ -146,7 +145,7 @@ // 确认æ¶é´éæ© const onTimeConfirm = (e) => { console.log(e) form.value.purposeDate = e.value form.value.purposeDate = dayjs(e.value).format('YYYY-MM-DD HH:mm:ss') currentTime.value = e.value showTime.value = false; } @@ -240,13 +239,14 @@ Object.keys(source).forEach((k) => { submitData[k] = source[k] }) console.log('submitData', submitData) const { code } = await clientVisitSignIn(submitData) if (code === 200) { showToast('ç¾å°æå') setTimeout(() => { uni.navigateBack() goBack() }, 500) } else { loading.value = false @@ -254,7 +254,6 @@ } } catch (e) { loading.value = false showToast('ç¾å°å¤±è´¥ï¼è¯·æ£æ¥ç½ç»è¿æ¥') console.error('ç¾å°å¤±è´¥:', e) } } src/pages/cooperativeOffice/clientVisit/index.vue
@@ -28,35 +28,9 @@ <view class="item-header"> <view class="item-left"> <view class="document-icon"> <up-icon name="user" size="16" color="#ffffff"></up-icon> <up-icon name="file-text" size="16" color="#ffffff"></up-icon> </view> <text class="item-id">客æ·ï¼{{ item.customerName }}</text> </view> <view class="visit-status"> <!-- æ¿æ¢æ ç¾åæé® --> <template> <u-tag type="success">已宿</u-tag> <!-- æä½æé® --> <view class="action-buttons"> <u-button type="primary" size="small" class="action-btn" @click="openDetail(item)" > æ¥ç详æ </u-button> <u-button type="warning" size="small" class="action-btn" @click="editVisit(item)" > ç¼è¾ </u-button> </view> </template> </view> </view> <up-divider></up-divider> @@ -98,18 +72,9 @@ type="primary" size="small" class="action-btn" @click="viewDetail(item.id)" @click="viewDetail(item)" > æ¥ç详æ </u-button> <u-button type="error" size="small" plain class="action-btn" @click="deleteRecord(item.id)" > å é¤ </u-button> </view> </view> @@ -131,7 +96,7 @@ import { ref, onMounted } from 'vue' import { onShow } from '@dcloudio/uni-app' import PageHeader from '@/components/PageHeader.vue' import { getVisitRecords, deleteVisitRecord } from '@/api/cooperativeOffice/clientVisit' import { getVisitRecords } from '@/api/cooperativeOffice/clientVisit' import useUserStore from "@/store/modules/user" // æ¿æ¢ toast æ¹æ³ defineOptions({name: 'client-visit-index'}) @@ -157,19 +122,13 @@ uni.navigateBack() } // æ ¼å¼åæ¥ææ¶é´ const formatDateTime = (dateStr) => { if (!dateStr) return '' return dayjs(dateStr).format("YYYY-MM-DD HH:mm") } // æ¥è¯¢å表 const getList = () => { showLoadingToast('å è½½ä¸...') const params = { current: -1, size: -1, customerName: customerName.value || undefined, customerName: customerName.value, } getVisitRecords(params) .then((res) => { @@ -203,29 +162,11 @@ } // æ¥ç详æ const viewDetail = (id) => { if (!id) return const viewDetail = (item) => { uni.setStorageSync('clientVisit', item) // æ¥ç详æ 跳转å°åªè¯»å±ç¤ºé¡µé¢ uni.navigateTo({ url: `/pages/cooperativeOffice/clientVisit/detail?id=${id}` }) } // å é¤è®°å½ const deleteRecord = async (id) => { if (!id) return uni.showModal({ title: 'æç¤º', content: 'æ¤æä½å°æ°¸ä¹ å é¤è¯¥æè®¿è®°å½, æ¯å¦ç»§ç»?', success: async (res) => { if (!res.confirm) return try { await deleteVisitRecord(id) showToast('å 餿å') getList() } catch (e) { showToast('å é¤å¤±è´¥') } } url: '/pages/cooperativeOffice/clientVisit/view' }) } src/pages/cooperativeOffice/clientVisit/view.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,178 @@ <template> <view class="client-visit-detail"> <PageHeader title="å®¢æ·æè®¿è¯¦æ " @back="goBack" /> <!-- å å®¹å®¹å¨ --> <view class="content-container"> <!-- 客æ·ä¿¡æ¯ --> <view class="section"> <view class="section-title">客æ·ä¿¡æ¯</view> <view class="info-item"> <text class="info-label">客æ·åç§°</text> <text class="info-value">{{ form.customerName || '-' }}</text> </view> <view class="info-item"> <text class="info-label">è系人</text> <text class="info-value">{{ form.contact || '-' }}</text> </view> <view class="info-item"> <text class="info-label">èç³»çµè¯</text> <text class="info-value">{{ form.contactPhone || '-' }}</text> </view> </view> <!-- æè®¿ä¿¡æ¯ --> <view class="section"> <view class="section-title">æè®¿ä¿¡æ¯</view> <view class="info-item"> <text class="info-label">æè®¿ç®ç</text> <text class="info-value">{{ form.purposeVisit || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æè®¿æ¶é´</text> <text class="info-value">{{ form.purposeDate || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æè®¿å°ç¹</text> <text class="info-value multi-line">{{ form.visitAddress || '-' }}</text> </view> <view class="info-item"> <text class="info-label">æè®¿äºº</text> <text class="info-value">{{ form.visitingPeople || '-' }}</text> </view> <view class="info-item" v-if="form.latitude && form.longitude"> <text class="info-label">ç»çº¬åº¦</text> <text class="info-value">{{ form.latitude }}, {{ form.longitude }}</text> </view> </view> <!-- 夿³¨ä¿¡æ¯ --> <view class="section"> <view class="section-title">夿³¨ä¿¡æ¯</view> <view class="info-item remark-item"> <text class="info-label">夿³¨</text> <text class="info-value multi-line">{{ form.remark }}</text> </view> </view> </view> </view> </template> <script setup> // æ¿æ¢ toast æ¹æ³ const showToast = (message) => { uni.showToast({ title: message, icon: 'none' }) } import { ref, onMounted } from 'vue' import PageHeader from '@/components/PageHeader.vue' import useUserStore from "@/store/modules/user" const userStore = useUserStore() // è¡¨åæ°æ® const form = ref({ customerName: '', contact: '', contactPhone: '', visitingPeople: '', purposeVisit: '', purposeDate: '', visitAddress: '', latitude: '', longitude: '', locationAddress: '', remark: '' }) // è¿åä¸ä¸é¡µ const goBack = () => { // è¿åæ¶æ¸ 餿¬å°åå¨çID uni.removeStorageSync('clientVisit') uni.navigateBack() } // åå§å页颿°æ® const initPageData = () => { // 仿¬å°åå¨è·åæè®¿è®°å½è¯¦æ const row = uni.getStorageSync('clientVisit') if (row) { form.value = { ...row } } else { showToast('ææ æè®¿è®°å½æ°æ®') } } onMounted(() => { initPageData() }) </script> <style scoped lang="scss"> @import '@/static/scss/form-common.scss'; .client-visit-detail { min-height: 100vh; background-color: #f8f9fa; } .content-container { padding: 16px; } .section { background-color: #ffffff; border-radius: 12px; margin-bottom: 16px; overflow: hidden; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); } .section-title { font-size: 16px; font-weight: 600; color: #333333; padding: 16px 16px 12px; border-bottom: 1px solid #f0f0f0; } .info-item { display: flex; padding: 14px 16px; border-bottom: 1px solid #f8f8f8; align-items: flex-start; } .info-item:last-child { border-bottom: none; } .info-label { font-size: 14px; color: #666666; min-width: 80px; flex-shrink: 0; line-height: 22px; } .info-value { font-size: 14px; color: #333333; flex: 1; line-height: 22px; text-align: right; } .multi-line { text-align: left; word-break: break-all; line-height: 1.6; } .remark-item { padding-bottom: 16px; } </style>