Skip to content

Commit

Permalink
perf: table-select element增加radio列
Browse files Browse the repository at this point in the history
  • Loading branch information
greper committed Feb 9, 2024
1 parent c768a50 commit b56b5df
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
</div>
</template>
<script lang="tsx" setup>
import { Dict, useFs, useMerge, useUi } from "../../use";
import { Dict, useCompute, useFs, useMerge, useUi } from "../../use";
import { computed, nextTick, ref, Ref, watch } from "vue";
import { CreateCrudOptions, DynamicallyCrudOptions } from "../../d";
import _ from "lodash-es";
Expand Down Expand Up @@ -249,6 +249,7 @@ const override: DynamicallyCrudOptions = computed(() => {
getPageData() {
return crudBinding.value.data;
},
useCompute: useCompute,
multiple: props.multiple,
selectedRowKeys,
onSelectedKeysChanged: async (changed) => {
Expand Down
43 changes: 22 additions & 21 deletions packages/fast-crud/src/components/render/fs-component-render.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -123,34 +123,35 @@ export default defineComponent({
}

const modelValue = props.modelValue ?? (ui.type === "antdv" ? undefined : null);
const onUpdateModelValueName = "onUpdate:" + vModel.name;
const attrs = {
ref: targetRef,
// scope: props.scope,
// fix element display false bug
[vModel.name]: modelValue,
...props.props
};
attrs["onUpdate:" + vModel.name] = (value: any) => {
if (value) {
if (vModel.trim) {
value = value.trim();
}
if (vModel.number) {
const tmp = Number(value);
//判断tmp是否NaN
if (isNaN(tmp)) {
} else {
value = tmp;
[onUpdateModelValueName]: (value: any) => {
if (value) {
if (vModel.trim) {
value = value.trim();
}
if (vModel.number) {
const tmp = Number(value);
//判断tmp是否NaN
if (isNaN(tmp)) {
} else {
value = tmp;
}
}
}
}
if (vModel.transform) {
value = vModel.transform(value);
}
if (value === undefined && props.undefineToNull) {
value = null;
}
ctx.emit("update:modelValue", value);
if (vModel.transform) {
value = vModel.transform(value);
}
if (value === undefined && props.undefineToNull) {
value = null;
}
ctx.emit("update:modelValue", value);
},
...props.props
};

const events: {
Expand Down
38 changes: 37 additions & 1 deletion packages/ui/ui-element/src/element.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ import {
// @ts-ignore
import _, { isFunction } from "lodash-es";
import { ElDialog, useFormItem } from "element-plus";
import { ref } from "vue";
import { computed, ref } from "vue";

export type ElementUiProvider = {
Notification: any;
Expand Down Expand Up @@ -469,6 +469,7 @@ export class Element implements UiInterface {
}
},
buildSelectionCrudOptions(req) {
const { compute } = req.useCompute();
function getCrossPageSelected(curSelectedIds: any[]) {
const rowKey: any = req.getRowKey();
const data = req.getPageData();
Expand Down Expand Up @@ -522,10 +523,45 @@ export class Element implements UiInterface {
const selectedKeys = [changed[rowKey]];
req.onSelectedKeysChanged(selectedKeys);
};
const modelValue = computed(() => {
const value = req.selectedRowKeys.value.length > 0 ? req.selectedRowKeys.value[0] : null;
return value;
});
return {
table: {
highlightCurrentRow: true,
onCurrentChange: onCurrentChange
},
columns: {
$selected: {
form: { show: false },
column: {
align: "center",
width: "55px",
order: -9999,
component: {
name: "el-radio",
label: compute((ctx) => {
if (ctx.form) {
return ctx.form[req.getRowKey()];
}
}),
props: {
modelValue: modelValue
},
slots: {
default() {
return "";
}
}
},
conditionalRender: {
match() {
return false;
}
}
}
}
}
};
}
Expand Down
1 change: 1 addition & 0 deletions packages/ui/ui-interface/src/ui-interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ export type TableSelectionReq = {
getRowKey?: () => any;
getPageData?: () => any[];
multiple: boolean;
useCompute: () => { compute: any; asyncCompute };
selectedRowKeys: Ref<any[]>;
onSelectedKeysChanged: (selectedRowKeys: any[]) => void;
};
Expand Down

0 comments on commit b56b5df

Please sign in to comment.