chore: 🔨 合并冲突解决

This commit is contained in:
ray
2024-11-16 23:00:30 +08:00
parent 2dd4421fdf
commit 711e3ba5f4
48 changed files with 207 additions and 791 deletions

View File

@@ -1,13 +1,9 @@
<template>
<el-breadcrumb class="flex-y-center">
<transition-group
enter-active-class="animate__animated animate__fadeInRight"
>
<transition-group enter-active-class="animate__animated animate__fadeInRight">
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="item.path">
<span
v-if="
item.redirect === 'noredirect' || index === breadcrumbs.length - 1
"
v-if="item.redirect === 'noredirect' || index === breadcrumbs.length - 1"
class="color-gray-400"
>
{{ translateRouteTitle(item.meta.title) }}
@@ -36,14 +32,10 @@ const pathCompile = (path: string) => {
const breadcrumbs = ref<Array<RouteLocationMatched>>([]);
function getBreadcrumb() {
let matched = currentRoute.matched.filter(
(item) => item.meta && item.meta.title
);
let matched = currentRoute.matched.filter((item) => item.meta && item.meta.title);
const first = matched[0];
if (!isDashboard(first)) {
matched = [
{ path: "/dashboard", meta: { title: "dashboard" } } as any,
].concat(matched);
matched = [{ path: "/dashboard", meta: { title: "dashboard" } } as any].concat(matched);
}
breadcrumbs.value = matched.filter((item) => {
return item.meta && item.meta.title && item.meta.breadcrumb !== false;
@@ -55,10 +47,7 @@ function isDashboard(route: RouteLocationMatched) {
if (!name) {
return false;
}
return (
name.toString().trim().toLocaleLowerCase() ===
"Dashboard".toLocaleLowerCase()
);
return name.toString().trim().toLocaleLowerCase() === "Dashboard".toLocaleLowerCase();
}
function handleLink(item: any) {

View File

@@ -71,12 +71,7 @@
<template v-if="typeof item === 'string'">
<!-- 刷新 -->
<template v-if="item === 'refresh'">
<el-button
icon="refresh"
circle
title="刷新"
@click="handleToolbar(item)"
/>
<el-button icon="refresh" circle title="刷新" @click="handleToolbar(item)" />
</template>
<!-- 筛选列 -->
<template v-else-if="item === 'filter'">
@@ -86,11 +81,7 @@
</template>
<el-scrollbar max-height="350px">
<template v-for="col in cols" :key="col">
<el-checkbox
v-if="col.prop"
v-model="col.show"
:label="col.label"
/>
<el-checkbox v-if="col.prop" v-model="col.show" :label="col.label" />
</template>
</el-scrollbar>
</el-popover>
@@ -166,10 +157,7 @@
<template v-if="col.templet === 'image'">
<template v-if="col.prop">
<template v-if="Array.isArray(scope.row[col.prop])">
<template
v-for="(item, index) in scope.row[col.prop]"
:key="item"
>
<template v-for="(item, index) in scope.row[col.prop]" :key="item">
<el-image
:src="item"
:preview-src-list="scope.row[col.prop]"
@@ -198,11 +186,7 @@
<!-- 格式化显示链接 -->
<template v-else-if="col.templet === 'url'">
<template v-if="col.prop">
<el-link
type="primary"
:href="scope.row[col.prop]"
target="_blank"
>
<el-link type="primary" :href="scope.row[col.prop]" target="_blank">
{{ scope.row[col.prop] }}
</el-link>
</template>
@@ -221,8 +205,7 @@
:validate-event="false"
:disabled="!hasAuth(`${contentConfig.pageName}:modify`)"
@change="
pageData.length > 0 &&
handleModify(col.prop, scope.row[col.prop], scope.row)
pageData.length > 0 && handleModify(col.prop, scope.row[col.prop], scope.row)
"
/>
</template>
@@ -253,9 +236,7 @@
<template v-if="col.prop">
<template v-if="scope.row[col.prop].startsWith('el-icon-')">
<el-icon>
<component
:is="scope.row[col.prop].replace('el-icon-', '')"
/>
<component :is="scope.row[col.prop].replace('el-icon-', '')" />
</el-icon>
</template>
<template v-else>
@@ -268,20 +249,15 @@
<template v-if="col.prop">
{{
scope.row[col.prop]
? useDateFormat(
scope.row[col.prop],
col.dateFormat ?? "YYYY-MM-DD HH:mm:ss"
).value
? useDateFormat(scope.row[col.prop], col.dateFormat ?? "YYYY-MM-DD HH:mm:ss")
.value
: ""
}}
</template>
</template>
<!-- 列操作栏 -->
<template v-else-if="col.templet === 'tool'">
<template
v-for="item in col.operat ?? ['edit', 'delete']"
:key="item"
>
<template v-for="item in col.operat ?? ['edit', 'delete']" :key="item">
<template v-if="typeof item === 'string'">
<!-- 编辑/删除 -->
<template v-if="item === 'edit' || item === 'delete'">
@@ -329,11 +305,7 @@
</template>
<!-- 自定义 -->
<template v-else-if="col.templet === 'custom'">
<slot
:name="col.slotName ?? col.prop"
:prop="col.prop"
v-bind="scope"
/>
<slot :name="col.slotName ?? col.prop" :prop="col.prop" v-bind="scope" />
</template>
</template>
</el-table-column>
@@ -378,10 +350,7 @@
</el-form-item>
<el-form-item label="数据源" prop="origin">
<el-select v-model="exportsFormData.origin">
<el-option
label="当前数据 (当前页的数据)"
:value="ExportsOriginEnum.CURRENT"
/>
<el-option label="当前数据 (当前页的数据)" :value="ExportsOriginEnum.CURRENT" />
<el-option
label="选中数据 (所有选中的数据)"
:value="ExportsOriginEnum.SELECTED"
@@ -397,11 +366,7 @@
<el-form-item label="字段" prop="fields">
<el-checkbox-group v-model="exportsFormData.fields">
<template v-for="col in cols" :key="col">
<el-checkbox
v-if="col.prop"
:value="col.prop"
:label="col.label"
/>
<el-checkbox v-if="col.prop" :value="col.prop" :label="col.label" />
</template>
</el-checkbox-group>
</el-form-item>
@@ -410,9 +375,7 @@
<!-- 弹窗底部操作按钮 -->
<template #footer>
<div style="padding-right: var(--el-dialog-padding-primary)">
<el-button type="primary" @click="handleExportsSubmit">
</el-button>
<el-button type="primary" @click="handleExportsSubmit"> </el-button>
<el-button @click="handleCloseExportsModal"> </el-button>
</div>
</template>
@@ -524,10 +487,7 @@ const pk = props.contentConfig.pk ?? "id";
// 表格左侧工具栏
const toolbar = props.contentConfig.toolbar ?? ["add", "delete"];
// 表格右侧工具栏
const defaultToolbar = props.contentConfig.defaultToolbar ?? [
"refresh",
"filter",
];
const defaultToolbar = props.contentConfig.defaultToolbar ?? ["refresh", "filter"];
// 表格列
const cols = ref(
props.contentConfig.cols.map((col) => {
@@ -535,11 +495,7 @@ const cols = ref(
if (col.show === undefined) {
col.show = true;
}
if (
col.prop !== undefined &&
col.columnKey === undefined &&
col["column-key"] === undefined
) {
if (col.prop !== undefined && col.columnKey === undefined && col["column-key"] === undefined) {
col.columnKey = col.prop;
}
if (
@@ -672,9 +628,7 @@ function handleExports() {
const filename = exportsFormData.filename
? exportsFormData.filename
: props.contentConfig.pageName;
const sheetname = exportsFormData.sheetname
? exportsFormData.sheetname
: "sheet";
const sheetname = exportsFormData.sheetname ? exportsFormData.sheetname : "sheet";
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet(sheetname);
const columns: Partial<ExcelJS.Column>[] = [];
@@ -700,9 +654,7 @@ function handleExports() {
}
} else {
worksheet.addRows(
exportsFormData.origin === ExportsOriginEnum.SELECTED
? selectionData.value
: pageData.value
exportsFormData.origin === ExportsOriginEnum.SELECTED ? selectionData.value : pageData.value
);
workbook.xlsx
.writeBuffer()
@@ -821,11 +773,7 @@ function handleImports() {
fields.push(cell.value);
});
// 遍历工作表的每一行(从第二行开始,因为第一行通常是标题行)
for (
let rowNumber = 2;
rowNumber <= worksheet.rowCount;
rowNumber++
) {
for (let rowNumber = 2; rowNumber <= worksheet.rowCount; rowNumber++) {
const rowData: IObject = {};
const row = worksheet.getRow(rowNumber);
// 遍历当前行的每个单元格
@@ -903,11 +851,7 @@ function handleOperat(data: IOperatData) {
}
// 属性修改
function handleModify(
field: string,
value: boolean | string | number,
row: Record<string, any>
) {
function handleModify(field: string, value: boolean | string | number, row: Record<string, any>) {
if (props.contentConfig.modifyAction) {
props.contentConfig.modifyAction({
[pk]: row[pk],

View File

@@ -1,11 +1,5 @@
<template>
<el-form
ref="formRef"
label-width="auto"
v-bind="form"
:model="formData"
:rules="formRules"
>
<el-form ref="formRef" label-width="auto" v-bind="form" :model="formData" :rules="formRules">
<el-row :gutter="20">
<template v-for="item in formItems" :key="item.prop">
<el-col v-show="!item.hidden" v-bind="item.col">
@@ -48,10 +42,7 @@
</template>
<!-- Checkbox 多选框 -->
<template v-else-if="item.type === 'checkbox'">
<el-checkbox-group
v-model="formData[item.prop]"
v-bind="item.attrs"
>
<el-checkbox-group v-model="formData[item.prop]" v-bind="item.attrs">
<template v-for="option in item.options" :key="option.value">
<el-checkbox v-bind="option" />
</template>
@@ -59,24 +50,15 @@
</template>
<!-- Input Number 数字输入框 -->
<template v-else-if="item.type === 'input-number'">
<el-input-number
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-input-number v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- TreeSelect 树形选择 -->
<template v-else-if="item.type === 'tree-select'">
<el-tree-select
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-tree-select v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- DatePicker 日期选择器 -->
<template v-else-if="item.type === 'date-picker'">
<el-date-picker
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-date-picker v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- Text 文本 -->
<template v-else-if="item.type === 'text'">

View File

@@ -36,78 +36,48 @@
</span>
</template>
<!-- Input 输入框 -->
<template
v-if="item.type === 'input' || item.type === undefined"
>
<template v-if="item.type === 'input' || item.type === undefined">
<el-input v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- Select 选择器 -->
<template v-else-if="item.type === 'select'">
<el-select v-model="formData[item.prop]" v-bind="item.attrs">
<template
v-for="option in item.options"
:key="option.value"
>
<template v-for="option in item.options" :key="option.value">
<el-option v-bind="option" />
</template>
</el-select>
</template>
<!-- Radio 单选框 -->
<template v-else-if="item.type === 'radio'">
<el-radio-group
v-model="formData[item.prop]"
v-bind="item.attrs"
>
<template
v-for="option in item.options"
:key="option.value"
>
<el-radio-group v-model="formData[item.prop]" v-bind="item.attrs">
<template v-for="option in item.options" :key="option.value">
<el-radio v-bind="option" />
</template>
</el-radio-group>
</template>
<!-- switch 开关 -->
<template v-else-if="item.type === 'switch'">
<el-switch
v-model="formData[item.prop]"
inline-prompt
v-bind="item.attrs"
/>
<el-switch v-model="formData[item.prop]" inline-prompt v-bind="item.attrs" />
</template>
<!-- Checkbox 多选框 -->
<template v-else-if="item.type === 'checkbox'">
<el-checkbox-group
v-model="formData[item.prop]"
v-bind="item.attrs"
>
<template
v-for="option in item.options"
:key="option.value"
>
<el-checkbox-group v-model="formData[item.prop]" v-bind="item.attrs">
<template v-for="option in item.options" :key="option.value">
<el-checkbox v-bind="option" />
</template>
</el-checkbox-group>
</template>
<!-- Input Number 数字输入框 -->
<template v-else-if="item.type === 'input-number'">
<el-input-number
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-input-number v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- TreeSelect 树形选择 -->
<template v-else-if="item.type === 'tree-select'">
<el-tree-select
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-tree-select v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- DatePicker 日期选择器 -->
<template v-else-if="item.type === 'date-picker'">
<el-date-picker
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-date-picker v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- Text 文本 -->
<template v-else-if="item.type === 'text'">
@@ -181,84 +151,48 @@
</span>
</template>
<!-- Input 输入框 -->
<template
v-if="item.type === 'input' || item.type === undefined"
>
<el-input
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<template v-if="item.type === 'input' || item.type === undefined">
<el-input v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- Select 选择器 -->
<template v-else-if="item.type === 'select'">
<el-select
v-model="formData[item.prop]"
v-bind="item.attrs"
>
<template
v-for="option in item.options"
:key="option.value"
>
<el-select v-model="formData[item.prop]" v-bind="item.attrs">
<template v-for="option in item.options" :key="option.value">
<el-option v-bind="option" />
</template>
</el-select>
</template>
<!-- Radio 单选框 -->
<template v-else-if="item.type === 'radio'">
<el-radio-group
v-model="formData[item.prop]"
v-bind="item.attrs"
>
<template
v-for="option in item.options"
:key="option.value"
>
<el-radio-group v-model="formData[item.prop]" v-bind="item.attrs">
<template v-for="option in item.options" :key="option.value">
<el-radio v-bind="option" />
</template>
</el-radio-group>
</template>
<!-- switch 开关 -->
<template v-else-if="item.type === 'switch'">
<el-switch
v-model="formData[item.prop]"
inline-prompt
v-bind="item.attrs"
/>
<el-switch v-model="formData[item.prop]" inline-prompt v-bind="item.attrs" />
</template>
<!-- Checkbox 多选框 -->
<template v-else-if="item.type === 'checkbox'">
<el-checkbox-group
v-model="formData[item.prop]"
v-bind="item.attrs"
>
<template
v-for="option in item.options"
:key="option.value"
>
<el-checkbox-group v-model="formData[item.prop]" v-bind="item.attrs">
<template v-for="option in item.options" :key="option.value">
<el-checkbox v-bind="option" />
</template>
</el-checkbox-group>
</template>
<!-- Input Number 数字输入框 -->
<template v-else-if="item.type === 'input-number'">
<el-input-number
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-input-number v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- TreeSelect 树形选择 -->
<template v-else-if="item.type === 'tree-select'">
<el-tree-select
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-tree-select v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- DatePicker 日期选择器 -->
<template v-else-if="item.type === 'date-picker'">
<el-date-picker
v-model="formData[item.prop]"
v-bind="item.attrs"
/>
<el-date-picker v-model="formData[item.prop]" v-bind="item.attrs" />
</template>
<!-- Text 文本 -->
<template v-else-if="item.type === 'text'">

View File

@@ -51,9 +51,7 @@
</el-tag>
<template v-if="inputTagMap[item.prop].inputVisible">
<el-input
:ref="
(el: HTMLElement) => (inputTagMap[item.prop].inputRef = el)
"
:ref="(el: HTMLElement) => (inputTagMap[item.prop].inputRef = el)"
v-model="inputTagMap[item.prop].inputValue"
v-bind="inputTagMap[item.prop].inputAttrs"
@keyup.enter="handleInputConfirm(item.prop)"
@@ -80,24 +78,16 @@
</template>
<!-- TreeSelect 树形选择 -->
<template v-else-if="item.type === 'tree-select'">
<el-tree-select
v-model="queryParams[item.prop]"
v-bind="item.attrs"
/>
<el-tree-select v-model="queryParams[item.prop]" v-bind="item.attrs" />
</template>
<!-- DatePicker 日期选择器 -->
<template v-else-if="item.type === 'date-picker'">
<el-date-picker
v-model="queryParams[item.prop]"
v-bind="item.attrs"
/>
<el-date-picker v-model="queryParams[item.prop]" v-bind="item.attrs" />
</template>
</el-form-item>
</template>
<el-form-item>
<el-button type="primary" icon="search" @click="handleQuery">
搜索
</el-button>
<el-button type="primary" icon="search" @click="handleQuery">搜索</el-button>
<el-button icon="refresh" @click="handleReset">重置</el-button>
<!-- 展开/收起 -->
<el-link

View File

@@ -1,10 +1,5 @@
import { ref } from "vue";
import type {
IObject,
PageContentInstance,
PageModalInstance,
PageSearchInstance,
} from "./types";
import type { IObject, PageContentInstance, PageModalInstance, PageSearchInstance } from "./types";
function usePage() {
const searchRef = ref<PageSearchInstance>();

View File

@@ -21,9 +21,7 @@ const props = defineProps({
});
const label = ref("");
const tagType = ref<
"success" | "warning" | "info" | "primary" | "danger" | undefined
>();
const tagType = ref<"success" | "warning" | "info" | "primary" | "danger" | undefined>();
const tagSize = ref(props.size as "default" | "large" | "small");
@@ -41,18 +39,9 @@ const getLabelAndTagByValue = async (dictCode: string, value: any) => {
// 监听 props 的变化,获取并更新 label 和 tag
const fetchLabelAndTag = async () => {
const result = await getLabelAndTagByValue(
props.code as string,
props.modelValue
);
const result = await getLabelAndTagByValue(props.code as string, props.modelValue);
label.value = result.label;
tagType.value = result.tag as
| "success"
| "warning"
| "info"
| "primary"
| "danger"
| undefined;
tagType.value = result.tag as "success" | "warning" | "info" | "primary" | "danger" | undefined;
};
// 首次挂载时获取字典数据

View File

@@ -68,8 +68,7 @@ const props = defineProps({
type: {
type: String,
default: "select",
validator: (value: string) =>
["select", "radio", "checkbox"].includes(value),
validator: (value: string) => ["select", "radio", "checkbox"].includes(value),
},
placeholder: {
type: String,
@@ -120,9 +119,7 @@ watch(
(newOptions) => {
// options 加载后,确保 selectedValue 可以正确匹配到 options
if (newOptions.length > 0 && selectedValue.value !== undefined) {
const matchedOption = newOptions.find(
(option) => option.value === selectedValue.value
);
const matchedOption = newOptions.find((option) => option.value === selectedValue.value);
if (!matchedOption && props.type !== "checkbox") {
// 如果找不到匹配项,清空选中
selectedValue.value = "";

View File

@@ -4,10 +4,7 @@
class="px-[15px] flex items-center justify-center color-[var(--el-text-color-regular)]"
@click="toggleClick"
>
<svg-icon
icon-class="collapse"
:class="{ hamburger: true, 'is-active': isActive }"
/>
<svg-icon icon-class="collapse" :class="{ hamburger: true, 'is-active': isActive }" />
</div>
</template>

View File

@@ -1,19 +1,10 @@
<template>
<div ref="iconSelectRef" :style="{ width: props.width }">
<el-popover
:visible="popoverVisible"
:width="props.width"
placement="bottom-end"
>
<el-popover :visible="popoverVisible" :width="props.width" placement="bottom-end">
<template #reference>
<div @click="popoverVisible = !popoverVisible">
<slot>
<el-input
v-model="selectedIcon"
readonly
placeholder="点击选择图标"
class="reference"
>
<el-input v-model="selectedIcon" readonly placeholder="点击选择图标" class="reference">
<template #prepend>
<!-- 根据图标类型展示 -->
<el-icon v-if="isElementIcon">
@@ -49,12 +40,7 @@
<!-- 图标选择弹窗 -->
<div ref="popoverContentRef">
<el-input
v-model="filterText"
placeholder="搜索图标"
clearable
@input="filterIcons"
/>
<el-input v-model="filterText" placeholder="搜索图标" clearable @input="filterIcons" />
<el-tabs v-model="activeTab" @tab-click="handleTabClick">
<el-tab-pane label="SVG 图标" name="svg">
<el-scrollbar height="300px">
@@ -147,9 +133,7 @@ function handleTabClick(tabPane: any) {
function filterIcons() {
if (activeTab.value === "svg") {
filteredSvgIcons.value = filterText.value
? svgIcons.value.filter((icon) =>
icon.toLowerCase().includes(filterText.value.toLowerCase())
)
? svgIcons.value.filter((icon) => icon.toLowerCase().includes(filterText.value.toLowerCase()))
: svgIcons.value;
} else {
filteredElementIcons.value = filterText.value
@@ -184,9 +168,7 @@ function clearSelectedIcon() {
onMounted(() => {
loadIcons();
if (selectedIcon.value) {
if (
elementIcons.value.includes(selectedIcon.value.replace("el-icon-", ""))
) {
if (elementIcons.value.includes(selectedIcon.value.replace("el-icon-", ""))) {
activeTab.value = "element";
} else {
activeTab.value = "svg";

View File

@@ -130,14 +130,10 @@ function navigateResults(direction: string) {
if (direction === "up") {
activeIndex.value =
activeIndex.value <= 0
? displayResults.value.length - 1
: activeIndex.value - 1;
activeIndex.value <= 0 ? displayResults.value.length - 1 : activeIndex.value - 1;
} else if (direction === "down") {
activeIndex.value =
activeIndex.value >= displayResults.value.length - 1
? 0
: activeIndex.value + 1;
activeIndex.value >= displayResults.value.length - 1 ? 0 : activeIndex.value + 1;
}
}
@@ -153,24 +149,19 @@ function navigateToRoute(item: SearchItem) {
function loadRoutes(routes: RouteRecordRaw[], parentPath = "") {
routes.forEach((route) => {
const path = route.path.startsWith("/")
? route.path
: `${parentPath}/${route.path}`;
if (excludedRoutes.value.includes(route.path) || isExternal(route.path))
return;
const path = route.path.startsWith("/") ? route.path : `${parentPath}/${route.path}`;
if (excludedRoutes.value.includes(route.path) || isExternal(route.path)) return;
if (route.children) {
loadRoutes(route.children, path);
} else if (route.meta?.title) {
const title =
route.meta.title === "dashboard" ? "首页" : route.meta.title;
const title = route.meta.title === "dashboard" ? "首页" : route.meta.title;
menuItems.value.push({
title,
path,
name: typeof route.name === "string" ? route.name : undefined,
icon: route.meta.icon,
redirect:
typeof route.redirect === "string" ? route.redirect : undefined,
redirect: typeof route.redirect === "string" ? route.redirect : undefined,
});
}
});

View File

@@ -1,10 +1,6 @@
<template>
<!-- 布局大小 -->
<el-tooltip
:content="$t('sizeSelect.tooltip')"
effect="dark"
placement="bottom"
>
<el-tooltip :content="$t('sizeSelect.tooltip')" effect="dark" placement="bottom">
<el-dropdown trigger="click" @command="handleSizeChange">
<div>
<svg-icon icon-class="size" />

View File

@@ -1,9 +1,5 @@
<template>
<svg
aria-hidden="true"
class="svg-icon"
:style="'width:' + size + ';height:' + size"
>
<svg aria-hidden="true" class="svg-icon" :style="'width:' + size + ';height:' + size">
<use :xlink:href="symbolId" :fill="color" />
</svg>
</template>

View File

@@ -63,17 +63,11 @@
</template>
<!-- TreeSelect 树形选择 -->
<template v-else-if="item.type === 'tree-select'">
<el-tree-select
v-model="queryParams[item.prop]"
v-bind="item.attrs"
/>
<el-tree-select v-model="queryParams[item.prop]" v-bind="item.attrs" />
</template>
<!-- DatePicker 日期选择器 -->
<template v-else-if="item.type === 'date-picker'">
<el-date-picker
v-model="queryParams[item.prop]"
v-bind="item.attrs"
/>
<el-date-picker v-model="queryParams[item.prop]" v-bind="item.attrs" />
</template>
<!-- Input 输入框 -->
<template v-else>
@@ -95,9 +89,7 @@
</el-form-item>
</template>
<el-form-item>
<el-button type="primary" icon="search" @click="handleQuery">
搜索
</el-button>
<el-button type="primary" icon="search" @click="handleQuery">搜索</el-button>
<el-button icon="refresh" @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
@@ -119,11 +111,7 @@
<template v-if="col.templet === 'custom'">
<el-table-column v-bind="col">
<template #default="scope">
<slot
:name="col.slotName ?? col.prop"
:prop="col.prop"
v-bind="scope"
/>
<slot :name="col.slotName ?? col.prop" :prop="col.prop" v-bind="scope" />
</template>
</el-table-column>
</template>
@@ -294,9 +282,7 @@ for (const item of props.selectConfig.tableColumns) {
// 选择
const selectedItems = ref<IObject[]>([]);
const confirmText = computed(() => {
return selectedItems.value.length > 0
? `已选(${selectedItems.value.length})`
: "确 定";
return selectedItems.value.length > 0 ? `已选(${selectedItems.value.length})` : "确 定";
});
function handleSelect(selection: any[], row: any) {
if (isMultiple || selection.length === 0) {

View File

@@ -35,11 +35,7 @@
<a class="el-upload-list__item-name" @click="downloadFile(file)">
<el-icon><Document /></el-icon>
<span class="el-upload-list__item-file-name">{{ file.name }}</span>
<span
v-if="props.showDelBtn"
class="el-icon--close"
@click.stop="handleRemove(file)"
>
<span v-if="props.showDelBtn" class="el-icon--close" @click.stop="handleRemove(file)">
<el-icon><Close /></el-icon>
</span>
</a>
@@ -278,9 +274,7 @@ function handleRemove(removeFile: UploadUserFile) {
if (filePath) {
FileAPI.deleteByPath(filePath).then(() => {
// 删除成功回调
valFileList.value = valFileList.value.filter(
(file) => file.url !== filePath
);
valFileList.value = valFileList.value.filter((file) => file.url !== filePath);
emit("update:modelValue", valFileList.value);
});
}

View File

@@ -3,9 +3,7 @@
<el-upload
v-model:file-list="fileList"
list-type="picture-card"
:class="
fileList.length >= props.limit || !props.showUploadBtn ? 'hide' : 'show'
"
:class="fileList.length >= props.limit || !props.showUploadBtn ? 'hide' : 'show'"
:before-upload="handleBeforeUpload"
:action="props.action"
:headers="props.headers"
@@ -45,12 +43,7 @@
/>
</template>
<script setup lang="ts">
import {
UploadRawFile,
UploadUserFile,
UploadFile,
UploadProps,
} from "element-plus";
import { UploadRawFile, UploadUserFile, UploadFile, UploadProps } from "element-plus";
import FileAPI from "@/api/file";
import { getToken } from "@/utils/auth";
import { ResultEnum } from "@/enums/ResultEnum";
@@ -224,9 +217,7 @@ function handleBeforeUpload(file: UploadRawFile) {
*/
const previewImg: UploadProps["onPreview"] = (uploadFile: UploadFile) => {
viewFileList.value = fileList.value.map((file) => file.url!);
initialIndex.value = fileList.value.findIndex(
(file) => file.url === uploadFile.url
);
initialIndex.value = fileList.value.findIndex((file) => file.url === uploadFile.url);
viewVisible.value = true;
};

View File

@@ -30,11 +30,7 @@
</template>
<script setup lang="ts">
import {
ElImageViewer,
UploadRawFile,
UploadRequestOptions,
} from "element-plus";
import { ElImageViewer, UploadRawFile, UploadRequestOptions } from "element-plus";
import FileAPI from "@/api/file";
const props = defineProps({