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 @@ + + +