From dbbac057a844f8354566b9fa0b3e973ed8be5a1c Mon Sep 17 00:00:00 2001 From: yuan Date: Wed, 10 Jan 2024 11:27:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=94=E7=B3=BB=E4=BA=BA=E6=9D=A5=E8=AE=BF?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.config.ts | 3 +- src/pages/contact-edit/index.vue | 14 +- src/pages/contact-new/index.vue | 2 +- .../contact-pass-records/index.config.ts | 6 + src/pages/contact-pass-records/index.scss | 20 ++ src/pages/contact-pass-records/index.vue | 180 ++++++++++++++++++ src/stores/contact-pass-records.ts | 86 +++++++++ 7 files changed, 306 insertions(+), 5 deletions(-) create mode 100644 src/pages/contact-pass-records/index.config.ts create mode 100644 src/pages/contact-pass-records/index.scss create mode 100644 src/pages/contact-pass-records/index.vue create mode 100644 src/stores/contact-pass-records.ts diff --git a/src/app.config.ts b/src/app.config.ts index b3991a4..973695e 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -7,7 +7,8 @@ export default defineAppConfig({ 'pages/invite/index', 'pages/settings/index', 'pages/login/index', - 'pages/web-view/index' + 'pages/web-view/index', + 'pages/contact-pass-records/index' ], window: { backgroundTextStyle: 'light', diff --git a/src/pages/contact-edit/index.vue b/src/pages/contact-edit/index.vue index d21b904..04d6c09 100644 --- a/src/pages/contact-edit/index.vue +++ b/src/pages/contact-edit/index.vue @@ -77,6 +77,14 @@ const onBlockConfirm = (item) => { console.log("error", error) }) } +const onClickPassRecords = () => { + Router.toContactPassRecords({ data: contactData }) +} + +const onClickEditRecords = () => { + Router.toContactEdit({ data: contactData }) +} + const onDeleteConfirm = (item) => { console.log(item) Taro.showLoading({ @@ -110,7 +118,7 @@ const onDeleteConfirm = (item) => { - + 更新联系人 更新来访联系人信息,并设置下次到访时间 @@ -124,13 +132,13 @@ const onDeleteConfirm = (item) => { - + - + diff --git a/src/pages/contact-new/index.vue b/src/pages/contact-new/index.vue index 81f2f17..3b875bf 100644 --- a/src/pages/contact-new/index.vue +++ b/src/pages/contact-new/index.vue @@ -47,7 +47,7 @@ const onSaveClicked = () => { - + 新来访人 新建来访联系人,并设置到访时间 diff --git a/src/pages/contact-pass-records/index.config.ts b/src/pages/contact-pass-records/index.config.ts new file mode 100644 index 0000000..5662c12 --- /dev/null +++ b/src/pages/contact-pass-records/index.config.ts @@ -0,0 +1,6 @@ +export default definePageConfig({ + navigationBarTitleText: '', + usingComponents: {}, + navigationStyle: 'custom', + disableScroll: true +}) diff --git a/src/pages/contact-pass-records/index.scss b/src/pages/contact-pass-records/index.scss new file mode 100644 index 0000000..b41e6ef --- /dev/null +++ b/src/pages/contact-pass-records/index.scss @@ -0,0 +1,20 @@ +page { + height: 100%; +} + +.nut-navbar { + background: transparent; +} + +.scroll { + flex: 1; + overflow: scroll; +} + +.save-button { + font-size: 36px +} + +.nut-action-sheet__item { + color: red !important; +} diff --git a/src/pages/contact-pass-records/index.vue b/src/pages/contact-pass-records/index.vue new file mode 100644 index 0000000..077398e --- /dev/null +++ b/src/pages/contact-pass-records/index.vue @@ -0,0 +1,180 @@ + + + + + + + + + diff --git a/src/stores/contact-pass-records.ts b/src/stores/contact-pass-records.ts new file mode 100644 index 0000000..41406a0 --- /dev/null +++ b/src/stores/contact-pass-records.ts @@ -0,0 +1,86 @@ +// https://pinia.esm.dev/introduction.html +import { defineStore } from 'pinia' +import {GQLRequest, PinyinHelper, Session} from "../utils"; +import {gql} from "graphql-tag"; +import {ref, Ref, UnwrapRef} from "vue"; +import dayjs from "dayjs"; +import {PassRecords} from "./pass-records"; + +export interface ContactPassRecords { + id: number + faceUrl: string + recognizedTime: string + date: string + time: string +} + +export interface GroupedContactPassRecords { + date: string + passRecords: ContactPassRecords[] +} + +export const useContactPassRecordsStore = defineStore('contact-pass-records', () => { + + const passRecords: Ref> = ref([]) + const groupedPassRecords: Ref> = ref([]) + + const GQL_QUERY_CONTACT_PASS_RECORDS = gql` + query ($userId: ID, $limit: Int ) { + visitorPassRecords(userId: $userId, limit: $limit) { + id + faceUrl + recognizedTime + } + } + ` + + function loadContactPassRecordsFromServer (userId: number) { + return new Promise((resolve, reject) => { + const items: ContactPassRecords[] = [] + const limit = 100 + console.log("userId", userId) + return GQLRequest.query(GQL_QUERY_CONTACT_PASS_RECORDS, {userId, limit}) + .then(result => { + if (result.code == 500) { + reject("Network Error") + } else { + console.log(result) + for (let item of result.data.visitorPassRecords) { + // console.log(item) + items.push({ + id: item.id, + userId: item.userId, + faceUrl: item.faceUrl, + recognizedTime: item.recognizedTime, + date: dayjs(item.recognizedTime, "YYYY-MM-DDTHH:mm:ss").format("YYYY年MM月DD日"), + time: dayjs(item.recognizedTime, "YYYY-MM-DDTHH:mm:ss").format("HH:mm:ss"), + } as ContactPassRecords) + } + + passRecords.value = items.sort((a, b) => a.recognizedTime.localeCompare(b.recognizedTime)).reverse(); + groupedPassRecords.value = generatePassRecordsGroupList(passRecords.value) + console.log("groupedPassRecords", groupedPassRecords.value) + resolve(groupedPassRecords.value) + } + }).catch(e => { + reject(e) + }) + }) + } + + const generatePassRecordsGroupList = (passRecords: ContactPassRecords[]) => { + let groupedPassRecords = [] + for (const item of passRecords) { + const date = item.date; + if (!groupedPassRecords[date]) { + groupedPassRecords[date] = { date: date, passRecords: [] }; + } + groupedPassRecords[date].passRecords.push(item); + } + + return Object.values(groupedPassRecords) + } + + + return { loadContactPassRecordsFromServer, passRecords } +})