# NewLife.QuickVue
#### 介ç»
新生命é”方管ç†å¹³å°ï¼ŒåŸºäºŽ element-plus,vue-next-admin。
在线地å€ï¼šhttps://quickvue.newlifex.com/
å‰ç«¯è¿™è¾¹å¦å¤–ä¹Ÿå‡ºäº†å…¶ä»–å‡ ä¸ªè§£å†³æ–¹æ¡ˆï¼Œé“¾æŽ¥å¦‚ä¸‹ï¼š
https://vue.newlifex.com
https://antd.newlifex.com
#### 项目架构
1. å°†åŽå°ç®¡ç†ç³»ç»Ÿçš„å‰ç«¯ç¼–ç å½¢å¼æŠ½è±¡æˆé…ç½®ï¼Œæœ‰åˆ«äºŽä¼ ç»Ÿå¼€å‘模å¼
2. 完æˆé¡µé¢çº§åˆ«ç»„件的åˆæ¥å°è£…,引用组件å³å¯å®Œæˆä¸€ä¸ªé¡µé¢çš„å¢žåˆ æ”¹æŸ¥åŠŸèƒ½
3. 页é¢è·¯ç”±è§„则从接å£è¯»å–,所有路由自动引用 view/modules/index 文件,当页é¢éœ€è¦æ‰‹å·¥ä¿®æ”¹æ—¶ï¼Œå¯æŒ‰åŽå°è·¯ç”±è§„则在项目里建立文件å¤åˆ¶æ¨¡æ¿ä»£ç (view/modules/index æ–‡ä»¶ï¼‰è¿›è¡Œä¿®æ”¹ï¼Œæ— éœ€åœ¨å‰ç«¯ä»£ç å¦å¤–é…置路由
4. 完æˆåŠ¨æ€è¡¨å•ã€è¡¨æ ¼ç»„件的åˆæ¥å°è£…,当接å£é…ç½®ä¸è¶³ä»¥æ»¡è¶³é¡µé¢éœ€æ±‚时,调用 usePage 函数å³å¯å¯¹é¡µé¢è¿›è¡Œç»„件é…ç½®
5. 组件ä¸å¤Ÿæ—¶ï¼Œå¯ç»§ç»å°è£…组件并é…置到 form/component.ts 文件里å³å¯å¼•ç”¨
6. 当æŸä¸ªå—段对应的组件ä¸å…·å¤‡é€šç”¨æ€§æ—¶ï¼Œå¯é€šè¿‡åœ¨é…置里æä¾›æ’槽åå³å¯é€šè¿‡ vue æ’槽进行个性化代ç çµæ´»ç¼–写
#### 安装教程
1. 克隆项目到本地
2. npm i
3. npm run dev
#### 使用说明
1. view/modules/index 模æ¿æ–‡ä»¶
```javascript
<template>
<Page></Page>
</template>
<script setup lang="ts">
</script>
```
2. usePage 函数å‚æ•°é…ç½®
```javascript
{
columns?: {
// 通用é…ç½®
// 修改哪个ä½ç½®çš„é…置,ä¸ä¼ 则全部修改
in?: ColumnKind | Array<ColumnKind>;
// å—段å
prop: string;
// å—段ä¸æ–‡å称
label?: string;
// 组件
component?: keyof FormType;
// 是å¦æ¸²æŸ“
if?: boolean;
// 是å¦æ˜¾ç¤º
show?: boolean;
// 自定义组件æ’槽å称
slot?: string;
// å¿…å¡«
required?: boolean;
// 组件å‚æ•°
props?: ColumnProp<ColumnConfig['component']>;
// æ ¡éªŒè§„åˆ™
rules?: FormRule[];
// 排åºä¸‹æ ‡
index?: number;
// 所å 列数
col?: number | Col;
// 以下é…ç½®åªç”¨äºŽè¡¨å•
// 分组
group?: string;
// 以下é…ç½®åªç”¨äºŽè¡¨æ ¼
// 宽度
width?: string | number;
// 是å¦å‹¾é€‰æ˜¾ç¤º
isCheck?: boolean;
// 是å¦å¯æŽ’åº
sort?: boolean;
},
/** è¡¨æ ¼é…置(支æŒelement-plus table的所有é…置) */
tableConfig?: Partial<TableProps<EmptyObjectType>> & Partial<TableMoreProps> & {
api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
url?: string;
requestProps?: EmptyObjectType;
handleWidth?: number;
},
/** 详情相关é…ç½® */
detailConfig?: {
api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
url?: string;
requestProps?: EmptyObjectType | ((row: EmptyObjectType) => EmptyObjectType);
},
/** æ·»åŠ ç›¸å…³é…ç½® */
addConfig?: {
api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
url?: string;
requestProps?: EmptyObjectType;
},
/** 编辑相关é…ç½® */
editConfig?: {
api?: (...props: EmptyArrayType) => Promise<EmptyObjectType | Array<EmptyObjectType>>;
url?: string;
requestProps?: EmptyObjectType;
},
/** æ·»åŠ ä¿®æ”¹åˆ é™¤è¯·æ±‚ç‚¹å‡»ä»¥åŠæ‰§è¡Œå‰åŽçš„回调钩å */
onAddClick?: () => void;
onAddBefore?: (data: EmptyObjectType, addFun: Function) => void;
onAddAfter?: (data: EmptyObjectType) => void;
onEditClick?: (data: EmptyObjectType) => void;
onEditBefore?: (data: EmptyObjectType, editFun: Function) => void;
onEditAfter?: (data: EmptyObjectType) => void;
onDelBefore?: (data: EmptyObjectType, delFun: Function) => void;
onDelAfter?: (data: EmptyObjectType) => void;
}
```
3. usePage 返回值
```javascript
{
// é…置相关
tableColumns: Ref<TableColumn[]>;
searchColumns: Ref<ColumnConfig[]>;
editColumns: Ref<ColumnConfig[]>;
addColumns: Ref<ColumnConfig[]>;
detailColumns: Ref<ColumnConfig[]>;
// 表å•ç›¸å…³
searchForm: Ref<EmptyObjectType>;
infoForm: Ref<EmptyObjectType>;
// 相关æ“作
handle: PageHandle
}
```
4. 表å•ç±»åž‹
```javascript
{
autocomplete: ElAutocomplete,
cascader: ElCascader,
checkbox: ElCheckbox,
checkboxGroup: CheckboxGroup, // å¯é…ç½®apiç‰å‚æ•°
colorPicker: ElColorPicker,
datePicker: ElDatePicker,
input: ElInput,
inputNumber: ElInputNumber,
radioGroup: RadioGroup, // å¯é…ç½®apiç‰å‚æ•°
radio: ElRadio,
rate: ElRate,
select: Select, // å¯é…ç½®apiç‰å‚æ•°
slider: ElSlider,
switch: ElSwitch,
timePicker: ElTimePicker,
timeSelect: ElTimeSelect,
upload: ElUpload,
editor: Editor,
}
```
5. 所在ä½ç½®æžšä¸¾
```javascript
{
(LIST = 1), DETAIL, ADD, EDIT, SEARCH;
}
```
6. 修改é…置示例代ç
```javascript
<template>
<Page>
<template #mail>
测试
</template>
</Page>
</template>
<script setup lang="ts">
import usePage from '/@/hook/usePage'
import { ColumnKind, usePageApi } from '/@/api/page';
const { columns, forms } = usePage({
columns: [
{
in: ColumnKind.ADD,
prop: 'sex',
component: 'radioGroup',
props: {
options: [{ id: 1, name: '男' }, { id: 2, name: '女' }]
},
},
{
in: [ColumnKind.SEARCH, ColumnKind.LIST],
prop: 'mail',
slot: 'mail',
},
{
prop: 'departmentID',
component: 'select',
props: {
api: () => usePageApi().getTableData('/admin/department', { pageIndex: 0 })
}
},
{
prop: 'roleID',
component: 'select',
props: {
url: '/admin/role'
}
},
{
in: [ColumnKind.ADD, ColumnKind.EDIT],
prop: 'name',
props: {
onChange: (val: string) => {
forms.data!.mail = val
columns.add!.find(item => item.prop === 'sex')!.if = !val
}
}
}
]
})
</script>
```
#### å‚与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. æ交代ç
4. 新建 Pull Request
|