🔱: [client] sync upgrade with 21 commits [trident-sync]

perf: 优化antdv4 示例授权页面tree的样式
build: publish success
chore: 1
chore: 1
chore: 1
fix: getFileName支持item参数

https://github.com/fast-crud/fast-crud/issues/385
fix: fs-form独立使用支持插槽

https://github.com/fast-crud/fast-crud/issues/389
fix: 修复三级以上路由页面无法缓存的问题

https://github.com/fast-crud/fast-crud/issues/394
perf: form.wrapper.buttons支持compute动态计算
feat: 表单支持变更关闭前提醒保存,form.wrapper支持beforeClose事件
fix: 修复图片裁剪按钮上下和左右相反的bug

https://github.com/fast-crud/fast-crud/issues/402
perf: alioss getAuthorization接口支持后台返回key

https://github.com/fast-crud/fast-crud/issues/405
perf: alioss getAuthorization接口支持后台返回key

https://github.com/fast-crud/fast-crud/issues/405
perf: fs-dict-tree支持插槽

https://github.com/fast-crud/fast-crud/issues/407
perf: 单选、多选、select、tree-select、table-select 都提供selected-change事件,可以获取选中的dict选项
feat: table-select 支持查看模式

https://github.com/fast-crud/fast-crud/issues/413
perf: 优化fs-admin可以在手机上操作
chore: pnpm workspace问题优化
docs: 1
chore: antdv4 支持主题色选择
...
This commit is contained in:
GitHub Actions Bot
2024-06-15 18:32:36 +00:00
parent 9caa4cd1d4
commit ad360e81cb
173 changed files with 3386 additions and 1108 deletions
@@ -1,7 +1,10 @@
<template>
<fs-page>
<template #header>
<div class="title">行编辑模式</div>
<div class="title">
行编辑模式
<span class="sub">暂不支持树形结构</span>
</div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/expose.html">文档</a></div>
</template>
<fs-crud ref="crudRef" v-bind="crudBinding" />
@@ -6,6 +6,11 @@ const options: any = {
const list = [
{
radio: "1"
// children: [
// {
// radio: "1"
// }
// ]
},
{
radio: "2"
@@ -22,6 +22,8 @@
<fs-button class="ml-1" @click="editCol">编辑列</fs-button>
<fs-button class="ml-1" @click="cancel">取消/恢复原状</fs-button>
<fs-button class="ml-1" @click="save">保存</fs-button>
<fs-button class="ml-1" @click="log">log</fs-button>
</template>
</template>
</fs-crud>
@@ -31,7 +33,7 @@
<script lang="ts">
import { defineComponent, onMounted } from "vue";
import createCrudOptions from "./crud";
import { useFs } from "@fast-crud/fast-crud";
import {useFs, utils} from "@fast-crud/fast-crud";
import { message } from "ant-design-vue";
export default defineComponent({
@@ -72,12 +74,14 @@ export default defineComponent({
},
save() {
crudExpose.getTableRef().editable.submit(({ changed, removed, setData }: any) => {
console.log("changed", changed);
console.log("removed", removed);
utils.logger.info("table data:", crudBinding.value.data, crudExpose.getTableData());
// setData({ 0: {id:1} }); //设置data
message.success("保存,修改行:" + JSON.stringify(changed) + ";删除行:" + JSON.stringify(removed));
});
},
log() {
console.log("table data:", crudBinding.value.data, crudExpose.getTableData());
},
cancel() {
crudExpose.editable.resume();
},
@@ -1,5 +1,15 @@
import * as api from "./api.js";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
import { ref } from "vue";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
@@ -40,6 +50,9 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
class: clazz
};
},
onExpand(open: boolean, row: any) {
utils.logger.info("expand事件:", open, row);
},
slots: {
expandedRowRender: (scope: any) => {
return (
@@ -30,6 +30,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
toolbar: {
export: {
// columns: [{ key: "id", title: "ID" }],
columnBuilder: ({ col }) => {
// https://docs.sheetjs.com/docs/csf/features/#row-and-column-properties
if (col.key === "multi") {
@@ -1,5 +1,11 @@
<template>
<fs-page>
<template #header>
<div class="title">导出</div>
<div class="more">
<a target="_blank" href="http://fast-crud.docmirror.cn/api/crud-options/toolbar.html#export">文档</a>
</div>
</template>
<fs-crud ref="crudRef" v-bind="crudBinding">
<template #toolbar-left>
<fs-label lass="ml-5" label="导出方式">
@@ -1,5 +1,15 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -30,7 +40,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
table: {
// 表头过滤改变事件
onFilterChange(filters: any) {
console.log("onFilterChange", filters);
utils.logger.info("onFilterChange", filters);
crudExpose.setSearchFormData({
form: {
remote: filters.remote
@@ -1,5 +1,16 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes, ValueChangeContext } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils,
ValueChangeContext
} from "@fast-crud/fast-crud";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -66,7 +77,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
vModel: "checked"
},
valueChange(context) {
console.log("column value changed:", context);
utils.logger.info("column value changed:", context);
}
}
}
@@ -48,3 +48,11 @@ export function BatchDelete(ids: any[]) {
data: { ids }
});
}
export function ColumnUpdate(key: string, value: any) {
return request({
url: apiPrefix + "/columnUpdate",
method: "post",
data: { key, value }
});
}
@@ -1,5 +1,15 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -46,7 +56,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
text: "自定义按钮",
show: true,
click() {
console.log("click");
utils.logger.info("click");
}
}
}
@@ -73,7 +83,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
order: 4,
show: true,
click(context) {
console.log("click", context);
utils.logger.info("click", context);
}
}
}
@@ -25,6 +25,7 @@
import { defineComponent, onMounted, reactive } from "vue";
import { message } from "ant-design-vue";
import FeatureLocalImportValueInput from "./local.vue";
import {utils} from "@fast-crud/fast-crud";
export default defineComponent({
name: "FeatureLocalImport",
components: { FeatureLocalImportValueInput },
@@ -36,7 +37,7 @@ export default defineComponent({
function submit() {
message.info("submit:" + JSON.stringify(form));
console.log("submit:", form);
utils.logger.info("submit:", form);
}
return {
form,
@@ -5,7 +5,7 @@
<script lang="ts">
import { defineComponent, onMounted, watch } from "vue";
import createCrudOptions from "./crud";
import { useFs } from "@fast-crud/fast-crud";
import {useFs, utils} from "@fast-crud/fast-crud";
export default defineComponent({
name: "FeatureLocalImportValueInput",
@@ -39,7 +39,7 @@ export default defineComponent({
// 通过crudBinding.value.data 可以获取表格实时数据
function showData() {
console.log("data:", crudBinding.value.data);
utils.logger.info("data:", crudBinding.value.data);
}
return {
@@ -22,9 +22,11 @@
</template>
<script lang="ts">
import { defineComponent, onMounted, reactive } from "vue";
import { defineComponent, reactive } from "vue";
import { message } from "ant-design-vue";
import FeatureLocalModelValueInput from "./local.vue";
import {utils} from "@fast-crud/fast-crud";
export default defineComponent({
name: "FeatureLocalVModel",
components: { FeatureLocalModelValueInput },
@@ -36,7 +38,7 @@ export default defineComponent({
function submit() {
message.info("submit:" + JSON.stringify(form));
console.log("submit:", form);
utils.logger.info("submit:", form);
}
return {
form,
@@ -5,7 +5,7 @@
<script lang="ts">
import { defineComponent, onMounted, watch } from "vue";
import createCrudOptions from "./crud";
import { useFs } from "@fast-crud/fast-crud";
import {useFs, utils} from "@fast-crud/fast-crud";
export default defineComponent({
name: "FeatureLocalModelValueInput",
@@ -39,7 +39,7 @@ export default defineComponent({
// 通过crudBinding.value.data 可以获取表格实时数据
function showData() {
console.log("data:", crudBinding.value.data);
utils.logger.info("data:", crudBinding.value.data);
}
return {
@@ -14,7 +14,7 @@
<script lang="ts">
import { defineComponent, ref, onMounted } from "vue";
import createCrudOptions from "./crud";
import { useExpose, useCrud, useFs } from "@fast-crud/fast-crud";
import {useExpose, useCrud, useFs, utils} from "@fast-crud/fast-crud";
export default defineComponent({
name: "FeatureLocal",
@@ -29,7 +29,7 @@ export default defineComponent({
});
// 通过crudBinding.value.data 可以获取表格实时数据
function showData() {
console.log("data:", crudBinding.value.data);
utils.logger.info("data:", crudBinding.value.data);
}
//初始化本地数据示例
@@ -1,5 +1,15 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
import { Modal } from "ant-design-vue";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -47,10 +57,10 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
showSuccessMessage: true, //是否显示删除成功记录
refreshTable: true, //删除后刷新表格
onCanceled({ row }) {
console.log(`记录${row.id}取消删除`);
utils.logger.info(`记录${row.id}取消删除`);
},
onRemoved({ row }) {
console.log(`记录${row.id}已删除`);
utils.logger.info(`记录${row.id}已删除`);
}
}
},
@@ -31,7 +31,7 @@ export default defineComponent({
.fs-search-multi-line-buttons {
position: absolute;
bottom: -38px;
right: 160px;
right: 210px;
}
.ant-form-item-label:before {
border-bottom: 1px solid #eee;
@@ -1,6 +1,6 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import { computed } from "vue";
import { computed, ref } from "vue";
import { message } from "ant-design-vue";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
@@ -24,6 +24,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
const statusRef = dict({
url: "/mock/dicts/OpenStatusEnum?single"
});
const formLayoutRef = ref("inline");
return {
crudOptions: {
request: {
@@ -38,9 +39,19 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
//查询默认值
radio: "1"
},
options: {
layout: formLayoutRef
},
container: {
action: {
col: {
span: 6
}
}
},
buttons: {
custom: {
text: "自定义",
text: "label上置",
show: true,
order: 3,
class: "fs-test",
@@ -51,7 +62,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
}
},
click() {
console.log("点击了自定义按钮");
formLayoutRef.value = formLayoutRef.value === "vertical" ? "inline" : "vertical";
}
}
}
@@ -61,7 +72,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
show: true,
type: "card",
options: computed(() => {
return statusRef.data;
return statusRef.data as TabsFilterOption[];
})
},
columns: {
@@ -95,7 +106,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
type: "text",
search: {
show: true,
value: "1"
value: "2"
}
},
customRender: {
@@ -18,6 +18,18 @@ const list = [
{
radio: "0",
text: "3"
},
{
radio: "1",
text: "2"
},
{
radio: "1",
text: "3"
},
{
radio: "0",
text: "1"
}
];
options.list = list;
@@ -1,6 +1,6 @@
import { requestForMock } from "/src/api/service";
const request = requestForMock;
const apiPrefix = "/mock/FeatureSelection";
const apiPrefix = "/mock/FeatureSelectionRadio";
export function GetList(query: any) {
return request({
url: apiPrefix + "/page",
@@ -1,5 +1,15 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
import { ref } from "vue";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -21,7 +31,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
const selectedRowKey = ref();
const onSelectChange = (changed: any) => {
console.log("selection", changed);
utils.logger.info("selection", changed);
selectedRowKey.value = changed;
};
return {
@@ -50,7 +60,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
key: "id",
type: "number",
column: {
width: 50
width: 140
},
form: {
show: false
@@ -1,6 +1,6 @@
import mockUtil from "/src/mock/base";
const options: any = {
name: "FeatureSelection",
name: "FeatureSelectionRadio",
idGenerator: 0
};
const list = [
@@ -8,7 +8,8 @@ const list = [
radio: "1"
},
{
radio: "2"
radio: "2",
children: [{ radio: "2" }, { radio: "0", children: [{ radio: "1" }] }]
},
{
radio: "0"
@@ -1,7 +1,17 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
import { ref } from "vue";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
return await api.GetList(query);
};
@@ -20,13 +30,13 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
};
const selectedRowKeys = ref([]);
context.selectedRowKeys = selectedRowKeys;
const onSelectChange = (changed: any) => {
console.log("selection", changed);
utils.logger.info("selection", changed);
selectedRowKeys.value = changed;
};
return {
selectedRowKeys, //返回给index.vue去使用
crudOptions: {
table: {
rowKey: "id",
@@ -47,7 +57,6 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
columns: {
id: {
title: "ID",
key: "id",
type: "number",
column: {
width: 50
@@ -56,13 +65,10 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
show: false
}
},
radio: {
title: "状态",
search: { show: true },
type: "dict-radio",
dict: dict({
url: "/mock/dicts/OpenStatusEnum?single"
})
text: {
title: "Text",
type: "text",
search: { show: true }
}
}
}
@@ -14,15 +14,17 @@
</template>
<script lang="ts">
import { defineComponent, ref, onMounted } from "vue";
import { defineComponent, onMounted } from "vue";
import createCrudOptions from "./crud";
import { useExpose, useCrud, useFs } from "@fast-crud/fast-crud";
import { useFs } from "@fast-crud/fast-crud";
import { message, Modal } from "ant-design-vue";
import { BatchDelete } from "./api";
export default defineComponent({
name: "FeatureSelection",
setup() {
const { crudBinding, crudRef, crudExpose, selectedRowKeys } = useFs({ createCrudOptions });
const { crudBinding, crudRef, crudExpose, context } = useFs({ createCrudOptions });
const selectedRowKeys = context.selectedRowKeys;
// 页面打开后获取列表数据
onMounted(() => {
crudExpose.doRefresh();
@@ -5,12 +5,15 @@ const options: any = {
};
const list = [
{
text: "张三",
radio: "1"
},
{
text: "李四",
radio: "2"
},
{
text: "王五",
radio: "0"
}
];
@@ -1,5 +1,15 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -46,7 +56,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
}
},
click() {
console.log("点击了自定义按钮");
utils.logger.info("点击了自定义按钮");
}
}
}
@@ -1,6 +1,17 @@
import * as api from "./api";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet,
DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes,
utils
} from "@fast-crud/fast-crud";
import { ref } from "vue";
import dayjs from "dayjs";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -23,7 +34,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
const selectedRowKeys = ref([]);
const onSelectChange = (changed: any) => {
console.log("selection", changed);
utils.logger.info("selection", changed);
selectedRowKeys.value = changed;
};
return {
@@ -53,6 +64,18 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
time: {
title: "时间",
type: "datetime",
column: {
width: 180
},
valueBuilder({ row, key, value }) {
if (value) {
row[key] = dayjs(value);
}
}
},
data: {
title: "data",
type: "text",
column: {
width: 180
}