建工内容整合过的一版

This commit is contained in:
ylj20011123 2025-09-25 09:16:21 +08:00
parent 323f2add27
commit 5a7f174613
16 changed files with 1754 additions and 2842 deletions

View File

@ -19,6 +19,8 @@ import session from "@/utils/session";
import { handleGetCASHWORKERList } from "@/pages/DataVerification/list/service"; import { handleGetCASHWORKERList } from "@/pages/DataVerification/list/service";
import { handleNewGetSERVERPARTDetail } from "@/pages/newDataAnalysis/service"; import { handleNewGetSERVERPARTDetail } from "@/pages/newDataAnalysis/service";
import { handleGetCASHWORKERDetail, handleGetServerpartShopList, handleSynchroCASHWORKER } from "@/pages/newDataAnalysis/serviceAreaPersonnel/service"; import { handleGetCASHWORKERDetail, handleGetServerpartShopList, handleSynchroCASHWORKER } from "@/pages/newDataAnalysis/serviceAreaPersonnel/service";
import { formatTreeData } from "@/utils/format";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
const servicePartAudit: React.FC<{ currentUser: CurrentUser }> = (props) => { const servicePartAudit: React.FC<{ currentUser: CurrentUser }> = (props) => {
@ -288,46 +290,79 @@ const servicePartAudit: React.FC<{ currentUser: CurrentUser }> = (props) => {
} }
const data = await handleGetCASHWORKERList(req) const data = await handleGetCASHWORKERList(req)
if (data && data.length > 0) { if (data && data.length > 0) {
console.log('data', data); // console.log('data', data);
let res = JSON.parse(JSON.stringify(data)) // let res = JSON.parse(JSON.stringify(data))
let list: any = [] // let list: any = []
data.forEach((item: any) => { // data.forEach((item: any) => {
item.CASHWORKER_LOGINNAME = `"${item.CASHWORKER_LOGINNAME}"` // item.CASHWORKER_LOGINNAME = `"${item.CASHWORKER_LOGINNAME}"`
item.CASHWORKER_LOGINPWD = `"${item.CASHWORKER_LOGINPWD}"` // item.CASHWORKER_LOGINPWD = `"${item.CASHWORKER_LOGINPWD}"`
list.push(item) // list.push(item)
}) // })
setReqDetailList(list) // setReqDetailList(list)
return { data: res, success: true } let CASHWORKER_TYPEObj: any = {
"1": "收银员",
"2": "管理员",
"20": "店长",
"25": "稽核人员",
}
let WORKER_VALIDObj: any = {
'1': "有效",
'0': "无效"
}
let fieldData: any = []
let enumList: any = [
"CASHWORKER_TYPE",
"WORKER_VALID",
"BUSINESS_STATE"
]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data)), fieldData, enumList, [CASHWORKER_TYPEObj, WORKER_VALIDObj], [])
setReqDetailList(newPrintData)
return { data: data, success: true }
} }
setReqDetailList([]) setReqDetailList([])
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-servicePartAudit" // table="table-to-xls-servicePartAudit"
filename={`服务区人员管理统计`} // filename={`服务区人员管理统计`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `服务区稽核人员管理统计`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -17,6 +17,8 @@ import session from "@/utils/session";
import moment from 'moment' import moment from 'moment'
import Detail from "./component/detail"; import Detail from "./component/detail";
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import { formatTreeData } from "@/utils/format";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
const serviceArea: React.FC<{ currentUser: CurrentUser }> = (props) => { const serviceArea: React.FC<{ currentUser: CurrentUser }> = (props) => {
@ -39,6 +41,7 @@ const serviceArea: React.FC<{ currentUser: CurrentUser }> = (props) => {
}) })
const businessTypeObj = session.get('BUSINESSTYPEObj') const businessTypeObj = session.get('BUSINESSTYPEObj')
const businessStateObj = session.get('businessStateObj') const businessStateObj = session.get('businessStateObj')
const SHOPTRADEObj = session.get('SHOPTRADEObj')
// 树相关的属性和方法 // 树相关的属性和方法
const [selectedId, setSelectedId] = useState<string>() const [selectedId, setSelectedId] = useState<string>()
// 导出的加载效果 // 导出的加载效果
@ -290,6 +293,16 @@ const serviceArea: React.FC<{ currentUser: CurrentUser }> = (props) => {
const data = await handleGetServerPartShopNewList(req) const data = await handleGetServerPartShopNewList(req)
console.log('data', data); console.log('data', data);
if (data && data.length > 0) { if (data && data.length > 0) {
let fieldData: any = []
let enumList: any = [
"SHOPTRADE",
"BUSINESS_TYPE",
"BUSINESS_STATE"
]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data)), fieldData, enumList, [SHOPTRADEObj, businessTypeObj, businessStateObj], [])
setReqDetailList(newPrintData)
return { data, success: true } return { data, success: true }
} }
return { data: [], success: true } return { data: [], success: true }
@ -297,30 +310,42 @@ const serviceArea: React.FC<{ currentUser: CurrentUser }> = (props) => {
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-serviceArea" // table="table-to-xls-serviceArea"
filename={`单品销售排行统计${searchParams?.StartDate}-${searchParams?.EndDate}`} // filename={`单品销售排行统计${searchParams?.StartDate}-${searchParams?.EndDate}`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `服务区门店统计表`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -18,6 +18,8 @@ import { handleGetCASHWORKERDetail, handleGetCASHWORKERList, handleGetServerpart
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import session from "@/utils/session"; import session from "@/utils/session";
import { handleNewGetSERVERPARTDetail } from "../service"; import { handleNewGetSERVERPARTDetail } from "../service";
import { formatTreeData } from "@/utils/format";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
const serviceAreaPersonnel: React.FC<{ currentUser: CurrentUser }> = (props) => { const serviceAreaPersonnel: React.FC<{ currentUser: CurrentUser }> = (props) => {
@ -289,46 +291,79 @@ const serviceAreaPersonnel: React.FC<{ currentUser: CurrentUser }> = (props) =>
} }
const data = await handleGetCASHWORKERList(req) const data = await handleGetCASHWORKERList(req)
if (data && data.length > 0) { if (data && data.length > 0) {
console.log('data', data); // console.log('data', data);
let res = JSON.parse(JSON.stringify(data)) // let res = JSON.parse(JSON.stringify(data))
let list: any = [] // let list: any = []
data.forEach((item: any) => { // data.forEach((item: any) => {
item.CASHWORKER_LOGINNAME = `"${item.CASHWORKER_LOGINNAME}"` // item.CASHWORKER_LOGINNAME = `"${item.CASHWORKER_LOGINNAME}"`
item.CASHWORKER_LOGINPWD = `"${item.CASHWORKER_LOGINPWD}"` // item.CASHWORKER_LOGINPWD = `"${item.CASHWORKER_LOGINPWD}"`
list.push(item) // list.push(item)
}) // })
setReqDetailList(list) let CASHWORKER_TYPEObj: any = {
return { data: res, success: true } "1": "收银员",
"2": "管理员",
"20": "店长",
"25": "稽核人员",
}
let WORKER_VALIDObj: any = {
'1': "有效",
'0': "无效"
}
let fieldData: any = []
let enumList: any = [
"CASHWORKER_TYPE",
"WORKER_VALID",
"BUSINESS_STATE"
]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data)), fieldData, enumList, [CASHWORKER_TYPEObj, WORKER_VALIDObj], [])
setReqDetailList(newPrintData)
return { data: data, success: true }
} }
setReqDetailList([]) setReqDetailList([])
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-serviceAreaPersonnel" // table="table-to-xls-serviceAreaPersonnel"
filename={`服务区人员管理统计`} // filename={`服务区人员管理统计`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `服务区人员管理统计`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -22,6 +22,9 @@ import SubMenu from "antd/lib/menu/SubMenu";
import moment from "moment/moment"; import moment from "moment/moment";
import { handleGetServerpartShopDDL, handleGetYSABNORMALITYList } from "@/pages/reports/audit/abnormalAmount/service"; import { handleGetServerpartShopDDL, handleGetYSABNORMALITYList } from "@/pages/reports/audit/abnormalAmount/service";
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import { formatTreeData } from "@/utils/format";
import { handleGetListObj } from "@/utils/utils";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
const abnormalAmount: React.FC<{ currentUser: CurrentUser }> = (props) => { const abnormalAmount: React.FC<{ currentUser: CurrentUser }> = (props) => {
const { currentUser } = props const { currentUser } = props
@ -50,7 +53,7 @@ const abnormalAmount: React.FC<{ currentUser: CurrentUser }> = (props) => {
const [defaultValue, setDefaultValue] = useState<any>() const [defaultValue, setDefaultValue] = useState<any>()
const [serverpartShopObj, setServerpartShopObj] = useState<any>() const [serverpartShopObj, setServerpartShopObj] = useState<any>()
const [ABNORMALITY_TYPEObj, setABNORMALITY_TYPEObj] = useState<any>()
const columns: any = [ const columns: any = [
@ -86,8 +89,9 @@ const abnormalAmount: React.FC<{ currentUser: CurrentUser }> = (props) => {
dataIndex: 'ABNORMALITY_TYPE', dataIndex: 'ABNORMALITY_TYPE',
valueType: 'treeSelect', valueType: 'treeSelect',
request: async () => { request: async () => {
console.log('2')
const data = await getFieldEnumTreeNoSession({ FieldExplainField: 'EXCEPTION_TYPE', FieldEnumPID: 13854, FieldEnumStatus: true }); const data = await getFieldEnumTreeNoSession({ FieldExplainField: 'EXCEPTION_TYPE', FieldEnumPID: 13854, FieldEnumStatus: true });
let obj: any = handleGetListObj(data)
setABNORMALITY_TYPEObj(obj)
return data return data
}, },
fieldProps: { fieldProps: {
@ -349,37 +353,59 @@ const abnormalAmount: React.FC<{ currentUser: CurrentUser }> = (props) => {
const data = await handleGetYSABNORMALITYList(req) const data = await handleGetYSABNORMALITYList(req)
console.log('data', data) console.log('data', data)
if (data && data.length > 0) { if (data && data.length > 0) {
setReqDetailList(data) let fieldData: any = [
"COMMOTITY_COUNT",
"TOTALAMOUNT"
]
let enumList: any = [
"ABNORMALITY_TYPE",
]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data)), fieldData, enumList, [ABNORMALITY_TYPEObj], [])
setReqDetailList(newPrintData)
// setReqDetailList(data)
return { data, success: true } return { data, success: true }
} }
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-abnormalAmount" // table="table-to-xls-abnormalAmount"
filename={`销售金额异常${searchParams?.Start_Date}-${searchParams?.End_Date}`} // filename={`销售金额异常${searchParams?.Start_Date}-${searchParams?.End_Date}`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `销售金额异常${searchParams?.Start_Date}-${searchParams?.End_Date}`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -22,6 +22,9 @@ import SubMenu from "antd/lib/menu/SubMenu";
import moment from "moment/moment"; import moment from "moment/moment";
import { handleGetServerpartShopDDL, handleGetYSABNORMALITYList } from "@/pages/reports/audit/abnormalExamine/service"; import { handleGetServerpartShopDDL, handleGetYSABNORMALITYList } from "@/pages/reports/audit/abnormalExamine/service";
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import { formatTreeData } from "@/utils/format";
import { handleGetListObj } from "@/utils/utils";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
const abnormalExamine: React.FC<{ currentUser: CurrentUser }> = (props) => { const abnormalExamine: React.FC<{ currentUser: CurrentUser }> = (props) => {
const { currentUser } = props const { currentUser } = props
@ -47,6 +50,7 @@ const abnormalExamine: React.FC<{ currentUser: CurrentUser }> = (props) => {
// 是否显示打印的表格 // 是否显示打印的表格
const [showExportTable, setShowExportTable] = useState<boolean>(false) const [showExportTable, setShowExportTable] = useState<boolean>(false)
const [currenMenu, setCurrenMenu] = useState<any>(); // 当前选中左侧菜单的服务区节点 const [currenMenu, setCurrenMenu] = useState<any>(); // 当前选中左侧菜单的服务区节点
const [ABNORMALITY_TYPEObj, setABNORMALITY_TYPEObj] = useState<any>()
const [serverpartShopObj, setServerpartShopObj] = useState<any>() const [serverpartShopObj, setServerpartShopObj] = useState<any>()
@ -107,6 +111,8 @@ const abnormalExamine: React.FC<{ currentUser: CurrentUser }> = (props) => {
valueType: 'treeSelect', valueType: 'treeSelect',
request: async () => { request: async () => {
const data: any = await getFieldEnumTreeNoSession({ FieldExplainField: 'ABNORMALITY_TYPE', FieldEnumStatus: true }); const data: any = await getFieldEnumTreeNoSession({ FieldExplainField: 'ABNORMALITY_TYPE', FieldEnumStatus: true });
let obj: any = handleGetListObj(data)
setABNORMALITY_TYPEObj(obj)
return data return data
}, },
fieldProps: { fieldProps: {
@ -354,37 +360,59 @@ const abnormalExamine: React.FC<{ currentUser: CurrentUser }> = (props) => {
setSearchParams(params) setSearchParams(params)
const data = await handleGetYSABNORMALITYList(req) const data = await handleGetYSABNORMALITYList(req)
if (data && data.length > 0) { if (data && data.length > 0) {
setReqDetailList(data) let fieldData: any = [
"COMMOTITY_COUNT",
"TOTALAMOUNT"
]
let enumList: any = [
"ABNORMALITY_TYPE",
]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data)), fieldData, enumList, [ABNORMALITY_TYPEObj], [])
setReqDetailList(newPrintData)
return { data, success: true } return { data, success: true }
} }
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-abnormalExamine" // table="table-to-xls-abnormalExamine"
filename={`稽核联动查询表${searchParams?.Start_Date}-${searchParams?.End_Date}`} // filename={`稽核联动查询表${searchParams?.Start_Date}-${searchParams?.End_Date}`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `稽核联动查询表${searchParams?.Start_Date}-${searchParams?.End_Date}`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -21,6 +21,9 @@ import SubMenu from "antd/lib/menu/SubMenu";
import moment from "moment/moment"; import moment from "moment/moment";
import { handleGetServerpartShopDDL, handleGetYSABNORMALITYList } from "@/pages/reports/audit/abnormalSale/service"; import { handleGetServerpartShopDDL, handleGetYSABNORMALITYList } from "@/pages/reports/audit/abnormalSale/service";
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
import { formatTreeData } from "@/utils/format";
import { handleGetListObj } from "@/utils/utils";
const abnormalSale: React.FC<{ currentUser: CurrentUser }> = (props) => { const abnormalSale: React.FC<{ currentUser: CurrentUser }> = (props) => {
const { currentUser } = props const { currentUser } = props
@ -46,7 +49,7 @@ const abnormalSale: React.FC<{ currentUser: CurrentUser }> = (props) => {
// 是否显示打印的表格 // 是否显示打印的表格
const [showExportTable, setShowExportTable] = useState<boolean>(false) const [showExportTable, setShowExportTable] = useState<boolean>(false)
const [currenMenu, setCurrenMenu] = useState<any>(); // 当前选中左侧菜单的服务区节点 const [currenMenu, setCurrenMenu] = useState<any>(); // 当前选中左侧菜单的服务区节点
const [ABNORMALITY_TYPEObj, setABNORMALITY_TYPEObj] = useState<any>()
const [serverpartShopObj, setServerpartShopObj] = useState<any>() const [serverpartShopObj, setServerpartShopObj] = useState<any>()
@ -89,6 +92,8 @@ const abnormalSale: React.FC<{ currentUser: CurrentUser }> = (props) => {
request: async () => { request: async () => {
const data = await getFieldEnumTreeNoSession({ FieldExplainField: 'EXCEPTION_TYPE', FieldEnumPID: 13852, FieldEnumStatus: true }); const data = await getFieldEnumTreeNoSession({ FieldExplainField: 'EXCEPTION_TYPE', FieldEnumPID: 13852, FieldEnumStatus: true });
console.log('data', data) console.log('data', data)
let obj: any = handleGetListObj(data)
setABNORMALITY_TYPEObj(obj)
return data return data
}, },
fieldProps: { fieldProps: {
@ -348,37 +353,60 @@ const abnormalSale: React.FC<{ currentUser: CurrentUser }> = (props) => {
const data = await handleGetYSABNORMALITYList(req) const data = await handleGetYSABNORMALITYList(req)
console.log('data', data) console.log('data', data)
if (data && data.length > 0) { if (data && data.length > 0) {
setReqDetailList(data)
let fieldData: any = [
"COMMOTITY_COUNT",
"TOTALAMOUNT"
]
let enumList: any = [
"ABNORMALITY_TYPE",
]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data)), fieldData, enumList, [ABNORMALITY_TYPEObj], [])
setReqDetailList(newPrintData)
return { data, success: true } return { data, success: true }
} }
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-abnormalSale" // table="table-to-xls-abnormalSale"
filename={`销售过程异常${searchParams?.Start_Date}-${searchParams?.End_Date}`} // filename={`销售过程异常${searchParams?.Start_Date}-${searchParams?.End_Date}`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `销售过程异常${searchParams?.Start_Date}-${searchParams?.End_Date}`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -74,10 +74,6 @@ const AddShopModal = ({ parentRow, onShow, currentShopRow, shopData, handleClose
onOk={() => { onOk={() => {
modalShopFormRef.current?.validateFields().then(async (res: any) => { modalShopFormRef.current?.validateFields().then(async (res: any) => {
let oldData: any = shopData && shopData.length > 0 ? JSON.parse(JSON.stringify(shopData)) : [] let oldData: any = shopData && shopData.length > 0 ? JSON.parse(JSON.stringify(shopData)) : []
console.log('oldDataoldDataoldData', oldData);
console.log('resresresresresres', res);
let newList: any = [] let newList: any = []
// 判断当前的里面有没有一样的 // 判断当前的里面有没有一样的
if (oldData && oldData.length > 0) { if (oldData && oldData.length > 0) {
@ -100,8 +96,6 @@ const AddShopModal = ({ parentRow, onShow, currentShopRow, shopData, handleClose
} else { } else {
newList.push(res) newList.push(res)
} }
console.log('newList', newList);
// 如果进入到了添加商品 里面选了服务区 会 带给外面的表单 // 如果进入到了添加商品 里面选了服务区 会 带给外面的表单
if (res.SERVERPART_ID) { if (res.SERVERPART_ID) {
modalFormRef.current?.setFieldsValue({ modalFormRef.current?.setFieldsValue({

View File

@ -1,7 +1,7 @@
import { connect } from "umi"; import { connect } from "umi";
import type { ConnectState } from "@/models/connect"; import type { ConnectState } from "@/models/connect";
import { Button, Card, Col, FormInstance, message, Modal, Popconfirm, Row, Space, Steps, Tooltip } from "antd"; import { Button, Card, Col, FormInstance, Input, message, Modal, Popconfirm, Row, Space, Steps, Tooltip } from "antd";
import { useRef, useState } from "react"; import { useImperativeHandle, useRef, useState } from "react";
import ProForm, { ProFormSelect, ProFormTextArea } from "@ant-design/pro-form"; import ProForm, { ProFormSelect, ProFormTextArea } from "@ant-design/pro-form";
import { handleApproveCommodityProInst, handleCreateCommodityProInst, handleDeleteCOMMODITY_RUNNING, handleGetApprovalCommodityList, handleGetBUSINESSAPPROVALDetail, handleGetCOMMODITYRUNNINGList, handleReapplyCommodityProInst, handleRejectCommodityProInst } from "../../ProductApprovalProcess/service"; import { handleApproveCommodityProInst, handleCreateCommodityProInst, handleDeleteCOMMODITY_RUNNING, handleGetApprovalCommodityList, handleGetBUSINESSAPPROVALDetail, handleGetCOMMODITYRUNNINGList, handleReapplyCommodityProInst, handleRejectCommodityProInst } from "../../ProductApprovalProcess/service";
import session from "@/utils/session"; import session from "@/utils/session";
@ -22,8 +22,15 @@ type DetailProps = {
ApprovalType: any // 审批还是驳回的判断 ApprovalType: any // 审批还是驳回的判断
setCurrentShopRow: any // 当前的商品行 setCurrentShopRow: any // 当前的商品行
setShowAddShopModal: any // 新增商品的悬浮框 setShowAddShopModal: any // 新增商品的悬浮框
setShowEditShopModal?: any // 打开编辑 调价的时候可以出现
setSelectRowList?: any // 关于选择行 调价的时候可以出现
setSelectedOrderRowKeys?: any// 关于选择行 调价的时候可以出现
onRef?: any // 子组件实例
setEditSelectRow?: any // 编辑的商品行 修改信息的时候才会有
setEditShopModal?: any // 打开编辑商品的悬浮框 修改信息的时候 才会有
} }
const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, currentUser, showDetailType, InitiateApplication, shopData, handleChangeShopData, ApprovalType, setCurrentShopRow, setShowAddShopModal }: DetailProps) => { const NewApplicationModal = ({ modalType, parentRow, tableRef, onShow, handleCencel, currentUser, showDetailType, InitiateApplication, shopData, handleChangeShopData,
ApprovalType, setCurrentShopRow, setShowAddShopModal, setShowEditShopModal, setSelectRowList, setSelectedOrderRowKeys, onRef, setEditSelectRow, setEditShopModal }: DetailProps) => {
const { Step } = Steps const { Step } = Steps
const modalApproveFormRef = useRef<FormInstance>(); const modalApproveFormRef = useRef<FormInstance>();
@ -171,13 +178,320 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
] ]
const modalColumnsPrice: any = [
{
title: "序号",
width: 70,
dataIndex: "index",
valueType: "index",
align: 'center',
ellipsis: true,
},
{
title: "名称",
width: 300,
dataIndex: "COMMODITY_NAME",
ellipsis: true,
align: 'center',
render: (_, record) => {
return record?.COMMODITY_NAME ? <a onClick={() => {
setCurrentShopRow(record)
setShowEditShopModal(true)
}}>
{record?.COMMODITY_NAME}
</a> : "-"
}
},
{
title: "条码",
width: 150,
dataIndex: "COMMODITY_BARCODE",
ellipsis: true,
align: 'center',
},
{
title: "原价",
width: 150,
dataIndex: "COMMODITY_CURRPRICE",
ellipsis: true,
align: 'center',
},
{
title: "现价",
width: 150,
dataIndex: "newPrice",
ellipsis: true,
align: 'center',
render: (_, record) => {
return <Input value={record.newPrice} disabled={parentRow?.BusinessProcess_State > 1000 || (parentRow?.BusinessApproval_ID && parentRow?.ApproveStaff_ID !== currentUser?.ID)} onChange={(e: any) => {
let oldData: any = JSON.parse(JSON.stringify(shopData))
let list: any = []
oldData.forEach((item: any) => {
if (item.COMMODITY_ID === record?.COMMODITY_ID) {
item.newPrice = e.target.value
}
list.push(item)
})
if (handleChangeShopData) {
handleChangeShopData(list)
}
// setShopData(list)
}} />
}
},
{
title: "单位",
width: 150,
dataIndex: "COMMODITY_UNIT",
ellipsis: true,
align: 'center',
},
{
dataIndex: 'option',
title: '操作',
valueType: 'option',
align: 'center',
hideInSearch: true,
width: 180,
fixed: "right",
ellipsis: true,
render: (_, record) => {
return (
<Space>
{
parentRow?.BusinessProcess_State > 1000 || (parentRow?.BusinessApproval_ID && parentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' :
<>
<Popconfirm
title="确认删除该商品管理列表信息吗?"
onConfirm={async () => {
if (parentRow?.BusinessApproval_ID) {
// 申请回到发起时候的真删
const req: any = {
COMMODITY_RUNNINGId: record?.COMMODITY_ID
}
const data = await handleDeleteCOMMODITY_RUNNING(req)
console.log('datadatadatadata', data);
if (tableRef) {
tableRef.current?.reload()
}
// 实现直接删除的效果
console.log('record', record);
let oldData: any = JSON.parse(JSON.stringify(shopData))
let list: any = []
let rowKeyList: number[] = []
oldData.forEach((item: any) => {
if (item.COMMODITY_ID !== record?.COMMODITY_ID) {
list.push(item)
rowKeyList.push(item.COMMODITY_ID)
}
})
// setShopData(list)
if (handleChangeShopData) {
handleChangeShopData(list)
}
if (setSelectRowList) {
setSelectRowList(list)
}
if (setSelectedOrderRowKeys) {
setSelectedOrderRowKeys(rowKeyList)
}
} else {
console.log('record', record);
let oldData: any = JSON.parse(JSON.stringify(shopData))
let list: any = []
let rowKeyList: number[] = []
oldData.forEach((item: any) => {
if (item.COMMODITY_ID !== record?.COMMODITY_ID) {
list.push(item)
rowKeyList.push(item.COMMODITY_ID)
}
})
if (handleChangeShopData) {
handleChangeShopData(list)
}
if (setSelectRowList) {
setSelectRowList(list)
}
if (setSelectedOrderRowKeys) {
setSelectedOrderRowKeys(rowKeyList)
}
}
}}
>
<a></a>
</Popconfirm>
</>
}
</Space>
);
},
},
]
const modalColumnsInfo: any = [
{
title: "序号",
width: 70,
dataIndex: "index",
valueType: "index",
align: 'center',
ellipsis: true,
},
{
title: "名称",
width: 300,
dataIndex: "COMMODITY_NAME",
ellipsis: true,
align: 'center',
render: (_, record) => {
return record?.COMMODITY_NAME ? <a onClick={() => {
let obj: any = {}
if (shopData && shopData.length > 0) {
obj = shopData.filter((item: any) => item.COMMODITY_ID === record?.COMMODITY_ID)[0]
}
setEditSelectRow(obj)
setEditShopModal(true)
}}>
{record?.COMMODITY_NAME}
</a> : "-"
}
},
{
title: "条码",
width: 150,
dataIndex: "COMMODITY_BARCODE",
ellipsis: true,
align: 'center',
},
{
title: "零售价",
width: 150,
dataIndex: "COMMODITY_RETAILPRICE",
ellipsis: true,
align: 'center',
},
{
title: "规格",
width: 150,
dataIndex: "COMMODITY_RULE",
ellipsis: true,
align: 'center',
},
{
title: "单位",
width: 150,
dataIndex: "COMMODITY_UNIT",
ellipsis: true,
align: 'center',
},
{
dataIndex: 'option',
title: '操作',
valueType: 'option',
align: 'center',
hideInSearch: true,
width: 120,
fixed: "right",
ellipsis: true,
render: (_, record) => {
return (
<Space>
{
parentRow?.BusinessProcess_State > 1000 || (parentRow?.BusinessApproval_ID && parentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' :
<>
<a
onClick={() => {
let obj: any = {}
if (shopData && shopData.length > 0) {
obj = shopData.filter((item: any) => item.COMMODITY_ID === record?.COMMODITY_ID)[0]
}
setEditSelectRow(obj)
setEditShopModal(true)
}}
>
</a>
<Popconfirm
title="确认删除该商品管理列表信息吗?"
onConfirm={async () => {
if (parentRow?.BusinessApproval_ID) {
// 申请回到发起时候的真删
const req: any = {
COMMODITY_RUNNINGId: record?.COMMODITY_ID
}
const data = await handleDeleteCOMMODITY_RUNNING(req)
console.log('datadatadatadata', data);
parentRow.current?.reload()
// 实现直接删除的效果
let oldData: any = JSON.parse(JSON.stringify(shopData))
let list: any = []
oldData.forEach((item: any) => {
if (item.COMMODITY_ID !== record?.COMMODITY_ID) {
list.push(item)
}
})
// setShopData(list)
if (handleChangeShopData) {
handleChangeShopData(list)
}
} else {
// 还未发起申请的假删
console.log('record', record);
let oldData: any = JSON.parse(JSON.stringify(shopData))
let list: any = []
oldData.forEach((item: any) => {
if (item.ADDTIME !== record?.ADDTIME) {
list.push(item)
}
})
// setShopData(list)
if (handleChangeShopData) {
handleChangeShopData(list)
}
}
}}
>
<a></a>
</Popconfirm>
</>
}
{
parentRow?.BusinessProcess_State === 9000 ?
<a onClick={() => {
// setCurrentShopRow(record)
// setShowAddShopModal(true)
setEditSelectRow(record)
setEditShopModal(true)
}}></a>
: ''
}
</Space>
);
},
},
]
useImperativeHandle(onRef, () => ({
modalFormRef
}));
return ( return (
<div> <div>
{/* 新增申请的悬浮框 */} {/* 新增申请的悬浮框 */}
<Modal <Modal
className="addProductModal" className="addProductModal"
width={"70%"} width={"70%"}
title={parentRow?.BusinessApproval_ID ? "商品申请详情" : "新增商品申请"} title={modalType === 1 ? parentRow?.BusinessApproval_ID ? "商品申请详情" : "新增商品申请" :
modalType === 2 ? parentRow?.BusinessApproval_ID ? "商品调价申请详情" : "新增商品调价申请" :
modalType === 3 ? parentRow?.BusinessApproval_ID ? "商品信息修改详情" : "新增商品信息修改申请" : ''
}
open={onShow} open={onShow}
destroyOnClose destroyOnClose
onCancel={() => { onCancel={() => {
@ -199,6 +513,7 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
modalApproveFormRef?.current?.submit() modalApproveFormRef?.current?.submit()
}) })
} else { } else {
if (modalType === 1) {
if (shopData && shopData.length > 0) { if (shopData && shopData.length > 0) {
modalFormRef?.current?.validateFields().then(() => { modalFormRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit() modalFormRef?.current?.submit()
@ -207,6 +522,32 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
message.error("请选选择申请的商品!") message.error("请选选择申请的商品!")
return return
} }
} else if (modalType === 2) {
// 判断表格里面的现价 是不是都已经输入了
let allRight: boolean = true
if (shopData && shopData.length > 0) {
shopData.forEach((item: any) => {
if (!item.newPrice) {
allRight = false
}
})
} else {
message.error("请选选择申请的商品!")
return
}
if (!allRight) {
message.error("请先完善表格数据!")
return
}
// formRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit()
// })
} else if (modalType === 3) {
modalFormRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit()
})
}
} }
}}></Button> }}></Button>
</div>} </div>}
@ -216,10 +557,37 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
modalApproveFormRef?.current?.submit() modalApproveFormRef?.current?.submit()
}) })
} else { } else {
if (modalType === 1) {
modalFormRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit()
})
} else if (modalType === 2) {
// 判断表格里面的现价 是不是都已经输入了
let allRight: boolean = true
if (shopData && shopData.length > 0) {
shopData.forEach((item: any) => {
if (!item.newPrice) {
allRight = false
}
})
}
if (!allRight) {
message.error("请先完善表格数据!")
return
}
// formRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit()
// })
} else if (modalType === 3) {
modalFormRef?.current?.validateFields().then(() => { modalFormRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit() modalFormRef?.current?.submit()
}) })
} }
}
}}
bodyStyle={{
height: '700px', // 你可以根据需要调整高度
overflowY: 'auto',
}} }}
> >
<ProForm <ProForm
@ -258,11 +626,28 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
console.log('shopDatashopDatashopDatashopData', shopData); console.log('shopDatashopDatashopDatashopData', shopData);
if (modalType === 1 || modalType === 3) {
// setShopData(shopData.Result_Data.List) // setShopData(shopData.Result_Data.List)
if (handleChangeShopData) { if (handleChangeShopData) {
handleChangeShopData(shopData.Result_Data.List) handleChangeShopData(shopData.Result_Data.List)
} }
} else if (modalType === 2) {
let shopList: any = shopData.Result_Data.List
let list: any = []
if (shopList && shopList.length > 0) {
shopList.forEach((item: any) => {
let obj: any = JSON.parse(JSON.stringify(item))
obj.newPrice = item.COMMODITY_CURRPRICE
obj.COMMODITY_RETAILPRICE = item.COMMODITY_ORIPRICE
obj.COMMODITY_CURRPRICE = item.COMMODITY_ORIPRICE
obj.COMMODITY_ORIPRICE = null
list.push(obj)
})
}
if (handleChangeShopData) {
handleChangeShopData(list)
}
}
return { return {
reasonForApplication: data.Result_Data.BUSINESSAPPROVAL_DESC, reasonForApplication: data.Result_Data.BUSINESSAPPROVAL_DESC,
@ -276,27 +661,48 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
onFinish={async (res) => { onFinish={async (res) => {
setConfirmLoading(true) setConfirmLoading(true)
let data: any = {} let data: any = {}
let list: any = []
if (modalType === 2) {
if (shopData && shopData.length > 0) {
shopData.forEach((item: any) => {
let obj: any = JSON.parse(JSON.stringify(item))
let oldPrice = JSON.parse(JSON.stringify(obj.COMMODITY_RETAILPRICE))
obj.COMMODITY_ORIPRICE = oldPrice
obj.COMMODITY_RETAILPRICE = item.newPrice
obj.COMMODITY_CURRPRICE = item.newPrice
list.push(obj)
})
}
} else if (modalType === 3) {
if (shopData && shopData.length > 0) {
} else {
message.error('请选择要修改的商品!')
return
}
}
if (parentRow?.BusinessApproval_ID) { if (parentRow?.BusinessApproval_ID) {
const req: any = { const req: any = {
ProinstId: parentRow?.BusinessApproval_ID, ProinstId: parentRow?.BusinessApproval_ID,
ProinstName: res.reasonForApplication, ProinstName: res.reasonForApplication,
UserId: currentUser?.ID, UserId: currentUser?.ID,
OperateType: "100100", OperateType: modalType === 1 ? "100100" : modalType === 2 ? '100200' : modalType === 3 ? '100210' : '',
ServerpartId: res.ServerpartId, ServerpartId: res.ServerpartId,
NextApproveStaffId: res.NextApproveStaffId, NextApproveStaffId: res.NextApproveStaffId,
NextApproveState: 2000, NextApproveState: 2000,
CommodityRunningList: shopData CommodityRunningList: modalType === 1 ? shopData : modalType === 2 ? list : modalType === 3 ? shopData : '',
} }
data = await handleReapplyCommodityProInst(req) data = await handleReapplyCommodityProInst(req)
} else { } else {
const req: any = { const req: any = {
ProinstName: res.reasonForApplication, ProinstName: res.reasonForApplication,
UserId: currentUser?.ID, UserId: currentUser?.ID,
OperateType: "100100", OperateType: modalType === 1 ? "100100" : modalType === 2 ? '100200' : modalType === 3 ? '100210' : '',
ServerpartId: res.ServerpartId, ServerpartId: res.ServerpartId,
NextApproveStaffId: res.NextApproveStaffId, NextApproveStaffId: res.NextApproveStaffId,
NextApproveState: 2000, NextApproveState: 2000,
CommodityRunningList: shopData CommodityRunningList: modalType === 1 ? shopData : modalType === 2 ? list : modalType === 3 ? shopData : '',
} }
data = await handleCreateCommodityProInst(req) data = await handleCreateCommodityProInst(req)
console.log('dsaidjaskda', data); console.log('dsaidjaskda', data);
@ -369,7 +775,7 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
PROVINCE_CODE: currentUser?.ProvinceCode, PROVINCE_CODE: currentUser?.ProvinceCode,
APPROVALROUTE_STATES: "", APPROVALROUTE_STATES: "",
APPROVALROUTE_VALID: 1, APPROVALROUTE_VALID: 1,
OPERATION_TYPES: "100100", OPERATION_TYPES: modalType === 1 ? '100100' : modalType === 2 ? '100200' : modalType === 3 ? '100210' : ''
}, },
PageIndex: 1, PageIndex: 1,
PageSize: 999999 PageSize: 999999
@ -380,6 +786,7 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
// 下面的环节 // 下面的环节
let nextList: any = [] let nextList: any = []
console.log('dataState', dataState); console.log('dataState', dataState);
console.log('parentRowparentRowparentRow', parentRow);
dataState.forEach((item: any) => { dataState.forEach((item: any) => {
if (item.APPROVALROUTE_STATE === 2000) { if (item.APPROVALROUTE_STATE === 2000) {
@ -413,6 +820,7 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
</Row> </Row>
</ProForm> </ProForm>
{ {
parentRow?.BusinessProcess_State > 1000 ? parentRow?.BusinessProcess_State > 1000 ?
<ProForm <ProForm
@ -425,7 +833,7 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
SearchParameter: { SearchParameter: {
APPROVALROUTE_STATES: "", APPROVALROUTE_STATES: "",
APPROVALROUTE_VALID: 1, APPROVALROUTE_VALID: 1,
OPERATION_TYPES: "100100", OPERATION_TYPES: modalType === 1 ? '100100' : modalType === 2 ? '100200' : modalType === 3 ? '100210' : ''
}, },
PageIndex: 1, PageIndex: 1,
PageSize: 999999 PageSize: 999999
@ -605,17 +1013,41 @@ const NewApplicationModal = ({ parentRow, tableRef, onShow, handleCencel, curren
search={false} search={false}
options={false} options={false}
pagination={false} pagination={false}
columns={modalColumns} columns={modalType === 1 ? modalColumns : modalType === 2 ? modalColumnsPrice : modalType === 3 ? modalColumnsInfo : ''}
dataSource={shopData} dataSource={shopData}
bordered bordered
toolbar={{ toolbar={{
actions: [ actions: modalType === 1 ? [
parentRow?.BusinessProcess_State > 1000 || (parentRow?.BusinessApproval_ID && parentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' : <Button type={"primary"} onClick={() => { parentRow?.BusinessProcess_State > 1000 || (parentRow?.BusinessApproval_ID && parentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' : <Button type={"primary"} onClick={() => {
setShowAddShopModal(true) setShowAddShopModal(true)
}}> }}>
</Button> </Button>
] ] : modalType === 2 ? [
parentRow?.BusinessProcess_State > 1000 || (parentRow?.BusinessApproval_ID && parentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' : <Button type={"primary"} onClick={() => {
// 判断服务区是否已选择
const values = modalFormRef.current?.getFieldsValue();
if (!values?.ServerpartId) {
message.error("请先选择服务区!");
return;
}
setShowAddShopModal(true);
}}>
</Button>
] : modalType === 3 ? [
parentRow?.BusinessProcess_State > 1000 || (parentRow?.BusinessApproval_ID && parentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' : <Button type={"primary"} onClick={() => {
// parentRow
const values = modalFormRef.current?.getFieldsValue();
if (!values?.ServerpartId) {
message.error("请先选择服务区!");
return;
}
setShowAddShopModal(true);
}}>
</Button>
] : []
}} }}
/> />

View File

@ -0,0 +1,558 @@
import { connect } from "umi";
import type { ConnectState } from "@/models/connect";
import { Button, Col, FormInstance, Modal, Row } from "antd";
import { useRef, useState } from "react";
import ProForm, { ProFormDateTimePicker, ProFormDigit, ProFormSelect, ProFormText, ProFormTextArea, ProFormTreeSelect } from "@ant-design/pro-form";
import { handleGetServerpartShopTrade } from "../../commodityInfo/service";
import moment from 'moment'
import { getServerpartTree } from "@/services/options";
import { handleGetUSERDEFINEDTYPEList } from "../../userDefinedType/service";
type DetailProps = {
modalType: any // 2 为调价 3 为信息修改
onShow: any // 是否显示
currentShopRow: any // 当前选中的商品信息
handleCencel: any // 关闭触发的方法
currentUser: any // 一些公参
parentRow: any // 当前最大的数据
treeView: any // 商品类别 数据
setShopData: any // 改变商品信息
shopData: any // 当前的商品信息
}
const EditShopModal = ({ modalType, onShow, currentShopRow, handleCencel, currentUser, parentRow, treeView, setShopData, shopData }: DetailProps) => {
const modalShopFormRef = useRef<FormInstance>();
// 商品业态的搜索框内容
const [commodityList, setCommodityList] = useState<any>([])
const [selectSERVERPARTID, setSelectSERVERPARTID] = useState<any>()
const [selectBUSINESSTYPE, setSelectBUSINESSTYPE] = useState<any>()
const [customClassList, setCustomClassList] = useState<any>()
// 请求自定义类的选择列表
const handleGetCustomClassList = async (id: any) => {
const req: any = {
SearchParameter: {
USERDEFINEDTYPE_STATE: 1,
SERVERPART_ID: id,
BUSINESSTYPE: selectBUSINESSTYPE
},
PageIndex: 1,
PageSize: 999999,
pageSize: 999999,
}
const data = await handleGetUSERDEFINEDTYPEList(req)
if (data && data.length > 0) {
const list: any = []
data.forEach((item: any) => {
list.push({ label: item.USERDEFINEDTYPE_NAME, value: item.USERDEFINEDTYPE_ID })
})
setCustomClassList(list)
}
console.log('data', data)
}
// 拿到对应的商品业态
const handleGetCommodity = async (id: any) => {
const req: any = {
ProvinceCode: currentUser?.ProvinceCode,
ServerpartId: id
}
const data = await handleGetServerpartShopTrade(req)
console.log('data', data)
setCommodityList(data)
}
return (
<div>
<Modal
open={onShow}
width={1200}
wrapClassName={'shopModal'}
destroyOnClose
title={modalType === 3 ? '编辑商品' : currentShopRow?.COMMODITY_ID ? '编辑商品' : '添加商品'}
onOk={() => {
modalShopFormRef.current?.validateFields().then(async (res: any) => {
if (handleCencel) {
handleCencel()
}
})
}}
footer={modalType === 3 ? parentRow?.BusinessProcess_State > 1000 ? '' :
<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'space-between', boxSizing: 'border-box', padding: '0 16px' }}>
{/* 审批过程中只能看 所以把底部隐藏 这样即使修改也没用 */}
<div></div>
<div>
<Button onClick={() => {
if (handleCencel) {
handleCencel()
}
}}></Button>
<Button type={"primary"} onClick={() => {
modalShopFormRef.current?.validateFields().then(async (res: any) => {
let oldData: any = shopData && shopData.length > 0 ? JSON.parse(JSON.stringify(shopData)) : []
let newList: any = []
// 判断当前的里面有没有一样的
if (oldData && oldData.length > 0) {
oldData.forEach((item: any, index: number) => {
if (item.ADDTIME === res.ADDTIME) {
newList.push({
...item,
...res
})
} else {
newList.push(item)
}
})
} else {
newList.push(res)
}
if (setShopData) {
setShopData(newList)
}
if (handleCencel) {
handleCencel()
}
})
}}></Button>
</div>
</div> : false}
onCancel={() => {
if (handleCencel) {
handleCencel()
}
}}
bodyStyle={{
height: '700px', // 你可以根据需要调整高度
overflowY: 'auto',
}}
>
<ProForm
formRef={modalShopFormRef}
submitter={false}
initialValues={currentShopRow}
request={async () => {
// !currentShopRow?.COMMODITY_ID &&
if (currentShopRow?.SERVERPART_ID) {
await handleGetCommodity(currentShopRow?.SERVERPART_ID)
}
return {
...currentShopRow,
BUSINESSTYPE: currentShopRow?.BUSINESSTYPE.toString(),
COMMODITY_GRADE: Number(currentShopRow?.COMMODITY_GRADE),
ADDTIME: moment(currentShopRow?.ADDTIME).format('YYYY-MM-DD HH:mm:ss')
}
}}
disabled={parentRow?.BusinessProcess_State === 9000}
>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={16}>
<ProFormText
name="COMMODITY_NAME"
label="商品名称"
placeholder="请输入商品名称"
rules={[
{
required: true,
message: '请输入商品名称',
},
]}
readonly={modalType === 2}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_EN"
label="拼音简码"
readonly={modalType === 2}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="SERVERPART_ID"
label="服务区名"
readonly={modalType === 2}
request={async () => {
const data = await getServerpartTree(currentUser?.ProvinceCode, currentUser?.CityAuthority, true, true, true)
const list: any = []
if (data && data.length > 0) {
data.forEach((item: any) => {
if (item.children && item.children.length > 0) {
item.children.forEach((subItem: any) => {
list.push({ label: subItem.label, value: subItem.value })
})
}
})
data.forEach((item: any) => {
list.push({ label: item.label, value: item.value })
})
}
return list
}}
rules={[
{
required: true,
message: '请选择服务区',
},
]}
fieldProps={{
onChange: async (e: any) => {
console.log('e', e)
if (e) {
setSelectSERVERPARTID(e)
await handleGetCommodity(e)
if (selectBUSINESSTYPE) {
await handleGetCustomClassList(e)
}
} else {
setSelectSERVERPARTID(undefined)
setCommodityList([])
setCustomClassList([])
}
},
showSearch: true, // 启用搜索框
filterOption: (inputValue: any, option: any) => {
// 通过 label 搜索
return option.label.toLowerCase().includes(inputValue.toLowerCase());
}
}}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="BUSINESSTYPE"
label="商品业态"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请选择商品业态',
},
]}
options={commodityList}
fieldProps={{
onChange: async (e: any) => {
if (e) {
setSelectBUSINESSTYPE(e)
if (selectSERVERPARTID) {
await handleGetCustomClassList(e)
}
} else {
setSelectBUSINESSTYPE(undefined)
}
}
}}
/>
</Col>
<Col span={8}>
<ProFormTreeSelect
name="COMMODITY_TYPE"
label="商品类别"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请选择商品类别',
},
]}
request={() => {
return treeView
}}
fieldProps={{
treeDefaultExpandAll: true
}}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_BARCODE"
label="商品条码"
readonly={modalType === 2}
disabled={modalType === 2 ? parentRow : true}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_UNIT"
label="商品单位"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请输入商品单位',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_RULE"
label="商品规格"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请输入商品规格',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_HOTKEY"
label="快捷键值"
readonly={modalType === 2}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_GRADE"
label="质量等级"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请选择质量等级',
},
]}
initialValue={1000}
options={[{ label: '一等品', value: 1000 }, { label: '二等品', value: 2000 }, { label: '三等品', value: 5000 }, { label: '优等品', value: 3000 }, { label: '合格品', value: 4000 },]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_ORI"
label="商品产地"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请输入商品产地',
},
]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="USERDEFINEDTYPE_ID"
label="自定义类"
readonly={modalType === 2}
options={customClassList}
/>
</Col>
<Col span={8}>
<ProFormText
name="PROVINCE_CODE"
label="省份编码"
readonly={modalType === 2}
disabled
// initialValue={currentUser?.ProvinceCode}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_CODE"
label="商品编码"
readonly={modalType === 2}
disabled
/>
</Col>
<Col span={24}>
<ProFormTextArea
name="COMMODITY_DESC"
label="商品说明"
readonly={modalType === 2}
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormSelect
name="CANSALE"
readonly={modalType === 2}
label="是否销售"
rules={[
{
required: true,
message: '请选择是否销售',
},
]}
initialValue={1}
options={[{ label: '是', value: 1 }, { label: '否', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="ISBULK"
label="是否散装"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请选择是否散装',
},
]}
initialValue={0}
options={[{ label: '是', value: 1 }, { label: '否', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="METERINGMETHOD"
label="称重方式"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请选择称重方式',
},
]}
initialValue={1}
options={[{ label: '计价', value: 1 }, { label: '散装称重', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_STATE"
label="审核状态"
readonly={modalType === 2}
rules={[
{
required: true,
message: '请选择审核状态',
},
]}
initialValue={1}
options={[{ label: '有效', value: 1 }, { label: '审核中', value: 2 }, { label: '无效', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormText
name="ADDTIME"
label="添加时间"
readonly={modalType === 2}
disabled
initialValue={moment().format('YYYY-MM-DD HH:mm:ss')}
/>
</Col>
<Col span={8}>
<ProFormDateTimePicker
name="OPERATE_DATE"
label="生效时间"
readonly={modalType === 2}
initialValue={moment().format('YYYY-MM-DD HH:mm:ss')}
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormDigit
name="COMMODITY_RETAILPRICE"
label="零售价"
readonly={modalType === 2}
disabled={modalType === 3}
rules={[
{
required: true,
message: '请输入零售价',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_CURRPRICE"
label="当前价格"
readonly={modalType === 2}
disabled={modalType === 3}
rules={[
{
required: true,
message: '请输入当前价格',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MEMBERPRICE"
label="会员价"
readonly={modalType === 2}
disabled={modalType === 3}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_PURCHASEPRICE"
label="进货价"
readonly={modalType === 2}
disabled={modalType === 3}
rules={[
{
required: true,
message: '请输入进货价',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MINPRICE"
label="最低价"
readonly={modalType === 2}
disabled={modalType === 3}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MAXPRICE"
label="最高价"
readonly={modalType === 2}
disabled={modalType === 3}
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormDigit
name="DUTY_PARAGRAPH"
label="进价税率"
readonly={modalType === 2}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="RETAIL_DUTY"
label="零售税率"
readonly={modalType === 2}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_FROZENCOUNT"
label="采购状态"
readonly={modalType === 2}
options={[{ label: '允许', value: 1000 }, { label: '禁止', value: 2000 }]}
/>
</Col>
</Row>
</ProForm>
</Modal>
</div >
)
}
export default connect(({ user, }: ConnectState) => ({
currentUser: user.currentUser,
}))(EditShopModal);

View File

@ -0,0 +1,213 @@
import { connect } from "umi";
import type { ConnectState } from "@/models/connect";
import { FormInstance, Modal } from "antd";
import ProTable from "@ant-design/pro-table";
import { useRef } from "react";
import { handleGetCommodityList } from "../../commodityInfo/service";
import { getFieldEnum } from "@/services/options";
type DetailProps = {
onShow: any // 显示悬浮框
setShowAddShopModal: any // 关闭悬浮框
setShopData: any // 改变当前商品
selectRowList: any // 当前选择的商品行
currentUser: any // 公参信息
CommodityData: any // 枚举值
selectedOrderRowKeys: any // 选择的行值
setSelectRowList: any // 改变选择的行
setSelectedOrderRowKeys: any // 改变选择的行号
formRef?: any // 申请的表单数据
}
const SelectShopModal = ({ onShow, setShowAddShopModal, setShopData, selectRowList, currentUser, CommodityData, selectedOrderRowKeys, setSelectRowList, setSelectedOrderRowKeys, formRef }: DetailProps) => {
// 选择商品的表格结构
const selectShopColumns: any = [
{
title: "商品查询",
dataIndex: "searchText",
hideInTable: true,
fieldProp: {
fieldholder: "请输入商品名称"
}
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 70,
dataIndex: 'index',
hideInSearch: true,
valueType: 'index'
},
// {
// title: <div style={{ textAlign: 'center' }}>服务区</div>,
// width: 150,
// ellipsis: true,
// align: 'center',
// dataIndex: 'SERVERPART_NAME',
// hideInSearch: true,
// valueType: "select",
// valueEnum: ServerpartIdsList
// },
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
ellipsis: true,
dataIndex: 'BUSINESSTYPE',
align: 'center',
valueType: 'select',
request: async () => {
const BUSINESSTYPERes = await getFieldEnum({ FieldExplainField: 'BUSINESSTYPE', sessionName: 'SHOPTRADE', notformate: true })
return BUSINESSTYPERes
},
fieldProps: {
showSearch: true,
filterOption: (input, option) =>
(option?.label ?? '').toLowerCase().includes(input.toLowerCase()),
}
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
ellipsis: true,
dataIndex: 'COMMODITY_TYPE',
align: 'center',
hideInSearch: true,
valueEnum: CommodityData
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 200,
ellipsis: true,
align: 'left',
dataIndex: 'COMMODITY_NAME',
hideInSearch: true,
// render: (_, record) => {
// return record?.COMMODITY_NAME ? <a onClick={() => {
// setCurrentShopRow(record)
// setShowEditShopModal(true)
// }}>
// {record?.COMMODITY_NAME}
// </a> : "-"
// }
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 150,
ellipsis: true,
align: 'left',
dataIndex: 'COMMODITY_BARCODE',
hideInSearch: true,
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 70,
ellipsis: true,
align: 'right',
dataIndex: 'COMMODITY_RETAILPRICE',
hideInSearch: true,
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 70,
ellipsis: true,
align: 'right',
dataIndex: 'COMMODITY_PURCHASEPRICE',
hideInSearch: true,
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 80,
ellipsis: true,
align: 'right',
dataIndex: 'COMMODITY_UNIT',
hideInSearch: true,
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 100,
ellipsis: true,
dataIndex: 'COMMODITY_STATE',
align: 'center',
valueType: 'select',
valueEnum: { 0: { text: '无效', status: 'error' }, 1: { text: '有效', status: 'success' }, 2: { text: '不可选', status: 'default' } },
initialValue: '1',
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 150,
align: 'center',
ellipsis: true,
dataIndex: 'OPERATE_DATE',
hideInSearch: true,
}
]
return (
<div>
<Modal
open={onShow}
width={1200}
wrapClassName={'shopModal'}
destroyOnClose
title={"选择商品"}
onOk={() => {
setShowAddShopModal(false)
setShopData(selectRowList)
}}
onCancel={() => {
setShowAddShopModal(false)
}}
bodyStyle={{
height: '700px', // 你可以根据需要调整高度
overflowY: 'auto',
}}
>
<ProTable
options={false}
scroll={{ x: "100%", y: "420px" }}
bordered
search={{ span: 6 }}
rowKey={"COMMODITY_ID"}
request={async (params) => {
console.log('formRefformRefformRef', formRef.current);
let formRes = formRef.current.modalFormRef.current?.getFieldsValue()
const req: any = {
SearchType: 3,
ShopTrade: params?.BUSINESSTYPE || "",
ProvinceCode: currentUser?.ProvinceCode,
// CommodityTypeId: currenMenu,
CommodityState: params?.COMMODITY_STATE || "",
ServerpartID: formRes?.ServerpartId,
PageIndex: 1,
PageSize: 999999,
SortStr: "OPERATE_DATE desc",
SearchKey: "COMMODITY_NAME",
SearchValue: params?.searchText || ""
// PageSize: 20
}
const data = await handleGetCommodityList(req)
console.log('shdasidh', data);
if (data.List && data.List.length > 0) {
return { data: data.List, success: true, total: data.TotalCount }
}
return { data: [], success: true }
}}
columns={selectShopColumns}
rowSelection={{
type: 'checkbox',
selectedRowKeys: selectedOrderRowKeys,
onChange: (selectedRowKeys: any, selectedRows: any) => {
console.log('selectedRowKeysselectedRowKeys', selectedRowKeys);
console.log('selectedRowsselectedRowsselectedRows', selectedRows);
setSelectRowList(selectedRows)
setSelectedOrderRowKeys(selectedRowKeys)
},
}}
/>
</Modal>
</div>
)
}
export default connect(({ user }: ConnectState) => ({
currentUser: user.currentUser,
}))(SelectShopModal);

View File

@ -31,6 +31,8 @@ import session from "@/utils/session";
import './style.less' import './style.less'
import Detail from "@/pages/reports/productControl/components/detail"; import Detail from "@/pages/reports/productControl/components/detail";
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
import { formatTreeData } from "@/utils/format";
const commoditySearch: React.FC<{ currentUser: CurrentUser }> = (props) => { const commoditySearch: React.FC<{ currentUser: CurrentUser }> = (props) => {
const { currentUser } = props const { currentUser } = props
@ -78,7 +80,7 @@ const commoditySearch: React.FC<{ currentUser: CurrentUser }> = (props) => {
const [showModal, setShowModal] = useState<boolean>(false) const [showModal, setShowModal] = useState<boolean>(false)
const [showDetail, setShowDetail] = useState<boolean>(false) const [showDetail, setShowDetail] = useState<boolean>(false)
const SHOPTRADEObj = session.get('SHOPTRADEObj')
const ServerpartIdsList: any = session.get('ServerpartIdsList') const ServerpartIdsList: any = session.get('ServerpartIdsList')
@ -153,7 +155,7 @@ const commoditySearch: React.FC<{ currentUser: CurrentUser }> = (props) => {
width: 150, width: 150,
ellipsis: true, ellipsis: true,
align: 'center', align: 'center',
dataIndex: 'SERVERPART_NAME', dataIndex: 'SERVERPART_ID',
hideInSearch: true, hideInSearch: true,
render: (_, record) => { render: (_, record) => {
return <span> return <span>
@ -429,37 +431,60 @@ const commoditySearch: React.FC<{ currentUser: CurrentUser }> = (props) => {
if (data.List && data.List.length > 0) { if (data.List && data.List.length > 0) {
console.log('data', data) console.log('data', data)
// setAllTotal(data.TotalCount) // setAllTotal(data.TotalCount)
setReqDetailList(data.List)
let fieldData: any = [
"COMMODITY_RETAILPRICE",
"COMMODITY_PURCHASEPRICE",
]
let enumList: any = ["BUSINESSTYPE", "SERVERPART_ID"]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data.List)), fieldData, enumList, [SHOPTRADEObj, ServerpartIdsList], [])
setReqDetailList(newPrintData)
return { data: data.List, success: true } return { data: data.List, success: true }
} }
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-commoditySearch" // table="table-to-xls-commoditySearch"
filename={`商品信息查询表`} // filename={`商品信息查询表`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `商品信息查询表`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -76,7 +76,7 @@ const commodityType: React.FC<{ currentUser: CurrentUser}> = (props) => {
initialValue: "1" initialValue: "1"
}, },
{ {
title:<div style={{textAlign:'center'}}></div>, title:<div style={{textAlign:'center'}}>1</div>,
dataIndex: 'CIGARETTE_TYPE', dataIndex: 'CIGARETTE_TYPE',
valueType: 'select', valueType: 'select',
align:'center', align:'center',

View File

@ -21,6 +21,9 @@ import {
import SubMenu from "antd/lib/menu/SubMenu"; import SubMenu from "antd/lib/menu/SubMenu";
import Detail from "@/pages/reports/productControl/components/detail"; import Detail from "@/pages/reports/productControl/components/detail";
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import session from "@/utils/session";
import { formatTreeData } from "@/utils/format";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
const hotkeyset: React.FC<{ currentUser: CurrentUser }> = (props) => { const hotkeyset: React.FC<{ currentUser: CurrentUser }> = (props) => {
@ -39,6 +42,7 @@ const hotkeyset: React.FC<{ currentUser: CurrentUser }> = (props) => {
setTreeView(data) setTreeView(data)
return data return data
}) })
const SHOPTRADEObj = session.get('SHOPTRADEObj')
const { loading: treeViewsLoading, data: detailTreeViews } = useRequest(async () => { const { loading: treeViewsLoading, data: detailTreeViews } = useRequest(async () => {
const req = { const req = {
@ -371,6 +375,7 @@ const hotkeyset: React.FC<{ currentUser: CurrentUser }> = (props) => {
bordered bordered
headerTitle={<PageTitleBox props={props} />} headerTitle={<PageTitleBox props={props} />}
search={{ span: 6 }} search={{ span: 6 }}
scroll={{ x: '100%', y: 'calc(100vh - 450px)' }}
request={async (params) => { request={async (params) => {
if (!currenMenu) { if (!currenMenu) {
return return
@ -391,36 +396,59 @@ const hotkeyset: React.FC<{ currentUser: CurrentUser }> = (props) => {
if (data.List && data.List.length > 0) { if (data.List && data.List.length > 0) {
console.log('data', data) console.log('data', data)
// setAllTotal(data.TotalCount) // setAllTotal(data.TotalCount)
let fieldData: any = [
"COMMODITY_RETAILPRICE",
]
let enumList: any = [
"BUSINESSTYPE",
"COMMODITY_STATE"
]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data.List)), fieldData, enumList, [SHOPTRADEObj, { 0: "无效", 1: "有效" }], [])
setReqDetailList(newPrintData)
return { data: data.List, success: true } return { data: data.List, success: true }
} }
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-hotkeyset" // table="table-to-xls-hotkeyset"
filename={`商品快捷键管理报表`} // filename={`商品快捷键管理报表`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `商品快捷键管理报表`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel

View File

@ -21,6 +21,8 @@ import { handleGetCommodityList } from "../commodityInfo/service";
import moment from "moment"; import moment from "moment";
import session from "@/utils/session"; import session from "@/utils/session";
import PageTitleBox from "@/components/PageTitleBox"; import PageTitleBox from "@/components/PageTitleBox";
import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun";
import { formatTreeData } from "@/utils/format";
const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => { const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
@ -69,6 +71,7 @@ const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
// 是否显示打印的表格 // 是否显示打印的表格
const [showExportTable, setShowExportTable] = useState<boolean>(false) const [showExportTable, setShowExportTable] = useState<boolean>(false)
const ServerpartIdsList: any = session.get('ServerpartIdsList') const ServerpartIdsList: any = session.get('ServerpartIdsList')
const SHOPTRADEObj: any = session.get('SHOPTRADEObj')
const columns: any = [ const columns: any = [
{ {
@ -105,12 +108,15 @@ const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
title: '序号', title: '序号',
dataIndex: 'index', dataIndex: 'index',
valueType: 'index', valueType: 'index',
width: 70,
align: 'center',
hieInSearch: true hieInSearch: true
}, },
{ {
title: '服务区', title: <div style={{ textAlign: 'center' }}></div>,
width: 150,
dataIndex: 'SERVERPART_ID', dataIndex: 'SERVERPART_ID',
valueType: 'index', ellipsis: true,
hieInSearch: true, hieInSearch: true,
render: (_, record) => { render: (_, record) => {
return record?.SERVERPART_ID ? ServerpartIdsList[record?.SERVERPART_ID] : '-' return record?.SERVERPART_ID ? ServerpartIdsList[record?.SERVERPART_ID] : '-'
@ -119,8 +125,11 @@ const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
{ {
title: '商品业态', title: '商品业态',
dataIndex: 'BUSINESSTYPE', dataIndex: 'BUSINESSTYPE',
width: 120,
hideInSearch: true, hideInSearch: true,
valueType: 'select', valueType: 'select',
ellipsis: true,
align: 'center',
request: async () => { request: async () => {
return await getFieldEnum({ FieldExplainField: 'BUSINESSTYPE', sessionName: 'SHOPTRADE', notformate: true }) return await getFieldEnum({ FieldExplainField: 'BUSINESSTYPE', sessionName: 'SHOPTRADE', notformate: true })
} }
@ -128,75 +137,80 @@ const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
{ {
title: '商品类型', title: '商品类型',
dataIndex: 'COMMODITY_TYPE', dataIndex: 'COMMODITY_TYPE',
width: 120,
hideInSearch: true, hideInSearch: true,
ellipsis: true,
align: 'center',
valueEnum: CommodityData valueEnum: CommodityData
}, },
{ {
title: '商品条码', title: '商品条码',
width: 150,
dataIndex: 'COMMODITY_BARCODE', dataIndex: 'COMMODITY_BARCODE',
ellipsis: true,
hideInSearch: true, hideInSearch: true,
align: 'center',
}, },
{ {
title: '商品名称', title: <div style={{ textAlign: 'center' }}></div>,
dataIndex: 'COMMODITY_NAME', dataIndex: 'COMMODITY_NAME',
width: 200,
ellipsis: true,
align: 'center',
hideInSearch: true, hideInSearch: true,
}, },
{ {
title: '零售价', title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
dataIndex: 'COMMODITY_RETAILPRICE', dataIndex: 'COMMODITY_RETAILPRICE',
align: 'right',
valueType: 'digit',
hideInSearch: true, hideInSearch: true,
}, },
{ {
title: '进货价', title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
dataIndex: 'COMMODITY_PURCHASEPRICE', dataIndex: 'COMMODITY_PURCHASEPRICE',
align: 'right',
valueType: 'digit',
hideInSearch: true, hideInSearch: true,
}, },
{ {
title: '商品单位', title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
dataIndex: 'COMMODITY_UNIT', dataIndex: 'COMMODITY_UNIT',
align: 'center',
hideInSearch: true, hideInSearch: true,
ellipsis: true,
}, },
{ {
title: '商品规格', title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
dataIndex: 'COMMODITY_RULE', dataIndex: 'COMMODITY_RULE',
align: 'center',
ellipsis: true,
hideInSearch: true, hideInSearch: true,
}, },
{ {
title: '状态', title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
dataIndex: 'COMMODITY_STATE', dataIndex: 'COMMODITY_STATE',
hideInSearch: true, hideInSearch: true,
align: 'center',
valueType: 'select', valueType: 'select',
valueEnum: { 0: { text: '无效', status: 'error' }, 1: { text: '有效', status: 'success' } }, valueEnum: { 0: { text: '无效', status: 'error' }, 1: { text: '有效', status: 'success' } },
}, },
{ {
title: '审核时间', title: '审核时间',
width: 170,
align: 'center',
ellipsis: true,
dataIndex: 'OPERATE_DATE', dataIndex: 'OPERATE_DATE',
hideInSearch: true, hideInSearch: true,
}, },
] ]
const exportTable = (e) => {
e.stopPropagation(); // 防止Collapse组件收起
const main = document.getElementsByClassName('saleReportHideBox')[0]
const thead = main.querySelector('thead').cloneNode(true); // 深克隆DOM节点
const tbody = main.querySelector('tbody').cloneNode(true); // 深克隆DOM节点
const container = document.querySelector('#hiddenBox');
const tempTable = document.createElement('table');
tempTable.appendChild(thead);
tempTable.appendChild(tbody);
tempTable.setAttribute('id', 'table-to-xls-shopCommodity'); // 给table添加id值与按钮上的table字段对应
container.appendChild(tempTable); // 把创建的节点添加到页面容器中
setShowLoading(false)
downloadBtnRef.current.handleDownload();
setShowExportTable(false)
tempTable.remove() // 防止重复打印一个内容
}
// 查询的条件 // 查询的条件
const [searchParams, setSearchParams] = useState<any>() const [searchParams, setSearchParams] = useState<any>()
@ -236,21 +250,6 @@ const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
</div> : '' </div> : ''
} }
<div className={'saleReportHideBox'} style={{ position: 'fixed', zIndex: -1, top: 0, left: 0 }}>
{
showExportTable && reqDetailList && reqDetailList.length > 0 ?
<ProTable
columns={columns}
dataSource={reqDetailList}
pagination={false}
expandable={{
defaultExpandAllRows: true
}}
/> : ''
}
</div>
<div id='hiddenBox' style={{ position: 'fixed', zIndex: -1, top: 0, left: 0 }} />
<div style={{ backgroundColor: '#fff', display: 'flex' }}> <div style={{ backgroundColor: '#fff', display: 'flex' }}>
<ProCard <ProCard
style={{ width: !collapsible ? "300px" : "60px" }} style={{ width: !collapsible ? "300px" : "60px" }}
@ -300,6 +299,7 @@ const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
bordered bordered
headerTitle={<PageTitleBox props={props} />} headerTitle={<PageTitleBox props={props} />}
search={{ span: 6 }} search={{ span: 6 }}
scroll={{ x: '100%', y: 'calc(100vh - 450px)' }}
request={async (params) => { request={async (params) => {
if (!selectedId) { if (!selectedId) {
return return
@ -321,36 +321,61 @@ const shopCommodity: React.FC<{ currentUser: CurrentUser }> = (props) => {
if (data.List && data.List.length > 0) { if (data.List && data.List.length > 0) {
console.log('data', data) console.log('data', data)
// setAllTotal(data.TotalCount) // setAllTotal(data.TotalCount)
let fieldData: any = [
"COMMODITY_RETAILPRICE",
"COMMODITY_PURCHASEPRICE"
]
let enumList: any = ["SERVERPART_ID",
"BUSINESSTYPE",
"COMMODITY_TYPE",]
let newPrintData: any = formatTreeData(JSON.parse(JSON.stringify(data.List)), fieldData, enumList, [ServerpartIdsList, SHOPTRADEObj, CommodityData], [])
setReqDetailList(newPrintData)
return { data: data.List, success: true } return { data: data.List, success: true }
} }
return { data: [], success: true } return { data: [], success: true }
}} }}
toolbar={{ toolbar={{
actions: [ actions: [
<span style={{ visibility: 'hidden' }}> // <span style={{ visibility: 'hidden' }}>
<ReactHTMLTableToExcel // <ReactHTMLTableToExcel
buttonText={'导出excel'} // buttonText={'导出excel'}
ref={downloadBtnRef} // ref={downloadBtnRef}
table="table-to-xls-shopCommodity" // table="table-to-xls-shopCommodity"
filename={`门店商品查询${searchParams?.StartDate}-${searchParams?.EndDate}`} // filename={`门店商品查询${searchParams?.StartDate}-${searchParams?.EndDate}`}
sheet="sheet1" // sheet="sheet1"
/> // />
</span>, // </span>,
<Button <Button
key="new" key="new"
type="primary" type="primary"
onClick={(e) => { onClick={(e) => {
if (reqDetailList && reqDetailList.length > 0) { if (reqDetailList && reqDetailList.length > 0) {
setShowLoading(true) // 尝试一下 导出新方法
setTimeout(() => { exportXlsxFromProColumnsExcelJS(columns,
setShowExportTable(true) reqDetailList,
setTimeout(() => { `门店商品查询${searchParams?.OperateDate_Start}-${searchParams?.OperateDate_End}`,
exportTable(e) // {
}, 100) // topTitle: `库存信息统计表`, // 顶部大标题
}, 100) // }
)
} else { } else {
message.error('暂无数据可导出!') message.error('暂无数据可导出!')
} }
// if (reqDetailList && reqDetailList.length > 0) {
// setShowLoading(true)
// setTimeout(() => {
// setShowExportTable(true)
// setTimeout(() => {
// exportTable(e)
// }, 100)
// }, 100)
// } else {
// message.error('暂无数据可导出!')
// }
}} }}
> >
excel excel