├── .editorconfig ├── .env ├── .env.debug ├── .env.debugpm ├── .env.development ├── .env.pm ├── .env.production ├── .eslintignore ├── .eslintrc.js ├── .github ├── ISSUE_TEMPLATE.md └── workflows │ └── sync-to-gitee.yml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .stylelintignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── build ├── constant.ts ├── getConfigFileName.ts ├── script │ ├── buildConf.ts │ └── postBuild.ts ├── utils.ts └── vite │ ├── plugin │ ├── compress.ts │ ├── html.ts │ └── index.ts │ └── proxy.ts ├── index.html ├── mock ├── _createProductionServer.ts ├── _util.ts ├── crud │ └── index.ts ├── dashboard │ └── console.ts ├── system │ ├── menu.ts │ └── role.ts ├── table │ └── list.ts └── user │ ├── index.ts │ └── menus.ts ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── prettier.config.js ├── public ├── favicon.ico └── template-import.csv ├── src ├── App.vue ├── api │ ├── dashboard │ │ └── console.ts │ ├── system │ │ ├── menu.ts │ │ ├── role.ts │ │ └── user.ts │ └── table │ │ └── list.ts ├── assets │ ├── icons │ │ ├── login.svg │ │ └── logo.svg │ └── images │ │ ├── Business.svg │ │ ├── Error.svg │ │ ├── account-logo.png │ │ ├── analysis.svg │ │ ├── exception │ │ ├── 403.svg │ │ ├── 404.svg │ │ ├── 500.svg │ │ ├── developing.svg │ │ ├── load-error.svg │ │ └── nodata.svg │ │ ├── header-theme-dark.svg │ │ ├── login.svg │ │ ├── logo.png │ │ ├── nav-horizontal-mix.svg │ │ ├── nav-horizontal.svg │ │ ├── nav-theme-dark.svg │ │ ├── nav-theme-light.svg │ │ ├── schoolboy.png │ │ └── tool.png ├── components │ ├── Application │ │ ├── Application.vue │ │ └── index.ts │ ├── CountTo │ │ ├── CountTo.vue │ │ └── index.ts │ ├── Form │ │ ├── index.ts │ │ └── src │ │ │ ├── BasicForm.vue │ │ │ ├── helper.ts │ │ │ ├── hooks │ │ │ ├── useForm.ts │ │ │ ├── useFormContext.ts │ │ │ ├── useFormEvents.ts │ │ │ └── useFormValues.ts │ │ │ ├── props.ts │ │ │ └── types │ │ │ ├── form.ts │ │ │ └── index.ts │ ├── Lockscreen │ │ ├── Lockscreen.vue │ │ ├── Recharge.vue │ │ └── index.ts │ ├── Modal │ │ ├── index.ts │ │ └── src │ │ │ ├── basicModal.vue │ │ │ ├── hooks │ │ │ └── useModal.ts │ │ │ ├── props.ts │ │ │ └── type │ │ │ └── index.ts │ ├── Table │ │ ├── index.ts │ │ └── src │ │ │ ├── Table.vue │ │ │ ├── componentMap.ts │ │ │ ├── components │ │ │ ├── TableAction.vue │ │ │ ├── editable │ │ │ │ ├── CellComponent.ts │ │ │ │ ├── EditableCell.vue │ │ │ │ ├── helper.ts │ │ │ │ └── index.ts │ │ │ └── settings │ │ │ │ └── ColumnSetting.vue │ │ │ ├── const.ts │ │ │ ├── hooks │ │ │ ├── useColumns.ts │ │ │ ├── useDataSource.ts │ │ │ ├── useLoading.ts │ │ │ ├── usePagination.ts │ │ │ └── useTableContext.ts │ │ │ ├── props.ts │ │ │ └── types │ │ │ ├── componentType.ts │ │ │ ├── pagination.ts │ │ │ ├── table.ts │ │ │ └── tableAction.ts │ └── Upload │ │ ├── index.ts │ │ └── src │ │ ├── BasicUpload.vue │ │ ├── props.ts │ │ └── type │ │ └── index.ts ├── config │ └── website.config.ts ├── directives │ ├── clickOutside.ts │ ├── copy.ts │ ├── debounce.ts │ ├── draggable.ts │ ├── longpress.ts │ ├── permission.ts │ └── throttle.ts ├── enums │ ├── breakpointEnum.ts │ ├── cacheEnum.ts │ ├── httpEnum.ts │ ├── pageEnum.ts │ ├── permissionsEnum.ts │ └── roleEnum.ts ├── hooks │ ├── core │ │ └── useTimeout.ts │ ├── event │ │ ├── useBreakpoint.ts │ │ ├── useEventListener.ts │ │ └── useWindowSizeFn.ts │ ├── index.ts │ ├── setting │ │ ├── index.ts │ │ ├── useDesignSetting.ts │ │ └── useProjectSetting.ts │ ├── useAsync.ts │ ├── useBattery.ts │ ├── useDomWidth.ts │ ├── useOnline.ts │ ├── useTime.ts │ └── web │ │ ├── useECharts.ts │ │ ├── usePage.ts │ │ └── usePermission.ts ├── i18n │ ├── index.ts │ └── locale │ │ ├── en.ts │ │ └── zh_CN.ts ├── layout │ ├── components │ │ ├── Footer │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Header │ │ │ ├── ProjectSetting.vue │ │ │ ├── components.ts │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Logo │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Main │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Menu │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── TagsView │ │ │ ├── index.ts │ │ │ └── index.vue │ │ └── source-link │ │ │ └── index.vue │ ├── index.vue │ └── parentLayout.vue ├── main.ts ├── mock │ ├── README.md │ ├── base.ts │ ├── common │ │ ├── cascader-data.js │ │ ├── mock.dict.js │ │ ├── pca-data-little.js │ │ └── pcas-data.js │ └── index.js ├── plugins │ ├── customComponents.ts │ ├── directives.ts │ ├── fast_crud │ │ └── index.tsx │ ├── globalMethods.ts │ ├── iconfont │ │ ├── iconfont.js │ │ └── index.ts │ ├── iconify │ │ └── index.ts │ ├── index.ts │ ├── monaco │ │ ├── index.ts │ │ └── yaml.worker.ts │ ├── naive.ts │ └── naiveDiscreteApi.ts ├── router │ ├── base.ts │ ├── constant.ts │ ├── generator.ts │ ├── guards.ts │ ├── icons.ts │ ├── index.ts │ ├── modules │ │ ├── about.ts │ │ ├── comp.ts │ │ ├── crud.ts │ │ ├── dashboard.ts │ │ ├── directive.ts │ │ ├── docs.ts │ │ ├── exception.ts │ │ ├── form.ts │ │ ├── frame.ts │ │ ├── list.ts │ │ ├── newVersion.ts │ │ ├── result.ts │ │ ├── setting.ts │ │ └── system.ts │ └── types.ts ├── settings │ ├── animateSetting.ts │ ├── componentSetting.ts │ ├── designSetting.ts │ └── projectSetting.ts ├── store │ ├── index.ts │ ├── modules │ │ ├── asyncRoute.ts │ │ ├── designSetting.ts │ │ ├── index.ts │ │ ├── projectSetting.ts │ │ ├── screenLock.ts │ │ ├── tabsView.ts │ │ └── user.ts │ ├── mutation-types.ts │ └── types.ts ├── styles │ ├── common.less │ ├── index.less │ ├── tailwind.css │ └── transition │ │ ├── base.less │ │ ├── fade.less │ │ ├── index.less │ │ ├── scale.less │ │ ├── scroll.less │ │ ├── slide.less │ │ └── zoom.less ├── utils │ ├── Drag.ts │ ├── Storage.ts │ ├── browser-type.ts │ ├── dateUtil.ts │ ├── domUtils.ts │ ├── downloadFile.ts │ ├── env.ts │ ├── http │ │ ├── README.md │ │ ├── alova │ │ │ ├── index.ts │ │ │ └── mocks.ts │ │ ├── service.ts │ │ └── tools.ts │ ├── index.ts │ ├── is │ │ └── index.ts │ ├── lib │ │ └── echarts.ts │ ├── lodashChunk.ts │ ├── log.ts │ ├── propTypes.ts │ └── urlUtils.ts └── views │ ├── about │ └── index.vue │ ├── comp │ ├── drag │ │ └── index.vue │ ├── form │ │ ├── basic.vue │ │ └── useForm.vue │ ├── modal │ │ └── index.vue │ ├── richtext │ │ └── vue-quill.vue │ ├── table │ │ ├── CellColumns.ts │ │ ├── basic.vue │ │ ├── basicColumns.ts │ │ ├── editCell.vue │ │ ├── editRow.vue │ │ └── rowColumns.ts │ └── upload │ │ └── index.vue │ ├── crud │ ├── advanced │ │ ├── card │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── custom-layout │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── fs-crud.vue │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── from-backend │ │ │ ├── api.js │ │ │ ├── crud-backend.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── in-dialog │ │ │ ├── crud │ │ │ │ ├── api.js │ │ │ │ ├── crud.jsx │ │ │ │ ├── index.vue │ │ │ │ └── mock.js │ │ │ └── index.vue │ │ ├── layout │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── linkage │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── local-pagination │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ └── nest │ │ │ ├── api.js │ │ │ ├── aside-table │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ ├── mock.js │ │ │ └── sub-table │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ ├── basis │ │ ├── column-merge-plugin │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── columns-set │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── compute-more │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── compute │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── custom │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ ├── mock.ts │ │ │ └── vmodel-counter.vue │ │ ├── first │ │ │ └── index.vue │ │ ├── i18n │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── layout-card │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── layout-custom │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── custom-layout.vue │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── reset │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ └── value-change │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ ├── component │ │ ├── button │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── cascader │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── checkbox │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── code │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── date │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── editor │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── icon │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── independent │ │ │ └── index.vue │ │ ├── json │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── number │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── phone │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── radio │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── select │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── switch │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── table-select │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── text │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── tree │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ └── uploader │ │ │ ├── alioss │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ │ ├── cos │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ │ ├── cropper │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ │ ├── form │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ │ ├── qiniu │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ │ └── s3 │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ ├── mock.ts │ │ │ └── s3-server.ts │ ├── dict │ │ ├── cloneable │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── prototype │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── shared │ │ │ ├── manager │ │ │ │ ├── api.js │ │ │ │ ├── crud.tsx │ │ │ │ ├── index.vue │ │ │ │ └── mock.js │ │ │ ├── shared-dict.ts │ │ │ └── use │ │ │ │ ├── api.js │ │ │ │ ├── crud.jsx │ │ │ │ ├── index.vue │ │ │ │ └── mock.js │ │ └── single │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ ├── editable │ │ ├── cell │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── free │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── row │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── sub-crud │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ ├── mock.ts │ │ │ └── row │ │ │ │ ├── api.ts │ │ │ │ ├── crud.tsx │ │ │ │ ├── index.vue │ │ │ │ └── mock.ts │ │ └── vmodel │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── free │ │ │ ├── crud.tsx │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ └── mock.ts │ ├── feature │ │ ├── column-sort │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── columns-set │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── editable-row │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── editable │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── expand │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── export │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── filter │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── fixed │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── header-group │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── height │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── hide │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── index │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── local-import │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── local.vue │ │ ├── local-v-model │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── local.vue │ │ ├── local │ │ │ ├── crud.jsx │ │ │ └── index.vue │ │ ├── merge │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── remove │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── search-multi │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── search │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── selection │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── sortable │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── tabs │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── tree │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ └── value-builder │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ ├── form │ │ ├── base │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── custom-form │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── drawer │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── group-tabs │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── group │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── helper │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── independent │ │ │ ├── crud.tsx │ │ │ └── index.vue │ │ ├── inner │ │ │ ├── api.js │ │ │ ├── area │ │ │ │ ├── api.js │ │ │ │ ├── crud.jsx │ │ │ │ ├── index.vue │ │ │ │ └── mock.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── layout-flex │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── layout-grid │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── layout │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── nest │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── new-page │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── edit.vue │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── render │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ ├── single-column │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── validation │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ ├── view │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ │ └── watch │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ ├── index.vue │ │ │ └── mock.ts │ ├── home │ │ ├── index.vue │ │ └── page-cover │ │ │ ├── helper.js │ │ │ ├── image │ │ │ ├── crud.png │ │ │ ├── darkblue@2x.png │ │ │ └── logo.svg │ │ │ └── index.vue │ ├── row-handle │ │ ├── dropdown │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ │ └── tooltip │ │ │ ├── api.js │ │ │ ├── crud.jsx │ │ │ ├── index.vue │ │ │ └── mock.js │ └── slots │ │ ├── cell │ │ ├── api.js │ │ ├── crud.jsx │ │ ├── index.vue │ │ └── mock.js │ │ ├── form-item │ │ ├── api.js │ │ ├── crud.jsx │ │ ├── index.vue │ │ └── mock.js │ │ ├── form │ │ ├── api.js │ │ ├── crud.jsx │ │ ├── index.vue │ │ └── mock.js │ │ ├── layout │ │ ├── api.js │ │ ├── crud.jsx │ │ ├── index.vue │ │ └── mock.js │ │ └── search │ │ ├── api.js │ │ ├── crud.jsx │ │ ├── index.vue │ │ └── mock.js │ ├── dashboard │ ├── console │ │ ├── components │ │ │ ├── FluxTrend.vue │ │ │ ├── Icons.ts │ │ │ ├── VisiTab.vue │ │ │ ├── VisitAmount.vue │ │ │ └── props.ts │ │ └── console.vue │ ├── monitor │ │ └── monitor.vue │ └── workplace │ │ └── workplace.vue │ ├── directive │ └── index.vue │ ├── exception │ ├── 403.vue │ ├── 404.vue │ └── 500.vue │ ├── form │ ├── basicForm │ │ └── index.vue │ ├── detail │ │ └── index.vue │ └── stepForm │ │ ├── Step1.vue │ │ ├── Step2.vue │ │ ├── Step3.vue │ │ └── stepForm.vue │ ├── frame │ └── docs.vue │ ├── iframe │ └── index.vue │ ├── list │ └── basicList │ │ ├── columns.ts │ │ ├── index.vue │ │ └── info.vue │ ├── login │ └── index.vue │ ├── redirect │ └── index.vue │ ├── result │ ├── fail.vue │ ├── info.vue │ └── success.vue │ ├── setting │ ├── account │ │ ├── BasicSetting.vue │ │ ├── SafetySetting.vue │ │ └── account.vue │ └── system │ │ ├── BasicSetting.vue │ │ ├── EmailSetting.vue │ │ ├── RevealSetting.vue │ │ └── system.vue │ └── system │ ├── menu │ ├── CreateDrawer.vue │ └── menu.vue │ └── role │ ├── CreateModal.vue │ ├── EditModal.vue │ ├── columns.ts │ └── role.vue ├── stylelint.config.js ├── tailwind.config.js ├── tsconfig.json ├── types ├── config.d.ts ├── global.d.ts ├── images.d.ts ├── index.d.ts ├── modules.d.ts └── utils.d.ts └── vite.config.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset=utf-8 5 | end_of_line=LF 6 | insert_final_newline=true 7 | indent_style=space 8 | indent_size=2 9 | max_line_length = 100 10 | 11 | [*.{yml,yaml,json}] 12 | indent_style = space 13 | indent_size = 2 14 | 15 | [*.md] 16 | trim_trailing_whitespace = false 17 | 18 | [Makefile] 19 | indent_style = tab -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # port 2 | VITE_PORT = 8001 3 | 4 | # spa-title 5 | VITE_GLOB_APP_TITLE = AdminPro 6 | 7 | # spa shortname 8 | VITE_GLOB_APP_SHORT_NAME = AdminPro 9 | 10 | #登录与权限开启 11 | VITE_APP_PM_ENABLED=false 12 | -------------------------------------------------------------------------------- /.env.debug: -------------------------------------------------------------------------------- 1 | # 只在开发模式中被载入 2 | VITE_PORT = 8001 3 | 4 | # 网站根目录 5 | VITE_PUBLIC_PATH = /naive/ 6 | 7 | # 是否开启mock 8 | VITE_USE_MOCK = true 9 | 10 | # 网站前缀 11 | VITE_BASE_URL = / 12 | 13 | # 是否删除console 14 | VITE_DROP_CONSOLE = true 15 | 16 | # 跨域代理,可以配置多个,请注意不要换行 17 | #VITE_PROXY = [["/appApi","http://localhost:8001"],["/upload","http://localhost:8001/upload"]] 18 | # VITE_PROXY=[["/api","https://naive-ui-admin"]] 19 | VITE_PROXY=[["/api","http://localhost:8199/api"],["/nomock/api","http://localhost:8199/api"]] 20 | 21 | # API 接口地址 22 | VITE_GLOB_API_URL = 23 | 24 | # 图片上传地址 25 | VITE_GLOB_UPLOAD_URL= 26 | 27 | # 图片前缀地址 28 | VITE_GLOB_IMG_URL= 29 | 30 | # 接口前缀 31 | VITE_GLOB_API_URL_PREFIX = /api 32 | -------------------------------------------------------------------------------- /.env.debugpm: -------------------------------------------------------------------------------- 1 | # 只在开发模式中被载入 2 | VITE_PORT = 8001 3 | 4 | # 网站根目录 5 | VITE_PUBLIC_PATH = /naive/ 6 | 7 | # 是否开启mock 8 | VITE_USE_MOCK = true 9 | 10 | # 网站前缀 11 | VITE_BASE_URL = / 12 | 13 | # 是否删除console 14 | VITE_DROP_CONSOLE = true 15 | 16 | # 跨域代理,可以配置多个,请注意不要换行 17 | #VITE_PROXY = [["/appApi","http://localhost:8001"],["/upload","http://localhost:8001/upload"]] 18 | # VITE_PROXY=[["/api","https://naive-ui-admin"]] 19 | VITE_PROXY=[["/api/nomock","http://localhost:8199/api"],["/api","http://localhost:8199/api"]] 20 | 21 | # API 接口地址 22 | VITE_GLOB_API_URL = 23 | 24 | # 图片上传地址 25 | VITE_GLOB_UPLOAD_URL= 26 | 27 | # 图片前缀地址 28 | VITE_GLOB_IMG_URL= 29 | 30 | # 接口前缀 31 | VITE_GLOB_API_URL_PREFIX = /api 32 | 33 | 34 | 35 | #登录与权限开启 36 | VITE_APP_PM_ENABLED=true 37 | -------------------------------------------------------------------------------- /.env.development: -------------------------------------------------------------------------------- 1 | # 只在开发模式中被载入 2 | VITE_PORT = 8001 3 | 4 | # 网站根目录 5 | VITE_PUBLIC_PATH = /naive/ 6 | 7 | # 是否开启 mock 8 | VITE_USE_MOCK = true 9 | 10 | # 是否开启控制台打印 mock 请求信息 11 | VITE_LOGGER_MOCK = true 12 | 13 | # 是否删除console 14 | VITE_DROP_CONSOLE = true 15 | 16 | # 跨域代理,可以配置多个,请注意不要换行 17 | #VITE_PROXY = [["/appApi","http://localhost:8001"],["/upload","http://localhost:8001/upload"]] 18 | #VITE_PROXY=[["/api","https://naive-ui-admin"]] 19 | 20 | # API 接口地址 21 | VITE_GLOB_API_URL = 22 | 23 | # 接口前缀 24 | VITE_GLOB_API_URL_PREFIX = /api 25 | 26 | # 文件上传地址 27 | VITE_GLOB_UPLOAD_URL= 28 | 29 | # 文件前缀地址 30 | VITE_GLOB_FILE_URL= 31 | -------------------------------------------------------------------------------- /.env.pm: -------------------------------------------------------------------------------- 1 | # 只在开发模式中被载入 2 | VITE_PORT = 8001 3 | 4 | # 网站根目录 5 | VITE_PUBLIC_PATH = / 6 | 7 | # 是否开启mock 8 | VITE_USE_MOCK = true 9 | 10 | # 网站前缀 11 | VITE_BASE_URL = / 12 | 13 | # 是否删除console 14 | VITE_DROP_CONSOLE = true 15 | 16 | # 跨域代理,可以配置多个,请注意不要换行 17 | #VITE_PROXY = [["/appApi","http://localhost:8001"],["/upload","http://localhost:8001/upload"]] 18 | # VITE_PROXY=[["/api","https://naive-ui-admin"]] 19 | VITE_PROXY=[["/api","http://localhost:8199/api"],["/api/nomock","http://localhost:8199/api"]] 20 | 21 | # API 接口地址 22 | VITE_GLOB_API_URL = 23 | 24 | # 图片上传地址 25 | VITE_GLOB_UPLOAD_URL= 26 | 27 | # 图片前缀地址 28 | VITE_GLOB_IMG_URL= 29 | 30 | # 接口前缀 31 | VITE_GLOB_API_URL_PREFIX = /api 32 | 33 | 34 | 35 | #登录与权限开启 36 | VITE_APP_PM_ENABLED=true 37 | -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | # 是否开启mock 2 | VITE_USE_MOCK = true 3 | 4 | # 网站根目录 5 | VITE_PUBLIC_PATH = /naive/ 6 | 7 | # 是否删除console 8 | VITE_DROP_CONSOLE = true 9 | 10 | # API 11 | VITE_GLOB_API_URL = 12 | 13 | # 接口前缀 14 | VITE_GLOB_API_URL_PREFIX = /api 15 | 16 | # 图片上传地址 17 | VITE_GLOB_UPLOAD_URL= 18 | 19 | # 图片前缀地址 20 | VITE_GLOB_IMG_URL= 21 | 22 | # 是否启用gzip压缩或brotli压缩 23 | # 可选: gzip | brotli | none 24 | # 如果你需要多种形式,你可以用','来分隔 25 | VITE_BUILD_COMPRESS = 'none' 26 | 27 | # 使用压缩时是否删除原始文件,默认为false 28 | VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false 29 | 30 | 31 | # 接口前缀 32 | VITE_GLOB_API_URL_PREFIX = /api 33 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | *.sh 2 | node_modules 3 | *.md 4 | *.woff 5 | *.ttf 6 | .vscode 7 | .idea 8 | dist 9 | /public 10 | /docs 11 | .husky 12 | .local 13 | /bin 14 | Dockerfile 15 | components.d.ts 16 | components.d.ts 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | > 感谢您支持fast-crud,请按如下规范提交issue 2 | > 如果有条件,请尽量在[github上提交](https://github.com/fast-crud/fast-crud/issues) 3 | 4 | 5 | ## 一、问题描述 6 | `请在此处简要描述你所遇到的问题,必要时请贴出相关截图辅助理解和定位` 7 | 8 | ### 复现步骤 9 | `请描述复现问题的详细步骤` 10 | `如果非示例页面的问题,最好能提供最小复现示例的代码、或者仓库链接` 11 | 12 | ### 代码截图 13 | `请贴出出错的相关代码截图` 14 | 15 | ### 报错截图 16 | `请贴出报错日志截图` 17 | 18 | ### 效果截图 19 | `请贴出效果截图` 20 | #### 1. 期望效果 21 | 22 | #### 2. 实际效果 23 | 24 | 25 | ## 二、当前使用的库版本 26 | ### 1. fast-crud版本: 27 | `请您填写fast-crud的版本` 28 | ### 2. 使用的ui库以及版本 29 | `中括号中输入x即选中,或者删除其他,仅保留你正使用的ui库` 30 | - [x] Antdv (版本?) 31 | - [ ] ElementPlus(版本?) 32 | - [ ] NaiveUI(版本?) 33 | 34 | ### 3. 使用的admin框架 35 | `请您填写您当前使用的admin框架是哪一套` 36 | - [x] fs-admin-antdv 37 | - [ ] fs-admin-element 38 | - [ ] fs-admin-naive 39 | - [ ] fs-in-vben 40 | - [ ] vben-admin 41 | - [ ] cool-admin 42 | - [ ] 其他:`请注明` -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /screenshots 4 | /dist 5 | dist.zip 6 | dist_electron 7 | 8 | # local env files 9 | .env.local 10 | .env.*.local 11 | 12 | # Log files 13 | npm-debug.log* 14 | yarn-debug.log* 15 | yarn-error.log* 16 | pnpm-debug.log* 17 | 18 | # Editor directories and files 19 | .idea 20 | .vscode 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | /components.d.ts 27 | yarn.lock 28 | pnpm.lock 29 | vite-profile.cpuprofile 30 | pnpm-lock.yaml 31 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | link-workspace-packages=deep 2 | prefer-workspace-packages=true 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /dist/* 2 | .local 3 | .output.js 4 | /node_modules/** 5 | 6 | **/*.svg 7 | **/*.sh 8 | 9 | /public/* 10 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | /dist/* 2 | /public/* 3 | public/* 4 | -------------------------------------------------------------------------------- /build/constant.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The name of the configuration file entered in the production environment 3 | */ 4 | export const GLOB_CONFIG_FILE_NAME = 'app.config.js'; 5 | 6 | export const OUTPUT_DIR = 'dist'; 7 | -------------------------------------------------------------------------------- /build/getConfigFileName.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Get the configuration file variable name 3 | * @param env 4 | */ 5 | export const getConfigFileName = (env: Record) => { 6 | return `__PRODUCTION__${env.VITE_GLOB_APP_SHORT_NAME || '__APP'}__CONF__` 7 | .toUpperCase() 8 | .replace(/\s/g, ''); 9 | }; 10 | -------------------------------------------------------------------------------- /build/script/postBuild.ts: -------------------------------------------------------------------------------- 1 | // #!/usr/bin/env node 2 | 3 | import { runBuildConfig } from './buildConf'; 4 | import chalk from 'chalk'; 5 | 6 | import pkg from '../../package.json'; 7 | 8 | export const runBuild = async () => { 9 | try { 10 | const argvList = process.argv.splice(2); 11 | 12 | // Generate configuration file 13 | if (!argvList.includes('disabled-config')) { 14 | await runBuildConfig(); 15 | } 16 | 17 | console.log(`✨ ${chalk.cyan(`[${pkg.name}]`)}` + ' - build successfully!'); 18 | } catch (error) { 19 | console.log(chalk.red('vite build error:\n' + error)); 20 | process.exit(1); 21 | } 22 | }; 23 | runBuild(); 24 | -------------------------------------------------------------------------------- /build/vite/plugin/compress.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated 3 | * https://github.com/anncwb/vite-plugin-compression 4 | */ 5 | import type { Plugin } from 'vite'; 6 | 7 | import compressPlugin from 'vite-plugin-compression'; 8 | 9 | export function configCompressPlugin( 10 | compress: 'gzip' | 'brotli' | 'none', 11 | deleteOriginFile = false 12 | ): Plugin | Plugin[] { 13 | const compressList = compress.split(','); 14 | 15 | const plugins: Plugin[] = []; 16 | 17 | if (compressList.includes('gzip')) { 18 | plugins.push( 19 | compressPlugin({ 20 | ext: '.gz', 21 | deleteOriginFile, 22 | }) 23 | ); 24 | } 25 | if (compressList.includes('brotli')) { 26 | plugins.push( 27 | compressPlugin({ 28 | ext: '.br', 29 | algorithm: 'brotliCompress', 30 | deleteOriginFile, 31 | }) 32 | ); 33 | } 34 | return plugins; 35 | } 36 | -------------------------------------------------------------------------------- /build/vite/proxy.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Used to parse the .env.development proxy configuration 3 | */ 4 | import type { ProxyOptions } from 'vite'; 5 | 6 | type ProxyItem = [string, string]; 7 | 8 | type ProxyList = ProxyItem[]; 9 | 10 | type ProxyTargetList = Record string }>; 11 | 12 | const httpsRE = /^https:\/\//; 13 | 14 | /** 15 | * Generate proxy 16 | * @param list 17 | */ 18 | export function createProxy(list: ProxyList = []) { 19 | const ret: ProxyTargetList = {}; 20 | for (const [prefix, target] of list) { 21 | const isHttps = httpsRE.test(target); 22 | 23 | // https://github.com/http-party/node-http-proxy#options 24 | ret[prefix] = { 25 | target: target, 26 | changeOrigin: true, 27 | ws: true, 28 | rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ''), 29 | // https is require secure=false 30 | ...(isHttps ? { secure: false } : {}), 31 | }; 32 | } 33 | return ret; 34 | } 35 | -------------------------------------------------------------------------------- /mock/_createProductionServer.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/mock/_createProductionServer.ts -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/pnpm-lock.yaml -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 100, 3 | tabWidth: 2, 4 | useTabs: false, 5 | semi: true, 6 | vueIndentScriptAndStyle: true, 7 | singleQuote: true, 8 | quoteProps: 'as-needed', 9 | bracketSpacing: true, 10 | trailingComma: 'es5', 11 | jsxBracketSameLine: false, 12 | jsxSingleQuote: false, 13 | arrowParens: 'always', 14 | insertPragma: false, 15 | requirePragma: false, 16 | proseWrap: 'never', 17 | htmlWhitespaceSensitivity: 'strict', 18 | endOfLine: 'auto', 19 | rangeStart: 0, 20 | }; 21 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/public/favicon.ico -------------------------------------------------------------------------------- /public/template-import.csv: -------------------------------------------------------------------------------- 1 | name,mobile 2 | 张三,18603040102 3 | 李四,18603040103 4 | 王五,18603040104 5 | 赵六,18603040105 6 | 田七,18603040106 7 | -------------------------------------------------------------------------------- /src/api/dashboard/console.ts: -------------------------------------------------------------------------------- 1 | import { Alova } from '@/utils/http/alova/index'; 2 | 3 | export interface TypeVisits { 4 | dayVisits: number; 5 | rise: number; 6 | decline: number; 7 | amount: number; 8 | } 9 | export interface TypeSaleroom { 10 | weekSaleroom: number; 11 | amount: number; 12 | degree: number; 13 | } 14 | 15 | export interface TypeOrderLarge { 16 | weekLarge: number; 17 | rise: number; 18 | decline: number; 19 | amount: number; 20 | } 21 | 22 | export interface TypeConsole { 23 | visits: TypeVisits; 24 | //销售额 25 | saleroom: TypeSaleroom; 26 | //订单量 27 | orderLarge: TypeOrderLarge; 28 | //成交额度 29 | volume: TypeOrderLarge; 30 | } 31 | 32 | //获取主控台信息 33 | export function getConsoleInfo() { 34 | return Alova.Get('/dashboard/console'); 35 | } 36 | -------------------------------------------------------------------------------- /src/api/system/menu.ts: -------------------------------------------------------------------------------- 1 | import { Alova } from '@/utils/http/alova/index'; 2 | export interface ListDate { 3 | label: string; 4 | key: string; 5 | type: number; 6 | subtitle: string; 7 | openType: number; 8 | auth: string; 9 | path: string; 10 | children?: ListDate[]; 11 | } 12 | 13 | /** 14 | * @description: 根据用户id获取用户菜单 15 | */ 16 | export function adminMenus() { 17 | return Alova.Get('/menus'); 18 | } 19 | 20 | /** 21 | * 获取tree菜单列表 22 | * @param params 23 | */ 24 | export function getMenuList(params?) { 25 | return Alova.Get<{ list: ListDate[] }>('/menu/list', { 26 | params, 27 | }); 28 | } 29 | -------------------------------------------------------------------------------- /src/api/system/role.ts: -------------------------------------------------------------------------------- 1 | import { Alova } from '@/utils/http/alova/index'; 2 | 3 | /** 4 | * @description: 角色列表 5 | */ 6 | export function getRoleList(params) { 7 | return Alova.Get('/role/list', { params }); 8 | } 9 | -------------------------------------------------------------------------------- /src/api/table/list.ts: -------------------------------------------------------------------------------- 1 | import { Alova } from '@/utils/http/alova/index'; 2 | 3 | //获取table 4 | export function getTableList(params) { 5 | return Alova.Get('/table/list', { params }); 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/images/account-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/src/assets/images/account-logo.png -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/images/schoolboy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/src/assets/images/schoolboy.png -------------------------------------------------------------------------------- /src/assets/images/tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/src/assets/images/tool.png -------------------------------------------------------------------------------- /src/components/Application/Application.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 27 | -------------------------------------------------------------------------------- /src/components/Application/index.ts: -------------------------------------------------------------------------------- 1 | import AppProvider from './Application.vue'; 2 | 3 | export { AppProvider }; 4 | -------------------------------------------------------------------------------- /src/components/CountTo/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@/utils'; 2 | import countTo from './CountTo.vue'; 3 | 4 | export const CountTo = withInstall(countTo); 5 | -------------------------------------------------------------------------------- /src/components/Form/index.ts: -------------------------------------------------------------------------------- 1 | export { default as BasicForm } from './src/BasicForm.vue'; 2 | export { useForm } from './src/hooks/useForm'; 3 | export * from './src/types/form'; 4 | export * from './src/types/index'; 5 | -------------------------------------------------------------------------------- /src/components/Form/src/hooks/useFormContext.ts: -------------------------------------------------------------------------------- 1 | import { provide, inject } from 'vue'; 2 | 3 | const key = Symbol('formElRef'); 4 | 5 | export function createFormContext(instance) { 6 | provide(key, instance); 7 | } 8 | 9 | export function useFormContext() { 10 | return inject(key); 11 | } 12 | -------------------------------------------------------------------------------- /src/components/Form/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export type ComponentType = 2 | | 'NInput' 3 | | 'NInputGroup' 4 | | 'NInputPassword' 5 | | 'NInputSearch' 6 | | 'NInputTextArea' 7 | | 'NInputNumber' 8 | | 'NInputCountDown' 9 | | 'NSelect' 10 | | 'NTreeSelect' 11 | | 'NRadioButtonGroup' 12 | | 'NRadioGroup' 13 | | 'NCheckbox' 14 | | 'NCheckboxGroup' 15 | | 'NAutoComplete' 16 | | 'NCascader' 17 | | 'NDatePicker' 18 | | 'NMonthPicker' 19 | | 'NRangePicker' 20 | | 'NWeekPicker' 21 | | 'NTimePicker' 22 | | 'NSwitch' 23 | | 'NStrengthMeter' 24 | | 'NUpload' 25 | | 'NIconPicker' 26 | | 'NRender' 27 | | 'NSlider' 28 | | 'NRate'; 29 | -------------------------------------------------------------------------------- /src/components/Lockscreen/index.ts: -------------------------------------------------------------------------------- 1 | import LockScreen from './Lockscreen.vue'; 2 | 3 | export { LockScreen }; 4 | -------------------------------------------------------------------------------- /src/components/Modal/index.ts: -------------------------------------------------------------------------------- 1 | export { default as basicModal } from './src/basicModal.vue'; 2 | export { useModal } from './src/hooks/useModal'; 3 | export * from './src/type'; 4 | -------------------------------------------------------------------------------- /src/components/Modal/src/props.ts: -------------------------------------------------------------------------------- 1 | import { NModal } from 'naive-ui'; 2 | 3 | export const basicProps = { 4 | ...NModal.props, 5 | // 确认按钮文字 6 | subBtuText: { 7 | type: String, 8 | default: '确认', 9 | }, 10 | showIcon: { 11 | type: Boolean, 12 | default: false, 13 | }, 14 | width: { 15 | type: Number, 16 | default: 446, 17 | }, 18 | title: { 19 | type: String, 20 | default: '', 21 | }, 22 | maskClosable: { 23 | type: Boolean, 24 | default: false, 25 | }, 26 | preset: { 27 | type: String, 28 | default: 'dialog', 29 | }, 30 | }; 31 | -------------------------------------------------------------------------------- /src/components/Modal/src/type/index.ts: -------------------------------------------------------------------------------- 1 | import type { DialogOptions } from 'naive-ui/lib/dialog'; 2 | /** 3 | * @description: 弹窗对外暴露的方法 4 | */ 5 | export interface ModalMethods { 6 | setProps: (props) => void; 7 | openModal: () => void; 8 | closeModal: () => void; 9 | setSubLoading: (status) => void; 10 | } 11 | 12 | /** 13 | * 支持修改,DialogOptions 參數 14 | */ 15 | export type ModalProps = DialogOptions; 16 | 17 | export type RegisterFn = (ModalInstance: ModalMethods) => void; 18 | 19 | export type UseModalReturnType = [RegisterFn, ModalMethods]; 20 | -------------------------------------------------------------------------------- /src/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export { default as BasicTable } from './src/Table.vue'; 2 | export { default as TableAction } from './src/components/TableAction.vue'; 3 | export * from './src/types/table'; 4 | export * from './src/types/tableAction'; 5 | -------------------------------------------------------------------------------- /src/components/Table/src/components/editable/helper.ts: -------------------------------------------------------------------------------- 1 | import { ComponentType } from '../../types/componentType'; 2 | 3 | /** 4 | * @description: 生成placeholder 5 | */ 6 | export function createPlaceholderMessage(component: ComponentType) { 7 | if (component === 'NInput') return '请输入'; 8 | if ( 9 | ['NPicker', 'NSelect', 'NCheckbox', 'NRadio', 'NSwitch', 'NDatePicker', 'NTimePicker'].includes( 10 | component 11 | ) 12 | ) 13 | return '请选择'; 14 | return ''; 15 | } 16 | -------------------------------------------------------------------------------- /src/components/Table/src/const.ts: -------------------------------------------------------------------------------- 1 | import componentSetting from '@/settings/componentSetting'; 2 | 3 | const { table } = componentSetting; 4 | 5 | const { apiSetting, defaultPageSize, pageSizes } = table; 6 | 7 | export const DEFAULTPAGESIZE = defaultPageSize; 8 | 9 | export const APISETTING = apiSetting; 10 | 11 | export const PAGESIZES = pageSizes; 12 | -------------------------------------------------------------------------------- /src/components/Table/src/hooks/useLoading.ts: -------------------------------------------------------------------------------- 1 | import { ref, ComputedRef, unref, computed, watch } from 'vue'; 2 | import type { BasicTableProps } from '../types/table'; 3 | 4 | export function useLoading(props: ComputedRef) { 5 | const loadingRef = ref(unref(props).loading); 6 | 7 | watch( 8 | () => unref(props).loading, 9 | (loading) => { 10 | loadingRef.value = loading; 11 | } 12 | ); 13 | 14 | const getLoading = computed(() => unref(loadingRef)); 15 | 16 | function setLoading(loading: boolean) { 17 | loadingRef.value = loading; 18 | } 19 | 20 | return { getLoading, setLoading }; 21 | } 22 | -------------------------------------------------------------------------------- /src/components/Table/src/hooks/useTableContext.ts: -------------------------------------------------------------------------------- 1 | import type { Ref } from 'vue'; 2 | import type { BasicTableProps, TableActionType } from '../types/table'; 3 | import { provide, inject, ComputedRef } from 'vue'; 4 | 5 | const key = Symbol('s-table'); 6 | 7 | type Instance = TableActionType & { 8 | wrapRef: Ref>; 9 | getBindValues: ComputedRef; 10 | }; 11 | 12 | type RetInstance = Omit & { 13 | getBindValues: ComputedRef; 14 | }; 15 | 16 | export function createTableContext(instance: Instance) { 17 | provide(key, instance); 18 | } 19 | 20 | export function useTableContext(): RetInstance { 21 | return inject(key) as RetInstance; 22 | } 23 | -------------------------------------------------------------------------------- /src/components/Table/src/types/componentType.ts: -------------------------------------------------------------------------------- 1 | export type ComponentType = 2 | | 'NInput' 3 | | 'NInputNumber' 4 | | 'NSelect' 5 | | 'NCheckbox' 6 | | 'NSwitch' 7 | | 'NDatePicker' 8 | | 'NTimePicker' 9 | | 'NCascader'; 10 | -------------------------------------------------------------------------------- /src/components/Table/src/types/pagination.ts: -------------------------------------------------------------------------------- 1 | export interface PaginationProps { 2 | page?: number; //受控模式下的当前页 3 | itemCount?: number; //总条数 4 | pageCount?: number; //总页数 5 | pageSize?: number; //受控模式下的分页大小 6 | pageSizes?: number[]; //每页条数, 可自定义 7 | showSizePicker?: boolean; //是否显示每页条数的选择器 8 | showQuickJumper?: boolean; //是否显示快速跳转 9 | prefix?: any; //分页前缀 10 | } 11 | -------------------------------------------------------------------------------- /src/components/Table/src/types/tableAction.ts: -------------------------------------------------------------------------------- 1 | import { NButton } from 'naive-ui'; 2 | import type { Component } from 'vue'; 3 | import { PermissionsEnum } from '@/enums/permissionsEnum'; 4 | export interface ActionItem extends Partial> { 5 | onClick?: Fn; 6 | label?: string; 7 | type?: 'success' | 'error' | 'warning' | 'info' | 'primary' | 'default'; 8 | // 设定 color 后会覆盖 type 的样式 9 | color?: string; 10 | icon?: Component; 11 | popConfirm?: PopConfirm; 12 | disabled?: boolean; 13 | divider?: boolean; 14 | // 权限编码控制是否显示 15 | auth?: PermissionsEnum | PermissionsEnum[] | string | string[]; 16 | // 业务控制是否显示 17 | ifShow?: boolean | ((action: ActionItem) => boolean); 18 | } 19 | 20 | export interface PopConfirm { 21 | title: string; 22 | okText?: string; 23 | cancelText?: string; 24 | confirm: Fn; 25 | cancel?: Fn; 26 | icon?: Component; 27 | } 28 | -------------------------------------------------------------------------------- /src/components/Upload/index.ts: -------------------------------------------------------------------------------- 1 | export { default as BasicUpload } from './src/BasicUpload.vue'; 2 | -------------------------------------------------------------------------------- /src/components/Upload/src/props.ts: -------------------------------------------------------------------------------- 1 | import type { PropType } from 'vue'; 2 | import { NUpload } from 'naive-ui'; 3 | 4 | export const basicProps = { 5 | ...NUpload.props, 6 | accept: { 7 | type: String, 8 | default: '.jpg,.png,.jpeg,.svg,.gif', 9 | }, 10 | helpText: { 11 | type: String as PropType, 12 | default: '', 13 | }, 14 | maxSize: { 15 | type: Number as PropType, 16 | default: 2, 17 | }, 18 | maxNumber: { 19 | type: Number as PropType, 20 | default: Infinity, 21 | }, 22 | value: { 23 | type: Array as PropType, 24 | default: () => [], 25 | }, 26 | width: { 27 | type: Number as PropType, 28 | default: 104, 29 | }, 30 | height: { 31 | type: Number as PropType, 32 | default: 104, //建议不小于这个尺寸 太小页面可能显示有异常 33 | }, 34 | }; 35 | -------------------------------------------------------------------------------- /src/components/Upload/src/type/index.ts: -------------------------------------------------------------------------------- 1 | export interface BasicProps { 2 | title?: string; 3 | dataSource: Function; 4 | columns: any[]; 5 | pagination: object; 6 | showPagination: boolean; 7 | } 8 | -------------------------------------------------------------------------------- /src/config/website.config.ts: -------------------------------------------------------------------------------- 1 | import logoImage from '@/assets/images/logo.png'; 2 | import loginImage from '@/assets/images/account-logo.png'; 3 | 4 | export const websiteConfig = Object.freeze({ 5 | title: 'NaiveUiAdmin', 6 | logo: logoImage, 7 | loginImage: loginImage, 8 | loginDesc: 'Naive Ui Admin中后台前端/设计解决方案', 9 | }); 10 | -------------------------------------------------------------------------------- /src/directives/debounce.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * v-debounce 3 | * 按钮防抖指令,可自行扩展至input 4 | * 接收参数:function类型 5 | */ 6 | import type { Directive, DirectiveBinding } from 'vue'; 7 | interface ElType extends HTMLElement { 8 | __handleClick__: () => any; 9 | } 10 | const debounce: Directive = { 11 | mounted(el: ElType, binding: DirectiveBinding) { 12 | if (typeof binding.value !== 'function') { 13 | throw 'callback must be a function'; 14 | } 15 | let timer: NodeJS.Timeout | null = null; 16 | el.__handleClick__ = function () { 17 | if (timer) { 18 | clearInterval(timer); 19 | } 20 | timer = setTimeout(() => { 21 | binding.value(); 22 | }, 500); 23 | }; 24 | el.addEventListener('click', el.__handleClick__); 25 | }, 26 | beforeUnmount(el: ElType) { 27 | el.removeEventListener('click', el.__handleClick__); 28 | }, 29 | }; 30 | 31 | export default debounce; 32 | -------------------------------------------------------------------------------- /src/directives/permission.ts: -------------------------------------------------------------------------------- 1 | import { ObjectDirective } from 'vue'; 2 | import { usePermission } from '@/hooks/web/usePermission'; 3 | 4 | export const permission: ObjectDirective = { 5 | mounted(el: HTMLButtonElement, binding) { 6 | if (binding.value == undefined) return; 7 | const { action, effect } = binding.value; 8 | const { hasPermission } = usePermission(); 9 | if (!hasPermission(action)) { 10 | if (effect == 'disabled') { 11 | el.disabled = true; 12 | el.style['disabled'] = 'disabled'; 13 | el.classList.add('n-button--disabled'); 14 | } else { 15 | el.remove(); 16 | } 17 | } 18 | }, 19 | }; 20 | -------------------------------------------------------------------------------- /src/enums/breakpointEnum.ts: -------------------------------------------------------------------------------- 1 | export enum sizeEnum { 2 | XS = 'XS', 3 | SM = 'SM', 4 | MD = 'MD', 5 | LG = 'LG', 6 | XL = 'XL', 7 | XXL = 'XXL', 8 | } 9 | 10 | export enum screenEnum { 11 | XS = 480, 12 | SM = 576, 13 | MD = 768, 14 | LG = 992, 15 | XL = 1200, 16 | XXL = 1600, 17 | } 18 | 19 | const screenMap = new Map(); 20 | 21 | screenMap.set(sizeEnum.XS, screenEnum.XS); 22 | screenMap.set(sizeEnum.SM, screenEnum.SM); 23 | screenMap.set(sizeEnum.MD, screenEnum.MD); 24 | screenMap.set(sizeEnum.LG, screenEnum.LG); 25 | screenMap.set(sizeEnum.XL, screenEnum.XL); 26 | screenMap.set(sizeEnum.XXL, screenEnum.XXL); 27 | 28 | export { screenMap }; 29 | -------------------------------------------------------------------------------- /src/enums/cacheEnum.ts: -------------------------------------------------------------------------------- 1 | // token key 2 | export const TOKEN_KEY = 'TOKEN'; 3 | 4 | // user info key 5 | export const USER_INFO_KEY = 'USER__INFO__'; 6 | 7 | // role info key 8 | export const ROLES_KEY = 'ROLES__KEY__'; 9 | 10 | // project config key 11 | export const PROJ_CFG_KEY = 'PROJ__CFG__KEY__'; 12 | 13 | // lock info 14 | export const LOCK_INFO_KEY = 'LOCK__INFO__KEY__'; 15 | 16 | // base global local key 17 | export const BASE_LOCAL_CACHE_KEY = 'LOCAL__CACHE__KEY__'; 18 | 19 | // base global session key 20 | export const BASE_SESSION_CACHE_KEY = 'SESSION__CACHE__KEY__'; 21 | -------------------------------------------------------------------------------- /src/enums/httpEnum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @description: 请求结果集 3 | */ 4 | export enum ResultEnum { 5 | SUCCESS = 0, 6 | ERROR = 1, 7 | TIMEOUT = 10042, 8 | TYPE = 'success', 9 | } 10 | 11 | /** 12 | * @description: 请求方法 13 | */ 14 | export enum RequestEnum { 15 | GET = 'GET', 16 | POST = 'POST', 17 | PATCH = 'PATCH', 18 | PUT = 'PUT', 19 | DELETE = 'DELETE', 20 | } 21 | 22 | /** 23 | * @description: 常用的contentTyp类型 24 | */ 25 | export enum ContentTypeEnum { 26 | // json 27 | JSON = 'application/json;charset=UTF-8', 28 | // json 29 | TEXT = 'text/plain;charset=UTF-8', 30 | // form-data 一般配合qs 31 | FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8', 32 | // form-data 上传 33 | FORM_DATA = 'multipart/form-data;charset=UTF-8', 34 | } 35 | -------------------------------------------------------------------------------- /src/enums/pageEnum.ts: -------------------------------------------------------------------------------- 1 | export enum PageEnum { 2 | // 登录 3 | BASE_LOGIN = '/login', 4 | BASE_LOGIN_NAME = 'Login', 5 | //重定向 6 | REDIRECT = '/redirect', 7 | REDIRECT_NAME = 'Redirect', 8 | // 首页 9 | BASE_HOME = '/dashboard', 10 | //首页跳转默认路由 11 | BASE_HOME_REDIRECT = '/dashboard/console', 12 | // 错误 13 | ERROR_PAGE_NAME = 'ErrorPage', 14 | } 15 | -------------------------------------------------------------------------------- /src/enums/permissionsEnum.ts: -------------------------------------------------------------------------------- 1 | export interface PermissionsEnum { 2 | value: string; 3 | label: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/enums/roleEnum.ts: -------------------------------------------------------------------------------- 1 | export enum RoleEnum { 2 | // 管理员 3 | ADMIN = 'admin', 4 | 5 | // 普通用户 6 | NORMAL = 'normal', 7 | } 8 | -------------------------------------------------------------------------------- /src/hooks/event/useWindowSizeFn.ts: -------------------------------------------------------------------------------- 1 | import { tryOnMounted, tryOnUnmounted } from '@vueuse/core'; 2 | import { useDebounceFn } from '@vueuse/core'; 3 | 4 | interface WindowSizeOptions { 5 | once?: boolean; 6 | immediate?: boolean; 7 | listenerOptions?: AddEventListenerOptions | boolean; 8 | } 9 | 10 | export function useWindowSizeFn(fn: Fn, wait = 150, options?: WindowSizeOptions) { 11 | let handler = () => { 12 | fn(); 13 | }; 14 | const handleSize = useDebounceFn(handler, wait); 15 | handler = handleSize; 16 | 17 | const start = () => { 18 | if (options && options.immediate) { 19 | handler(); 20 | } 21 | window.addEventListener('resize', handler); 22 | }; 23 | 24 | const stop = () => { 25 | window.removeEventListener('resize', handler); 26 | }; 27 | 28 | tryOnMounted(() => { 29 | start(); 30 | }); 31 | 32 | tryOnUnmounted(() => { 33 | stop(); 34 | }); 35 | return [start, stop]; 36 | } 37 | -------------------------------------------------------------------------------- /src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | import { useAsync } from './useAsync'; 2 | 3 | export { useAsync }; 4 | -------------------------------------------------------------------------------- /src/hooks/setting/useDesignSetting.ts: -------------------------------------------------------------------------------- 1 | import { computed } from 'vue'; 2 | import { useDesignSettingStore } from '@/store/modules/designSetting'; 3 | 4 | export function useDesignSetting() { 5 | const designStore = useDesignSettingStore(); 6 | 7 | const getDarkTheme = computed(() => designStore.darkTheme); 8 | 9 | const getAppTheme = computed(() => designStore.appTheme); 10 | 11 | const getAppThemeList = computed(() => designStore.appThemeList); 12 | 13 | return { 14 | getDarkTheme, 15 | getAppTheme, 16 | getAppThemeList, 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /src/hooks/useAsync.ts: -------------------------------------------------------------------------------- 1 | import { isReactive, isRef } from 'vue'; 2 | 3 | function setLoading(loading, val) { 4 | if (loading != undefined && isRef(loading)) { 5 | loading.value = val; 6 | } else if (loading != undefined && isReactive(loading)) { 7 | loading.loading = val; 8 | } 9 | } 10 | 11 | export const useAsync = async (func: Promise, loading: any): Promise => { 12 | setLoading(loading, true); 13 | 14 | return await func.finally(() => setLoading(loading, false)); 15 | }; 16 | -------------------------------------------------------------------------------- /src/hooks/useDomWidth.ts: -------------------------------------------------------------------------------- 1 | import { ref, onMounted, onUnmounted } from 'vue'; 2 | import { debounce } from 'lodash-es'; 3 | 4 | /** 5 | * description: 获取页面宽度 6 | */ 7 | 8 | export function useDomWidth() { 9 | const domWidth = ref(window.innerWidth); 10 | 11 | function resize() { 12 | domWidth.value = document.body.clientWidth; 13 | } 14 | 15 | onMounted(() => { 16 | window.addEventListener('resize', debounce(resize, 80)); 17 | }); 18 | onUnmounted(() => { 19 | window.removeEventListener('resize', resize); 20 | }); 21 | 22 | return domWidth; 23 | } 24 | -------------------------------------------------------------------------------- /src/hooks/useOnline.ts: -------------------------------------------------------------------------------- 1 | import { ref, onMounted, onUnmounted } from 'vue'; 2 | 3 | /** 4 | * @description 用户网络是否可用 5 | * */ 6 | export function useOnline() { 7 | const online = ref(true); 8 | 9 | const showStatus = (val) => { 10 | online.value = typeof val == 'boolean' ? val : val.target.online; 11 | }; 12 | 13 | // 在页面加载后,设置正确的网络状态 14 | navigator.onLine ? showStatus(true) : showStatus(false); 15 | 16 | onMounted(() => { 17 | // 开始监听网络状态的变化 18 | window.addEventListener('online', showStatus); 19 | 20 | window.addEventListener('offline', showStatus); 21 | }); 22 | onUnmounted(() => { 23 | // 移除监听网络状态的变化 24 | window.removeEventListener('online', showStatus); 25 | 26 | window.removeEventListener('offline', showStatus); 27 | }); 28 | 29 | return { online }; 30 | } 31 | -------------------------------------------------------------------------------- /src/i18n/index.ts: -------------------------------------------------------------------------------- 1 | import { createI18n } from 'vue-i18n'; 2 | import en from './locale/en'; 3 | import zh from './locale/zh_CN'; 4 | const messages = { 5 | en: { 6 | label: 'English', 7 | ...en, 8 | }, 9 | 'zh-cn': { 10 | label: '简体中文', 11 | ...zh, 12 | }, 13 | }; 14 | 15 | export default createI18n({ 16 | legacy: false, 17 | locale: 'zh-cn', 18 | fallbackLocale: 'zh-cn', 19 | messages, 20 | }); 21 | -------------------------------------------------------------------------------- /src/i18n/locale/en.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | app: { crud: { i18n: { name: 'name', city: 'city', status: 'status' } } }, 3 | }; 4 | -------------------------------------------------------------------------------- /src/i18n/locale/zh_CN.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | app: { 3 | crud: { i18n: { name: '姓名', city: '城市', status: '状态' } }, 4 | login: { 5 | logoutTip: '确认', 6 | logoutMessage: '确定要注销登录吗?', 7 | }, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /src/layout/components/Footer/index.ts: -------------------------------------------------------------------------------- 1 | import PageFooter from './index.vue'; 2 | 3 | export { PageFooter }; 4 | -------------------------------------------------------------------------------- /src/layout/components/Header/components.ts: -------------------------------------------------------------------------------- 1 | import { 2 | SettingOutlined, 3 | SearchOutlined, 4 | MenuFoldOutlined, 5 | MenuUnfoldOutlined, 6 | FullscreenOutlined, 7 | FullscreenExitOutlined, 8 | PoweroffOutlined, 9 | GithubOutlined, 10 | LockOutlined, 11 | ReloadOutlined, 12 | LogoutOutlined, 13 | UserOutlined, 14 | CheckOutlined, 15 | } from '@vicons/antd'; 16 | 17 | export default { 18 | SettingOutlined, 19 | LockOutlined, 20 | GithubOutlined, 21 | SearchOutlined, 22 | MenuFoldOutlined, 23 | MenuUnfoldOutlined, 24 | FullscreenOutlined, 25 | FullscreenExitOutlined, 26 | PoweroffOutlined, 27 | ReloadOutlined, 28 | LogoutOutlined, 29 | UserOutlined, 30 | CheckOutlined, 31 | }; 32 | -------------------------------------------------------------------------------- /src/layout/components/Header/index.ts: -------------------------------------------------------------------------------- 1 | import PageHeader from './index.vue'; 2 | 3 | export { PageHeader }; 4 | -------------------------------------------------------------------------------- /src/layout/components/Logo/index.ts: -------------------------------------------------------------------------------- 1 | import Logo from './index.vue'; 2 | 3 | export { Logo }; 4 | -------------------------------------------------------------------------------- /src/layout/components/Logo/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 24 | 25 | 45 | -------------------------------------------------------------------------------- /src/layout/components/Main/index.ts: -------------------------------------------------------------------------------- 1 | import MainView from './index.vue'; 2 | 3 | export { MainView }; 4 | -------------------------------------------------------------------------------- /src/layout/components/Menu/index.ts: -------------------------------------------------------------------------------- 1 | import AsideMenu from './index.vue'; 2 | 3 | export { AsideMenu }; 4 | -------------------------------------------------------------------------------- /src/layout/components/TagsView/index.ts: -------------------------------------------------------------------------------- 1 | import TabsView from './index.vue'; 2 | 3 | export { TabsView }; 4 | -------------------------------------------------------------------------------- /src/layout/parentLayout.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /src/mock/README.md: -------------------------------------------------------------------------------- 1 | # 本地化mock 2 | 3 | naiveui admin 本身的mock不太好用,改成本地化mock 4 | -------------------------------------------------------------------------------- /src/plugins/customComponents.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 全局注册自定义组件 待完善 3 | * @param app 4 | */ 5 | export function setupCustomComponents() { 6 | // app.component() 7 | } 8 | -------------------------------------------------------------------------------- /src/plugins/directives.ts: -------------------------------------------------------------------------------- 1 | import { App } from 'vue'; 2 | 3 | import { permission } from '@/directives/permission'; 4 | import copy from '@/directives/copy'; 5 | import debounce from '@/directives/debounce'; 6 | import throttle from '@/directives/throttle'; 7 | import draggable from '@/directives/draggable'; 8 | 9 | /** 10 | * 注册全局自定义指令 11 | * @param app 12 | */ 13 | export function setupDirectives(app: App) { 14 | // 权限控制指令(演示) 15 | app.directive('permission', permission); 16 | // 复制指令 17 | app.directive('copy', copy); 18 | // 防抖指令 19 | app.directive('debounce', debounce); 20 | // 节流指令 21 | app.directive('throttle', throttle); 22 | // 拖拽指令 23 | app.directive('draggable', draggable); 24 | } 25 | -------------------------------------------------------------------------------- /src/plugins/globalMethods.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 注册全局方法 待完善 3 | * @param app 4 | */ 5 | export function setupGlobalMethods() {} 6 | -------------------------------------------------------------------------------- /src/plugins/iconfont/index.ts: -------------------------------------------------------------------------------- 1 | import "./iconfont.js" 2 | -------------------------------------------------------------------------------- /src/plugins/iconify/index.ts: -------------------------------------------------------------------------------- 1 | import '@purge-icons/generated'; 2 | -------------------------------------------------------------------------------- /src/plugins/index.ts: -------------------------------------------------------------------------------- 1 | export { setupNaive } from '@/plugins/naive'; 2 | export { setupNaiveDiscreteApi } from '@/plugins/naiveDiscreteApi'; 3 | export { setupDirectives } from '@/plugins/directives'; 4 | export { setupCustomComponents } from '@/plugins/customComponents'; 5 | export { setupGlobalMethods } from '@/plugins/globalMethods'; 6 | export { setupFastCrud } from '@/plugins/fast_crud'; 7 | import './iconify'; 8 | import './iconfont'; 9 | export { setupMonaco } from './monaco'; 10 | -------------------------------------------------------------------------------- /src/plugins/monaco/index.ts: -------------------------------------------------------------------------------- 1 | import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker"; 2 | import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker"; 3 | import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker"; 4 | import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker"; 5 | import yamlWorker from "./yaml.worker?worker"; 6 | import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker"; 7 | import { registerWorker } from "@fast-crud/fast-extends"; 8 | export function setupMonaco() { 9 | registerWorker("json", jsonWorker); 10 | registerWorker(["css", "less", "scss"], cssWorker); 11 | registerWorker(["html", "handlebars", "razor"], htmlWorker); 12 | registerWorker(["yaml", "yml"], yamlWorker); 13 | registerWorker(["typescript", "javascript"], tsWorker); 14 | registerWorker("*", editorWorker); 15 | } 16 | -------------------------------------------------------------------------------- /src/plugins/monaco/yaml.worker.ts: -------------------------------------------------------------------------------- 1 | export * from "monaco-yaml/yaml.worker.js"; 2 | -------------------------------------------------------------------------------- /src/router/constant.ts: -------------------------------------------------------------------------------- 1 | export const RedirectName = 'Redirect'; 2 | 3 | export const ErrorPage = () => import('@/views/exception/404.vue'); 4 | 5 | export const Layout = () => import('@/layout/index.vue'); 6 | 7 | export const ParentLayout = () => import('@/layout/parentLayout.vue'); 8 | -------------------------------------------------------------------------------- /src/router/icons.ts: -------------------------------------------------------------------------------- 1 | import { renderIcon } from '@/utils/index'; 2 | import { DashboardOutlined } from '@vicons/antd'; 3 | 4 | //前端路由图标映射表 5 | export const constantRouterIcon = { 6 | DashboardOutlined: renderIcon(DashboardOutlined), 7 | }; 8 | -------------------------------------------------------------------------------- /src/router/modules/about.ts: -------------------------------------------------------------------------------- 1 | import { RouteRecordRaw } from 'vue-router'; 2 | import { Layout } from '@/router/constant'; 3 | import { ProjectOutlined } from '@vicons/antd'; 4 | import { renderIcon } from '@/utils/index'; 5 | 6 | const routes: Array = [ 7 | { 8 | path: '/about', 9 | name: 'about', 10 | component: Layout, 11 | meta: { 12 | sort: 10, 13 | isRoot: true, 14 | activeMenu: 'about_index', 15 | icon: renderIcon(ProjectOutlined), 16 | }, 17 | children: [ 18 | { 19 | path: 'index', 20 | name: `about_index`, 21 | meta: { 22 | title: '关于项目', 23 | activeMenu: 'about_index', 24 | }, 25 | component: () => import('@/views/about/index.vue'), 26 | }, 27 | ], 28 | }, 29 | ]; 30 | 31 | export default routes; 32 | -------------------------------------------------------------------------------- /src/router/modules/directive.ts: -------------------------------------------------------------------------------- 1 | import { RouteRecordRaw } from 'vue-router'; 2 | import { Layout } from '@/router/constant'; 3 | import { BorderOuterOutlined } from '@vicons/antd'; 4 | import { renderIcon } from '@/utils/index'; 5 | 6 | const routes: Array = [ 7 | { 8 | path: '/directive', 9 | name: 'directive', 10 | component: Layout, 11 | meta: { 12 | sort: 9, 13 | isRoot: true, 14 | activeMenu: 'directive_index', 15 | icon: renderIcon(BorderOuterOutlined), 16 | }, 17 | children: [ 18 | { 19 | path: 'index', 20 | name: `directive_index`, 21 | meta: { 22 | title: '指令示例', 23 | activeMenu: 'directive_index', 24 | }, 25 | component: () => import('@/views/directive/index.vue'), 26 | }, 27 | ], 28 | }, 29 | ]; 30 | 31 | export default routes; 32 | -------------------------------------------------------------------------------- /src/router/modules/docs.ts: -------------------------------------------------------------------------------- 1 | import { RouteRecordRaw } from 'vue-router'; 2 | import { Layout } from '@/router/constant'; 3 | import { DocumentTextOutline } from '@vicons/ionicons5'; 4 | import { renderIcon } from '@/utils/index'; 5 | 6 | const routes: Array = [ 7 | { 8 | path: '/external', 9 | name: 'https://docs.naiveadmin.com', 10 | component: Layout, 11 | meta: { 12 | title: '项目文档', 13 | icon: renderIcon(DocumentTextOutline), 14 | sort: 11, 15 | }, 16 | }, 17 | ]; 18 | 19 | export default routes; 20 | -------------------------------------------------------------------------------- /src/router/modules/newVersion.ts: -------------------------------------------------------------------------------- 1 | import { RouteRecordRaw } from 'vue-router'; 2 | import { Layout } from '@/router/constant'; 3 | import { SketchOutlined } from '@vicons/antd'; 4 | import { renderIcon, renderNew } from '@/utils/index'; 5 | 6 | const routes: Array = [ 7 | { 8 | path: '/newversion', 9 | name: 'https://www.naiveadmin.com', 10 | component: Layout, 11 | meta: { 12 | title: 'Pro 版本', 13 | extra: renderNew(), 14 | icon: renderIcon(SketchOutlined), 15 | sort: 12, 16 | }, 17 | }, 18 | ]; 19 | 20 | export default routes; 21 | -------------------------------------------------------------------------------- /src/router/modules/system.ts: -------------------------------------------------------------------------------- 1 | import { RouteRecordRaw } from 'vue-router'; 2 | import { Layout } from '@/router/constant'; 3 | import { OptionsSharp } from '@vicons/ionicons5'; 4 | import { renderIcon } from '@/utils/index'; 5 | 6 | const routes: Array = [ 7 | { 8 | path: '/system', 9 | name: 'System', 10 | redirect: '/system/menu', 11 | component: Layout, 12 | meta: { 13 | title: '系统设置', 14 | icon: renderIcon(OptionsSharp), 15 | sort: 1, 16 | }, 17 | children: [ 18 | { 19 | path: 'menu', 20 | name: 'system_menu', 21 | meta: { 22 | title: '菜单权限', 23 | }, 24 | component: () => import('@/views/system/menu/menu.vue'), 25 | }, 26 | { 27 | path: 'role', 28 | name: 'system_role', 29 | meta: { 30 | title: '角色权限', 31 | }, 32 | component: () => import('@/views/system/role/role.vue'), 33 | }, 34 | ], 35 | }, 36 | ]; 37 | 38 | export default routes; 39 | -------------------------------------------------------------------------------- /src/settings/animateSetting.ts: -------------------------------------------------------------------------------- 1 | export const animates = [ 2 | { value: 'zoom-fade', label: '渐变' }, 3 | { value: 'zoom-out', label: '闪现' }, 4 | { value: 'fade-slide', label: '滑动' }, 5 | { value: 'fade', label: '消退' }, 6 | { value: 'fade-bottom', label: '底部消退' }, 7 | { value: 'fade-scale', label: '缩放消退' }, 8 | ]; 9 | -------------------------------------------------------------------------------- /src/settings/componentSetting.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | table: { 3 | apiSetting: { 4 | // 当前页的字段名 5 | pageField: 'page', 6 | // 每页数量字段名 7 | sizeField: 'pageSize', 8 | // 接口返回的数据字段名 9 | listField: 'list', 10 | // 接口返回总页数字段名 11 | totalField: 'pageCount', 12 | //总数字段名 13 | countField: 'itemCount', 14 | }, 15 | //默认分页数量 16 | defaultPageSize: 10, 17 | //可切换每页数量集合 18 | pageSizes: [10, 20, 30, 40, 50], 19 | }, 20 | upload: { 21 | //考虑接口规范不同 22 | apiSetting: { 23 | // 集合字段名 24 | infoField: 'data', 25 | // 图片地址字段名 26 | imgField: 'photo', 27 | }, 28 | //最大上传图片大小 29 | maxSize: 2, 30 | //图片上传类型 31 | fileType: ['image/png', 'image/jpg', 'image/jpeg', 'image/gif', 'image/svg+xml'], 32 | }, 33 | }; 34 | -------------------------------------------------------------------------------- /src/settings/designSetting.ts: -------------------------------------------------------------------------------- 1 | // app theme preset color 2 | export const appThemeList: string[] = [ 3 | '#2d8cf0', 4 | '#0960bd', 5 | '#0084f4', 6 | '#009688', 7 | '#536dfe', 8 | '#ff5c93', 9 | '#ee4f12', 10 | '#0096c7', 11 | '#9c27b0', 12 | '#ff9800', 13 | '#FF3D68', 14 | '#00C1D4', 15 | '#71EFA3', 16 | '#171010', 17 | '#78DEC7', 18 | '#1768AC', 19 | '#FB9300', 20 | '#FC5404', 21 | ]; 22 | 23 | const setting = { 24 | //深色主题 25 | darkTheme: false, 26 | //系统主题色 27 | appTheme: '#2d8cf0', 28 | //系统内置主题色列表 29 | appThemeList, 30 | }; 31 | 32 | export default setting; 33 | -------------------------------------------------------------------------------- /src/store/index.ts: -------------------------------------------------------------------------------- 1 | import type { App } from 'vue'; 2 | import { createPinia } from 'pinia'; 3 | 4 | const store = createPinia(); 5 | 6 | export function setupStore(app: App) { 7 | app.use(store); 8 | } 9 | 10 | export { store }; 11 | -------------------------------------------------------------------------------- /src/store/modules/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/src/store/modules/index.ts -------------------------------------------------------------------------------- /src/store/modules/screenLock.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia'; 2 | import { IS_SCREENLOCKED } from '@/store/mutation-types'; 3 | import { storage } from '@/utils/Storage'; 4 | 5 | // 长时间不操作默认锁屏时间 6 | const initTime = 60 * 60; 7 | 8 | const isLocked = storage.get(IS_SCREENLOCKED, false); 9 | 10 | export type IScreenLockState = { 11 | isLocked: boolean; // 是否锁屏 12 | lockTime: number; 13 | }; 14 | 15 | export const useScreenLockStore = defineStore({ 16 | id: 'app-screen-lock', 17 | state: (): IScreenLockState => ({ 18 | isLocked: isLocked === true, // 是否锁屏 19 | lockTime: isLocked == 'true' ? initTime : 0, 20 | }), 21 | getters: {}, 22 | actions: { 23 | setLock(payload: boolean) { 24 | this.isLocked = payload; 25 | storage.set(IS_SCREENLOCKED, this.isLocked); 26 | }, 27 | setLockTime(payload = initTime) { 28 | this.lockTime = payload; 29 | }, 30 | }, 31 | }); 32 | -------------------------------------------------------------------------------- /src/store/mutation-types.ts: -------------------------------------------------------------------------------- 1 | export const ACCESS_TOKEN = 'ACCESS-TOKEN'; // 用户token 2 | export const CURRENT_USER = 'CURRENT-USER'; // 当前用户信息 3 | export const IS_SCREENLOCKED = 'IS-SCREENLOCKED'; // 是否锁屏 4 | export const TABS_ROUTES = 'TABS-ROUTES'; // 标签页 5 | -------------------------------------------------------------------------------- /src/store/types.ts: -------------------------------------------------------------------------------- 1 | import { IAsyncRouteState } from '@/store/modules/asyncRoute'; 2 | import { IUserState } from '@/store/modules/user'; 3 | import { IScreenLockState } from '@/store/modules/screenLock'; 4 | import { ITabsViewState } from '@/store/modules/tabsView'; 5 | 6 | export interface IStore { 7 | asyncRoute: IAsyncRouteState; 8 | user: IUserState; 9 | screenLock: IScreenLockState; 10 | tabsView: ITabsViewState; 11 | count: number; 12 | } 13 | -------------------------------------------------------------------------------- /src/styles/common.less: -------------------------------------------------------------------------------- 1 | //add by fast-crud 2 | 3 | .n-layout-scroll-container{ 4 | 5 | 6 | height:100%; 7 | display: flex; 8 | flex-direction: column; 9 | .layout-content-main{ 10 | height: 100%; 11 | .main-view{ 12 | height: 100%; 13 | position: relative; 14 | } 15 | } 16 | 17 | .fs-page{ 18 | position: relative; 19 | background: #fff; 20 | border-radius: 4px; 21 | padding-left:8px; 22 | padding-right:8px; 23 | height:calc(100% - 44px) 24 | } 25 | .page-card{ 26 | height: 100%; 27 | .n-card__content { 28 | padding:8px; 29 | padding-top: 2px !important; 30 | } 31 | } 32 | } 33 | 34 | 35 | .fs-desc{ 36 | font-size: 12px; 37 | color:#888888; 38 | margin-left: 5px; 39 | margin-right: 5px; 40 | } 41 | 42 | .ml-5{ 43 | margin-left:5px; 44 | } 45 | -------------------------------------------------------------------------------- /src/styles/index.less: -------------------------------------------------------------------------------- 1 | @import url('./transition/index.less'); 2 | @import url('./common.less'); 3 | -------------------------------------------------------------------------------- /src/styles/tailwind.css: -------------------------------------------------------------------------------- 1 | /*! @import */ 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | -------------------------------------------------------------------------------- /src/styles/transition/base.less: -------------------------------------------------------------------------------- 1 | .transition-default() { 2 | &-enter-active, 3 | &-leave-active { 4 | transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1) !important; 5 | } 6 | 7 | &-move { 8 | transition: transform 0.4s; 9 | } 10 | } 11 | 12 | .expand-transition { 13 | .transition-default(); 14 | } 15 | 16 | .expand-x-transition { 17 | .transition-default(); 18 | } 19 | -------------------------------------------------------------------------------- /src/styles/transition/index.less: -------------------------------------------------------------------------------- 1 | @import './base.less'; 2 | @import './fade.less'; 3 | @import './scale.less'; 4 | @import './slide.less'; 5 | @import './scroll.less'; 6 | @import './zoom.less'; 7 | 8 | .collapse-transition { 9 | transition: 0.2s height ease-in-out, 0.2s padding-top ease-in-out, 0.2s padding-bottom ease-in-out; 10 | } 11 | -------------------------------------------------------------------------------- /src/styles/transition/scale.less: -------------------------------------------------------------------------------- 1 | .scale-transition { 2 | .transition-default(); 3 | 4 | &-enter-from, 5 | &-leave, 6 | &-leave-to { 7 | opacity: 0; 8 | transform: scale(0); 9 | } 10 | } 11 | 12 | .scale-rotate-transition { 13 | .transition-default(); 14 | 15 | &-enter-from, 16 | &-leave, 17 | &-leave-to { 18 | opacity: 0; 19 | transform: scale(0) rotate(-45deg); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/styles/transition/slide.less: -------------------------------------------------------------------------------- 1 | .slide-y-transition { 2 | .transition-default(); 3 | 4 | &-enter-from, 5 | &-leave-to { 6 | opacity: 0; 7 | transform: translateY(-15px); 8 | } 9 | } 10 | 11 | .slide-y-reverse-transition { 12 | .transition-default(); 13 | 14 | &-enter-from, 15 | &-leave-to { 16 | opacity: 0; 17 | transform: translateY(15px); 18 | } 19 | } 20 | 21 | .slide-x-transition { 22 | .transition-default(); 23 | 24 | &-enter-from, 25 | &-leave-to { 26 | opacity: 0; 27 | transform: translateX(-15px); 28 | } 29 | } 30 | 31 | .slide-x-reverse-transition { 32 | .transition-default(); 33 | 34 | &-enter-from, 35 | &-leave-to { 36 | opacity: 0; 37 | transform: translateX(15px); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/styles/transition/zoom.less: -------------------------------------------------------------------------------- 1 | // zoom-out 2 | .zoom-out-enter-active, 3 | .zoom-out-leave-active { 4 | transition: opacity 0.1 ease-in-out, transform 0.15s ease-out; 5 | } 6 | 7 | .zoom-out-enter-from, 8 | .zoom-out-leave-to { 9 | opacity: 0; 10 | transform: scale(0); 11 | } 12 | 13 | // zoom-fade 14 | .zoom-fade-enter-active, 15 | .zoom-fade-leave-active { 16 | transition: transform 0.2s, opacity 0.3s ease-out; 17 | } 18 | 19 | .zoom-fade-enter-from { 20 | opacity: 0; 21 | transform: scale(0.92); 22 | } 23 | 24 | .zoom-fade-leave-to { 25 | opacity: 0; 26 | transform: scale(1.06); 27 | } 28 | -------------------------------------------------------------------------------- /src/utils/dateUtil.ts: -------------------------------------------------------------------------------- 1 | import { format } from 'date-fns'; 2 | 3 | const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm'; 4 | const DATE_FORMAT = 'YYYY-MM-DD '; 5 | 6 | export function formatToDateTime(date: Date | number, formatStr = DATE_TIME_FORMAT): string { 7 | return format(date, formatStr); 8 | } 9 | 10 | export function formatToDate(date: Date | number, formatStr = DATE_FORMAT): string { 11 | return format(date, formatStr); 12 | } 13 | -------------------------------------------------------------------------------- /src/utils/http/README.md: -------------------------------------------------------------------------------- 1 | # 另外一种http请求 2 | naive ui admin 自带的mock不太好用,从fs-admin复制一份request过来 3 | -------------------------------------------------------------------------------- /src/utils/http/alova/mocks.ts: -------------------------------------------------------------------------------- 1 | // 这里按需导入 mock 文件,只有在这里导入并导出,才会执行 mock 拦截 2 | // 跟根据实际开发情况配置 3 | import UserMock from '../../../../mock/user'; 4 | import MenusMock from '../../../../mock/user/menus'; 5 | import ConsoleMock from '../../../../mock/dashboard/console'; 6 | import TableMock from '../../../../mock/table/list'; 7 | import SystemMenuMock from '../../../../mock/system/menu'; 8 | import SystemRoleMock from '../../../../mock/system/role'; 9 | 10 | export default [UserMock, MenusMock, TableMock, ConsoleMock, SystemMenuMock, SystemRoleMock]; 11 | -------------------------------------------------------------------------------- /src/utils/lodashChunk.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 这里按需引入lodash的一些方法,方便维护 3 | */ 4 | 5 | // export {default as xxx} from 'lodash/xxx' 6 | 7 | export { default as cloneDeep } from 'lodash/cloneDeep'; 8 | export { default as intersection } from 'lodash/intersection'; 9 | export { default as get } from 'lodash/get'; 10 | export { default as upperFirst } from 'lodash/upperFirst'; 11 | export { default as omit } from 'lodash/omit'; 12 | export { default as debounce } from 'lodash/debounce'; 13 | -------------------------------------------------------------------------------- /src/utils/log.ts: -------------------------------------------------------------------------------- 1 | const projectName = import.meta.env.VITE_GLOB_APP_TITLE; 2 | 3 | export function warn(message: string) { 4 | console.warn(`[${projectName} warn]:${message}`); 5 | } 6 | 7 | export function error(message: string) { 8 | throw new Error(`[${projectName} error]:${message}`); 9 | } 10 | -------------------------------------------------------------------------------- /src/utils/propTypes.ts: -------------------------------------------------------------------------------- 1 | import { CSSProperties, VNodeChild } from 'vue'; 2 | import { createTypes, VueTypeValidableDef, VueTypesInterface } from 'vue-types'; 3 | 4 | export type VueNode = VNodeChild | JSX.Element; 5 | 6 | type PropTypes = VueTypesInterface & { 7 | readonly style: VueTypeValidableDef; 8 | readonly VNodeChild: VueTypeValidableDef; 9 | }; 10 | 11 | const propTypes = createTypes({ 12 | func: undefined, 13 | bool: undefined, 14 | string: undefined, 15 | number: undefined, 16 | object: undefined, 17 | integer: undefined, 18 | }) as PropTypes; 19 | 20 | propTypes.extend([ 21 | { 22 | name: 'style', 23 | getter: true, 24 | type: [String, Object], 25 | default: undefined, 26 | }, 27 | { 28 | name: 'VNodeChild', 29 | getter: true, 30 | type: undefined, 31 | }, 32 | ]); 33 | export { propTypes }; 34 | -------------------------------------------------------------------------------- /src/utils/urlUtils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 将对象添加当作参数拼接到URL上面 3 | * @param baseUrl 需要拼接的url 4 | * @param obj 参数对象 5 | * @returns {string} 拼接后的对象 6 | * 例子: 7 | * let obj = {a: '3', b: '4'} 8 | * setObjToUrlParams('www.baidu.com', obj) 9 | * ==>www.baidu.com?a=3&b=4 10 | */ 11 | export function setObjToUrlParams(baseUrl: string, obj: object): string { 12 | let parameters = ''; 13 | let url = ''; 14 | for (const key in obj) { 15 | parameters += key + '=' + encodeURIComponent(obj[key]) + '&'; 16 | } 17 | parameters = parameters.replace(/&$/, ''); 18 | if (/\?$/.test(baseUrl)) { 19 | url = baseUrl + parameters; 20 | } else { 21 | url = baseUrl.replace(/\/?$/, '?') + parameters; 22 | } 23 | return url; 24 | } 25 | -------------------------------------------------------------------------------- /src/views/crud/advanced/card/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req: any) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/AdvancedCard'; 6 | export function GetList(query: any) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj: any) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj: any) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id: any) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id: any) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/advanced/card/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | import _ from 'lodash-es'; 4 | const options: any = { 5 | name: 'AdvancedCard', 6 | idGenerator: 0, 7 | }; 8 | const list = [ 9 | { 10 | title: 'fast-crud怎么样', 11 | content: '很好用', 12 | }, 13 | { 14 | title: '大环境不好呀', 15 | content: '好好学习提升自己吧', 16 | }, 17 | { 18 | title: 'Certd是什么', 19 | content: 'Certd是一款开源的证书全自动管理系统', 20 | }, 21 | ]; 22 | 23 | options.list = list; 24 | options.copyTimes = 100; 25 | const mock = mockUtil.buildMock(options); 26 | 27 | export default mock; 28 | -------------------------------------------------------------------------------- /src/views/crud/advanced/custom-layout/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureCustomLayout'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/advanced/custom-layout/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureCustomLayout', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | button: '张三', 9 | link: '百度', 10 | url: 'https://www.baidu.com', 11 | link2: '手写配置', 12 | }, 13 | { 14 | button: '李四', 15 | link: '百度', 16 | url: 'https://www.baidu.com', 17 | link2: '手写配置', 18 | }, 19 | {}, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/advanced/from-backend/crud-backend.js: -------------------------------------------------------------------------------- 1 | export const crudOptions = ` 2 | ({expose,dict}) => { 3 | return { 4 | columns: { 5 | id: { 6 | title: "ID", 7 | key: "id", 8 | type: "number", 9 | column: { 10 | width: 50 11 | }, 12 | form: { 13 | show: false 14 | } 15 | }, 16 | radio: { 17 | title: "状态", 18 | search: { show: true }, 19 | type: "dict-radio", 20 | dict: dict({ 21 | url: "/mock/dicts/OpenStatusEnum?single" 22 | }) 23 | } 24 | } 25 | } 26 | } 27 | 28 | 29 | `; 30 | -------------------------------------------------------------------------------- /src/views/crud/advanced/from-backend/crud.jsx: -------------------------------------------------------------------------------- 1 | import * as api from './api'; 2 | export default function ({ expose }) { 3 | const pageRequest = async (query) => { 4 | return await api.GetList(query); 5 | }; 6 | const editRequest = async ({ form, row }) => { 7 | if (form.id == null) { 8 | form.id = row.id; 9 | } 10 | return await api.UpdateObj(form); 11 | }; 12 | const delRequest = async ({ row }) => { 13 | return await api.DelObj(row.id); 14 | }; 15 | 16 | const addRequest = async ({ form }) => { 17 | return await api.AddObj(form); 18 | }; 19 | return { 20 | crudOptions: { 21 | request: { 22 | pageRequest, 23 | addRequest, 24 | editRequest, 25 | delRequest, 26 | }, 27 | }, 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /src/views/crud/advanced/from-backend/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | import { crudOptions } from './crud-backend'; 3 | const options = { 4 | name: 'AdvancedFromBackend', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | radio: '1', 10 | }, 11 | { 12 | radio: '2', 13 | }, 14 | { 15 | radio: '0', 16 | }, 17 | ]; 18 | 19 | options.list = list; 20 | options.copyTimes = 1000; 21 | const mock = mockUtil.buildMock(options); 22 | 23 | mock.push({ 24 | path: '/AdvancedFromBackend/crud', 25 | method: 'get', 26 | handle(req) { 27 | return { 28 | code: 0, 29 | msg: 'success', 30 | data: crudOptions, 31 | }; 32 | }, 33 | }); 34 | 35 | export default mock; 36 | -------------------------------------------------------------------------------- /src/views/crud/advanced/in-dialog/crud/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = requestForMock; 3 | const apiPrefix = '/mock/ComponentInDialog'; 4 | export function GetList(query) { 5 | return request({ 6 | url: apiPrefix + '/page', 7 | method: 'get', 8 | data: query, 9 | }); 10 | } 11 | 12 | export function AddObj(obj) { 13 | return request({ 14 | url: apiPrefix + '/add', 15 | method: 'post', 16 | data: obj, 17 | }); 18 | } 19 | 20 | export function UpdateObj(obj) { 21 | return request({ 22 | url: apiPrefix + '/update', 23 | method: 'post', 24 | data: obj, 25 | }); 26 | } 27 | 28 | export function DelObj(id) { 29 | return request({ 30 | url: apiPrefix + '/delete', 31 | method: 'post', 32 | params: { id }, 33 | }); 34 | } 35 | 36 | export function GetObj(id) { 37 | return request({ 38 | url: apiPrefix + '/get', 39 | method: 'get', 40 | params: { id }, 41 | }); 42 | } 43 | -------------------------------------------------------------------------------- /src/views/crud/advanced/in-dialog/crud/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentInDialog', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: '王小虎', 9 | date: '2016-05-02', 10 | status: '0', 11 | province: '1', 12 | avatar: 'https://alicdn.antdv.com/vue.png', 13 | show: true, 14 | city: 'sz', 15 | address: '123123', 16 | zip: '518000', 17 | intro: '王小虎是element-plus的table示例出现的名字', 18 | }, 19 | { 20 | name: '张三', 21 | date: '2016-05-04', 22 | status: '1', 23 | province: '2', 24 | }, 25 | { 26 | name: '李四', 27 | date: 2232433534511, 28 | status: '1', 29 | province: '0', 30 | }, 31 | { 32 | name: '王五', 33 | date: '2016-05-03', 34 | status: '2', 35 | province: 'wh,gz', 36 | }, 37 | ]; 38 | options.list = list; 39 | const mock = mockUtil.buildMock(options); 40 | export default mock; 41 | -------------------------------------------------------------------------------- /src/views/crud/advanced/layout/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureLayout'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/advanced/layout/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureLayout', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | button: '张三', 9 | link: '百度', 10 | url: 'https://www.baidu.com', 11 | link2: '手写配置', 12 | }, 13 | { 14 | button: '李四', 15 | link: '百度', 16 | url: 'https://www.baidu.com', 17 | link2: '手写配置', 18 | }, 19 | {}, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/advanced/linkage/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormLinkage'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/advanced/local-pagination/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/AdvancedLocalPagination'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/advanced/local-pagination/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'AdvancedLocalPagination', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | status: '1', 9 | }, 10 | { 11 | status: '2', 12 | }, 13 | { 14 | status: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/advanced/nest/aside-table/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'AdvancedAside', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | class: '一班', 9 | gradeId: 1, 10 | }, 11 | { 12 | class: '二班', 13 | gradeId: 1, 14 | }, 15 | { 16 | class: '三班', 17 | gradeId: 2, 18 | }, 19 | { 20 | class: '四班', 21 | gradeId: 2, 22 | }, 23 | ]; 24 | options.list = list; 25 | const mock = mockUtil.buildMock(options); 26 | export default mock; 27 | -------------------------------------------------------------------------------- /src/views/crud/advanced/nest/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'AdvancedNest', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | grade: '一年级', 9 | nestId: 1, 10 | }, 11 | { 12 | grade: '二年级', 13 | nestId: 2, 14 | }, 15 | { 16 | grade: '三年级', 17 | nestId: 3, 18 | }, 19 | ]; 20 | options.list = list; 21 | const mock = mockUtil.buildMock(options); 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/advanced/nest/sub-table/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'AdvancedSubTable', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: '张三', 9 | }, 10 | { 11 | name: '李四', 12 | }, 13 | { 14 | name: '王五', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/basis/column-merge-plugin/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | const options: any = { 4 | name: 'BasisColumnMergePlugin', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | text: '点击右边查看按钮看效果', 10 | readonly: '我是只读', 11 | useCell: '1', 12 | }, 13 | { 14 | text: '点击编辑按钮查看效果', 15 | readonly: '我是只读', 16 | useCell: '2', 17 | }, 18 | { 19 | text: '正常字段', 20 | readonly: '我是只读', 21 | useCell: '0', 22 | }, 23 | ]; 24 | options.list = list; 25 | const mock = mockUtil.buildMock(options); 26 | export default mock; 27 | -------------------------------------------------------------------------------- /src/views/crud/basis/columns-set/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'BasisColumnsSet', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/basis/compute-more/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormComputeMore'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/basis/compute-more/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FormComputeMore', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | ref: '根据showRef显示', 9 | compute: true, 10 | status: '1', 11 | remote: '2', 12 | shower: '---> 点右边编辑查看示例效果', 13 | remote2: '2', 14 | editable: true, 15 | }, 16 | { 17 | compute: false, 18 | status: '2', 19 | remote: '0', 20 | remote2: '2', 21 | editable: false, 22 | }, 23 | { 24 | compute: true, 25 | status: '0', 26 | remote2: '2', 27 | editable: true, 28 | }, 29 | ]; 30 | options.list = list; 31 | const mock = mockUtil.buildMock(options); 32 | export default mock; 33 | -------------------------------------------------------------------------------- /src/views/crud/basis/compute/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormCompute'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/basis/compute/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FormCompute', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | ref: '根据showRef显示', 9 | compute: true, 10 | status: '1', 11 | remote: '2', 12 | shower: '---> 点右边编辑查看示例效果', 13 | remote2: '2', 14 | editable: true, 15 | }, 16 | { 17 | compute: false, 18 | status: '2', 19 | remote: '0', 20 | remote2: '2', 21 | editable: false, 22 | shower: '---> 点右边编辑查看示例效果', 23 | }, 24 | { 25 | compute: true, 26 | status: '0', 27 | remote2: '2', 28 | editable: true, 29 | shower: '---> 点右边编辑查看示例效果', 30 | }, 31 | ]; 32 | options.list = list; 33 | const mock = mockUtil.buildMock(options); 34 | export default mock; 35 | -------------------------------------------------------------------------------- /src/views/crud/basis/custom/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req: any) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/BasisCustom'; 6 | export function GetList(query: any) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj: any) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj: any) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id: any) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id: any) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/basis/custom/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 33 | -------------------------------------------------------------------------------- /src/views/crud/basis/custom/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | const options: any = { 4 | name: 'BasisCustom', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | counter: 1, 10 | cellRender: 'cellRender1', 11 | }, 12 | { 13 | counter: 2, 14 | cellRender: 'cellRender2', 15 | }, 16 | { 17 | counter: 3, 18 | cellRender: 'cellRender3', 19 | }, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/basis/i18n/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/BasisI18n'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/basis/i18n/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'BasisI18n', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | name: '张三', 10 | city: 'sz', 11 | }, 12 | { 13 | radio: '2', 14 | name: '李四', 15 | city: 'gz', 16 | }, 17 | { 18 | radio: '0', 19 | name: '王五', 20 | city: 'sh', 21 | }, 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/basis/layout-card/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/BasisLayoutCard'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/basis/layout-card/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from "/src/mock/base"; 2 | const options = { 3 | name: "BasisLayoutCard", 4 | idGenerator: 0 5 | }; 6 | const list = [ 7 | { 8 | radio: "1", 9 | name: "张三", 10 | city: "sz" 11 | }, 12 | { 13 | radio: "2", 14 | name: "李四", 15 | city: "gz" 16 | }, 17 | { 18 | radio: "0", 19 | name: "王五", 20 | city: "sh" 21 | } 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/basis/layout-custom/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/BasisLayoutCustom'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/basis/layout-custom/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'BasisLayoutCustom', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | name: '张三', 10 | city: 'sz', 11 | }, 12 | { 13 | radio: '2', 14 | name: '李四', 15 | city: 'gz', 16 | }, 17 | { 18 | radio: '0', 19 | name: '王五', 20 | city: 'sh', 21 | }, 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/basis/reset/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req: any) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/BasisReset'; 6 | 7 | export function GetList(query: any) { 8 | return request({ 9 | url: apiPrefix + '/page', 10 | method: 'get', 11 | data: query, 12 | }); 13 | } 14 | 15 | export function AddObj(obj: any) { 16 | return request({ 17 | url: apiPrefix + '/add', 18 | method: 'post', 19 | data: obj, 20 | }); 21 | } 22 | 23 | export function UpdateObj(obj: any) { 24 | return request({ 25 | url: apiPrefix + '/update', 26 | method: 'post', 27 | data: obj, 28 | }); 29 | } 30 | 31 | export function DelObj(id: any) { 32 | return request({ 33 | url: apiPrefix + '/delete', 34 | method: 'post', 35 | params: { id }, 36 | }); 37 | } 38 | 39 | export function GetObj(id: any) { 40 | return request({ 41 | url: apiPrefix + '/get', 42 | method: 'get', 43 | params: { id }, 44 | }); 45 | } 46 | -------------------------------------------------------------------------------- /src/views/crud/basis/reset/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | const options: any = { 4 | name: 'BasisReset', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | switch: true, 10 | text: '1111', 11 | }, 12 | { 13 | switch: true, 14 | text: '2222', 15 | }, 16 | { 17 | switch: true, 18 | text: '3333', 19 | }, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/basis/value-change/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormValueChange'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/basis/value-change/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FormValueChange', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | ref: '根据showRef显示', 9 | compute: true, 10 | status: '1', 11 | remote: '2', 12 | shower: '---> 点右边编辑查看示例效果', 13 | remote2: '2', 14 | editable: true, 15 | }, 16 | { 17 | compute: false, 18 | status: '2', 19 | remote: '0', 20 | remote2: '2', 21 | editable: false, 22 | }, 23 | { 24 | compute: true, 25 | status: '0', 26 | remote2: '2', 27 | editable: true, 28 | }, 29 | ]; 30 | options.list = list; 31 | const mock = mockUtil.buildMock(options); 32 | export default mock; 33 | -------------------------------------------------------------------------------- /src/views/crud/component/button/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentButton'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/button/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentButton', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | button: '张三', 9 | link: '此按钮跳转url字段的链接', 10 | url: 'https://www.baidu.com', 11 | link2: 'https://www.baidu.com', 12 | }, 13 | { 14 | button: '李四', 15 | link: '此按钮跳转url字段的链接', 16 | url: 'https://www.baidu.com', 17 | link2: 'https://www.baidu.com', 18 | }, 19 | ]; 20 | options.list = list; 21 | const mock = mockUtil.buildMock(options); 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/component/cascader/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentCascader'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/cascader/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentCascader', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | cascader: ['zhinan', 'shejiyuanze', 'yizhi'], 9 | lazyLoad: ['11', '1101', '110101', '110101001'], 10 | multiple: [], 11 | }, 12 | { 13 | cascader: ['zhinan', 'shejiyuanze', 'yizhi'], 14 | }, 15 | { 16 | cascader: ['zhinan', 'shejiyuanze', 'yizhi'], 17 | }, 18 | ]; 19 | options.list = list; 20 | const mock = mockUtil.buildMock(options); 21 | export default mock; 22 | -------------------------------------------------------------------------------- /src/views/crud/component/checkbox/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentCheckbox'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/checkbox/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentCheckbox', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | checkbox: ['1', '2'], 9 | }, 10 | { 11 | checkbox: '2', 12 | }, 13 | { 14 | checkbox: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/component/code/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 33 | -------------------------------------------------------------------------------- /src/views/crud/component/code/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'ComponentCode', 4 | idGenerator: 0, 5 | }; 6 | const list: any = [ 7 | { 8 | json: '{"p1":1,"b":2}', 9 | yaml: ` 10 | property: 1 11 | p1: 3 12 | services: 13 | certd: 14 | container_name: certd 15 | `, 16 | javascript: `console.log(123)`, 17 | }, 18 | { 19 | json: '{"p1":3,"b":4}', 20 | }, 21 | ]; 22 | options.list = list; 23 | const mock = mockUtil.buildMock(options); 24 | export default mock; 25 | -------------------------------------------------------------------------------- /src/views/crud/component/date/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentDate'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/editor/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentEditor'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/editor/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | 3 | const options = { 4 | name: 'ComponentEditor', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | title: 'd2-crud-plus好用吗?', 10 | text: '非常好用', 11 | content_quill: '

