import { defineStore } from 'pinia' import { ref } from 'vue' import type { PageResult } from '@/types/api' import type { Contract, ContractQuery } from '@/types/business/contract' import { getContractDetail, getContractList, getSignQr, refreshSignQr, } from '@/api/contract' function createDefaultQuery(): ContractQuery { return { keyword: '', page: 1, pageSize: 8, } } export const useContractStore = defineStore('contract', () => { const query = ref(createDefaultQuery()) const list = ref([]) const total = ref(0) const current = ref(null) const signExpires = ref(272) async function fetchList(): Promise { const result: PageResult = await getContractList(query.value) list.value = result.list total.value = result.total } async function fetchDetail(id: string): Promise { current.value = await getContractDetail(id) } function setQuery(next: ContractQuery): void { query.value = next } async function search(): Promise { query.value = { ...query.value, page: 1 } await fetchList() } async function resetQuery(): Promise { query.value = createDefaultQuery() await fetchList() } async function changePage(page: number): Promise { query.value = { ...query.value, page } await fetchList() } async function fetchSignQr(id: string, refresh = false): Promise { const result = refresh ? await refreshSignQr(id) : await getSignQr(id) signExpires.value = result.expiresInSeconds } return { query, list, total, current, signExpires, fetchList, fetchDetail, setQuery, search, resetQuery, changePage, fetchSignQr, } })