@fmdevui/fm-dev
Version:
Page level components developed based on Element Plus.
791 lines (786 loc) • 32.1 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var elementPlus = require('element-plus');
var index = require('../../../api/base/index.js');
const _hoisted_1 = { class: "w100 selector-loading-container" };
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
...{
name: "Fminputtable"
},
__name: "index",
props: {
/**
* 使用示例:
*
* 单选模式:
* <pulldown-selecter
* v-model="state.ruleForm.userId"
* :defaultOptions="[ id: state.ruleForm.userId, realName: state.ruleForm.realName ]"
* :fetch-options="handleSysUserTable"
* :queryParams="state.queryParams"
* :dropdown-width="dropdownWidth"
* :placeholder="placeholder"
* :label-prop="realName"
* :value-prop="id"
* @@change="handelChange"
* filterable
* clearable
* class="w100"
* >
*
* 多选模式:
* <pulldown-selecter
* v-model="state.ruleForm.userIds"
* :defaultOptions="state.ruleForm.defaultUsers"
* :fetch-options="handleSysUserTable"
* :queryParams="state.queryParams"
* :dropdown-width="dropdownWidth"
* :placeholder="placeholder"
* :label-prop="realName"
* :value-prop="id"
* @@change="handelChange"
* multiple
* filterable
* clearable
* class="w100"
* >
*
* 查询条件表单插槽:
* <template #queryForm="{ query, handleQuery }">
* <el-col class="mb5" :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
* <el-form-item label="姓名" prop="realName">
* <el-input v-model="query.realName" placeholder="请输入姓名" class="w100" clearable @keydown.enter.native="handleQuery()" />
* </el-form-item>
* </el-col>
* <el-col class="mb5" :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
* <el-form-item label="电话" prop="phone">
* <el-input v-model="query.phone" placeholder="请输入电话" class="w100" clearable @keydown.enter.native="handleQuery()" />
* </el-form-item>
* </el-col>
* </template>
*
* 表格列插槽:
* <template #columns>
* <el-table-column prop="realName" label="姓名" />
* <el-table-column prop="account" label="账号" width="160"/ >
* <el-table-column prop="idCardNo" label="身份证号" width="140" />
* <el-table-column prop="cardNo" label="卡号" width="140" />
* <el-table-column prop="gender" label="性别" width="85">
* <template #default="{ row }">
* <g-sys-dict v-model="row.gender" code="GenderEnum" />
* </template>
* </el-table-column>
* <el-table-column prop="birthday" label="生日">
* <template #default="{ row, $index }">
* {{ commonFun.dateFormatYMD(row, $index, row.birthday) }}
* </template>
* </el-table-column>
* <el-table-column prop="phone" label="联系电话" width="100" />
* </template>
* </pulldown-selecter>
*/
// v-model绑定的值,支持字符串、数字、数组或null类型
modelValue: [String, Number, Array, null],
/**
* 获取表格数据的异步方法(必填)
* @example
* const handleSysUserTable = (params: any) => {
* return getAPI(SysUserApi).apiSysUserPagePost(params);
* };
*/
fetchOptions: {
type: Function
// 函数类型
//required: true, // 必填项
},
//本地数据开启 和本地数据联合一起使用
islocalData: {
type: Boolean,
default: false
},
localdataList: {
type: Array,
default: []
},
/**
* api service name
*/
apiService: {
type: String,
default: "baseData"
},
/**
* api service 下的方法
*/
apiAction: {
type: String,
default: "BaseData"
},
/**
* 基础编码 自动获取数据
*/
method: {
type: String,
default: "post"
},
/**
* 选中记录后绑定值的属性名
* 默认为'id',即选中某行后,会取该行数据的id字段作为值
*/
valueProp: {
type: String,
default: "id"
},
/**
* 选中记录后显示文本的属性名
* 默认为'name',即在下拉框中显示的文本取自该字段
*/
labelProp: {
type: String,
default: "name"
},
/**
* 显示值的格式化方法
* 可以自定义选中后在输入框中显示的文本格式
* @example
* :labelFormat="(item: any) => `${item.realName}(${item.account})`"
*/
labelFormat: {
type: Function,
default: (item) => void 0
// 默认不进行格式化
},
/**
* 默认查询条件的属性名
* 在输入框中输入的关键词会赋值给该字段
*/
keywordProp: {
type: String,
default: "keyword"
},
/**
* 下拉框的宽度
*/
dropdownWidth: {
type: String,
default: "100%"
},
/**
* 下拉框的高度
*/
dropdownHeight: {
type: String,
default: "550px"
},
/**
* 输入框的占位符文本
*/
placeholder: {
type: String,
default: "\u8BF7\u8F93\u5165\u5173\u952E\u8BCD"
},
/**
* 默认选项,用于回显已选中的数据
* 当数据不在当前页时,通过该属性提供数据进行回显
*/
defaultOptions: {
type: Array,
default: []
},
/**
* 查询表单的高度偏移量
* 用于计算表格高度时减去查询表单占用的高度
*/
queryHeightOffset: {
type: Number,
default: 35
},
/**
* 查询表单标签的宽度
*/
queryLabelWidth: {
type: String
},
/**
* 查询参数对象
* 父组件传入的额外查询条件,会与组件内部的查询条件合并
*/
queryParams: {
type: Object,
default: () => {
return {};
}
},
/**
* 是否显示分页组件
*/
pagination: {
type: Boolean,
default: true
},
/**
* 是否禁用组件
*/
disabled: Boolean,
/**
* 是否多选模式
*/
multiple: Boolean,
/**
* 是否可清空
*/
clearable: Boolean
},
emits: ["update:modelValue", "change"],
setup(__props, { expose: __expose, emit: __emit }) {
const CONSTANTS = {
MAX_PAGE_SIZE: 99999,
// 不分页时的最大页面大小
DROPDOWN_DELAY: 1e3,
// 下拉框打开后的延迟时间(毫秒)
TABLE_HEIGHT_OFFSET: 175
// 表格高度基础偏移量(像素)
};
const props = __props;
const tableRef = vue.ref();
const selectRef = vue.ref();
const emit = __emit;
const state = vue.reactive({
// 当前选中的值,单选时为字符串/数字,多选时为数组
selectedValues: "",
// 表格查询参数对象
tableQuery: {
[props.keywordProp]: "",
// 动态属性名,默认为'keyword',用于存储搜索关键词
page: props.queryParams.page,
// 当前页码,从父组件传入
pageSize: props.queryParams?.pageSize
// 每页显示数量,从父组件传入
},
// 表格数据对象
tableData: {
items: [],
// 当前页的数据列表
total: 0
// 总数据条数
},
// 默认选项数组,用于回显
defaultOptions: props.defaultOptions,
// 加载状态标识
loading: false,
// 选中的行数据数组,用于表格高亮显示和跨页选择
selectedRows: [],
// 查询执行标识,防止重复执行
isQuerying: false,
// 下拉框是否刚打开的标识(用于防止remoteMethod在打开时重复查询)
justOpened: false
});
const currentRowIndex = vue.ref(-1);
const tableHeight = vue.computed(() => {
const baseHeight = `${props.dropdownHeight} - ${CONSTANTS.TABLE_HEIGHT_OFFSET}px`;
const queryOffset = props.queryHeightOffset > 0 ? ` - ${props.queryHeightOffset}px` : "";
return `calc(${baseHeight}${queryOffset})`;
});
const mergeSelectedRows = (values) => {
const currentPageRows = state.tableData.items.filter(
(item) => values.includes(item[props.valueProp])
);
const previousRows = state.selectedRows.filter(
(item) => values.includes(item[props.valueProp])
);
const allRows = [...currentPageRows];
previousRows.forEach((row) => {
if (!allRows.find((item) => item[props.valueProp] === row[props.valueProp])) {
allRows.push(row);
}
});
return allRows;
};
const isRowSelected = (row) => {
if (!row || row[props.valueProp] === void 0 || row[props.valueProp] === null) {
return false;
}
if (props.multiple) {
if (!Array.isArray(state.selectedValues)) {
return false;
}
return state.selectedValues.some((val) => val === row[props.valueProp]);
} else {
return state.selectedValues !== null && state.selectedValues !== void 0 && state.selectedValues === row[props.valueProp];
}
};
const updateSelectedRows = () => {
if (props.multiple) {
const selectedValues = Array.isArray(state.selectedValues) ? state.selectedValues : [];
state.selectedRows = mergeSelectedRows(selectedValues);
} else {
const selectedRow = state.tableData.items.find(
(item) => item[props.valueProp] === state.selectedValues
);
state.selectedRows = selectedRow ? [selectedRow] : [];
}
};
const handleKeydown = (e) => {
const tableData = state.tableData?.items || [];
if (!tableData.length) return;
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
e.preventDefault();
const direction = e.key === "ArrowDown" ? 1 : -1;
const newIndex = Math.max(0, Math.min(currentRowIndex.value + direction, tableData.length - 1));
if (newIndex !== currentRowIndex.value) {
currentRowIndex.value = newIndex;
const row = tableData[newIndex];
tableRef.value?.setCurrentRow(row);
}
} else if (e.key === "Enter") {
const row = tableData[currentRowIndex.value];
handleChange(row);
}
};
const handleSizeChange = (pageSize) => {
state.loading = true;
state.tableQuery.pageSize = pageSize;
state.tableQuery.page = 1;
executeQuery();
};
const handleCurrentChange = (page) => {
state.loading = true;
state.tableQuery.page = page;
executeQuery();
};
vue.onMounted(() => {
selectRef.value?.inputRef?.addEventListener("keydown", handleKeydown);
});
vue.onUnmounted(() => {
selectRef.value?.inputRef?.removeEventListener("keydown", handleKeydown);
});
const executeQuery = () => {
if (state.isQuerying) {
return;
}
state.isQuerying = true;
state.loading = true;
const finalParams = Object.assign({}, props.queryParams, state.tableQuery);
if (typeof props.fetchOptions === "function") {
props.fetchOptions(finalParams).then((res) => {
const result = res.data?.result;
state.tableData.items = result?.items ?? [];
state.tableData.total = result?.total ?? 0;
state.loading = false;
state.isQuerying = false;
updateSelectedRows();
}).catch((error) => {
elementPlus.ElMessage.error("\u6570\u636E\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5");
state.tableData.items = [];
state.tableData.total = 0;
state.loading = false;
state.isQuerying = false;
});
} else if (props.islocalData) {
state.tableData.items = props.localdataList;
state.tableData.total = 1;
state.loading = false;
state.isQuerying = false;
updateSelectedRows();
} else {
if (props.method == "post") {
index.useBaseApi(props.apiAction).post(finalParams, props.apiAction).then((res) => {
const result = res.data?.result;
state.tableData.items = result?.items ?? [];
state.tableData.total = result?.total ?? 0;
state.loading = false;
state.isQuerying = false;
updateSelectedRows();
}).catch((error) => {
elementPlus.ElMessage.error("\u6570\u636E\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5");
state.tableData.items = [];
state.tableData.total = 0;
state.loading = false;
state.isQuerying = false;
});
} else {
index.useBaseApi(props.apiAction).get(finalParams, props.apiAction).then((res) => {
const result = res.data?.result;
state.tableData.items = result?.items ?? [];
state.tableData.total = result?.total ?? 0;
state.loading = false;
state.isQuerying = false;
updateSelectedRows();
}).catch((error) => {
elementPlus.ElMessage.error("\u6570\u636E\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5");
state.tableData.items = [];
state.tableData.total = 0;
state.loading = false;
state.isQuerying = false;
});
}
}
};
const resetQuery = () => {
state.loading = true;
const currentPageSize = state.tableQuery.pageSize;
state.tableQuery = Object.assign({}, props.queryParams, { pageSize: currentPageSize });
state.tableQuery.page = 1;
executeQuery();
};
const remoteMethod = (query) => {
if (state.justOpened) {
state.justOpened = false;
return;
}
if (state.isQuerying) {
return;
}
state.loading = true;
if (typeof query === "string") {
state.tableQuery[props.keywordProp] = query.trim();
state.tableQuery.page = 1;
}
executeQuery();
};
const handleQuery = (clearKeyword = false) => {
state.loading = true;
if (clearKeyword) {
state.tableQuery[props.keywordProp] = void 0;
const input = selectRef.value.$el.querySelector("input");
if (input) input.value = "";
}
state.tableQuery.page = 1;
remoteMethod(state.tableQuery);
};
const handleQueryClick = () => {
state.loading = true;
state.tableQuery.page = 1;
executeQuery();
};
const handleChange = (row) => {
if (!row || !row[props.valueProp]) return;
if (typeof row[props.valueProp] === "string") row[props.valueProp] = row[props.valueProp]?.trim();
setDefaultOptions([row]);
if (props.multiple) {
if (!Array.isArray(state.selectedValues)) {
state.selectedValues = [];
}
const currentValues = Array.isArray(state.selectedValues) ? [...state.selectedValues] : [];
const valueIndex = currentValues.indexOf(row[props.valueProp]);
if (valueIndex > -1) {
currentValues.splice(valueIndex, 1);
state.selectedRows = state.selectedRows.filter((item) => item[props.valueProp] !== row[props.valueProp]);
} else {
currentValues.push(row[props.valueProp]);
const existingRow = state.selectedRows.find((item) => item[props.valueProp] === row[props.valueProp]);
if (!existingRow) {
state.selectedRows.push(row);
}
}
state.selectedValues = currentValues;
} else {
state.selectedValues = row[props.valueProp];
state.selectedRows = [row];
}
emit("update:modelValue", state.selectedValues);
emit("change", state.selectedValues, props.multiple ? state.selectedRows : row);
if (!props.multiple) {
tableRef.value?.setCurrentRow(row);
selectRef.value?.blur();
}
};
const selectVisibleChange = (visible) => {
if (visible) {
state.loading = true;
state.justOpened = true;
const paginationParams = {
page: state.tableQuery.page,
// 保留当前页码
pageSize: state.tableQuery.pageSize,
// 保留分页大小
[props.keywordProp]: void 0
// 清空关键词(打开时不带搜索条件)
};
state.tableQuery = Object.assign({}, props.queryParams, paginationParams);
executeQuery();
setTimeout(() => {
state.justOpened = false;
}, CONSTANTS.DROPDOWN_DELAY);
} else {
state.loading = false;
state.justOpened = false;
}
};
const setDefaultOptions = (options) => {
const map = /* @__PURE__ */ new Map();
for (const item of [...options ?? [], ...state.defaultOptions]) {
const value = item?.[props.valueProp];
const label = props.labelFormat?.(item) || item?.[props.labelProp];
if (value && label) {
map.set(value, { [props.valueProp]: value, [props.labelProp]: label });
}
}
state.defaultOptions = Array.from(map.values());
};
const setQueryParams = (query, append = true) => {
if (!props.pagination) {
query = Object.assign(query, {
pageSize: CONSTANTS.MAX_PAGE_SIZE
});
}
query = Object.assign({}, props.queryParams, query ?? {});
state.tableQuery = append ? Object.assign(state.tableQuery, query) : query;
};
const setValue = (option, row) => {
option = Array.isArray(option) ? option : [option];
state.tableData.total = option.length;
state.tableData.items = option;
if (props.multiple) {
state.selectedValues = option.map((item) => item[props.valueProp]);
state.selectedRows = option;
emit("update:modelValue", state.selectedValues);
emit("change", state.selectedValues, option);
} else {
state.selectedValues = option[0]?.[props.valueProp];
state.selectedRows = option[0] ? [option[0]] : [];
emit("update:modelValue", state.selectedValues);
emit("change", state.selectedValues, option[0]);
}
};
const selectedValuesChange = (val) => {
state.selectedValues = val;
emit("update:modelValue", val);
if (props.multiple) {
const selectedValues = Array.isArray(val) ? val : [];
const allSelectedRows = mergeSelectedRows(selectedValues);
state.selectedRows = allSelectedRows;
emit("change", val, allSelectedRows);
} else {
const selectedRow = state.tableData?.items?.find((item) => item[props.valueProp] === val);
if (selectedRow) {
state.selectedRows = [selectedRow];
tableRef.value?.setCurrentRow(selectedRow);
} else {
state.selectedRows = [];
tableRef.value?.setCurrentRow(null);
}
emit("change", val, selectedRow);
}
};
const getRowStyle = ({ row }) => {
return isRowSelected(row) ? {
backgroundColor: "var(--el-color-primary-light-9)",
borderLeft: "3px solid var(--el-color-primary)"
} : {};
};
const getRowClassName = ({ row }) => {
return isRowSelected(row) ? "selected-row" : "";
};
vue.watch(
() => props.modelValue,
// 监听的数据源
(val) => {
if (props.multiple) {
state.selectedValues = Array.isArray(val) ? val : val ? [val] : [];
} else {
state.selectedValues = val;
}
updateSelectedRows();
},
{ immediate: true }
// 立即执行一次,确保初始化时也能正确设置
);
vue.watch(
() => props.defaultOptions,
// 监听的数据源
(val) => setDefaultOptions(val),
// 调用设置方法
{ immediate: true }
// 立即执行一次
);
__expose({
setValue,
// 设置选中值(用于程序化设置选中的数据)
handleQuery,
// 执行查询(用于手动触发查询,可选择是否清空关键词)
setQueryParams,
// 设置查询参数(用于动态修改查询条件)
setDefaultOptions
// 设置默认选项(用于手动添加回显选项)
});
return (_ctx, _cache) => {
const _component_el_option = vue.resolveComponent("el-option");
const _component_el_button = vue.resolveComponent("el-button");
const _component_el_button_group = vue.resolveComponent("el-button-group");
const _component_el_row = vue.resolveComponent("el-row");
const _component_el_form = vue.resolveComponent("el-form");
const _component_el_empty = vue.resolveComponent("el-empty");
const _component_el_table = vue.resolveComponent("el-table");
const _component_el_pagination = vue.resolveComponent("el-pagination");
const _component_el_select = vue.resolveComponent("el-select");
const _directive_reclick = vue.resolveDirective("reclick");
const _directive_loading = vue.resolveDirective("loading");
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" Element Plus\u4E0B\u62C9\u9009\u62E9\u5668\u7EC4\u4EF6 "),
vue.createVNode(_component_el_select, vue.mergeProps(_ctx.$attrs, {
modelValue: state.selectedValues,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => state.selectedValues = $event),
clearable: __props.clearable,
multiple: __props.multiple,
disabled: __props.disabled,
placeholder: __props.placeholder,
"remote-method": remoteMethod,
onVisibleChange: selectVisibleChange,
onChange: selectedValuesChange,
style: { width: __props.dropdownWidth },
"popper-class": "popper-class",
ref_key: "selectRef",
ref: selectRef,
"remote-show-suffix": "",
filterable: "",
remote: ""
}), {
default: vue.withCtx(() => [
vue.createCommentVNode(" \u9690\u85CF\u7684\u9009\u9879\uFF0C\u7528\u4E8E\u5360\u4F4D\uFF0C\u9632\u6B62Element Plus\u8B66\u544A "),
vue.createVNode(_component_el_option, {
style: { "width": "0", "height": "0" },
value: ""
}),
vue.createCommentVNode(" \u9ED8\u8BA4\u9009\u9879\uFF0C\u7528\u4E8E\u56DE\u663E\u6570\u636E "),
vue.createCommentVNode(" \u5F53\u9009\u4E2D\u7684\u6570\u636E\u4E0D\u5728\u5F53\u524D\u9875\u65F6\uFF0C\u901A\u8FC7\u8FD9\u4E9B\u9690\u85CF\u9009\u9879\u8FDB\u884C\u56DE\u663E "),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(state.defaultOptions ?? [], (item) => {
return vue.openBlock(), vue.createBlock(_component_el_option, {
key: item[__props.valueProp],
label: __props.labelFormat(item) || item[__props.labelProp],
value: item[__props.valueProp],
style: { "width": "0", "height": "0" }
}, null, 8, ["label", "value"]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createCommentVNode(" \u4E0B\u62C9\u6846\u5185\u5BB9\u533A\u57DF "),
vue.createCommentVNode(' \r\n v-loading\u6307\u4EE4\uFF1A\u663E\u793A\u52A0\u8F7D\u52A8\u753B\r\n \u6CE8\u610F\uFF1Aloading\u72B6\u6001\u653E\u5728div\u4E0A\u800C\u4E0D\u662Ftable\u4E0A\uFF0C\u662F\u4E3A\u4E86\u8986\u76D6\u6574\u4E2A\u4E0B\u62C9\u533A\u57DF\uFF08\u5305\u62EC\u67E5\u8BE2\u8868\u5355\u548C\u5206\u9875\uFF09\r\n \u8FD9\u6837\u53EF\u4EE5\u907F\u514D\u67E5\u8BE2\u65F6\u95EA\u73B0"\u6682\u65E0\u6570\u636E"\u7684\u63D0\u793A\r\n '),
vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
vue.createCommentVNode(" \u67E5\u8BE2\u8868\u5355\u533A\u57DF\uFF08\u4EC5\u5F53\u7236\u7EC4\u4EF6\u63D0\u4F9B\u4E86queryForm\u63D2\u69FD\u65F6\u663E\u793A\uFF09 "),
_ctx.$slots.queryForm ? (vue.openBlock(), vue.createBlock(_component_el_form, {
key: 0,
model: state.tableQuery,
class: "mg5 query-form",
"label-width": __props.queryLabelWidth ?? "",
onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
}, ["stop"]))
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_el_row, { gutter: 10 }, {
default: vue.withCtx(() => [
vue.createCommentVNode(" \u67E5\u8BE2\u8868\u5355\u63D2\u69FD\uFF1A\u7531\u7236\u7EC4\u4EF6\u63D0\u4F9B\u8868\u5355\u5185\u5BB9 "),
vue.renderSlot(_ctx.$slots, "queryForm", {
query: state.tableQuery,
handleQuery: () => handleQuery(true)
}, void 0, true),
vue.createCommentVNode(" \u67E5\u8BE2\u548C\u91CD\u7F6E\u6309\u94AE\u7EC4 "),
vue.createVNode(_component_el_button_group, { style: { "position": "absolute", "right": "10px" } }, {
default: vue.withCtx(() => [
vue.createCommentVNode(" \u67E5\u8BE2\u6309\u94AE\uFF1A\u70B9\u51FB\u65F6\u7ACB\u5373\u663E\u793A\u52A0\u8F7D\u52A8\u753B\u5E76\u6267\u884C\u67E5\u8BE2 "),
vue.withDirectives((vue.openBlock(), vue.createBlock(_component_el_button, {
type: "primary",
icon: "ele-Search",
onClick: handleQueryClick
}, {
default: vue.withCtx(() => [..._cache[2] || (_cache[2] = [
vue.createTextVNode(
" \u67E5\u8BE2 ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})), [
[_directive_reclick, 1e3]
]),
vue.createCommentVNode(" \u91CD\u7F6E\u6309\u94AE\uFF1A\u91CD\u7F6E\u67E5\u8BE2\u6761\u4EF6\u5E76\u91CD\u65B0\u67E5\u8BE2 "),
vue.withDirectives((vue.openBlock(), vue.createBlock(_component_el_button, {
icon: "ele-Refresh",
onClick: resetQuery
}, {
default: vue.withCtx(() => [..._cache[3] || (_cache[3] = [
vue.createTextVNode(
" \u91CD\u7F6E ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})), [
[_directive_reclick, 1e3]
])
]),
_: 1
/* STABLE */
})
]),
_: 3
/* FORWARDED */
})
]),
_: 3
/* FORWARDED */
}, 8, ["model", "label-width"])) : vue.createCommentVNode("v-if", true),
vue.createCommentVNode(" \r\n \u6570\u636E\u8868\u683C \r\n \u5173\u952E\u914D\u7F6E\u8BF4\u660E\uFF1A\r\n 1. height: \u52A8\u6001\u8BA1\u7B97\u9AD8\u5EA6\uFF0C\u6709\u67E5\u8BE2\u8868\u5355\u65F6\u4F7F\u7528\u8BA1\u7B97\u5C5E\u6027tableHeight\uFF0C\u5426\u5219\u4F7F\u7528\u56FA\u5B9A\u8BA1\u7B97\u5F0F\r\n 2. highlight-current-row: \u5355\u9009\u6A21\u5F0F\u542F\u7528\u884C\u9AD8\u4EAE\uFF0C\u591A\u9009\u6A21\u5F0F\u7981\u7528\uFF08\u591A\u9009\u7528row-style\u5B9E\u73B0\uFF09\r\n 3. row-class-name: \u4E3A\u9009\u4E2D\u884C\u6DFB\u52A0'selected-row'\u7C7B\u540D\uFF0C\u7528\u4E8ECSS\u6837\u5F0F\u63A7\u5236\r\n 4. row-style: \u4E3A\u9009\u4E2D\u884C\u6DFB\u52A0\u5185\u8054\u6837\u5F0F\uFF08\u80CC\u666F\u8272\u548C\u5DE6\u8FB9\u6846\uFF09\uFF0C\u786E\u4FDD\u8DE8\u6D4F\u89C8\u5668\u517C\u5BB9\u6027\r\n\r\n ({ row }: { row: any }) => isRowSelected(row) ? 'selected-row' : ''\r\n ({ row }: { row: any }) => isRowSelected(row) ? { backgroundColor: 'var(--el-color-primary-light-9)', borderLeft: '3px solid var(--el-color-primary)' } : {}\r\n "),
vue.createVNode(_component_el_table, {
ref_key: "tableRef",
ref: tableRef,
onRowClick: handleChange,
data: state.tableData?.items ?? [],
height: _ctx.$slots.queryForm ? tableHeight.value : `calc(${__props.dropdownHeight} - ${CONSTANTS.TABLE_HEIGHT_OFFSET}px)`,
"highlight-current-row": !__props.multiple,
"row-class-name": getRowClassName,
"row-style": getRowStyle
}, {
empty: vue.withCtx(() => [
!state.loading ? (vue.openBlock(), vue.createBlock(_component_el_empty, {
key: 0,
"image-size": 25
})) : vue.createCommentVNode("v-if", true)
]),
default: vue.withCtx(() => [
vue.renderSlot(_ctx.$slots, "columns", {}, void 0, true)
]),
_: 3
/* FORWARDED */
}, 8, ["data", "height", "highlight-current-row"]),
vue.createCommentVNode(" \r\n \u5206\u9875\u7EC4\u4EF6\uFF08\u4EC5\u5F53\u542F\u7528\u5206\u9875\u65F6\u663E\u793A\uFF09\r\n \u914D\u7F6E\u8BF4\u660E\uFF1A\r\n 1. disabled: \u52A0\u8F7D\u65F6\u7981\u7528\u5206\u9875\u64CD\u4F5C\uFF0C\u9632\u6B62\u91CD\u590D\u8BF7\u6C42\r\n 2. pager-count: \u663E\u793A5\u4E2A\u9875\u7801\u6309\u94AE\uFF0C\u9002\u5408\u4E0B\u62C9\u6846\u7684\u6709\u9650\u7A7A\u95F4\r\n 3. layout: \u7B80\u5316\u5E03\u5C40\uFF08\u53EA\u663E\u793A\u4E0A\u4E00\u9875\u3001\u9875\u7801\u3001\u4E0B\u4E00\u9875\uFF09\uFF0C\u8282\u7701\u7A7A\u95F4\r\n 4. size: \u4F7F\u7528\u5C0F\u5C3A\u5BF8\uFF0C\u9002\u914D\u4E0B\u62C9\u6846\u9AD8\u5EA6\r\n "),
props.pagination ? (vue.openBlock(), vue.createBlock(_component_el_pagination, {
key: 1,
disabled: state.loading,
currentPage: state.tableQuery.page,
"page-size": state.tableQuery.pageSize,
total: state.tableData.total,
"pager-count": 5,
onSizeChange: handleSizeChange,
onCurrentChange: handleCurrentChange,
layout: "prev, pager, next",
size: "small",
background: ""
}, null, 8, ["disabled", "currentPage", "page-size", "total"])) : vue.createCommentVNode("v-if", true)
])), [
[_directive_loading, state.loading]
])
]),
_: 3
/* FORWARDED */
}, 16, ["modelValue", "clearable", "multiple", "disabled", "placeholder", "style"])
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
});
exports.default = _sfc_main;