diff --git a/src/api/content/layout.ts b/src/api/content/layout.ts
new file mode 100644
index 0000000..a5f3c54
--- /dev/null
+++ b/src/api/content/layout.ts
@@ -0,0 +1,67 @@
+import { http } from '@/utils/http/axios';
+
+/**
+ * @description: 列表
+ */
+export function getLayoutList(params?) {
+ return http.request({
+ url: '/layout/page',
+ method: 'GET',
+ params,
+ });
+}
+export function getLayoutAllList(params?) {
+ return http.request({
+ url: '/layout/list',
+ method: 'GET',
+ params,
+ });
+}
+/**
+ * @description: 根据ID获取详情
+ */
+export function getLayoutDetail(layoutId) {
+ return http.request({
+ url: '/layout/detail/'+layoutId,
+ method: 'get',
+ });
+}
+/**
+ * @description: 添加
+ */
+export function layoutAdd(data:any) {
+ return http.request({
+ url: '/layout/add',
+ method: 'POST',
+ data,
+ });
+}
+/**
+ * @description: 更新
+ */
+export function layoutUpdate(data:any) {
+ return http.request({
+ url: '/layout/update',
+ method: 'PUT',
+ data
+ });
+}
+/**
+ * @description: 删除
+ */
+export function layoutDelete(layoutId) {
+ return http.request({
+ url: '/layout/delete/'+layoutId,
+ method: 'DELETE',
+ });
+}
+/**
+ * @description: 批量删除
+ */
+export function layoutBatchDelete(data:any) {
+ return http.request({
+ url: '/layout/batchDelete',
+ method: 'DELETE',
+ data
+ });
+}
\ No newline at end of file
diff --git a/src/api/content/layoutItem.ts b/src/api/content/layoutItem.ts
new file mode 100644
index 0000000..a9edaa3
--- /dev/null
+++ b/src/api/content/layoutItem.ts
@@ -0,0 +1,60 @@
+import { http } from '@/utils/http/axios';
+
+/**
+ * @description: 列表
+ */
+export function getLayoutList(params?) {
+ return http.request({
+ url: '/layout/item/page',
+ method: 'GET',
+ params,
+ });
+}
+/**
+ * @description: 根据ID获取详情
+ */
+export function getLayoutDetail(layoutId) {
+ return http.request({
+ url: '/layout/item/detail/'+layoutId,
+ method: 'get',
+ });
+}
+/**
+ * @description: 添加
+ */
+export function layoutAdd(data:any) {
+ return http.request({
+ url: '/layout/item/add',
+ method: 'POST',
+ data,
+ });
+}
+/**
+ * @description: 更新
+ */
+export function layoutUpdate(data:any) {
+ return http.request({
+ url: '/layout/item/update',
+ method: 'PUT',
+ data
+ });
+}
+/**
+ * @description: 删除
+ */
+export function layoutDelete(layoutId) {
+ return http.request({
+ url: '/layout/item/delete/'+layoutId,
+ method: 'DELETE',
+ });
+}
+/**
+ * @description: 批量删除
+ */
+export function layoutBatchDelete(data:any) {
+ return http.request({
+ url: '/layout/item/batchDelete',
+ method: 'DELETE',
+ data
+ });
+}
\ No newline at end of file
diff --git a/src/views/content/layout/columns.ts b/src/views/content/layout/columns.ts
new file mode 100644
index 0000000..caf7018
--- /dev/null
+++ b/src/views/content/layout/columns.ts
@@ -0,0 +1,28 @@
+import { h } from 'vue';
+import { ElTag } from 'element-plus';
+
+export const columns = [
+ {
+ type: 'selection',
+ },
+ {
+ label: '位置编号',
+ prop: 'location',
+ },
+ {
+ label: '位置描述',
+ prop: 'description',
+ },
+ {
+ label: '排序',
+ prop: 'sort',
+ },
+ {
+ label: '创建人',
+ prop: 'createUser',
+ },
+ {
+ label: '创建时间',
+ prop: 'createTime',
+ },
+];
diff --git a/src/views/content/layout/edit.vue b/src/views/content/layout/edit.vue
new file mode 100644
index 0000000..381e868
--- /dev/null
+++ b/src/views/content/layout/edit.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/content/layout/index.vue b/src/views/content/layout/index.vue
new file mode 100644
index 0000000..138294d
--- /dev/null
+++ b/src/views/content/layout/index.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加页面布局
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/content/layout/querySchemas.ts b/src/views/content/layout/querySchemas.ts
new file mode 100644
index 0000000..c685264
--- /dev/null
+++ b/src/views/content/layout/querySchemas.ts
@@ -0,0 +1,11 @@
+import { FormSchema } from '@/components/Form/index';
+export const schemas: FormSchema[] = [
+ {
+ field: 'description',
+ component: 'Input',
+ label: '页面描述',
+ componentProps: {
+ placeholder: '请输入页面位置描述',
+ },
+ }
+];
diff --git a/src/views/content/layoutItem/columns.ts b/src/views/content/layoutItem/columns.ts
new file mode 100644
index 0000000..caf7018
--- /dev/null
+++ b/src/views/content/layoutItem/columns.ts
@@ -0,0 +1,28 @@
+import { h } from 'vue';
+import { ElTag } from 'element-plus';
+
+export const columns = [
+ {
+ type: 'selection',
+ },
+ {
+ label: '位置编号',
+ prop: 'location',
+ },
+ {
+ label: '位置描述',
+ prop: 'description',
+ },
+ {
+ label: '排序',
+ prop: 'sort',
+ },
+ {
+ label: '创建人',
+ prop: 'createUser',
+ },
+ {
+ label: '创建时间',
+ prop: 'createTime',
+ },
+];
diff --git a/src/views/content/layoutItem/edit.vue b/src/views/content/layoutItem/edit.vue
new file mode 100644
index 0000000..4b3ad64
--- /dev/null
+++ b/src/views/content/layoutItem/edit.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ formData.imgName=name"
+ :fileType=" ['image/jpeg', 'image/png', 'image/jpg', 'image/gif']"
+ name="article"
+ :fileSize="200"
+ v-model:image-url="formData.image">
+ 支持扩展名: jpg png jpeg;文件大小不超过200M
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/content/layoutItem/index.vue b/src/views/content/layoutItem/index.vue
new file mode 100644
index 0000000..799ec32
--- /dev/null
+++ b/src/views/content/layoutItem/index.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加页面推荐
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/content/layoutItem/querySchemas.ts b/src/views/content/layoutItem/querySchemas.ts
new file mode 100644
index 0000000..112b4b6
--- /dev/null
+++ b/src/views/content/layoutItem/querySchemas.ts
@@ -0,0 +1,46 @@
+import { FormSchema } from '@/components/Form/index';
+import { getLayoutAllList } from '@/api/content/layout';
+export const loadSelectData = async(res)=> {
+ //这里可以进行数据转换处理
+ return (await getLayoutAllList({ ...res })).map((item, index) => {
+ return {
+ ...item,
+ label:item.name,
+ value:item.id,
+ index,
+ };
+ });
+}
+export const schemas: FormSchema[] = [
+ {
+ field: 'layoutId',
+ component: 'BasicSelect',
+ label: '页面布局',
+ componentProps: {
+ placeholder: '请选择页面布局',
+ block:true,
+ request: loadSelectData,
+ onChange: (e: any) => {
+ console.log(e);
+ },
+ },
+ },
+ {
+ field: 'type',
+ component: 'Select',
+ label: '页面类型',
+ componentProps: {
+ placeholder: '请选择页面类型',
+ options: [
+ {
+ label: 'CMS文章',
+ value: '1',
+ },
+ {
+ label: '通知公告',
+ value: '2',
+ },
+ ],
+ },
+ },
+];