diff --git a/web/src/views/system/areas/api.ts b/web/src/views/system/areas/api.ts
new file mode 100644
index 0000000..dc94c6a
--- /dev/null
+++ b/web/src/views/system/areas/api.ts
@@ -0,0 +1,41 @@
+import { request } from '/@/utils/service';
+import { PageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
+
+export const apiPrefix = '/api/system/area/';
+export function GetList(query: PageQuery) {
+ return request({
+ url: apiPrefix,
+ method: 'get',
+ data: query,
+ });
+}
+export function GetObj(id: InfoReq) {
+ return request({
+ url: apiPrefix + id,
+ method: 'get',
+ });
+}
+
+export function AddObj(obj: AddReq) {
+ return request({
+ url: apiPrefix,
+ method: 'post',
+ data: obj,
+ });
+}
+
+export function UpdateObj(obj: EditReq) {
+ return request({
+ url: apiPrefix + obj.id + '/',
+ method: 'put',
+ data: obj,
+ });
+}
+
+export function DelObj(id: DelReq) {
+ return request({
+ url: apiPrefix + id + '/',
+ method: 'delete',
+ data: { id },
+ });
+}
diff --git a/web/src/views/system/areas/crud.tsx b/web/src/views/system/areas/crud.tsx
new file mode 100644
index 0000000..bdf9ec4
--- /dev/null
+++ b/web/src/views/system/areas/crud.tsx
@@ -0,0 +1,169 @@
+import * as api from './api';
+import { dict, PageQuery, AddReq, DelReq, EditReq, CrudExpose, CrudOptions } from '@fast-crud/fast-crud';
+import { request } from '/@/utils/service';
+import { dictionary } from '/@/utils/dictionary';
+interface CreateCrudOptionsTypes {
+ crudOptions: CrudOptions;
+}
+
+export const createCrudOptions = function ({ crudExpose }: { crudExpose: CrudExpose }): CreateCrudOptionsTypes {
+ const pageRequest = async (query: PageQuery) => {
+ return await api.GetList(query);
+ };
+ const editRequest = async ({ form, row }: EditReq) => {
+ 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: {
+ _index: {
+ title: '序号',
+ form: { show: false },
+ column: {
+ //type: 'index',
+ align: 'center',
+ width: '70px',
+ columnSetDisabled: true, //禁止在列设置中选择
+ formatter: (context) => {
+ //计算序号,你可以自定义计算规则,此处为翻页累加
+ let index = context.index ?? 1;
+ let pagination = crudExpose.crudBinding.value.pagination;
+ return ((pagination.currentPage ?? 1) - 1) * pagination.pageSize + index + 1;
+ },
+ },
+ },
+ pcode: {
+ title: '父级地区',
+ show: false,
+ search: {
+ show: true,
+ },
+ type: 'dict-tree',
+ form: {
+ component: {
+ showAllLevels: false, // 仅显示最后一级
+ props: {
+ elProps: {
+ clearable: true,
+ showAllLevels: false, // 仅显示最后一级
+ props: {
+ checkStrictly: true, // 可以不需要选到最后一级
+ emitPath: false,
+ clearable: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ name: {
+ title: '名称',
+ search: {
+ show: true,
+ },
+ treeNode: true,
+ width: 160,
+ type: 'input',
+ form: {
+ rules: [
+ // 表单校验规则
+ { required: true, message: '名称必填项' },
+ ],
+ component: {
+ placeholder: '请输入名称',
+ },
+ },
+ },
+ code: {
+ title: '地区编码',
+ search: {
+ show: true,
+ },
+ type: 'input',
+ form: {
+ rules: [
+ // 表单校验规则
+ { required: true, message: '地区编码必填项' },
+ ],
+ component: {
+ placeholder: '请输入地区编码',
+ },
+ },
+ },
+ pinyin: {
+ title: '拼音',
+ search: {
+ disabled: true,
+ },
+ type: 'input',
+ form: {
+ rules: [
+ // 表单校验规则
+ { required: true, message: '拼音必填项' },
+ ],
+ component: {
+ placeholder: '请输入拼音',
+ },
+ },
+ },
+ level: {
+ title: '地区层级',
+ search: {
+ disabled: true,
+ },
+ type: 'input',
+ form: {
+ disabled: false,
+ rules: [
+ // 表单校验规则
+ { required: true, message: '拼音必填项' },
+ ],
+ component: {
+ placeholder: '请输入拼音',
+ },
+ },
+ },
+ initials: {
+ title: '首字母',
+ form: {
+ rules: [
+ // 表单校验规则
+ { required: true, message: '首字母必填项' },
+ ],
+
+ component: {
+ placeholder: '请输入首字母',
+ },
+ },
+ },
+ enable: {
+ title: '是否启用',
+ search: {
+ show: true,
+ },
+ width: 90,
+ type: 'dict-radio',
+ dict: dict({
+ data: dictionary('button_status_bool'),
+ }),
+ form: {
+ value: true,
+ },
+ },
+ },
+ },
+ };
+};
diff --git a/web/src/views/system/areas/index.vue b/web/src/views/system/areas/index.vue
new file mode 100644
index 0000000..1fa8634
--- /dev/null
+++ b/web/src/views/system/areas/index.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+