From e3273e2218ff978345fb03c1cffc78aaf0114efd Mon Sep 17 00:00:00 2001 From: xingyu <xingyu4j@vip.qq.com> Date: Tue, 22 Aug 2023 18:02:39 +0800 Subject: [PATCH] feat: add MemberTag --- .../member/signin/config/ConfigModal.vue | 8 +- src/views/member/tag/TagModal.vue | 58 ++++++++++++++ src/views/member/tag/index.vue | 77 ++++++++++++++++++- src/views/member/tag/tag.data.ts | 52 +++++++++++++ 4 files changed, 190 insertions(+), 5 deletions(-) create mode 100644 src/views/member/tag/TagModal.vue create mode 100644 src/views/member/tag/tag.data.ts diff --git a/src/views/member/signin/config/ConfigModal.vue b/src/views/member/signin/config/ConfigModal.vue index 2409c26..3eb7520 100644 --- a/src/views/member/signin/config/ConfigModal.vue +++ b/src/views/member/signin/config/ConfigModal.vue @@ -5,7 +5,7 @@ import { useI18n } from '@/hooks/web/useI18n' import { useMessage } from '@/hooks/web/useMessage' import { BasicForm, useForm } from '@/components/Form' import { BasicModal, useModalInner } from '@/components/Modal' -import { createNotice, getNotice, updateNotice } from '@/api/system/notice' +import { createSignInConfig, getSignInConfig, updateSignInConfig } from '@/api/member/signin/config' defineOptions({ name: 'SignInConfigModal' }) @@ -27,7 +27,7 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data setModalProps({ confirmLoading: false }) isUpdate.value = !!data?.isUpdate if (unref(isUpdate)) { - const res = await getNotice(data.record.id) + const res = await getSignInConfig(data.record.id) setFieldsValue({ ...res }) } }) @@ -37,9 +37,9 @@ async function handleSubmit() { const values = await validate() setModalProps({ confirmLoading: true }) if (unref(isUpdate)) - await updateNotice(values) + await updateSignInConfig(values) else - await createNotice(values) + await createSignInConfig(values) closeModal() emit('success') diff --git a/src/views/member/tag/TagModal.vue b/src/views/member/tag/TagModal.vue new file mode 100644 index 0000000..5f9871a --- /dev/null +++ b/src/views/member/tag/TagModal.vue @@ -0,0 +1,58 @@ +<script lang="ts" setup> +import { ref, unref } from 'vue' +import { formSchema } from './tag.data' +import { useI18n } from '@/hooks/web/useI18n' +import { useMessage } from '@/hooks/web/useMessage' +import { BasicForm, useForm } from '@/components/Form' +import { BasicModal, useModalInner } from '@/components/Modal' +import { createMemberTag, getMemberTag, updateMemberTag } from '@/api/member/tag' + +defineOptions({ name: 'MemberTagModal' }) + +const emit = defineEmits(['success', 'register']) +const { t } = useI18n() +const { createMessage } = useMessage() +const isUpdate = ref(true) + +const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({ + labelWidth: 120, + baseColProps: { span: 24 }, + schemas: formSchema, + showActionButtonGroup: false, + actionColOptions: { span: 23 }, +}) + +const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { + resetFields() + setModalProps({ confirmLoading: false }) + isUpdate.value = !!data?.isUpdate + if (unref(isUpdate)) { + const res = await getMemberTag(data.record.id) + setFieldsValue({ ...res }) + } +}) + +async function handleSubmit() { + try { + const values = await validate() + setModalProps({ confirmLoading: true }) + if (unref(isUpdate)) + await updateMemberTag(values) + else + await createMemberTag(values) + + closeModal() + emit('success') + createMessage.success(t('common.saveSuccessText')) + } + finally { + setModalProps({ confirmLoading: false }) + } +} +</script> + +<template> + <BasicModal v-bind="$attrs" :title="isUpdate ? t('action.edit') : t('action.create')" @register="registerModal" @ok="handleSubmit"> + <BasicForm @register="registerForm" /> + </BasicModal> +</template> diff --git a/src/views/member/tag/index.vue b/src/views/member/tag/index.vue index ef9fd59..3d979d1 100644 --- a/src/views/member/tag/index.vue +++ b/src/views/member/tag/index.vue @@ -1,3 +1,78 @@ <script lang="ts" setup> -defineOptions({ name: 'MemberPointConfig' }) +import TagModal from './TagModal.vue' +import { columns, searchFormSchema } from './tag.data' +import { useI18n } from '@/hooks/web/useI18n' +import { useMessage } from '@/hooks/web/useMessage' +import { useModal } from '@/components/Modal' +import { IconEnum } from '@/enums/appEnum' +import { BasicTable, TableAction, useTable } from '@/components/Table' +import { deleteMemberTag, getMemberTagPage } from '@/api/member/tag' + +defineOptions({ name: 'MemberTag' }) + +const { t } = useI18n() +const { createMessage } = useMessage() +const [registerModal, { openModal }] = useModal() +const [registerTable, { reload }] = useTable({ + title: '标签列表', + api: getMemberTagPage, + columns, + formConfig: { labelWidth: 120, schemas: searchFormSchema }, + useSearchForm: true, + showTableSetting: true, + showIndexColumn: false, + actionColumn: { + width: 140, + title: t('common.action'), + dataIndex: 'action', + fixed: 'right', + }, +}) + +function handleCreate() { + openModal(true, { isUpdate: false }) +} + +function handleEdit(record: Recordable) { + openModal(true, { record, isUpdate: true }) +} + +async function handleDelete(record: Recordable) { + await deleteMemberTag(record.id) + createMessage.success(t('common.delSuccessText')) + reload() +} </script> + +<template> + <div> + <BasicTable @register="registerTable"> + <template #toolbar> + <a-button v-auth="['system:notice:create']" type="primary" :pre-icon="IconEnum.ADD" @click="handleCreate"> + {{ t('action.create') }} + </a-button> + </template> + <template #bodyCell="{ column, record }"> + <template v-if="column.key === 'action'"> + <TableAction + :actions="[ + { icon: IconEnum.EDIT, label: t('action.edit'), auth: 'system:notice:update', onClick: handleEdit.bind(null, record) }, + { + icon: IconEnum.DELETE, + color: 'error', + label: t('action.delete'), + auth: 'system:notice:delete', + popConfirm: { + title: t('common.delMessage'), + placement: 'left', + confirm: handleDelete.bind(null, record), + }, + }, + ]" + /> + </template> + </template> + </BasicTable> + <TagModal @register="registerModal" @success="reload()" /> + </div> +</template> diff --git a/src/views/member/tag/tag.data.ts b/src/views/member/tag/tag.data.ts new file mode 100644 index 0000000..9652b41 --- /dev/null +++ b/src/views/member/tag/tag.data.ts @@ -0,0 +1,52 @@ +import type { BasicColumn, FormSchema } from '@/components/Table' +import { useRender } from '@/components/Table' + +export const columns: BasicColumn[] = [ + { + title: '编号', + dataIndex: 'id', + width: 100, + }, + { + title: '标签名称', + dataIndex: 'name', + width: 180, + }, + { + title: '创建时间', + dataIndex: 'createTime', + customRender: ({ text }) => { + return useRender.renderDate(text) + }, + }, +] + +export const searchFormSchema: FormSchema[] = [ + { + label: '标签名称', + field: 'name', + component: 'Input', + colProps: { span: 8 }, + }, + { + label: '创建时间', + field: 'createTime', + component: 'RangePicker', + colProps: { span: 8 }, + }, +] + +export const formSchema: FormSchema[] = [ + { + label: '编号', + field: 'id', + show: false, + component: 'Input', + }, + { + label: '标签名称', + field: 'name', + required: true, + component: 'Input', + }, +]