非常好用哦

', 12 | change: 'quill', 13 | }, 14 | { 15 | title: 'd2-crud-plus有什么优势?', 16 | text: '简单,方便', 17 | content_quill: '简单方便', 18 | change: 'wang', 19 | }, 20 | { 21 | title: '1111111', 22 | text: '22222', 23 | content_quill: '3333', 24 | change: 'wang', 25 | }, 26 | ]; 27 | options.list = list; 28 | const mock = mockUtil.buildMock(options); 29 | export default mock; 30 | -------------------------------------------------------------------------------- /src/views/crud/component/icon/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentIcon'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/icon/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentIcon', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | icon: 'ri:24-hours-fill', 9 | svg: 'svg:icon-compass', 10 | }, 11 | { 12 | icon: 'ion:add-circle-outline', 13 | svg: 'svg:icon-left-circle', 14 | }, 15 | { 16 | icon: 'ion:american-football-sharp', 17 | svg: 'svg:icon-Dollar', 18 | }, 19 | ]; 20 | options.list = list; 21 | const mock = mockUtil.buildMock(options); 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/component/json/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req: any) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentJson'; 6 | export function GetList(query: any) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj: any) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj: any) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id: any) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id: any) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/json/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 29 | -------------------------------------------------------------------------------- /src/views/crud/component/json/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'ComponentJson', 4 | idGenerator: 0, 5 | }; 6 | const list: any = [ 7 | { 8 | json: '{"a":1,"b":2}', 9 | async: null, 10 | }, 11 | { 12 | json: '{"a":3,"b":4}', 13 | async: null, 14 | }, 15 | ]; 16 | options.list = list; 17 | const mock = mockUtil.buildMock(options); 18 | export default mock; 19 | -------------------------------------------------------------------------------- /src/views/crud/component/number/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentNumber'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/number/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentNumber', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | integer: 1, 9 | float: 1.1, 10 | format: 100, 11 | }, 12 | { 13 | integer: 2, 14 | float: 1.2, 15 | format: 100, 16 | }, 17 | { 18 | integer: 3, 19 | float: 1.3, 20 | format: 100, 21 | }, 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/component/phone/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from "/src/mock/base"; 2 | const options: any = { 3 | name: "ComponentPhone", 4 | idGenerator: 0 5 | }; 6 | const list = [ 7 | { 8 | phone: { 9 | callingCode: "86", 10 | phoneNumber: "12345678" 11 | }, 12 | code: "86", 13 | phoneNumber: "12424354" 14 | } 15 | ]; 16 | options.list = list; 17 | const mock = mockUtil.buildMock(options); 18 | export default mock; 19 | -------------------------------------------------------------------------------- /src/views/crud/component/radio/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentRadio'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/radio/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentRadio', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | button: '1', 10 | bool: true, 11 | }, 12 | { 13 | radio: '2', 14 | button: '2', 15 | bool: false, 16 | }, 17 | { 18 | radio: '0', 19 | button: '0', 20 | }, 21 | ]; 22 | options.list = list; 23 | const mock = mockUtil.buildMock(options); 24 | export default mock; 25 | -------------------------------------------------------------------------------- /src/views/crud/component/select/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentSelect'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/switch/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentSwitch'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/switch/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentSwitch', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | switch: true, 9 | cellSwitch: true, 10 | showTarget: '点左边开关显示或隐藏', 11 | }, 12 | { 13 | switch: false, 14 | cellSwitch: true, 15 | showTarget: '点左边开关显示或隐藏', 16 | }, 17 | { 18 | switch: true, 19 | cellSwitch: false, 20 | showTarget: '点左边开关显示或隐藏', 21 | }, 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/component/table-select/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 31 | -------------------------------------------------------------------------------- /src/views/crud/component/table-select/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'ComponentTableSelect', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | single: 1, 9 | multi: [1, 2], 10 | viewMode: 1, 11 | }, 12 | { 13 | single: 3, 14 | multi: [1, 2, 3], 15 | viewMode: 2, 16 | }, 17 | { 18 | single: 2, 19 | }, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/component/text/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentText', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: '王小虎', 9 | date: '2016-05-02', 10 | status: '0', 11 | province: '1', 12 | avatar: 'https://alicdn.antdv.com/vue.png', 13 | show: true, 14 | city: 'sz', 15 | address: '123123', 16 | zip: '518000', 17 | intro: '王小虎是element-plus的table示例出现的名字', 18 | copy: '测试文本', 19 | classId: 1, 20 | }, 21 | { 22 | name: '张三', 23 | date: '2016-05-04', 24 | status: '1', 25 | province: '2', 26 | classId: 2, 27 | }, 28 | { 29 | name: '李四', 30 | date: 2232433534511, 31 | status: '1', 32 | province: '0', 33 | classId: 3, 34 | }, 35 | { 36 | name: '王五', 37 | date: '2016-05-03', 38 | status: '2', 39 | province: 'wh,gz', 40 | }, 41 | ]; 42 | options.list = list; 43 | const mock = mockUtil.buildMock(options); 44 | export default mock; 45 | -------------------------------------------------------------------------------- /src/views/crud/component/tree/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentTree'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/tree/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentTree', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | tree: 'zhinan', 9 | multiple: ['zhinan', 'yizhi'], 10 | }, 11 | { tree: 'zhinan' }, 12 | { tree: 'zhinan' }, 13 | ]; 14 | options.list = list; 15 | const mock = mockUtil.buildMock(options); 16 | export default mock; 17 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/alioss/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/AliossUploader'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/alioss/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'AliossUploader', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | avatar_error1: 'http://greper.handsfree.work/extends/avatar1.jpg', 9 | avatar_error2: 'http://greper.handsfree.work/extends/avatar1.jpg', 10 | avatar: 'http://greper.handsfree.work/extends/avatar.jpg', 11 | file: [ 12 | 'http://greper.handsfree.work/extends/avatar.jpg', 13 | 'https://www.baidu.com/img/bd_logo1.png', 14 | ], 15 | image: [ 16 | 'http://greper.handsfree.work/extends/avatar.jpg', 17 | 'https://www.baidu.com/img/bd_logo1.png', 18 | ], 19 | image2: [ 20 | 'http://greper.handsfree.work/extends/avatar.jpg', 21 | 'https://www.baidu.com/img/bd_logo1.png', 22 | ], 23 | }, 24 | { 25 | radio: '2', 26 | }, 27 | { 28 | radio: '0', 29 | }, 30 | ]; 31 | options.list = list; 32 | const mock = mockUtil.buildMock(options); 33 | export default mock; 34 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/cos/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/CosUploader'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/cos/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'CosUploader', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | avatar: 'http://greper.handsfree.work/extends/avatar.jpg', 9 | file: [ 10 | 'http://greper.handsfree.work/extends/avatar.jpg', 11 | 'https://www.baidu.com/img/bd_logo1.png', 12 | ], 13 | image: [ 14 | 'http://greper.handsfree.work/extends/avatar.jpg', 15 | 'https://www.baidu.com/img/bd_logo1.png', 16 | ], 17 | image2: [ 18 | 'http://greper.handsfree.work/extends/avatar.jpg', 19 | 'https://www.baidu.com/img/bd_logo1.png', 20 | ], 21 | }, 22 | { 23 | radio: '2', 24 | }, 25 | { 26 | radio: '0', 27 | }, 28 | ]; 29 | options.list = list; 30 | const mock = mockUtil.buildMock(options); 31 | export default mock; 32 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/cropper/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/CropperUploader'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/cropper/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'CropperUploader', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | avatar_error1: 'http://greper.handsfree.work/extends/avatar1.jpg', 9 | avatar_error2: 'http://greper.handsfree.work/extends/avatar1.jpg', 10 | avatar: 'http://greper.handsfree.work/extends/avatar.jpg', 11 | file: [ 12 | 'http://greper.handsfree.work/extends/avatar.jpg', 13 | 'https://www.baidu.com/img/bd_logo1.png', 14 | ], 15 | image: [ 16 | 'http://greper.handsfree.work/extends/avatar.jpg', 17 | 'https://www.baidu.com/img/bd_logo1.png', 18 | ], 19 | image2: [ 20 | 'http://greper.handsfree.work/extends/avatar.jpg', 21 | 'https://www.baidu.com/img/bd_logo1.png', 22 | ], 23 | }, 24 | { 25 | radio: '2', 26 | }, 27 | { 28 | radio: '0', 29 | }, 30 | ]; 31 | options.list = list; 32 | const mock = mockUtil.buildMock(options); 33 | export default mock; 34 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/form/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/ComponentUploader'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/form/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'ComponentUploader', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | avatar: 'http://greper.handsfree.work/extends/avatar.jpg', 9 | file: [ 10 | 'http://greper.handsfree.work/extends/avatar.jpg', 11 | 'https://www.baidu.com/img/bd_logo1.png', 12 | ], 13 | pictureCard: [ 14 | 'http://greper.handsfree.work/extends/avatar.jpg', 15 | 'https://www.baidu.com/img/bd_logo1.png', 16 | ], 17 | error: ['http://localhost:11111/error_image'], 18 | limit: [ 19 | 'http://greper.handsfree.work/extends/avatar.jpg', 20 | 'https://www.baidu.com/img/bd_logo1.png', 21 | ], 22 | statusRemote: '0', 23 | }, 24 | { 25 | radio: '2', 26 | }, 27 | { 28 | radio: '0', 29 | }, 30 | ]; 31 | options.list = list; 32 | const mock = mockUtil.buildMock(options); 33 | export default mock; 34 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/qiniu/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/QiniuUploader'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/qiniu/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'QiniuUploader', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | avatar: 'http://greper.handsfree.work/extends/avatar.jpg', 9 | file: [ 10 | 'http://greper.handsfree.work/extends/avatar.jpg', 11 | 'https://www.baidu.com/img/bd_logo1.png', 12 | ], 13 | image: [ 14 | 'http://greper.handsfree.work/extends/avatar.jpg', 15 | 'https://www.baidu.com/img/bd_logo1.png', 16 | ], 17 | image2: [ 18 | 'http://greper.handsfree.work/extends/avatar.jpg', 19 | 'https://www.baidu.com/img/bd_logo1.png', 20 | ], 21 | }, 22 | { 23 | radio: '2', 24 | }, 25 | { 26 | radio: '0', 27 | }, 28 | ]; 29 | options.list = list; 30 | const mock = mockUtil.buildMock(options); 31 | export default mock; 32 | -------------------------------------------------------------------------------- /src/views/crud/component/uploader/s3/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | const options: any = { 4 | name: 'ComponentUploaderS3', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | avatar: 'http://greper.handsfree.work/extends/avatar.jpg', 10 | file: [ 11 | 'http://greper.handsfree.work/extends/avatar.jpg', 12 | 'https://www.baidu.com/img/bd_logo1.png', 13 | ], 14 | image: [ 15 | 'http://greper.handsfree.work/extends/avatar.jpg', 16 | 'https://www.baidu.com/img/bd_logo1.png', 17 | ], 18 | image2: [ 19 | 'http://greper.handsfree.work/extends/avatar.jpg', 20 | 'https://www.baidu.com/img/bd_logo1.png', 21 | ], 22 | }, 23 | { 24 | radio: '2', 25 | }, 26 | { 27 | radio: '0', 28 | }, 29 | ]; 30 | options.list = list; 31 | const mock = mockUtil.buildMock(options); 32 | export default mock; 33 | -------------------------------------------------------------------------------- /src/views/crud/dict/cloneable/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/DictCloneable'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/dict/cloneable/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'DictCloneable', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | status: '1', 9 | remote: '2', 10 | modifyDict: true, 11 | }, 12 | { 13 | status: '2', 14 | remote: '0', 15 | modifyDict: true, 16 | }, 17 | { 18 | status: '0', 19 | modifyDict: true, 20 | }, 21 | ]; 22 | options.list = list; 23 | const mock = mockUtil.buildMock(options); 24 | export default mock; 25 | -------------------------------------------------------------------------------- /src/views/crud/dict/prototype/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/DictPrototype'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/dict/prototype/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'DictPrototype', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | status: '1', 9 | remote: '2', 10 | modifyDict: false, 11 | switch: true, 12 | dynamicGetData: '1', 13 | dynamicUrl: '2', 14 | }, 15 | { 16 | status: '2', 17 | remote: '0', 18 | modifyDict: false, 19 | dynamicGetData: '1', 20 | dynamicUrl: '2', 21 | }, 22 | { 23 | status: '0', 24 | modifyDict: false, 25 | dynamicGetData: '1', 26 | dynamicUrl: '2', 27 | }, 28 | ]; 29 | options.list = list; 30 | const mock = mockUtil.buildMock(options); 31 | export default mock; 32 | -------------------------------------------------------------------------------- /src/views/crud/dict/shared/manager/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/DictSharedManager'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/dict/shared/manager/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 34 | -------------------------------------------------------------------------------- /src/views/crud/dict/shared/manager/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'DictSharedManager', 4 | idGenerator: 0, 5 | copyTimes: 1, 6 | }; 7 | const list = [ 8 | { 9 | name: 'close', 10 | label: '关闭', 11 | }, 12 | { 13 | name: 'open', 14 | label: '打开', 15 | }, 16 | { 17 | name: 'stop', 18 | label: '停止', 19 | }, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/dict/shared/shared-dict.ts: -------------------------------------------------------------------------------- 1 | import { dict, utils } from '@fast-crud/fast-crud'; 2 | import * as api from './manager/api'; 3 | export const statusDict = dict({ 4 | value: 'name', 5 | async getData() { 6 | const res = await api.GetList({ query: {}, sort: {}, page: { limit: 9999 } }); 7 | utils.logger.debug('status dict first loaded', res.records); 8 | return res.records; 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /src/views/crud/dict/shared/use/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/DictSharedUse'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/dict/shared/use/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 34 | -------------------------------------------------------------------------------- /src/views/crud/dict/shared/use/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from "/src/mock/base"; 2 | const options = { 3 | name: "DictSharedUse", 4 | idGenerator: 0 5 | }; 6 | const list = [ 7 | { 8 | status: "close" 9 | }, 10 | { 11 | status: "stop" 12 | }, 13 | { 14 | status: "open" 15 | } 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/dict/single/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/DictSingle'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/dict/single/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'DictSingle', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | status: '1', 9 | remote: '2', 10 | }, 11 | { 12 | status: '2', 13 | remote: '0', 14 | }, 15 | { 16 | status: '0', 17 | }, 18 | ]; 19 | options.list = list; 20 | const mock = mockUtil.buildMock(options); 21 | export default mock; 22 | -------------------------------------------------------------------------------- /src/views/crud/editable/cell/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | const options: any = { 4 | name: 'EditableCell', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | radio: '1', 10 | children: [ 11 | { 12 | radio: '2', 13 | }, 14 | ], 15 | }, 16 | { 17 | radio: '2', 18 | }, 19 | { 20 | radio: '0', 21 | }, 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/editable/free/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'EditableFree', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | children: [ 10 | { 11 | radio: '2', 12 | }, 13 | ], 14 | }, 15 | { 16 | radio: '2', 17 | }, 18 | { 19 | radio: '0', 20 | }, 21 | ]; 22 | options.list = list; 23 | const mock = mockUtil.buildMock(options); 24 | export default mock; 25 | -------------------------------------------------------------------------------- /src/views/crud/editable/row/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'EditableRow', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | children: [ 10 | { 11 | radio: '2', 12 | }, 13 | ], 14 | }, 15 | { 16 | radio: '2', 17 | }, 18 | { 19 | radio: '0', 20 | }, 21 | ]; 22 | options.list = list; 23 | const mock = mockUtil.buildMock(options); 24 | export default mock; 25 | -------------------------------------------------------------------------------- /src/views/crud/editable/sub-crud/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'EditableSubCrud', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | subTable: [{ id: 0, name: '王小虎' }], 10 | }, 11 | { 12 | radio: '2', 13 | }, 14 | { 15 | radio: '0', 16 | }, 17 | ]; 18 | options.list = list; 19 | const mock = mockUtil.buildMock(options); 20 | export default mock; 21 | -------------------------------------------------------------------------------- /src/views/crud/editable/sub-crud/row/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'EditableSubCrudTarget', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | name: '张三', 10 | parentId: 1, 11 | }, 12 | { 13 | radio: '2', 14 | parentId: 2, 15 | }, 16 | { 17 | parentId: 3, 18 | }, 19 | ]; 20 | options.list = list; 21 | const mock = mockUtil.buildMock(options); 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/editable/vmodel/mock.ts: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options: any = { 3 | name: 'EditableVModel', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | subTable: [{ id: 0, name: '王小虎' }], 10 | }, 11 | { 12 | radio: '2', 13 | }, 14 | { 15 | radio: '0', 16 | }, 17 | ]; 18 | options.list = list; 19 | const mock = mockUtil.buildMock(options); 20 | export default mock; 21 | -------------------------------------------------------------------------------- /src/views/crud/feature/column-sort/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureColumnSort', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | col1: '1', 9 | col2: '2', 10 | col3: '3', 11 | col4: '4', 12 | col5: '5', 13 | }, 14 | { 15 | col1: '1', 16 | col2: '2', 17 | col3: '3', 18 | col4: '4', 19 | col5: '5', 20 | }, 21 | { 22 | col1: '1', 23 | col2: '2', 24 | col3: '3', 25 | col4: '4', 26 | col5: '5', 27 | }, 28 | ]; 29 | options.list = list; 30 | const mock = mockUtil.buildMock(options); 31 | export default mock; 32 | -------------------------------------------------------------------------------- /src/views/crud/feature/columns-set/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureColumnsSet', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/editable-row/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureEditableRow', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/editable/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureEditable', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/expand/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureExpand', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/export/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | const options: any = { 4 | name: 'FeatureExport', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | text: '测试文本1', 10 | radio: '1', 11 | multi: ['1', '2'], 12 | date: 1111111222222, 13 | }, 14 | { 15 | text: '测试文本2', 16 | radio: '2', 17 | multi: ['0', '2'], 18 | date: 123123234433, 19 | }, 20 | { 21 | text: '测试文本3', 22 | }, 23 | { 24 | text: '测试文本4', 25 | }, 26 | { 27 | text: '测试文本5', 28 | }, 29 | ]; 30 | options.list = list; 31 | const mock = mockUtil.buildMock(options); 32 | export default mock; 33 | -------------------------------------------------------------------------------- /src/views/crud/feature/filter/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureFilter'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/filter/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureFilter', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | remote: '0', 10 | }, 11 | { 12 | radio: '2', 13 | remote: '1', 14 | }, 15 | { 16 | radio: '0', 17 | remote: '2', 18 | }, 19 | ]; 20 | options.list = list; 21 | const mock = mockUtil.buildMock(options); 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/feature/fixed/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureFixed', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | text1: '我会被固定在左侧', 9 | last: '操作列被固定在右侧', 10 | }, 11 | ]; 12 | options.list = list; 13 | const mock = mockUtil.buildMock(options); 14 | export default mock; 15 | -------------------------------------------------------------------------------- /src/views/crud/feature/header-group/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureHeaderGroup'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/header-group/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureHeaderGroup', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: '张三', 9 | age: 18, 10 | province: '广东省', 11 | city: '深圳市', 12 | county: '南山区', 13 | street: '粤海街道', 14 | }, 15 | { 16 | name: '李四', 17 | age: 26, 18 | province: '浙江省', 19 | city: '杭州市', 20 | county: '西湖区', 21 | street: '西湖街道', 22 | }, 23 | { 24 | name: '王五', 25 | age: 24, 26 | }, 27 | ]; 28 | options.list = list; 29 | const mock = mockUtil.buildMock(options); 30 | export default mock; 31 | -------------------------------------------------------------------------------- /src/views/crud/feature/height/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureHeight'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/height/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureHeight', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | button: '1', 10 | bool: true, 11 | }, 12 | { 13 | radio: '2', 14 | button: '2', 15 | bool: false, 16 | }, 17 | { 18 | radio: '0', 19 | button: '0', 20 | }, 21 | ]; 22 | options.list = list; 23 | const mock = mockUtil.buildMock(options); 24 | export default mock; 25 | -------------------------------------------------------------------------------- /src/views/crud/feature/hide/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureHide'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/hide/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureHide', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/index/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureIndex', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/local-v-model/crud.jsx: -------------------------------------------------------------------------------- 1 | import { uiContext } from '@fast-crud/fast-crud'; 2 | 3 | export default function ({ expose }) { 4 | return { 5 | crudOptions: { 6 | mode: { 7 | name: 'local', 8 | isMergeWhenUpdate: true, 9 | isAppendWhenAdd: true, 10 | }, 11 | search: { 12 | show: false, 13 | }, 14 | toolbar: { 15 | show: false, 16 | }, 17 | pagination: { 18 | show: false, 19 | }, 20 | columns: { 21 | name: { 22 | type: 'text', 23 | title: '联系人姓名', 24 | }, 25 | mobile: { 26 | type: 'text', 27 | title: '联系人手机号码', 28 | }, 29 | }, 30 | }, 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /src/views/crud/feature/local/crud.jsx: -------------------------------------------------------------------------------- 1 | import { uiContext } from '@fast-crud/fast-crud'; 2 | 3 | export default function ({ expose }) { 4 | return { 5 | crudOptions: { 6 | mode: { 7 | name: 'local', 8 | isMergeWhenUpdate: true, 9 | isAppendWhenAdd: true, 10 | }, 11 | actionbar: { buttons: { add: { show: true }, addRow: { show: false } } }, 12 | editable: { 13 | enabled: false, 14 | mode: 'row', 15 | activeTrigger: false, 16 | }, 17 | search: { 18 | show: false, 19 | }, 20 | pagination: { 21 | show: false, 22 | }, 23 | columns: { 24 | name: { 25 | type: 'text', 26 | title: '联系人姓名', 27 | }, 28 | mobile: { 29 | type: 'text', 30 | title: '联系人手机号码', 31 | }, 32 | }, 33 | }, 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /src/views/crud/feature/merge/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureMerge'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/merge/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from "/src/mock/base"; 2 | const options = { 3 | name: "FeatureMerge", 4 | idGenerator: 0 5 | }; 6 | const list = [ 7 | { 8 | radio: "1", 9 | cellMerge: "test", 10 | colMerge1: "111", 11 | colMerge2: "222", 12 | 13 | header1: "aaa", 14 | header2: "bbb" 15 | }, 16 | { 17 | radio: "2", 18 | cellMerge: "test", 19 | colMerge1: "111", 20 | colMerge2: "222", 21 | 22 | header1: "aaa", 23 | header2: "bbb" 24 | }, 25 | { 26 | radio: "0", 27 | cellMerge: "test", 28 | colMerge1: "111", 29 | colMerge2: "222", 30 | header1: "aaa", 31 | header2: "bbb" 32 | } 33 | ]; 34 | options.list = list; 35 | const mock = mockUtil.buildMock(options); 36 | export default mock; 37 | -------------------------------------------------------------------------------- /src/views/crud/feature/remove/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureRemove'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/remove/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureRemove', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | text: '测试文本1', 9 | }, 10 | { 11 | text: '测试文本2', 12 | }, 13 | { 14 | text: '测试文本3', 15 | }, 16 | { 17 | text: '测试文本4', 18 | }, 19 | { 20 | text: '测试文本5', 21 | }, 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/feature/search-multi/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureSearchMulti'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/search-multi/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureSearchMulti', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/search/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FeatureSearch'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/feature/search/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureSearch', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | valueBuilder: '321', 10 | }, 11 | { 12 | radio: '2', 13 | valueBuilder: '321', 14 | }, 15 | { 16 | radio: '0', 17 | valueBuilder: '321', 18 | }, 19 | ]; 20 | options.list = list; 21 | const mock = mockUtil.buildMock(options); 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/feature/selection/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureSelection', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/feature/sortable/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureSortable', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | radio1: '1', 10 | radio2: '2', 11 | }, 12 | { 13 | radio: '2', 14 | radio1: '2', 15 | radio2: '0', 16 | }, 17 | { 18 | radio: '0', 19 | radio1: '0', 20 | radio2: '1', 21 | }, 22 | ]; 23 | options.list = list; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/feature/tabs/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | const options: any = { 4 | name: 'FeatureTabs', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | radio: '1', 10 | valueBuilder: '321', 11 | }, 12 | { 13 | radio: '2', 14 | valueBuilder: '321', 15 | }, 16 | { 17 | radio: '0', 18 | valueBuilder: '321', 19 | }, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/feature/value-builder/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'FeatureValueBuilder', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: 'user1', 9 | roles: [ 10 | { id: 1, name: '管理员' }, 11 | { id: 2, name: '普通用户' }, 12 | ], 13 | }, 14 | { 15 | name: 'user2', 16 | roles: [{ id: 1, name: '管理员' }], 17 | }, 18 | ]; 19 | options.list = list; 20 | const mock = mockUtil.buildMock(options); 21 | export default mock; 22 | -------------------------------------------------------------------------------- /src/views/crud/form/base/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req: any) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormBase'; 6 | export function GetList(query: any) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj: any) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj: any) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id: any) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id: any) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/custom-form/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 35 | -------------------------------------------------------------------------------- /src/views/crud/form/drawer/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/formText'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/drawer/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'formText', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: '王小虎', 9 | date: '2016-05-02', 10 | status: '0', 11 | province: '1', 12 | avatar: 'https://alicdn.antdv.com/vue.png', 13 | show: true, 14 | city: 'sz', 15 | address: '123123', 16 | zip: '518000', 17 | intro: '王小虎是element-plus的table示例出现的名字', 18 | }, 19 | { 20 | name: '张三', 21 | date: '2016-05-04', 22 | status: '1', 23 | province: '2', 24 | }, 25 | { 26 | name: '李四', 27 | date: 2232433534511, 28 | status: '1', 29 | province: '0', 30 | }, 31 | { 32 | name: '王五', 33 | date: '2016-05-03', 34 | status: '2', 35 | province: 'wh,gz', 36 | }, 37 | ]; 38 | options.list = list; 39 | const mock = mockUtil.buildMock(options); 40 | export default mock; 41 | -------------------------------------------------------------------------------- /src/views/crud/form/group-tabs/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormGroupTabs'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/group/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormGroup'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/helper/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormHelper'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/inner/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormInner'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + "/page", 9 | method: "get", 10 | data: query 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + "/add", 17 | method: "post", 18 | data: obj 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + "/update", 25 | method: "post", 26 | data: obj 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + "/delete", 33 | method: "post", 34 | params: { id } 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + "/info", 41 | method: "get", 42 | params: { id } 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/inner/area/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from "/src/mock/base"; 2 | 3 | const options = { 4 | name: "FormInnerArea", 5 | idGenerator: 0 6 | }; 7 | const list = [ 8 | { 9 | area: "深圳" 10 | }, 11 | { 12 | area: "北京" 13 | }, 14 | { 15 | area: "上海" 16 | }, 17 | { 18 | area: "广州" 19 | } 20 | ]; 21 | options.list = list; 22 | options.copyTimes = 1; 23 | const mock = mockUtil.buildMock(options); 24 | export default mock; 25 | -------------------------------------------------------------------------------- /src/views/crud/form/inner/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from "/src/mock/base"; 2 | 3 | const options = { 4 | name: "FormInner", 5 | idGenerator: 0 6 | }; 7 | const list = [ 8 | { 9 | name: "王小虎", 10 | age: 15, 11 | password: "", 12 | status: "2", 13 | url: "https://baidu.com" 14 | }, 15 | { 16 | name: "张三", 17 | age: 18, 18 | password: "", 19 | url: "https://baidu.com" 20 | } 21 | ]; 22 | options.list = list; 23 | options.copyTimes = 1000; 24 | const mock = mockUtil.buildMock(options); 25 | export default mock; 26 | -------------------------------------------------------------------------------- /src/views/crud/form/layout-flex/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/formLayoutFlex'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/layout-flex/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'formLayoutFlex', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: '王小虎', 9 | date: '2016-05-02', 10 | status: '0', 11 | province: '1', 12 | avatar: 'https://alicdn.antdv.com/vue.png', 13 | show: true, 14 | city: 'sz', 15 | address: '123123', 16 | zip: '518000', 17 | order: '我在编辑的时候会排到第一个', 18 | intro: '王小虎是element-plus的table示例出现的名字', 19 | }, 20 | { 21 | name: '张三', 22 | date: '2016-05-04', 23 | status: '1', 24 | province: '2', 25 | }, 26 | { 27 | name: '李四', 28 | date: 2232433534511, 29 | status: '1', 30 | province: '0', 31 | }, 32 | ]; 33 | options.list = list; 34 | const mock = mockUtil.buildMock(options); 35 | export default mock; 36 | -------------------------------------------------------------------------------- /src/views/crud/form/layout-grid/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/formLayoutGrid'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/layout-grid/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'formLayoutGrid', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | name: '王小虎', 9 | date: '2016-05-02', 10 | status: '0', 11 | province: '1', 12 | avatar: 'https://alicdn.antdv.com/vue.png', 13 | show: true, 14 | city: 'sz', 15 | address: '123123', 16 | zip: '518000', 17 | order: '我在编辑的时候会排到第一个', 18 | intro: '王小虎是element-plus的table示例出现的名字', 19 | }, 20 | { 21 | name: '张三', 22 | date: '2016-05-04', 23 | status: '1', 24 | }, 25 | { 26 | name: '李四', 27 | date: 2232433534511, 28 | status: '1', 29 | province: '0', 30 | }, 31 | ]; 32 | options.list = list; 33 | const mock = mockUtil.buildMock(options); 34 | export default mock; 35 | -------------------------------------------------------------------------------- /src/views/crud/form/layout/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/formLayout'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/layout/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'formLayout', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | display: 'flex', 9 | name: 'aa', 10 | date: '2016-05-02', 11 | status: '0', 12 | province: '1', 13 | avatar: 'https://alicdn.antdv.com/vue.png', 14 | show: true, 15 | city: 'sz', 16 | address: '123123', 17 | zip: '518000', 18 | }, 19 | { 20 | display: 'grid', 21 | name: 'bb', 22 | date: '2016-05-04', 23 | status: '1', 24 | province: '2', 25 | }, 26 | { 27 | name: 'cc', 28 | date: 2232433534511, 29 | status: '1', 30 | province: '0', 31 | }, 32 | { 33 | name: 'dd', 34 | date: '2016-05-03', 35 | status: '2', 36 | province: 'wh,gz', 37 | }, 38 | ]; 39 | options.list = list; 40 | const mock = mockUtil.buildMock(options); 41 | export default mock; 42 | -------------------------------------------------------------------------------- /src/views/crud/form/nest/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormNestObject'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/new-page/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormNewPage'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/new-page/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | 3 | const options = { 4 | name: 'FormNewPage', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | title: '无线充电宝', 10 | code: '100001', 11 | images: 'https://img0.bdstatic.com/static/searchdetail/img/logo-2X_0c4ef02.png', 12 | price: 100, 13 | stock: 99, 14 | intro: '30000毫安超大容量移动电源充电宝官方原装正品专用便携', 15 | content: '', 16 | }, 17 | ]; 18 | 19 | options.list = list; 20 | options.copyTimes = 1000; 21 | const mock = mockUtil.buildMock(options); 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/form/render/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormRender'; 6 | export function GetList(query: any) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj: any) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj: any) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id: any) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id: any) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/render/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | 4 | const options: any = { 5 | name: 'FormRender', 6 | idGenerator: 0, 7 | }; 8 | const list = [ 9 | { 10 | name: '王小虎', 11 | render: 'render', 12 | }, 13 | { 14 | name: '张三', 15 | }, 16 | ]; 17 | 18 | options.list = list; 19 | options.copyTimes = 1000; 20 | const mock = mockUtil.buildMock(options); 21 | 22 | export default mock; 23 | -------------------------------------------------------------------------------- /src/views/crud/form/single-column/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormSingleColumn'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/single-column/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 33 | -------------------------------------------------------------------------------- /src/views/crud/form/validation/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormValidation'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/validation/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | 3 | const options = { 4 | name: 'FormValidation', 5 | idGenerator: 0, 6 | }; 7 | const list = [ 8 | { 9 | name: '王小虎', 10 | age: 15, 11 | password: '', 12 | status: '2', 13 | url: 'https://baidu.com', 14 | }, 15 | { 16 | name: '张三', 17 | age: 18, 18 | password: '', 19 | url: 'https://baidu.com', 20 | }, 21 | { 22 | status: '2', 23 | }, 24 | ]; 25 | options.list = list; 26 | options.copyTimes = 1000; 27 | const mock = mockUtil.buildMock(options); 28 | export default mock; 29 | -------------------------------------------------------------------------------- /src/views/crud/form/view/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req: any) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormView'; 6 | export function GetList(query: any) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj: any) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj: any) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id: any) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id: any) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/view/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 34 | -------------------------------------------------------------------------------- /src/views/crud/form/view/mock.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | 4 | const options: any = { 5 | name: 'FormView', 6 | idGenerator: 0, 7 | }; 8 | const list = [ 9 | { 10 | name: '王小虎', 11 | age: '15', 12 | password: '', 13 | status: '2', 14 | url: 'https://baidu.com', 15 | }, 16 | { 17 | name: '张三', 18 | age: '18', 19 | password: '', 20 | url: 'https://baidu.com', 21 | }, 22 | { 23 | status: '2', 24 | }, 25 | ]; 26 | options.list = list; 27 | options.copyTimes = 1000; 28 | const mock = mockUtil.buildMock(options); 29 | export default mock; 30 | -------------------------------------------------------------------------------- /src/views/crud/form/watch/api.ts: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req: any) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/FormWatch'; 6 | export function GetList(query: any) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'get', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj: any) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj: any) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id: any) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id: any) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'get', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/form/watch/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 34 | -------------------------------------------------------------------------------- /src/views/crud/form/watch/mock.ts: -------------------------------------------------------------------------------- 1 | //@ts-ignore 2 | import mockUtil from '/src/mock/base'; 3 | 4 | const options: any = { 5 | name: 'FormWatch', 6 | idGenerator: 0, 7 | }; 8 | const list = [ 9 | { 10 | name: '王小虎', 11 | age: 15, 12 | a: 1, 13 | b: 2, 14 | c: null, 15 | }, 16 | { 17 | name: '王小虎', 18 | age: 15, 19 | a: 1, 20 | b: 3, 21 | c: null, 22 | }, 23 | ]; 24 | 25 | options.list = list; 26 | options.copyTimes = 1000; 27 | const mock = mockUtil.buildMock(options); 28 | 29 | export default mock; 30 | -------------------------------------------------------------------------------- /src/views/crud/home/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 15 | 16 | -------------------------------------------------------------------------------- /src/views/crud/home/page-cover/helper.js: -------------------------------------------------------------------------------- 1 | export default { 2 | crud: ` columns: [ 3 | date:{ 4 | title: '日期', //字段名称 5 | type: 'date', //字段类型,添加、修改、查询将自动生成相应表单组件 6 | }, 7 | status: { 8 | title: '状态', 9 | type: 'dict-select', //选择框,默认单选 10 | dict: dict({ url: '/dicts/OpenStatusEnum' })//远程数据字典 11 | }, 12 | province: { 13 | title: '地区', 14 | type: 'dict-select', //选择框 15 | form: { //表单组件自定义配置,此处配置选择框为多选 16 | component: { //支持任何v-model组件 17 | filterable: true, multiple: true, clearable: true 18 | } 19 | }, 20 | dict: dict({ 21 | data: [ //本地数据字典 22 | { value: 'sz', label: '深圳' }, 23 | { value: 'gz', label: '广州' }, 24 | { value: 'wh', label: '武汉' }, 25 | { value: 'sh', label: '上海' } 26 | ] 27 | }) 28 | } 29 | ] 30 | `, 31 | }; 32 | -------------------------------------------------------------------------------- /src/views/crud/home/page-cover/image/crud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/src/views/crud/home/page-cover/image/crud.png -------------------------------------------------------------------------------- /src/views/crud/home/page-cover/image/darkblue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fast-crud/fs-admin-naive-ui/095f9405c0bfe1321522f880de739ab463d2a7ae/src/views/crud/home/page-cover/image/darkblue@2x.png -------------------------------------------------------------------------------- /src/views/crud/row-handle/dropdown/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/RowHandleDropdown'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/row-handle/dropdown/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'RowHandleDropdown', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/row-handle/tooltip/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'RowHandleTooltip', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/slots/cell/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/SlotsCell'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/slots/cell/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'SlotsCell', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | like: 10000, 9 | createDate: new Date().getTime(), 10 | updateDate: new Date().getTime(), 11 | }, 12 | { 13 | like: 10000, 14 | createDate: new Date().getTime(), 15 | updateDate: new Date().getTime(), 16 | }, 17 | { 18 | like: 10000, 19 | }, 20 | ]; 21 | options.list = list; 22 | const mock = mockUtil.buildMock(options); 23 | export default mock; 24 | -------------------------------------------------------------------------------- /src/views/crud/slots/form-item/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/SlotsFormItem'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/slots/form-item/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'SlotsFormItem', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | topics: ['fast-crud 666', 'fast-crud真好用'], 9 | }, 10 | ]; 11 | options.list = list; 12 | const mock = mockUtil.buildMock(options); 13 | export default mock; 14 | -------------------------------------------------------------------------------- /src/views/crud/slots/form/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/SlotsForm'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/slots/form/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'SlotsForm', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | text: '文本输入', 9 | }, 10 | ]; 11 | options.list = list; 12 | const mock = mockUtil.buildMock(options); 13 | export default mock; 14 | -------------------------------------------------------------------------------- /src/views/crud/slots/layout/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/SlotsLayout'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/slots/layout/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'SlotsLayout', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/crud/slots/search/api.js: -------------------------------------------------------------------------------- 1 | import { requestForMock } from '@/utils/http/service'; 2 | const request = (req) => { 3 | return requestForMock(req); 4 | }; 5 | const apiPrefix = '/mock/SlotsSearch'; 6 | export function GetList(query) { 7 | return request({ 8 | url: apiPrefix + '/page', 9 | method: 'post', 10 | data: query, 11 | }); 12 | } 13 | 14 | export function AddObj(obj) { 15 | return request({ 16 | url: apiPrefix + '/add', 17 | method: 'post', 18 | data: obj, 19 | }); 20 | } 21 | 22 | export function UpdateObj(obj) { 23 | return request({ 24 | url: apiPrefix + '/update', 25 | method: 'post', 26 | data: obj, 27 | }); 28 | } 29 | 30 | export function DelObj(id) { 31 | return request({ 32 | url: apiPrefix + '/delete', 33 | method: 'post', 34 | params: { id }, 35 | }); 36 | } 37 | 38 | export function GetObj(id) { 39 | return request({ 40 | url: apiPrefix + '/get', 41 | method: 'post', 42 | params: { id }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/views/crud/slots/search/mock.js: -------------------------------------------------------------------------------- 1 | import mockUtil from '/src/mock/base'; 2 | const options = { 3 | name: 'SlotsSearch', 4 | idGenerator: 0, 5 | }; 6 | const list = [ 7 | { 8 | radio: '1', 9 | }, 10 | { 11 | radio: '2', 12 | }, 13 | { 14 | radio: '0', 15 | }, 16 | ]; 17 | options.list = list; 18 | const mock = mockUtil.buildMock(options); 19 | export default mock; 20 | -------------------------------------------------------------------------------- /src/views/dashboard/console/components/Icons.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CaretUpOutlined, 3 | CaretDownOutlined, 4 | UsergroupAddOutlined, 5 | BarChartOutlined, 6 | ShoppingCartOutlined, 7 | AccountBookOutlined, 8 | CreditCardOutlined, 9 | MailOutlined, 10 | TagsOutlined, 11 | SettingOutlined, 12 | } from '@vicons/antd'; 13 | 14 | export default { 15 | CaretUpOutlined, 16 | CaretDownOutlined, 17 | UsergroupAddOutlined, 18 | BarChartOutlined, 19 | ShoppingCartOutlined, 20 | AccountBookOutlined, 21 | CreditCardOutlined, 22 | MailOutlined, 23 | TagsOutlined, 24 | SettingOutlined, 25 | }; 26 | -------------------------------------------------------------------------------- /src/views/dashboard/console/components/VisiTab.vue: -------------------------------------------------------------------------------- 1 | 19 | 23 | -------------------------------------------------------------------------------- /src/views/dashboard/console/components/props.ts: -------------------------------------------------------------------------------- 1 | import { PropType } from 'vue'; 2 | 3 | export interface BasicProps { 4 | width: string; 5 | height: string; 6 | } 7 | 8 | export const basicProps = { 9 | width: { 10 | type: String as PropType, 11 | default: '100%', 12 | }, 13 | height: { 14 | type: String as PropType, 15 | default: '280px', 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /src/views/dashboard/monitor/monitor.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/views/exception/403.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 20 | 21 | 41 | -------------------------------------------------------------------------------- /src/views/exception/404.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 20 | 21 | 41 | -------------------------------------------------------------------------------- /src/views/exception/500.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 20 | 21 | 41 | -------------------------------------------------------------------------------- /src/views/frame/docs.vue: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/views/redirect/index.vue: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /src/views/system/role/columns.ts: -------------------------------------------------------------------------------- 1 | import { h } from 'vue'; 2 | import { NTag } from 'naive-ui'; 3 | 4 | export const columns = [ 5 | { 6 | title: 'id', 7 | key: 'id', 8 | }, 9 | { 10 | title: '角色名称', 11 | key: 'name', 12 | }, 13 | { 14 | title: '说明', 15 | key: 'explain', 16 | }, 17 | { 18 | title: '是否默认角色', 19 | key: 'isDefault', 20 | render(row) { 21 | return h( 22 | NTag, 23 | { 24 | type: row.isDefault ? 'success' : 'error', 25 | }, 26 | { 27 | default: () => (row.isDefault ? '是' : '否'), 28 | } 29 | ); 30 | }, 31 | }, 32 | { 33 | title: '创建时间', 34 | key: 'create_date', 35 | }, 36 | ]; 37 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ['./index.html', './src/**/*.{vue,ts,tsx}'], 3 | important: true, 4 | theme: { 5 | extend: {}, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /types/images.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg'; 2 | declare module '*.png'; 3 | declare module '*.jpg'; 4 | declare module '*.jpeg'; 5 | declare module '*.gif'; 6 | declare module '*.bmp'; 7 | declare module '*.tiff'; 8 | -------------------------------------------------------------------------------- /types/index.d.ts: -------------------------------------------------------------------------------- 1 | declare interface Fn { 2 | (...arg: T[]): R; 3 | } 4 | 5 | declare interface PromiseFn { 6 | (...arg: T[]): Promise; 7 | } 8 | 9 | declare type RefType = T | null; 10 | 11 | declare type LabelValueOptions = { 12 | label: string; 13 | value: any; 14 | disabled: boolean; 15 | [key: string]: string | number | boolean; 16 | }[]; 17 | 18 | declare type EmitType = (event: string, ...args: any[]) => void; 19 | 20 | declare type TargetContext = '_self' | '_blank'; 21 | 22 | declare interface ComponentElRef { 23 | $el: T; 24 | } 25 | 26 | declare type ComponentRef = ComponentElRef | null; 27 | 28 | declare type ElRef = Nullable; 29 | -------------------------------------------------------------------------------- /types/modules.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | declare module '*.vue' { 3 | import { DefineComponent } from 'vue'; 4 | const Component: DefineComponent<{}, {}, any>; 5 | export default Component; 6 | } 7 | 8 | declare module 'virtual:*' { 9 | const result: any; 10 | export default result; 11 | } 12 | -------------------------------------------------------------------------------- /types/utils.d.ts: -------------------------------------------------------------------------------- 1 | import type { ComputedRef, Ref } from 'vue'; 2 | 3 | export type DynamicProps = { 4 | [P in keyof T]: Ref | T[P] | ComputedRef; 5 | }; 6 | --------------------------------------------------------------------------------