refactor(front): 重构前端组件和 API

- 更新了多个组件的样式和结构
- 重命名了一些 API 文件
- 添加了新的 API 接口
- 优化了部分代码的可读性和性能
This commit is contained in:
2025-07-23 20:58:15 +08:00
parent 091c056cd0
commit 902173a9e9
111 changed files with 1841 additions and 1198 deletions
@@ -123,15 +123,21 @@ export default {
props: {
permission: {
type: Object,
default: () => { return {} }
default: () => {
return {}
}
},
hiddenColumns: {
type: Array,
default: () => { return [] }
default: () => {
return []
}
},
ignoreColumns: {
type: Array,
default: () => { return [] }
default: () => {
return []
}
}
},
data() {
@@ -253,16 +259,18 @@ export default {
</script>
<style>
.crud-opts {
padding: 4px 0;
display: -webkit-flex;
display: flex;
align-items: center;
}
.crud-opts .crud-opts-right {
margin-left: auto;
}
.crud-opts .crud-opts-right span {
float: left;
}
.crud-opts {
padding: 4px 0;
display: -webkit-flex;
display: flex;
align-items: center;
}
.crud-opts .crud-opts-right {
margin-left: auto;
}
.crud-opts .crud-opts-right span {
float: left;
}
</style>
@@ -12,6 +12,7 @@
</template>
<script>
import { pagination } from '@crud/crud'
export default {
mixins: [pagination()]
}
@@ -1,12 +1,26 @@
<!--搜索与重置-->
<template>
<span>
<el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button>
<el-button v-if="crud.optShow.reset" class="filter-item" size="mini" type="warning" icon="el-icon-refresh-left" @click="crud.resetQuery()">重置</el-button>
<el-button
class="filter-item"
size="mini"
type="success"
icon="el-icon-search"
@click="crud.toQuery"
>搜索</el-button>
<el-button
v-if="crud.optShow.reset"
class="filter-item"
size="mini"
type="warning"
icon="el-icon-refresh-left"
@click="crud.resetQuery()"
>重置</el-button>
</span>
</template>
<script>
import { crud } from '@crud/crud'
export default {
mixins: [crud()],
props: {
@@ -1,18 +1,48 @@
<template>
<div>
<el-button v-permission="permission.edit" :loading="crud.status.cu === 2" :disabled="disabledEdit" size="mini" type="primary" icon="el-icon-edit" @click.stop="crud.toEdit(data)" />
<el-popover v-model="pop" v-permission="permission.del" placement="top" width="180" trigger="manual" @show="onPopoverShow" @hide="onPopoverHide">
<el-button
v-permission="permission.edit"
:loading="crud.status.cu === 2"
:disabled="disabledEdit"
size="mini"
type="primary"
icon="el-icon-edit"
@click.stop="crud.toEdit(data)"
/>
<el-popover
v-model="pop"
v-permission="permission.del"
placement="top"
width="180"
trigger="manual"
@show="onPopoverShow"
@hide="onPopoverHide"
>
<p>{{ msg }}</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="doCancel">取消</el-button>
<el-button :loading="crud.dataStatus[crud.getDataId(data)].delete === 2" type="primary" size="mini" @click="crud.doDelete(data)">确定</el-button>
<el-button
:loading="crud.dataStatus[crud.getDataId(data)].delete === 2"
type="primary"
size="mini"
@click="crud.doDelete(data)"
>确定
</el-button>
</div>
<el-button slot="reference" :disabled="disabledDle" type="danger" icon="el-icon-delete" size="mini" @click.stop="toDelete" />
<el-button
slot="reference"
:disabled="disabledDle"
type="danger"
icon="el-icon-delete"
size="mini"
@click.stop="toDelete"
/>
</el-popover>
</div>
</template>
<script>
import CRUD, { crud } from '@crud/crud'
export default {
mixins: [crud()],
props: {
+17 -11
View File
@@ -1,6 +1,6 @@
import { download, initData } from '@/api/data'
import { downloadFile, parseTime } from '@/utils/index'
import Vue from 'vue'
import { DownloadFile } from '@/utils/CsDomUtil'
/**
* CRUD配置
@@ -30,15 +30,20 @@ function CRUD(options) {
// Form 表单
form: {},
// 重置表单
defaultForm: () => {},
defaultForm: () => {
},
// 等待时间
time: 50,
// CRUD Method
crudMethod: {
add: (form) => {},
del: (id) => {},
edit: (form) => {},
get: (id) => {}
add: (form) => {
},
del: (id) => {
},
edit: (form) => {
},
get: (id) => {
}
},
// 主页操作栏显示哪些按钮
optShow: {
@@ -328,7 +333,7 @@ function CRUD(options) {
doExport() {
crud.downloadLoading = true
download(crud.url + '/download', crud.getQueryParams()).then(result => {
downloadFile(result, crud.title + '数据', 'xlsx')
DownloadFile(result, crud.title + '数据', 'xlsx')
crud.downloadLoading = false
}).catch(() => {
crud.downloadLoading = false
@@ -419,6 +424,7 @@ function CRUD(options) {
*/
resetDataStatus() {
const dataStatus = {}
function resetStatus(datas) {
datas.forEach(e => {
dataStatus[crud.getDataId(e)] = {
@@ -430,6 +436,7 @@ function CRUD(options) {
}
})
}
resetStatus(crud.data)
crud.dataStatus = dataStatus
},
@@ -461,7 +468,9 @@ function CRUD(options) {
*/
selectChange(selection, row) {
// 如果selection中存在row代表是选中,否则是取消选中
if (selection.find(val => { return crud.getDataId(val) === crud.getDataId(row) })) {
if (selection.find(val => {
return crud.getDataId(val) === crud.getDataId(row)
})) {
if (row.children) {
row.children.forEach(val => {
crud.getTable().toggleRowSelection(val, true)
@@ -674,9 +683,6 @@ function presenter(crud) {
})
this.crud = this.$crud['defalut'] || cruds[0]
},
methods: {
parseTime
},
created() {
for (const k in this.$crud) {
if (this.$crud[k].queryOnPresenterCreated) {