我们对接过了菜单列表,这次来对接用户,和之前一样
@RestController
@RequestMapping("/sys/user")
public class SysUserController {
@Autowired
SysUserService sysUserService;
@GetMapping("page")
public JSObject> page(@ApiIgnore @RequestParam Map params){
PageData page = sysUserService.page(params);
return new JSObject>().ok(page);
}
}
对应的前端代码
查询
正常
停用
我们发现这样写代码,有好多共同点,后端我们已经用了代码生成,可以一键生成,但是前端还要每次都写一次,有些不优雅,所以这边定义了一个hook
import { IObject, IViewHooks, IViewHooksOptions } from "@/../types/interface";
import { http } from "@/utils/http";
import { onMounted } from "vue";
const useView = (props: IViewHooksOptions | IObject): IViewHooks => {
const defaultOptions: IViewHooksOptions = {
createdIsNeed: true,
activatedIsNeed: false,
getDataListURL: "",
getDataListIsPage: false,
deleteURL: "",
deleteIsBatch: false,
deleteIsBatchKey: "id",
exportURL: "",
dataForm: {},
dataList: [],
order: "",
orderField: "",
page: 1,
limit: 10,
total: 0,
dataListLoading: false,
dataListSelections: [],
elTable: {}
};
const mergeDefaultStateToPageState = (
options: IObject,
props: IObject
): IViewHooksOptions => {
for (const key in options) {
if (!Object.getOwnPropertyDescriptor(props, key)) {
props[key] = options[key];
}
}
return props;
};
const state = mergeDefaultStateToPageState(defaultOptions, props);
onMounted(() => {
if (state.createdIsNeed && !state.activatedIsNeed) {
viewFns.query();
}
});
//
const viewFns = {
// 获取数据列表
query() {
if (!state.getDataListURL) {
return;
}
state.dataListLoading = true;
http
.get(state.getDataListURL, {
order: state.order,
orderField: state.orderField,
page: state.getDataListIsPage ? state.page : null,
limit: state.getDataListIsPage ? state.limit : null,
...state.dataForm
})
.then((res: any) => {
state.dataListLoading = false;
state.dataList = state.getDataListIsPage ? res.data.list : res.data;
state.total = state.getDataListIsPage ? res.data.total : 0;
})
.catch(() => {
state.dataListLoading = false;
});
},
// 多选
dataListSelectionChangeHandle(val: IObject[]) {
state.dataListSelections = val;
},
// 排序
dataListSortChangeHandle(data: IObject) {
if (!data.order || !data.prop) {
state.order = "";
state.orderField = "";
return false;
}
state.order = data.order.replace(/ending$/, "");
state.orderField = data.prop.replace(/([A-Z])/g, "_$1").toLowerCase();
viewFns.query();
},
// 分页, 每页条数
pageSizeChangeHandle(val: number) {
state.page = 1;
state.limit = val;
viewFns.query();
},
// 分页, 当前页
pageCurrentChangeHandle(val: number) {
state.page = val;
viewFns.query();
},
//搜索
getDataList() {
state.page = 1;
viewFns.query();
},
};
return {
...viewFns
};
};
export default useView;
在user上面代码中引入hook
import useView from "@/hooks/useView";
import { reactive, toRefs } from "vue";
defineOptions({
name: "User"
});
const view = reactive({
getDataListURL: "/sys/user/page",
getDataListIsPage: true,
deleteURL: "/sys/user",
deleteIsBatch: true,
exportURL: "/sys/user/export",
dataForm: {
username: "",
deptId: "",
postId: "",
gender: ""
}
});
const state = reactive({ ...useView(view), ...toRefs(view) });
页面更新:2024-03-30
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号