🔱: [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
@@ -57,7 +57,7 @@ export function UpdateCell(id: number, key: string, value: any) {
data: { id, key, value }
});
}
export function UpdateColumn(data) {
export function UpdateColumn(data: any) {
return request({
url: apiPrefix + "/columnUpdate",
method: "post",
@@ -1,8 +1,7 @@
import * as api from "./api";
import { dict, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, UserPageQuery, UserPageRes, EditReq, DelReq, AddReq } from "@fast-crud/fast-crud";
import { computed, reactive, ref } from "vue";
import _ from "lodash-es";
import { EditableEachCellsOpts } from "@fast-crud/fast-crud";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditableEachCellsOpts, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import { reactive, ref } from "vue";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const { crudBinding } = crudExpose;
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -46,7 +45,6 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
editing: false,
loading: false,
onSubmit: async () => {
console.log("onSubmit");
radioColumnEditor.loading = true;
try {
const data: any[] = [];
@@ -61,7 +59,6 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
}
},
onCancel: () => {
console.log("cancel");
crudExpose.editable.cancel();
radioColumnEditor.editing = false;
},
@@ -111,7 +108,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
mode: "cell",
exclusive: true,
//排他式激活效果,将其他行的编辑状态触发保存
exclusiveEffect: "save",
exclusiveEffect: "save", //自动保存其他行编辑状态,cancel = 自动关闭其他行编辑状态
async updateCell(opts) {
const { row, key, value } = opts;
//如果是添加,需要返回{[rowKey]:xxx},比如:{id:2}
@@ -160,7 +157,10 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
type: "dict-radio",
dict: radioDictRef,
column: {
width: 300
width: 300,
valueChange({ value, getComponentRef }) {
console.log("value changed:", value, getComponentRef("radio"));
}
}
},
name: {
@@ -5,7 +5,7 @@
单元格编辑
<span class="sub">单元格修改确认后直接提交到后台</span>
</div>
<div class="more"></div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/crud-options/table.html#editable">文档</a></div>
</template>
<fs-crud ref="crudRef" v-bind="crudBinding">
<template #actionbar-right>
@@ -38,7 +38,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({
@@ -57,17 +57,14 @@ export default defineComponent({
crudBinding,
crudRef,
active() {
crudExpose.editable.active();
crudExpose.editable.active({});
},
inactive() {
crudExpose.editable.inactive();
},
save() {
crudExpose.getTableRef().editable.submit(({ changed, removed, setData }: any) => {
console.log("changed", changed);
console.log("removed", removed);
console.log("table data:", crudBinding.value.data, crudExpose.getTableData());
utils.logger.info("table data:", crudBinding.value.data, crudExpose.getTableData());
// setData({ 0: {id:1} }); //设置data
message.success("保存,修改行:" + JSON.stringify(changed) + ";删除行:" + JSON.stringify(removed));
});
@@ -1,5 +1,6 @@
import * as api from "./api";
import { dict, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, UserPageQuery, UserPageRes, EditReq, DelReq, AddReq } from "@fast-crud/fast-crud";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const { crudBinding } = crudExpose;
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
@@ -37,9 +38,18 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
}
}
},
mode: {
//本地模式
name: "local",
isMergeWhenUpdate: true,
isAppendWhenAdd: true
},
table: {
editable: {
mode: "free"
enabled: true,
mode: "free",
activeDefault: true,
showAction: false
}
},
pagination: {
@@ -2,7 +2,7 @@
<fs-page>
<template #header>
<div class="title">可编辑</div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/expose.html">文档</a></div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/crud-options/table.html#editable">文档</a></div>
</template>
<fs-crud ref="crudRef" v-bind="crudBinding">
<template #actionbar-right>
@@ -11,10 +11,14 @@
<a-radio-button :value="true">启用编辑</a-radio-button>
<a-radio-button :value="false">退出编辑</a-radio-button>
</a-radio-group>
<!-- <a-radio-group class="ml-1" v-model="crudBinding.table.editable.mode">-->
<!-- <a-radio-button label="free">自由模式</a-radio-button>-->
<!-- <a-radio-button label="row">行编辑模式</a-radio-button>-->
<!-- </a-radio-group>-->
<a-radio-group v-model:value="crudBinding.table.editable.showAction" class="ml-1">
<a-radio-button :value="true">显示操作按钮</a-radio-button>
<a-radio-button :value="false">不显示</a-radio-button>
</a-radio-group>
<a-radio-group v-model:value="crudBinding.table.editable.activeDefault" class="ml-1">
<a-radio-button :value="true">默认激活</a-radio-button>
<a-radio-button :value="false">默认不激活</a-radio-button>
</a-radio-group>
<template v-if="crudBinding.table.editable.enabled">
<fs-button class="ml-5" @click="save">保存</fs-button>
<fs-button class="ml-5" @click="log">log</fs-button>
@@ -25,9 +29,9 @@
</template>
<script lang="ts">
import { defineComponent, onMounted } from "vue";
import { defineComponent, onMounted, ref } 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({
@@ -38,14 +42,14 @@ export default defineComponent({
// 页面打开后获取列表数据
onMounted(() => {
crudExpose.doRefresh();
crudExpose.editable.enable({ mode: "free", activeDefault: true });
crudExpose.editable.enable({ mode: "free" });
});
return {
crudBinding,
crudRef,
active() {
crudExpose.editable.active();
crudExpose.editable.active({});
},
inactive() {
crudExpose.editable.inactive();
@@ -54,12 +58,13 @@ export default defineComponent({
const res = await crudExpose.editable.validate();
if (res !== true) {
console.error("validate error:", res);
message.error("validate error" + JSON.stringify(res));
return;
}
message.success("保存,修改行:" + JSON.stringify(crudBinding.value.data));
},
log() {
console.log("table data:", crudBinding.value.data, crudExpose.getTableData());
utils.logger.info("table data:", crudBinding.value.data, crudExpose.getTableData());
},
cancel() {
crudExpose.editable.resume();
@@ -1,5 +1,5 @@
import * as api from "./api";
import { AddReq, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import { AddReq, compute, 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> => {
return await api.GetList(query);
@@ -31,7 +31,9 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
table: {
editable: {
enabled: true,
mode: "row"
mode: "row",
exclusive: true, //排他式激活
exclusiveEffect: "save" //排他式激活时,其他行的编辑状态的处理方式
}
},
columns: {
@@ -68,7 +70,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
form: {
rules: {
async asyncValidator(context) {
console.log("context", context);
utils.logger.info("context", context);
return true;
},
message: "远程校验测试"
@@ -5,7 +5,7 @@
行编辑模式
<span class="sub">在表格内编辑每行数据</span>
</div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/expose.html">文档</a></div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/crud-options/table.html#editable">文档</a></div>
</template>
<fs-crud ref="crudRef" v-bind="crudBinding">
<template #actionbar-right>
@@ -18,7 +18,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";
export default defineComponent({
name: "EditableRow",
@@ -28,14 +28,14 @@ export default defineComponent({
// 页面打开后获取列表数据
onMounted(() => {
crudExpose.doRefresh();
crudExpose.editable.enable();
// crudExpose.editable.enable({});
});
return {
crudBinding,
crudRef,
log() {
console.log("table data:", crudBinding.value.data, crudExpose.getTableData());
utils.logger.info("table data:", crudBinding.value.data, crudExpose.getTableData());
}
};
}
@@ -2,7 +2,7 @@ import * as api from "./api";
import { dict, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, UserPageQuery, UserPageRes, EditReq, DelReq, AddReq } from "@fast-crud/fast-crud";
import EditableRowSub from "/@/views/crud/editable/sub-crud/row/index.vue";
export default function (props: CreateCrudOptionsProps): CreateCrudOptionsRet {
const { crudBinding,crudRef } = props.crudExpose;
const { crudBinding, crudRef } = props.crudExpose;
const { crudExpose } = props;
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
return await api.GetList(query);
@@ -32,7 +32,7 @@ export default function (props: CreateCrudOptionsProps): CreateCrudOptionsRet {
form: {
wrapper: {
width: "80%"
},
}
},
columns: {
id: {
@@ -50,7 +50,7 @@ export default function (props: CreateCrudOptionsProps): CreateCrudOptionsRet {
dict: dict({
url: "/mock/dicts/OpenStatusEnum?single"
}),
form:{
form: {
rules: [{ required: true, message: "请选择状态" }]
}
},
@@ -60,25 +60,25 @@ export default function (props: CreateCrudOptionsProps): CreateCrudOptionsRet {
form: {
component: {
name: EditableRowSub,
id:compute(({form})=>{
return form.id
id: compute(({ form }) => {
return form.id;
}),
on:{
async saveMain({form}){
on: {
async saveMain({ form }) {
//保存主表
const formRef = crudExpose.getFormRef()
const ret = await formRef.submit()
const formRef = crudExpose.getFormRef();
const ret = await formRef.submit();
//将form改为编辑模式
let formWrapperRef = crudExpose.getFormWrapperRef();
formWrapperRef.setFormData(ret.res)
crudRef.value.formWrapperRef.formOptions.mode = "edit"
crudRef.value.formWrapperRef.title="编辑"
const formWrapperRef = crudExpose.getFormWrapperRef();
formWrapperRef.setFormData(ret.res);
crudRef.value.formWrapperRef.formOptions.mode = "edit";
crudRef.value.formWrapperRef.title = "编辑";
}
}
},
col: {
span: 24
},
}
},
column: {
formatter: ({ row }) => {
@@ -18,7 +18,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({
@@ -35,7 +35,7 @@ export default defineComponent({
crudBinding,
crudRef,
log() {
console.log("table data:", crudBinding.value.data);
utils.logger.info("table data:", crudBinding.value.data);
}
};
}
@@ -1,16 +1,8 @@
import {
AddReq,
CreateCrudOptionsProps,
CreateCrudOptionsRet, DelReq,
dict,
EditReq,
UserPageQuery,
UserPageRes
} from "@fast-crud/fast-crud";
import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud";
import * as api from "./api";
export default function ({ crudExpose,context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const { crudBinding } = crudExpose;
const {parentIdRef} = context
const { parentIdRef } = context;
const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
return await api.GetList(query);
};
@@ -48,8 +40,8 @@ export default function ({ crudExpose,context }: CreateCrudOptionsProps): Create
},
search: {
show: false,
initialForm:{
parentId:parentIdRef
initialForm: {
parentId: parentIdRef
}
},
toolbar: {
@@ -63,7 +55,7 @@ export default function ({ crudExpose,context }: CreateCrudOptionsProps): Create
editable: {
enabled: true,
mode: "row",
activeDefault:false,
activeDefault: false
}
},
// pagination: { show: false, pageSize: 9999999 },
@@ -83,8 +75,8 @@ export default function ({ crudExpose,context }: CreateCrudOptionsProps): Create
dict: dict({
url: "/mock/dicts/OpenStatusEnum?single"
}),
form:{
value:'1',
form: {
value: "1"
}
},
name: {
@@ -97,16 +89,16 @@ export default function ({ crudExpose,context }: CreateCrudOptionsProps): Create
]
}
},
parentId:{
parentId: {
title: "父Id",
type: "number",
search:{
show:true,
search: {
show: true
},
form:{
value:parentIdRef,
component:{
disabled:true
form: {
value: parentIdRef,
component: {
disabled: true
}
}
},
@@ -1,20 +1,16 @@
<template>
<div class="sub-table">
<div v-if="id>0" style="height: 500px; position: relative">
<fs-crud ref="crudRef" v-bind="crudBinding"> </fs-crud>
</div>
<div v-else>
<fs-button @click="saveMain">保存</fs-button> 保存后即可编辑子表
</div>
<div v-if="id > 0" style="height: 500px; position: relative">
<fs-crud ref="crudRef" v-bind="crudBinding"> </fs-crud>
</div>
<div v-else><fs-button @click="saveMain">保存</fs-button> 保存后即可编辑子表</div>
</div>
</template>
<script lang="ts">
import { defineComponent, onMounted, watch,ref } from "vue";
import { defineComponent, onMounted, watch, ref } from "vue";
import createCrudOptions from "./crud";
import { useFs, useUi } from "@fast-crud/fast-crud";
import { useFs, useUi, utils } from "@fast-crud/fast-crud";
export default defineComponent({
name: "EditableSubCrudTarget",
@@ -22,50 +18,50 @@ export default defineComponent({
/**
* 主表id
*/
id:{
type:Number,
default:0
id: {
type: Number,
default: 0
},
disabled:{
type:Boolean,
default:false
},
readonly:{
type:Boolean,
default:false
disabled: {
type: Boolean,
default: false
},
readonly: {
type: Boolean,
default: false
}
},
emits: ["save-main"],
setup(props, ctx) {
const parentIdRef = ref(props.id)
const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions ,context:{parentIdRef}});
// eslint-disable-next-line vue/no-setup-props-destructure
const parentIdRef = ref(props.id);
const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions, context: { parentIdRef } });
const { ui } = useUi();
let formItemContext = ui.formItem.injectFormItemContext();
function emit(data:any) {
console.log("emit:", data);
function emit(data: any) {
utils.logger.info("emit:", data);
formItemContext.onBlur();
formItemContext.onChange();
}
function saveMain(){
ctx.emit("save-main",true)
function saveMain() {
ctx.emit("save-main", true);
}
watch(
() => {
return props.id;
},
(value: any) => {
if(value>0){
if (value > 0) {
crudExpose.setSearchFormData({
form:{parentId:value},
mergeForm:true,
triggerSearch:true
})
parentIdRef.value = value
form: { parentId: value },
mergeForm: true,
triggerSearch: true
});
parentIdRef.value = value;
}
},
{
@@ -76,24 +72,27 @@ export default defineComponent({
// 页面打开后获取列表数据
onMounted(() => {
crudExpose.doRefresh();
watch(()=>{
return props.disabled || props.readonly
},(value)=>{
if(value){
crudBinding.value.table.editable.readonly=true
crudBinding.value.actionbar.buttons.addRow.show=false
crudBinding.value.rowHandle.show=false
}else{
crudBinding.value.table.editable.readonly=false
crudBinding.value.actionbar.buttons.addRow.show=true
crudBinding.value.rowHandle.show=true
watch(
() => {
return props.disabled || props.readonly;
},
(value) => {
if (value) {
crudBinding.value.table.editable.readonly = true;
crudBinding.value.actionbar.buttons.addRow.show = false;
crudBinding.value.rowHandle.show = false;
} else {
crudBinding.value.table.editable.readonly = false;
crudBinding.value.actionbar.buttons.addRow.show = true;
crudBinding.value.rowHandle.show = true;
}
},
{
immediate: true
}
},{
immediate:true
})
);
});
return {
crudBinding,
crudRef,
@@ -67,6 +67,10 @@ export default function (props: CreateCrudOptionsProps): CreateCrudOptionsRet {
},
col: {
span: 24
},
valueResolve({ form }) {
//重要,移除$editable_id字段,返回干净的tableData数据
form.subTable = crudExpose.editable.getTableData(form.subTable);
}
},
column: {
@@ -1,4 +1,6 @@
import { CreateCrudOptionsProps, CreateCrudOptionsRet, dict } from "@fast-crud/fast-crud";
import { compute, CreateCrudOptionsProps, CreateCrudOptionsRet, dict } from "@fast-crud/fast-crud";
import createCrudOptionsText from "/@/views/crud/component/text/crud";
import * as textTableApi from "/@/views/crud/component/text/api";
export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const { crudBinding } = crudExpose;
@@ -33,7 +35,9 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
table: {
editable: {
enabled: true,
mode: "free"
mode: "free",
activeDefault: true,
showAction: false
}
},
pagination: { show: false, pageSize: 9999999 },
@@ -64,6 +68,27 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti
]
}
},
tableSelect: {
title: "tableSelect",
type: "table-select",
dict: dict({
value: "id",
label: "name",
//重要,根据value懒加载数据
getNodesByValues: async (values: any[]) => {
return await textTableApi.GetByIds(values);
}
}),
form: {
show: compute(({ form }) => {
return form.dynamicShow;
}),
component: {
crossPage: true,
createCrudOptions: createCrudOptionsText
}
}
},
createdAt: {
column: {
show: false
@@ -7,7 +7,7 @@
<script lang="ts">
import { defineComponent, onMounted, watch } from "vue";
import createCrudOptions from "./crud";
import { useFs, useUi } from "@fast-crud/fast-crud";
import { useFs, useUi, utils } from "@fast-crud/fast-crud";
import { message } from "ant-design-vue";
export default defineComponent({
@@ -18,6 +18,14 @@ export default defineComponent({
default() {
return undefined;
}
},
disabled: {
type: Boolean,
default: false
},
readonly: {
type: Boolean,
default: false
}
},
emits: ["update:modelValue"],
@@ -26,8 +34,8 @@ export default defineComponent({
const { ui } = useUi();
let formItemContext = ui.formItem.injectFormItemContext();
function emit(data) {
console.log("emit:", data);
function emit(data: any) {
utils.logger.info("emit:", data);
ctx.emit("update:modelValue", data);
formItemContext.onBlur();
formItemContext.onChange();
@@ -36,6 +44,7 @@ export default defineComponent({
// 页面打开后获取列表数据
onMounted(() => {
// crudExpose.doRefresh();
watch(
() => {
return props.modelValue;
@@ -53,7 +62,26 @@ export default defineComponent({
}
);
crudExpose.editable.enable({ mode: "free", activeDefault: true });
watch(
() => {
return props.disabled || props.readonly;
},
(value) => {
if (value) {
crudBinding.value.table.editable.readonly = true;
crudBinding.value.actionbar.buttons.addRow.show = false;
crudBinding.value.rowHandle.show = false;
} else {
crudBinding.value.table.editable.readonly = false;
crudBinding.value.actionbar.buttons.addRow.show = true;
crudBinding.value.rowHandle.show = true;
}
},
{
immediate: true
}
);
// crudExpose.editable.enable({ mode: "free", activeDefault: true });
});
async function validate() {
@@ -1,8 +1,11 @@
<template>
<fs-page>
<template #header>
<div class="title">vModel编辑</div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/expose.html">文档</a></div>
<div class="title">
vModel编辑
<span class="sub">子表格作为主表的一个字段整体编辑整体提交</span>
</div>
<div class="more"><a target="_blank" href="http://fast-crud.docmirror.cn/api/crud-options/table.html#editable">文档</a></div>
</template>
<fs-crud ref="crudRef" v-bind="crudBinding">
<template #actionbar-right>
@@ -15,7 +18,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({
@@ -32,7 +35,7 @@ export default defineComponent({
crudBinding,
crudRef,
log() {
console.log("table data:", crudBinding.value.data);
utils.logger.info("table data:", crudBinding.value.data);
}
};
}