diff --git a/packages/ui/certd-client/src/router/source/modules/crud.ts b/packages/ui/certd-client/src/router/source/modules/crud.ts index cb050bb7..1719f9d0 100644 --- a/packages/ui/certd-client/src/router/source/modules/crud.ts +++ b/packages/ui/certd-client/src/router/source/modules/crud.ts @@ -765,6 +765,12 @@ export const crudResources = [ path: "/crud/advanced/in-dialog", component: "/crud/advanced/in-dialog/index.vue" }, + { + title: "抽屉中显示crud", + name: "AdvancedInDrawer", + path: "/crud/advanced/in-drawer", + component: "/crud/advanced/in-drawer/index.vue" + }, { title: "大量数据", name: "AdvancedBigData", diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/api.ts b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/api.ts new file mode 100644 index 00000000..c2e4088f --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/api.ts @@ -0,0 +1,43 @@ +//@ts-ignore +import { requestForMock } from "/src/api/service"; +const request = requestForMock; +const apiPrefix = "/mock/AdvancedInDrawer"; +export function GetList(query: any) { + return request({ + url: apiPrefix + "/page", + method: "get", + data: query + }); +} + +export function AddObj(obj: any) { + return request({ + url: apiPrefix + "/add", + method: "post", + data: obj + }); +} + +export function UpdateObj(obj: any) { + return request({ + url: apiPrefix + "/update", + method: "post", + data: obj + }); +} + +export function DelObj(id: any) { + return request({ + url: apiPrefix + "/delete", + method: "post", + params: { id } + }); +} + +export function GetObj(id: any) { + return request({ + url: apiPrefix + "/get", + method: "get", + params: { id } + }); +} diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/crud.tsx b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/crud.tsx new file mode 100644 index 00000000..c5fecb4f --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/crud.tsx @@ -0,0 +1,76 @@ +import * as api from "./api"; +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; + +export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { + //从context中获取子组件的ref + const drawerClassTimeRef = context.drawerClassTimeRef; + const pageRequest = async (query: UserPageQuery): Promise => { + return await api.GetList(query); + }; + const editRequest = async ({ form, row }: EditReq) => { + if (form.id == null) { + form.id = row.id; + } + return await api.UpdateObj(form); + }; + const delRequest = async ({ row }: DelReq) => { + return await api.DelObj(row.id); + }; + + const addRequest = async ({ form }: AddReq) => { + return await api.AddObj(form); + }; + + return { + crudOptions: { + request: { + pageRequest, + addRequest, + editRequest, + delRequest + }, + rowHandle: { + width: 300, + buttons: { + editClassTime: { + text: "录入课时", + click: ({ row }) => { + //调用子组件暴露的open方法,打开抽屉对话框 + drawerClassTimeRef.value.open({ + textbook: row + }); + } + } + } + }, + columns: { + textbookCategory: { + title: "教材分类", + type: "text", //虽然不写也能正确显示组件,但不建议省略它 + search: { show: true } + }, + textbookVersion: { + title: "教材版本", + type: "text" + }, + textbookName: { + title: "教材名称", + type: "text" + }, + totalWords: { + title: "总词汇数", + type: "number" + }, + classTimeNumber: { + title: "课时数量", + type: "number", + column: { + cellRender({ value }) { + return `${value}课时`; + } + } + } + } + } + }; +} diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/api.ts b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/api.ts new file mode 100644 index 00000000..132c2636 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/api.ts @@ -0,0 +1,43 @@ +//@ts-ignore +import { requestForMock } from "/src/api/service"; +const request = requestForMock; +const apiPrefix = "/mock/AdvancedInDrawerClassTime"; +export function GetList(query: any) { + return request({ + url: apiPrefix + "/page", + method: "get", + data: query + }); +} + +export function AddObj(obj: any) { + return request({ + url: apiPrefix + "/add", + method: "post", + data: obj + }); +} + +export function UpdateObj(obj: any) { + return request({ + url: apiPrefix + "/update", + method: "post", + data: obj + }); +} + +export function DelObj(id: any) { + return request({ + url: apiPrefix + "/delete", + method: "post", + params: { id } + }); +} + +export function GetObj(id: any) { + return request({ + url: apiPrefix + "/get", + method: "get", + params: { id } + }); +} diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/crud.tsx b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/crud.tsx new file mode 100644 index 00000000..96d8f56f --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/crud.tsx @@ -0,0 +1,89 @@ +import * as api from "./api"; +import { computed } from "vue"; +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; + +export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const textbookRef = context.textbookRef; + const pageRequest = async (query: UserPageQuery): Promise => { + return await api.GetList(query); + }; + const editRequest = async ({ form, row }: EditReq) => { + if (form.id == null) { + form.id = row.id; + } + return await api.UpdateObj(form); + }; + const delRequest = async ({ row }: DelReq) => { + return await api.DelObj(row.id); + }; + + const addRequest = async ({ form }: AddReq) => { + return await api.AddObj(form); + }; + + return { + crudOptions: { + request: { + pageRequest, + addRequest, + editRequest, + delRequest + }, + columns: { + textbookId: { + title: "教材ID", + type: "text", + search: { + show: true + }, + form: { + value: computed(() => { + //动态设置初始值 + return textbookRef.value.id; + }) + } + }, + textbookCategory: { + title: "教材分类", + type: "text", + form: { show: false }, + column: { + //本字段禁止条件render,因为此字段没有值,是从父组件传过来显示的 + conditionalRender: false, + cellRender() { + return textbookRef.value.textbookCategory; + } + } + }, + textbookVersion: { + title: "教材版本", + type: "text", + form: { show: false }, + column: { + //本字段禁止条件render,因为此字段没有值,是从父组件传过来显示的 + conditionalRender: false, + cellRender() { + return textbookRef.value.textbookVersion; + } + } + }, + textbookName: { + title: "教材名称", + type: "text", + form: { show: false }, + column: { + //本字段禁止条件render,因为此字段没有值,是从父组件传过来显示的 + conditionalRender: false, + cellRender() { + return textbookRef.value.textbookName; + } + } + }, + classTimeName: { + title: "课时名称", + type: "text" + } + } + } + }; +} diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/index.vue b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/index.vue new file mode 100644 index 00000000..90201d70 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/index.vue @@ -0,0 +1,35 @@ + + + diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/mock.ts b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/mock.ts new file mode 100644 index 00000000..26ff09d7 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/drawer-class-time/mock.ts @@ -0,0 +1,61 @@ +// @ts-ignore +import mockUtil from "/src/mock/base"; +const options: any = { + name: "AdvancedInDrawerClassTime", + idGenerator: 0 +}; +const list = [ + { + textbookId: 1, + classTimeName: "1", + order: 1 + }, + { + textbookId: 1, + classTimeName: "2", + order: 1 + }, + { + textbookId: 1, + classTimeName: "3", + order: 1 + }, + { + textbookId: 1, + classTimeName: "4", + order: 1 + }, + { + textbookId: 1, + classTimeName: "5", + order: 1 + }, + { + textbookId: 2, + classTimeName: "1", + order: 1 + }, + { + textbookId: 2, + classTimeName: "2", + order: 1 + }, + { + textbookId: 2, + classTimeName: "3", + order: 1 + }, + { + textbookId: 2, + classTimeName: "4", + order: 1 + }, + { + textbookId: 2, + classTimeName: "5", + order: 1 + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/index.vue b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/index.vue new file mode 100644 index 00000000..22ed6af0 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/index.vue @@ -0,0 +1,26 @@ + + + diff --git a/packages/ui/certd-client/src/views/crud/advanced/in-drawer/mock.ts b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/mock.ts new file mode 100644 index 00000000..0498c1c3 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/advanced/in-drawer/mock.ts @@ -0,0 +1,25 @@ +// @ts-ignore +import mockUtil from "/src/mock/base"; +const options: any = { + name: "AdvancedInDrawer", + idGenerator: 0 +}; +const list = [ + { + textbookCategory: "初中英语", + textbookVersion: "初中人教版", + textbookName: "初一上学期", + totalWords: 200, + classTimeNumber: 40 + }, + { + textbookCategory: "初中英语", + textbookVersion: "初中人教版", + textbookName: "初一上学期", + totalWords: 200, + classTimeNumber: 40 + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock;