import React, { useEffect, useState } from "react"
import { PopDrawer } from "../../common/pop-drawer"
import { PopMessage } from "../../common/pop-message"
import { PopModal } from "../../common/pop-modal"
import { Form } from "../../data-entry/form"
import { StateManage } from "../../../service/state"
import { Loading } from "../../common/loading"
export const Service = {
filterConditionMap: {},
orderByMap: {},
guid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
},
table_onChange: async function ({ condition, httpConfig, filterSettingControlKey }) {
const { filterConditionMap, orderByMap } = condition
Service.filterConditionMap = filterConditionMap
Service.orderByMap = orderByMap
const filterSettingMap = await Service.getFilterSettingFormData({ filterSettingControlKey })
return httpConfig.search({
filterConditionMap: { ...filterConditionMap, ...filterSettingMap },
orderByMap
})
},
// 新增数据
insertForm: function ({ insertForm, httpConfig, insertModal = {}, tableControlKey, filterSettingControlKey }) {
const [formState, FormTpl] = Form(insertForm, false)
PopModal({
title: "新增数据",
content:
,
onConfirm: async function ({ }, modalState) {
const { getFormData } = StateManage.get(formState)
const formData = await getFormData(true)
const submitData = {}
for (let key in formData) {
submitData[key] = formData[key]["value"]
}
if (httpConfig.insert) {
Loading.setGlobalLoading(true)
const result = await httpConfig.insert({ formData: submitData })
if (typeof result === "string") {
PopMessage({ type: "error", title: result })
} else if (result === true) {
PopMessage({ type: "success", title: "新增成功" })
} else {
PopMessage({ type: "error", title: "新增失败" })
}
StateManage.set(modalState, { visible: false })
Service.refreshTable({ tableControlKey, httpConfig, filterSettingControlKey, page: 1 })
Loading.setGlobalLoading(false)
}
},
...insertModal
})
},
getFilterSettingFormData: async ({ filterSettingControlKey }) => {
if (!StateManage.has(filterSettingControlKey)) return {}
const { getFormData } = StateManage.get(filterSettingControlKey)
const formData = await getFormData(false)
const submitData = {}
for (let key in formData) {
submitData[key] = formData[key]["value"]
}
return submitData
},
// 更新表格数据
refreshTable: async function ({ tableControlKey, page, filterSettingControlKey, httpConfig }) {
if (!httpConfig.search) return
if (page) {
Service.filterConditionMap["@page"] = 1
}
const filterSettingMap = await Service.getFilterSettingFormData({ filterSettingControlKey })
const { filterConditionMap, orderByMap } = Service
Loading.setGlobalLoading(true)
const result = await httpConfig.search({
filterConditionMap: { ...filterConditionMap, ...filterSettingMap },
orderByMap
})
StateManage.set(tableControlKey, {
"pagination.page": 1,
"pagination.total": result.total,
"dataSource": result.data,
})
Loading.setGlobalLoading(false)
},
// 过滤数据
filterSetting: function ({ filterForm, filterModal, httpConfig, filterSettingControlKey, tableControlKey }) {
const modalControlKey = filterSettingControlKey + ".FilterModal"
if (StateManage.has(modalControlKey)) {
StateManage.set(modalControlKey, { visible: true })
return
}
const FilterSettingModal = function () {
let [FilterFormTpl, setFilterFormTpl] = useState(null) as any
useEffect(() => {
FilterFormTpl = Form(filterForm, true)
setFilterFormTpl(FilterFormTpl)
}, [])
return (
{FilterFormTpl ? : null}
);
}
const modalState = PopDrawer({
title: "设置过滤条件",
content:
,
onClose: async function () {
Service.refreshTable({ tableControlKey, httpConfig, filterSettingControlKey, page: 1 })
},
...filterModal
})
StateManage.addState(modalControlKey, modalState)
},
// 删除数据
deleteData: async function ({ checkedRows, tableControlKey, httpConfig, filterSettingControlKey }) {
const result = await httpConfig.delete({ checkedRows })
if (typeof result === "string" || result === false) {
return {
result: false,
message: typeof result === "string" ? result : "删除失败"
}
} else if (result === true) {
StateManage.set(tableControlKey, { "pagination.page": 1 })
Service.refreshTable({ tableControlKey, httpConfig, filterSettingControlKey, page: 1 })
return {
result: true,
message: "删除成功"
}
}
},
// 修改数据
updateData: async function ({ record, updateModal = {}, updateForm, tableControlKey, httpConfig, filterSettingControlKey, updateFormControlKey }) {
httpConfig.beforeUpdate({ record }).then(result => {
const { formItemConfig } = updateForm
formItemConfig.forEach(item => {
const { field } = item
if (result[field]) {
item["controlProps"]["props"] = {
...item["controlProps"]["props"],
...result[field]
}
}
})
const [formState, FormTpl] = Form(updateForm, false)
PopModal({
title: "修改数据",
content:
,
onConfirm: async function ({ }, modalState) {
const { getFormData } = StateManage.get(formState)
const formData = await getFormData(true)
const submitData = {}
for (let key in formData) {
submitData[key] = formData[key]["value"]
}
if (httpConfig.update) {
Loading.setGlobalLoading(true)
const result = await httpConfig.update({ formData: submitData, record })
if (typeof result === "string" || result === false) {
PopMessage({ type: "error", title: typeof result === "string" ? result : "修改失败" })
} else if (result === true) {
PopMessage({ type: "success", title: "修改成功" })
Service.refreshTable({ tableControlKey, httpConfig, filterSettingControlKey, page: 1 })
StateManage.set(modalState, { visible: false })
}
Loading.setGlobalLoading(false)
}
},
...updateModal
})
})
}
}