ylj20011123 7fe7fe34e3 update
2025-07-04 20:26:45 +08:00

1641 lines
78 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 新增商品审批
import { connect } from "umi";
import type { CurrentUser } from "umi";
import type { ConnectState } from "@/models/connect";
import React, { useEffect, useRef, useState } from "react";
import type { FormInstance } from "antd";
import { Button, Card, Col, message, Modal, Popconfirm, Row, Space, Spin, Steps, Tooltip, Tree } from "antd";
import type { ActionType } from "@ant-design/pro-table";
import ProTable from "@ant-design/pro-table";
import PageTitleBox from "@/components/PageTitleBox";
import { handleGetExamineList } from "@/pages/examine/examineList/service";
import ProForm, { ProFormDateTimePicker, ProFormDigit, ProFormSelect, ProFormText, ProFormTextArea, ProFormTreeSelect } from "@ant-design/pro-form";
import { getServerpartTree } from "@/services/options";
import { handleGetAPPROVALROUTEList } from "@/pages/Setting/serviceConfig/service";
import { handleGetNestingCOMMODITYTYPETree, handleGetServerpartShopTrade } from "../commodityInfo/service";
import { handleGetUSERDEFINEDTYPEList } from "../userDefinedType/service";
import useRequest from "@ahooksjs/use-request";
import moment from 'moment'
import { handleApproveCommodityProInst, handleCreateCommodityProInst, handleDeleteCOMMODITY_RUNNING, handleDeleteCommodityProInst, handleGetApprovalCommodityList, handleGetBUSINESSAPPROVALDetail, handleGetCOMMODITYRUNNINGList, handleReapplyCommodityProInst, handleRejectCommodityProInst } from "../ProductApprovalProcess/service";
import './style.less'
const { Step } = Steps
const ProductChangeInfoApproval: React.FC<{ currentUser: CurrentUser }> = (props) => {
const { currentUser } = props
const downloadBtnRef = useRef<any>()
const actionRef = useRef<ActionType>();
const formRef = useRef<FormInstance>();
const modalFormRef = useRef<FormInstance>();
const modalShopFormRef = useRef<FormInstance>();
const modalApproveFormRef = useRef<FormInstance>();
// 新增商品申请
const [showApplyFor, setShowApplyFor] = useState<boolean>(false);
// 显示新增商品的悬浮框
const [showAddShopModal, setShowAddShopModal] = useState<boolean>(false);
// 选择记录行的数据
const [currentRow, setCurrentRow] = useState<any>()
// 选择商品行的数据
const [currentShopRow, setCurrentShopRow] = useState<any>()
// 商品列表数据
const [shopData, setShopData] = useState<any>()
const [selectSERVERPARTID, setSelectSERVERPARTID] = useState<any>()
// 商品业态的搜索框内容
const [commodityList, setCommodityList] = useState<any>([])
const [selectBUSINESSTYPE, setSelectBUSINESSTYPE] = useState<any>()
const [customClassList, setCustomClassList] = useState<any>()
const [treeView, setTreeView] = useState<any>()
// 审批的悬浮框
const [approveModal, setApproveModal] = useState<boolean>(false);
// 点击审批的行数据
const [approveCurrentRow, setApproveCurrentRow] = useState<any>()
// 下一个审批流程
const [nextApproval, setNextApproval] = useState<any>()
// 下一审批流程的审批人
const [nextApprovalPerson, setNextApprovalPerson] = useState<any>()
// 新增申请的加载效果
const [addApprovalLoading, setAddApprovalLoading] = useState<boolean>(false);
// 审批还是驳回 1 审批 2 驳回
const [ApprovalType, setApprovaType] = useState<number>(0)
// 审批记录详情
const [BUSINESSAPPROVALDETAIL, setBUSINESSAPPROVALDETAIL] = useState<any>()
// 还有几个环节 拼在流程进度后面
const [nextStepsList, setNextStepsList] = useState<any>()
// 判断有无发起申请的权限
const [InitiateApplication, setInitiateApplication] = useState<boolean>(false)
// 显示类型
const [showDetailType, setShowDetailType] = useState<any>()
// 加载服务区树
const { loading: treeLoading, data: treeViews } = useRequest(async () => {
const req = {
PROVINCE_CODE: currentUser?.ProvinceCode,
COMMODITYTYPE_VALID: 1,
ShowCode: true
}
const data = await handleGetNestingCOMMODITYTYPETree(req)
setTreeView(data)
return data
})
let statusList: string[] = ["0", "1000", "2000", "2010,2020,2030,2040,2050,2060,2070,2080,2090", "9000"]
const columns: any = [
{
dataIndex: 'BusinessProcess_StateSearch',
title: '流程状态',
width: 200,
ellipsis: true,
align: 'center',
hideInTable: true,
// valueEnum: {
// "0": "全部",
// "2000": "待审核",
// "2010,2020,2030,2040,2050,2060,2070,2080,2090": "审核中",
// "9000": "已审结"
// },
valueEnum: {
0: "全部",
1: "待申请",
2: "待审核",
3: "审核中",
4: "已审结"
},
initialValue: "0"
},
{
dataIndex: 'BusinessProcess_Name',
title: '业务名称',
width: 300,
ellipsis: true,
align: 'center',
hideInSearch: true,
},
{
dataIndex: 'Serverpart_Name',
title: '服务区名称',
width: 200,
ellipsis: true,
align: 'center',
hideInSearch: true,
},
{
dataIndex: 'ServerpartShop_Name',
title: '门店名称',
width: 200,
ellipsis: true,
align: 'center',
hideInSearch: true,
},
{
dataIndex: 'ApproveStaff_Name',
title: '待审核人',
width: 200,
ellipsis: true,
align: 'center',
hideInSearch: true,
},
{
dataIndex: 'BusinessProcess_StateText',
title: '待审核环节',
width: 200,
ellipsis: true,
align: 'center',
hideInSearch: true,
render: (_, record) => {
return <a style={{
color: record?.BusinessProcess_StateText === '待审核' ? '#1890ff' :
record?.BusinessProcess_StateText === '审核中' ? 'rgb(250, 173, 20)' :
record?.BusinessProcess_StateText === '已审结' ? 'red' : ""
}} onClick={() => {
console.log('recordrecordrecord', record);
setShowDetailType('detail')
setCurrentRow(record)
setShowApplyFor(true)
}}>{record?.BusinessProcess_StateText || "-"}</a>
}
},
// {
// dataIndex: 'Accept_Code',
// title: '业务类别',
// width: 200,
// ellipsis: true,
// align: 'center',
// hideInSearch: true,
// },
{
dataIndex: 'BusinessProcess_EndDate',
title: '办结时间',
width: 200,
ellipsis: true,
align: 'center',
hideInSearch: true,
},
{
dataIndex: 'BusinessProcess_StartDate',
title: '流程开始',
width: 200,
ellipsis: true,
align: 'center',
hideInSearch: true,
},
{
dataIndex: 'option',
title: '操作',
valueType: 'option',
align: 'center',
hideInSearch: true,
width: 180,
fixed: "right",
ellipsis: true,
render: (_, record) => {
return (
record?.ApproveStaff_ID === currentUser?.ID && record?.BusinessProcess_State !== 9000
?
<Space>
{
record?.BusinessProcess_State === 1000
?
<>
<a onClick={() => {
console.log('recordrecordrecord', record);
setCurrentRow(record)
setShowApplyFor(true)
}}
>
</a>
<Popconfirm
title="确认删除该商品审批流程吗?"
onConfirm={async () => {
const req: any = {
businessApprovalId: record?.BusinessApproval_ID,
UserId: currentUser?.ID
}
const data = await handleDeleteCommodityProInst(req)
if (data.Result_Code === 100) {
message.success(data.Result_Desc)
actionRef.current?.reload()
} else {
message.error(data.Result_Desc)
}
}}
>
<a></a>
</Popconfirm>
</>
: ""
}
{
record?.BusinessProcess_State > 1000 ?
<>
<a onClick={() => {
setApprovaType(1)
setCurrentRow(record)
// setApproveCurrentRow(record)
// setApproveModal(true)
setShowApplyFor(true)
}}
>
</a>
<a onClick={() => {
setApprovaType(2)
setCurrentRow(record)
// setApproveCurrentRow(record)
// setApproveModal(true)
setShowApplyFor(true)
}}>
</a>
</> : ""
}
</Space> : ""
);
},
},
]
const modalColumns: any = [
{
title: "序号",
width: 70,
dataIndex: "index",
valueType: "index",
align: 'center',
ellipsis: true,
},
{
title: "名称",
width: 300,
dataIndex: "COMMODITY_NAME",
ellipsis: true,
align: 'center',
},
{
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>
{
currentRow?.BusinessProcess_State > 1000 || (currentRow?.BusinessApproval_ID && currentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' :
<>
<a
onClick={() => {
setCurrentShopRow(record)
setShowAddShopModal(true)
}}
>
</a>
<Popconfirm
title="确认删除该商品管理列表信息吗?"
onConfirm={async () => {
if (currentRow?.BusinessApproval_ID) {
// 申请回到发起时候的真删
const req: any = {
COMMODITY_RUNNINGId: record?.COMMODITY_ID
}
const data = await handleDeleteCOMMODITY_RUNNING(req)
console.log('datadatadatadata', data);
actionRef.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)
} 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)
}
}}
>
<a></a>
</Popconfirm>
</>
}
{
currentRow?.BusinessProcess_State === 9000 ?
<a onClick={() => {
setCurrentShopRow(record)
setShowAddShopModal(true)
}}></a>
: ''
}
</Space>
);
},
},
]
// 拿到对应的商品业态
const handleGetCommodity = async (id: any) => {
const req: any = {
ProvinceCode: currentUser?.ProvinceCode,
ServerpartId: id
}
const data = await handleGetServerpartShopTrade(req)
console.log('data', data)
setCommodityList(data)
}
// 请求自定义类的选择列表
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)
}
useEffect(async () => {
const req: any = {
SearchParameter: {
APPROVALROUTE_STATES: "",
APPROVALROUTE_VALID: 1,
OPERATION_TYPES: "100100",
}
}
const data = await handleGetAPPROVALROUTEList(req)
console.log('datadatadatadata', data);
// 拿到发起申请的人
let firstSetp: any = {}
if (data && data.length > 0) {
data.forEach((item: any) => {
if (item.APPROVALROUTE_STATE === 1000) {
firstSetp = item
}
})
}
// 判断当前用户 是否有新增权限
let have: boolean = false
let idList: any = firstSetp.APPROVALSTAFF_ID.split(',')
console.log('idList', idList);
if (idList.indexOf(currentUser?.ID.toString()) !== -1) {
have = true
}
setInitiateApplication(have)
}, [])
return (
<div>
<div style={{ backgroundColor: '#fff', display: 'flex' }}>
<div style={{
width: '100%',
paddingTop: 0,
paddingBottom: 0,
paddingRight: 0
}}>
<ProTable
actionRef={actionRef}
formRef={formRef}
columns={columns}
bordered
expandable={{
expandRowByClick: true
}}
scroll={{ x: "100%", y: "calc(100vh - 410px)" }}
headerTitle={<PageTitleBox props={props} />} // 列表表头
search={{ span: 6 }}
request={async (params) => {
const req: any = {
QueryType: 0,
SearchParameter: {
Operation_Type: 6,
Accept_Code: "6-100100",
BusinessProcess_StateSearch: statusList[params?.BusinessProcess_StateSearch] === "0" ? '' : statusList[params?.BusinessProcess_StateSearch]
},
PageIndex: 1,
PageSize: 999999
}
const data = await handleGetExamineList(req)
console.log('data', data)
if (data.data && data.data.length > 0) {
data.data.forEach((item: any) => {
if (item.BusinessProcess_State === 1000) {
item.BusinessProcess_StateText = "待发起"
} else if (item.BusinessProcess_State === 2000) {
item.BusinessProcess_StateText = "待审核"
} else if (item.BusinessProcess_State > 2000 && item.BusinessProcess_State < 9000) {
item.BusinessProcess_StateText = "审核中"
} else if (item.BusinessProcess_State = 9000) {
item.BusinessProcess_StateText = "已审结"
}
})
return { data: data.data, success: true, total: data.data.length }
}
return { data: [], success: true }
}}
toolbar={{
actions: [
InitiateApplication ?
<Button type={"primary"} onClick={() => {
setShowApplyFor(true)
}}>
</Button> : ""
]
}}
/>
</div>
</div>
{/* 审批的悬浮框 */}
{/* <Modal
width={"70%"}
title={"审批"}
open={approveModal}
confirmLoading={addApprovalLoading}
destroyOnClose
onCancel={() => {
setApproveCurrentRow(undefined)
setApproveModal(false)
setApprovaType(0)
}}
onOk={() => {
modalApproveFormRef?.current?.validateFields().then(() => {
modalApproveFormRef?.current?.submit()
})
}}
>
<ProForm
// layout={'horizontal'}
formRef={modalApproveFormRef}
submitter={false}
preserve={false}
request={async () => {
console.log('approveCurrentRowapproveCurrentRowapproveCurrentRow', approveCurrentRow);
const reqState: any = {
SearchParameter: {
APPROVALROUTE_STATES: "",
APPROVALROUTE_VALID: 1,
OPERATION_TYPES: "100100",
},
PageIndex: 1,
PageSize: 999999
}
const dataState = await handleGetAPPROVALROUTEList(reqState)
console.log('dataStatedataStatedataState', dataState);
let obj: any = {}
let currentIndex: number = 0
if (dataState && dataState.length > 0) {
dataState.forEach((item: any, index: number) => {
if (item.APPROVALROUTE_STATE === approveCurrentRow.BusinessProcess_State) {
obj = item
currentIndex = index
}
})
}
if (obj) {
// 审批的时候 拿到当前状态 去找下一个状态
if (ApprovalType === 1) {
// 拿到当前状态的信息 判断下一状态 是不是结束了 结束了 就不显示 下一结算审批人 不是结束 就拿到下一流程的审批人
setNextApproval(obj.NEXT_STATE)
let nextObj: any = currentIndex + 1 <= dataState.length ? dataState[currentIndex + 1] : {}
if (nextObj) {
let personTotal: number = nextObj.APPROVALSTAFF_ID.split(',').length || 0
if (personTotal > 0) {
let STAFFIDList: number[] = nextObj.APPROVALSTAFF_ID.split(',')
let STAFFNAMEList: string[] = nextObj.APPROVALSTAFF_NAME.split(',')
let list: any = []
for (let i = 0; i < personTotal; i++) {
list.push({ label: STAFFNAMEList[i], value: STAFFIDList[i] })
}
setNextApprovalPerson(list)
}
}
} else {
// 驳回的话 去找历史状态
if (dataState && dataState.length > 0) {
let list: any = []
dataState.forEach((item: any, index: number) => {
if (obj.APPROVALROUTE_STATE > item.APPROVALROUTE_STATE) {
list.push({ label: item.APPROVALROUTE_NAME, value: item.APPROVALROUTE_STATE })
}
})
setNextApprovalPerson(list)
}
}
}
return {}
}}
onFinish={async (res) => {
setAddApprovalLoading(true)
let data: any = {}
if (ApprovalType === 1) {
// 审批
const req: any = {
businessApprovalId: approveCurrentRow?.BusinessApproval_ID,
UserId: currentUser?.ID,
ApproveInfo: res.ApproveInfo,
nextApproveStaffId: res.nextApproveStaffId || "",
nextApproveState: nextApproval || ""
}
data = await handleApproveCommodityProInst(req)
} else {
// 驳回
const req: any = {
businessApprovalId: approveCurrentRow?.BusinessApproval_ID,
UserId: currentUser?.ID,
RejectInfo: res.ApproveInfo,
nextApproveState: res.nextApproveState || ""
}
console.log('reqreqreqreq', req);
data = await handleRejectCommodityProInst(req)
}
setAddApprovalLoading(false)
console.log('datadatadata', data);
if (data.Result_Code === 100) {
message.success(data.Result_Desc)
setApproveCurrentRow(undefined)
setApproveModal(false)
setNextApproval(null)
setNextApprovalPerson(null)
setApprovaType(0)
actionRef.current?.reload()
} else {
message.error(data.Result_Desc)
}
}}
>
{
ApprovalType === 1 ?
<Row>
{
nextApproval === 9000 ? '' :
<Col span={6}>
<ProFormSelect
label={"下一阶段审批人"}
name={"nextApproveStaffId"}
options={nextApprovalPerson}
rules={[
{
required: true,
message: "请选择下一阶段审批人!"
}
]}
/>
</Col>
}
<Col span={24}>
<ProFormTextArea
label={"审批意见"}
name={"ApproveInfo"}
rules={[
{
required: true,
message: "请输入审批意见!"
}
]}
/>
</Col>
</Row> : ApprovalType === 2 ?
<Row>
<Col span={6}>
<ProFormSelect
label={"驳回状态"}
name={"nextApproveState"}
options={nextApprovalPerson}
rules={[
{
required: true,
message: "请选择下一阶段审批人!"
}
]}
/>
</Col>
<Col span={24}>
<ProFormTextArea
label={"驳回意见"}
name={"ApproveInfo"}
rules={[
{
required: true,
message: "请输入驳回意见!"
}
]}
/>
</Col>
</Row> : ""
}
</ProForm>
</Modal> */}
{/* 新增申请的悬浮框 */}
<Modal
className="addProductModal"
width={"70%"}
title={currentRow?.BusinessApproval_ID ? "商品申请详情" : "新增商品申请"}
open={showApplyFor}
destroyOnClose
onCancel={() => {
setShowApplyFor(false)
setCurrentRow(undefined)
setShopData([])
setBUSINESSAPPROVALDETAIL(undefined)
setShowDetailType(null)
setApprovaType(0)
}}
footer={showDetailType === 'detail' || !InitiateApplication || (currentRow?.BusinessApproval_ID && currentRow?.ApproveStaff_ID !== currentUser?.ID) ? false :
<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'flex-end', boxSizing: 'border-box', padding: "0 16px" }}>
<Button style={{ marginRight: '8px' }} onClick={() => {
setShowApplyFor(false)
setCurrentRow(undefined)
setShopData([])
setBUSINESSAPPROVALDETAIL(undefined)
setShowDetailType(null)
setApprovaType(0)
}}></Button>
<Button type={"primary"} onClick={() => {
if (currentRow?.BusinessProcess_State > 1000) {
modalApproveFormRef?.current?.validateFields().then(() => {
modalApproveFormRef?.current?.submit()
})
} else {
modalFormRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit()
})
}
}}></Button>
</div>}
onOk={() => {
if (currentRow?.BusinessProcess_State > 1000) {
modalApproveFormRef?.current?.validateFields().then(() => {
modalApproveFormRef?.current?.submit()
})
} else {
modalFormRef?.current?.validateFields().then(() => {
modalFormRef?.current?.submit()
})
}
}}
>
<ProForm
// layout={'horizontal'}
formRef={modalFormRef}
submitter={false}
preserve={false}
request={async () => {
if (currentRow?.BusinessApproval_ID) {
const req: any = {
BUSINESSAPPROVALId: currentRow?.BusinessApproval_ID,
}
const data = await handleGetBUSINESSAPPROVALDetail(req)
console.log('datadatadata', data);
setBUSINESSAPPROVALDETAIL(data.Result_Data)
let shopData: any = []
if (currentRow?.BusinessProcess_State === 9000) {
shopData = await handleGetApprovalCommodityList({
ProvinceCode: currentUser?.ProvinceCode,
// CommodityId: currentUser?.ProvinceCode,
BusinessApprovalId: currentRow?.BusinessApproval_ID,
PageIndex: 1,
PageSize: 999999,
})
} else {
shopData = await handleGetCOMMODITYRUNNINGList({
SearchParameter: {
BUSINESSAPPROVAL_ID: currentRow?.BusinessApproval_ID,
},
PageIndex: 1,
pageSize: 999999,
})
}
console.log('shopDatashopDatashopDatashopData', shopData);
setShopData(shopData.Result_Data.List)
return {
reasonForApplication: data.Result_Data.BUSINESSAPPROVAL_DESC,
ServerpartId: data.Result_Data.SERVERPART_ID,
NextApproveStaffId: data.Result_Data.APPOVED_IDS
}
} else {
return {}
}
}}
onFinish={async (res) => {
let data: any = {}
if (currentRow?.BusinessApproval_ID) {
const req: any = {
ProinstId: currentRow?.BusinessApproval_ID,
ProinstName: res.reasonForApplication,
UserId: currentUser?.ID,
OperateType: "100100",
ServerpartId: res.ServerpartId,
NextApproveStaffId: res.NextApproveStaffId,
NextApproveState: 2000,
CommodityRunningList: shopData
}
data = await handleReapplyCommodityProInst(req)
} else {
const req: any = {
ProinstName: res.reasonForApplication,
UserId: currentUser?.ID,
OperateType: "100100",
ServerpartId: res.ServerpartId,
NextApproveStaffId: res.NextApproveStaffId,
NextApproveState: 2000,
CommodityRunningList: shopData
}
data = await handleCreateCommodityProInst(req)
console.log('dsaidjaskda', data);
}
if (data.Result_Code === 100) {
message.success(data.Result_Desc)
// setShowApplyFor(false)
// setCurrentRow(undefined)
setShowApplyFor(false)
setCurrentRow(undefined)
setShopData([])
setBUSINESSAPPROVALDETAIL(undefined)
setShowDetailType(null)
setApprovaType(0)
actionRef.current?.reload()
} else {
message.error(data.Result_Desc)
}
}}
>
<Row gutter={8}>
<Col span={24}>
<ProFormTextArea
label="申请原因"
name="reasonForApplication"
rules={[{
required: true,
message: "请输入申请原因!"
}]}
disabled={currentRow?.BusinessProcess_State > 1000 || (currentRow?.BusinessApproval_ID && currentRow?.ApproveStaff_ID !== currentUser?.ID)}
/>
</Col>
<Col span={12}>
<ProFormSelect
label="服务区"
name="ServerpartId"
rules={[{
required: true,
message: "请选择服务区!"
}]}
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
}}
disabled={currentRow?.BusinessProcess_State > 1000 || (currentRow?.BusinessApproval_ID && currentRow?.ApproveStaff_ID !== currentUser?.ID)}
/>
</Col>
<Col span={12} style={{ display: currentRow?.BusinessProcess_State > 1000 && ApprovalType !== 0 ? "none" : "" }}>
<ProFormSelect
label="下一环节审批人"
name="NextApproveStaffId"
rules={[{
required: true,
message: "请选择下一环节审批人!"
}]}
request={async () => {
const reqState: any = {
SearchParameter: {
APPROVALROUTE_STATES: "",
APPROVALROUTE_VALID: 1,
OPERATION_TYPES: "100100",
},
PageIndex: 1,
PageSize: 999999
}
const dataState = await handleGetAPPROVALROUTEList(reqState)
if (dataState && dataState.length > 0) {
let obj: any = {}
// 下面的环节
let nextList: any = []
console.log('dataState', dataState);
dataState.forEach((item: any) => {
if (item.APPROVALROUTE_STATE === 2000) {
obj = item
}
if (item.APPROVALROUTE_STATE >= currentRow?.BusinessProcess_State) {
if (item.APPROVALROUTE_STATE === currentRow?.BusinessProcess_State) {
item.status = "process"
}
nextList.push(item)
}
})
setNextStepsList(nextList)
console.log('next', nextList);
let personTotal: number = obj.APPROVALSTAFF_ID.split(',').length || 0
if (personTotal > 0) {
let STAFFIDList: number[] = obj.APPROVALSTAFF_ID.split(',')
let STAFFNAMEList: string[] = obj.APPROVALSTAFF_NAME.split(',')
let list: any = []
for (let i = 0; i < personTotal; i++) {
list.push({ label: STAFFNAMEList[i], value: STAFFIDList[i] })
}
return list
}
}
}}
disabled={currentRow?.BusinessProcess_State > 1000 || (currentRow?.BusinessApproval_ID && currentRow?.ApproveStaff_ID !== currentUser?.ID)}
/>
</Col>
</Row>
</ProForm>
{
currentRow?.BusinessProcess_State > 1000 ?
<ProForm
// layout={'horizontal'}
formRef={modalApproveFormRef}
submitter={false}
preserve={false}
request={async () => {
console.log('approveCurrentRowapproveCurrentRowapproveCurrentRow', approveCurrentRow);
const reqState: any = {
SearchParameter: {
APPROVALROUTE_STATES: "",
APPROVALROUTE_VALID: 1,
OPERATION_TYPES: "100100",
},
PageIndex: 1,
PageSize: 999999
}
const dataState = await handleGetAPPROVALROUTEList(reqState)
console.log('dataStatedataStatedataState', dataState);
let obj: any = {}
let currentIndex: number = 0
if (dataState && dataState.length > 0) {
dataState.forEach((item: any, index: number) => {
if (item.APPROVALROUTE_STATE === currentRow.BusinessProcess_State) {
obj = item
currentIndex = index
}
})
}
if (obj) {
// 审批的时候 拿到当前状态 去找下一个状态
if (ApprovalType === 1) {
// 拿到当前状态的信息 判断下一状态 是不是结束了 结束了 就不显示 下一结算审批人 不是结束 就拿到下一流程的审批人
setNextApproval(obj.NEXT_STATE)
let nextObj: any = currentIndex + 1 <= dataState.length ? dataState[currentIndex + 1] : {}
if (nextObj) {
let personTotal: number = nextObj.APPROVALSTAFF_ID.split(',').length || 0
if (personTotal > 0) {
let STAFFIDList: number[] = nextObj.APPROVALSTAFF_ID.split(',')
let STAFFNAMEList: string[] = nextObj.APPROVALSTAFF_NAME.split(',')
let list: any = []
for (let i = 0; i < personTotal; i++) {
list.push({ label: STAFFNAMEList[i], value: STAFFIDList[i] })
}
setNextApprovalPerson(list)
}
}
} else {
// 驳回的话 去找历史状态
if (dataState && dataState.length > 0) {
let list: any = []
dataState.forEach((item: any, index: number) => {
if (obj.APPROVALROUTE_STATE > item.APPROVALROUTE_STATE) {
list.push({ label: item.APPROVALROUTE_NAME, value: item.APPROVALROUTE_STATE })
}
})
setNextApprovalPerson(list)
}
}
}
return {}
}}
onFinish={async (res) => {
setAddApprovalLoading(true)
let data: any = {}
if (ApprovalType === 1) {
// 审批
const req: any = {
businessApprovalId: currentRow?.BusinessApproval_ID,
UserId: currentUser?.ID,
ApproveInfo: res.ApproveInfo,
nextApproveStaffId: res.nextApproveStaffId || "",
nextApproveState: nextApproval || ""
}
data = await handleApproveCommodityProInst(req)
} else {
// 驳回
const req: any = {
businessApprovalId: currentRow?.BusinessApproval_ID,
UserId: currentUser?.ID,
RejectInfo: res.ApproveInfo,
nextApproveState: res.nextApproveState || ""
}
console.log('reqreqreqreq', req);
data = await handleRejectCommodityProInst(req)
}
setAddApprovalLoading(false)
console.log('datadatadata', data);
if (data.Result_Code === 100) {
message.success(data.Result_Desc)
setShowApplyFor(false)
setCurrentRow(undefined)
setShopData([])
setBUSINESSAPPROVALDETAIL(undefined)
setShowDetailType(null)
// setApproveCurrentRow(undefined)
// setApproveModal(false)
setNextApproval(null)
setNextApprovalPerson(null)
setApprovaType(0)
actionRef.current?.reload()
} else {
message.error(data.Result_Desc)
}
}}
>
{
ApprovalType === 1 ?
<Row>
{
nextApproval === 9000 ? '' :
<Col span={6}>
<ProFormSelect
label={"下一阶段审批人"}
name={"nextApproveStaffId"}
options={nextApprovalPerson}
rules={[
{
required: true,
message: "请选择下一阶段审批人!"
}
]}
/>
</Col>
}
<Col span={24}>
<ProFormTextArea
label={"审批意见"}
name={"ApproveInfo"}
rules={[
{
required: true,
message: "请输入审批意见!"
}
]}
/>
</Col>
</Row> : ApprovalType === 2 ?
<Row>
<Col span={6}>
<ProFormSelect
label={"驳回状态"}
name={"nextApproveState"}
options={nextApprovalPerson}
rules={[
{
required: true,
message: "请选择下一阶段审批人!"
}
]}
/>
</Col>
<Col span={24}>
<ProFormTextArea
label={"驳回意见"}
name={"ApproveInfo"}
rules={[
{
required: true,
message: "请输入驳回意见!"
}
]}
/>
</Col>
</Row> : ""
}
</ProForm> : ""
}
<ProTable
search={false}
options={false}
pagination={false}
columns={modalColumns}
dataSource={shopData}
bordered
toolbar={{
actions: [
currentRow?.BusinessProcess_State > 1000 || (currentRow?.BusinessApproval_ID && currentRow?.ApproveStaff_ID !== currentUser?.ID) ? '' : <Button type={"primary"} onClick={() => {
setShowAddShopModal(true)
}}>
</Button>
]
}}
/>
{
currentRow?.BusinessProcess_State > 1000 ?
<Card title="流程进度" bordered className="ProcessProgress">
<div style={{ width: '100%' }} className="ProcessProgressBox">
<Steps
size="small"
className="multi-line-steps"
direction="horizontal"
progressDot={false}
current={BUSINESSAPPROVALDETAIL?.approveList && BUSINESSAPPROVALDETAIL?.approveList.length ? BUSINESSAPPROVALDETAIL?.approveList.length : 0}
>
{/* <Step
style={{ minWidth: 180, maxWidth: 220 }}
status={currentRow?.BusinessProcess_State > 1000 ? 'finish' : 'wait'}
title="发起申请"
description={
<div>
<Tooltip title={`${currentRow?.Staff_Name || ''}${currentRow?.BusinessProcess_Desc ? `${currentRow?.BusinessProcess_Desc}` : ''}`}>
<p>{`${currentRow?.BusinessProcess_StartDate || ''}`}</p>
</Tooltip>
</div>
}
/> */}
{
BUSINESSAPPROVALDETAIL?.approveList && BUSINESSAPPROVALDETAIL?.approveList.length > 0 ?
BUSINESSAPPROVALDETAIL?.approveList.map((item: any, index: number) => (
<Step
key={index}
style={{ minWidth: 180, maxWidth: 220 }}
status={"finish"}
title={item.APPROVED_NAME}
description={
<div>
<Tooltip title={`${item.STAFF_NAME || ''}${item.APPLYAPPROVE_INFO ? `${item.APPLYAPPROVE_INFO}` : ''}`}>
<p>{`${item.APPLYAPPROVE_DATE || ''}`}</p>
</Tooltip>
</div>}
/>
)) : ''
}
{
nextStepsList && nextStepsList.length > 0 ?
nextStepsList.map((item: any, index: number) => (
<Step
key={index}
style={{ minWidth: 180, maxWidth: 220 }}
status={item.status === 'process' ? 'process' : 'wait'}
title={item.APPROVALROUTE_NAME}
/>
)) : ''
}
</Steps>
</div>
</Card>
: ''
}
</Modal>
{/* 新增商品的悬浮框 */}
<Modal
open={showAddShopModal}
width={1200}
wrapClassName={'shopModal'}
destroyOnClose
title={currentShopRow?.COMMODITY_ID ? '编辑商品' : '添加商品'}
onOk={() => {
modalShopFormRef.current?.validateFields().then(async (res: any) => {
let oldData: any = shopData && shopData.length > 0 ? JSON.parse(JSON.stringify(shopData)) : []
console.log('oldDataoldDataoldData', oldData);
console.log('resresresresresres', res);
let newList: any = []
// 判断当前的里面有没有一样的
if (oldData && oldData.length > 0) {
let same: boolean = false
oldData.forEach((item: any, index: number) => {
if (item.ADDTIME === res.ADDTIME) {
same = true
newList.push({
...item,
...res
})
} else {
newList.push(item)
}
})
if (!same) {
newList.push(res)
}
} else {
newList.push(res)
}
console.log('newList', newList);
setShopData(newList)
setShowAddShopModal(false)
setCommodityList([])
setCustomClassList([])
setCurrentShopRow(undefined)
})
}}
onCancel={() => {
setShowAddShopModal(false)
setCommodityList([])
setCustomClassList([])
setCurrentShopRow(undefined)
}}
>
<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() }
}}
disabled={currentRow?.BusinessProcess_State === 9000}
>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={16}>
<ProFormText
name="COMMODITY_NAME"
label="商品名称"
placeholder="请输入商品名称"
rules={[
{
required: true,
message: '请输入商品名称',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_EN"
label="拼音简码"
/>
</Col>
<Col span={8}>
<ProFormSelect
name="SERVERPART_ID"
label="服务区名"
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([])
}
}
}}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="BUSINESSTYPE"
label="商品业态"
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="商品类别"
rules={[
{
required: true,
message: '请选择商品类别',
},
]}
request={() => {
return treeView
}}
fieldProps={{
treeDefaultExpandAll: true
}}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_BARCODE"
label="商品条码"
disabled={currentRow}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_UNIT"
label="商品单位"
rules={[
{
required: true,
message: '请输入商品单位',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_RULE"
label="商品规格"
rules={[
{
required: true,
message: '请输入商品规格',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_HOTKEY"
label="快捷键值"
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_GRADE"
label="质量等级"
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="商品产地"
rules={[
{
required: true,
message: '请输入商品产地',
},
]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="USERDEFINEDTYPE_ID"
label="自定义类"
options={customClassList}
/>
</Col>
<Col span={8}>
<ProFormText
name="PROVINCE_CODE"
label="省份编码"
disabled
// initialValue={currentUser?.ProvinceCode}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_CODE"
label="商品编码"
disabled
/>
</Col>
<Col span={24}>
<ProFormTextArea
name="COMMODITY_DESC"
label="商品说明"
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormSelect
name="CANSALE"
label="是否销售"
rules={[
{
required: true,
message: '请选择是否销售',
},
]}
initialValue={1}
options={[{ label: '是', value: 1 }, { label: '否', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="ISBULK"
label="是否散装"
rules={[
{
required: true,
message: '请选择是否散装',
},
]}
initialValue={0}
options={[{ label: '是', value: 1 }, { label: '否', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="METERINGMETHOD"
label="称重方式"
rules={[
{
required: true,
message: '请选择称重方式',
},
]}
initialValue={1}
options={[{ label: '计价', value: 1 }, { label: '散装称重', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_STATE"
label="审核状态"
rules={[
{
required: true,
message: '请选择审核状态',
},
]}
initialValue={1}
options={[{ label: '有效', value: 1 }, { label: '审核中', value: 2 }, { label: '无效', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormText
name="ADDTIME"
label="添加时间"
disabled
initialValue={moment().format('YYYY-MM-DD HH:mm:ss')}
/>
</Col>
<Col span={8}>
<ProFormDateTimePicker
name="OPERATE_DATE"
label="生效时间"
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="零售价"
rules={[
{
required: true,
message: '请输入零售价',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_CURRPRICE"
label="当前价格"
rules={[
{
required: true,
message: '请输入当前价格',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MEMBERPRICE"
label="会员价"
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_PURCHASEPRICE"
label="进货价"
rules={[
{
required: true,
message: '请输入进货价',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MINPRICE"
label="最低价"
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MAXPRICE"
label="最高价"
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormDigit
name="DUTY_PARAGRAPH"
label="进价税率"
/>
</Col>
<Col span={8}>
<ProFormDigit
name="RETAIL_DUTY"
label="零售税率"
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_FROZENCOUNT"
label="采购状态"
options={[{ label: '允许', value: 1000 }, { label: '禁止', value: 2000 }]}
/>
</Col>
</Row>
</ProForm>
</Modal>
</div >
)
}
export default connect(({ user }: ConnectState) => ({
currentUser: user.currentUser
}))(ProductChangeInfoApproval);