// 卡券信息管理 import { connect } from "umi"; import type { CurrentUser } from "umi"; import type { ConnectState } from "@/models/connect"; import React, { useRef, useState } from "react"; import ProCard from "@ant-design/pro-card"; import { ExclamationCircleOutlined, MenuFoldOutlined } from "@ant-design/icons"; import type { FormInstance } from "antd"; import { Button, Col, Divider, message, Modal, Popconfirm, Row, Space, Spin, Tree, Image } from "antd"; import useRequest from "@ahooksjs/use-request"; import { getFieldEnum, getServerpartTree } from "@/services/options"; import type { ActionType } from "@ant-design/pro-table"; import ProTable from "@ant-design/pro-table"; import ReactHTMLTableToExcel from "react-html-table-to-excel"; import LeftSelectTree from "@/pages/reports/settlementAccount/component/leftSelectTree"; import PageTitleBox from "@/components/PageTitleBox"; import { handleDeleteCOUPON, handleGetCOOPSHOP_RULEList, handleGetCOUPONList, handleSynchroCOUPONService } from "../service"; import ProForm, { ProFormDatePicker, ProFormSelect, ProFormText, ProFormTextArea, ProFormUploadButton } from "@ant-design/pro-form"; import session from "@/utils/session"; import './index.less' import { handleSetlogSave } from "@/utils/format"; import moment from 'moment' import { uploadPicture } from "@/services/picture"; import ModalFooter from "@/pages/travelMember/scenicSpotConfig/component/modalFooter"; const beforeUpload = (file: any) => { const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJpgOrPng) { message.error('请上传JPEG、jpg、png格式的图片文件!'); } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { message.error('图片大小不超过 2MB!'); } return isJpgOrPng && isLt2M; } const CardInformationManager: React.FC<{ currentUser: CurrentUser }> = (props) => { const { currentUser } = props const { confirm } = Modal; const downloadBtnRef = useRef() const actionRef = useRef(); const formRef = useRef(); const ModalFormRef = useRef(); const [reqDetailList, setReqDetailList] = useState(); // 合计项数据源 const [printOut, setPrintOut] = useState(); // 打印数据的内容 const [collapsible, setCollapsible] = useState(false) const [treeView, setTreeView] = useState() const [printIndex, setPrintIndex] = useState(new Date().getTime()) const COUPONTYPEObj = session.get('COUPONTYPEObj') const COUPONTYPEList = session.get('COUPONTYPEList') // 树相关的属性和方法 const [selectedId, setSelectedId] = useState() // 导出的加载效果 const [showLoading, setShowLoading] = useState(false) // 是否显示打印的表格 const [showExportTable, setShowExportTable] = useState(false) // 查询的条件 const [searchParams, setSearchParams] = useState() // 显示详情的抽屉 const [showDetail, setShowDetail] = useState(false) // 当前行数据 const [currentRow, setCurrentRow] = useState() // 悬浮框 按钮加载的属性 const [modalLoading, setModalLoading] = useState(false) // 适用门店选择列表 const [COOPSHOPRULEIDOPTIONS, setCOOPSHOPRULEIDOPTIONS] = useState() // 文件列表 const [fileList, setFileList] = useState([]) const [imagePreviewVisible, setImagePreviewVisible] = useState(false) // 预览图片 // 预览上传后的图片 const handlePreview = async () => { setFileList(fileList) setImagePreviewVisible(true) }; const handleChangePreview = (val: any) => { setImagePreviewVisible(val) } const columns: any = [ { title: "序号", dataIndex: "index", width: 70, hideInSearch: true, valueType: 'index', align: 'center', }, { title: "优惠券类型", dataIndex: "COUPON_TYPES", valueType: 'select', valueEnum: COUPONTYPEObj, hideInTable: true, }, { title: "卡券名称", dataIndex: "COUPON_NAME", align: 'left', hideInSearch: true, ellipsis: true, render: (_, record) => { return record?.COUPON_NAME ? { setShowDetail(true) setCurrentRow(record) if (record.COUPON_IMAGEURL) { setFileList([ { name: "-", url: record.COUPON_IMAGEURL } ]) } }}>{record?.COUPON_NAME} : "-" } }, { title: "运营单位", dataIndex: "OPERATINGUNIT_NAME", width: 200, align: 'left', hideInSearch: true, ellipsis: true, }, { title: "发放数量", dataIndex: "COUPON_QUOTA", width: 120, align: 'center', hideInSearch: true, ellipsis: true, render: (_, record) => { return record?.COUPON_QUOTA === -1 ? '不限量' : record?.COUPON_QUOTA } }, { title: "活动开始时间", dataIndex: "START_TIME", width: 150, align: 'center', hideInSearch: true, ellipsis: true, }, { title: "活动结束时间", dataIndex: "END_TIME", width: 150, align: 'center', hideInSearch: true, ellipsis: true, }, // { // title: "操作", // dataIndex: "options", // width: 120, // align: 'center', // hideInSearch: true, // render: (_, record) => { // return // { // console.log('record', record); // setShowDetail(true) // setCurrentRow(record) // if (record.COUPON_IMAGEURL) { // setFileList([ // { name: "-", url: record.COUPON_IMAGEURL } // ]) // } // }}> // 编辑 // // { // await handleDeleteShopRule(record?.COOPSHOP_RULE_ID) // }}> // 删除 // // // } // } ] // 删除的方法 const handleDeleteShopRule = async (id: any) => { const req: any = { COUPONId: id } const data = await handleDeleteCOUPON(req) if (data.Result_Code === 100) { message.success(data.Result_Desc) actionRef.current?.reload() ModalFormRef?.current?.resetFields() setCurrentRow(null) setShowDetail(false) setFileList([]) } else { message.error(data.Result_Desc) } } // 同步的方法 const handleSynchroCOUPON = async (res: any) => { let req: any = {} if (currentRow?.COUPON_ID) { req = { ...currentRow, ...res, END_TIME: moment(res.END_TIME).format("YYYY-MM-DD"), START_TIME: moment(res.START_TIME).format("YYYY-MM-DD"), VALID_END_TIME: moment(res.VALID_END_TIME).format("YYYY-MM-DD"), VALID_START_TIME: moment(res.VALID_START_TIME).format("YYYY-MM-DD"), UPDATE_STAFF_ID: currentUser?.ID, UPDATE_STAFF_NAME: currentUser?.Name, UPDATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), COUPON_IMAGEURL: fileList && fileList.length > 0 ? fileList[0].url : "", } } else { req = { ...res, END_TIME: moment(res.END_TIME).format("YYYY-MM-DD"), START_TIME: moment(res.START_TIME).format("YYYY-MM-DD"), VALID_END_TIME: moment(res.VALID_END_TIME).format("YYYY-MM-DD"), VALID_START_TIME: moment(res.VALID_START_TIME).format("YYYY-MM-DD"), COUPON_IMAGEURL: fileList && fileList.length > 0 ? fileList[0].url : "", CREATE_STAFF_ID: currentUser?.ID, CREATE_STAFF_NAME: currentUser?.Name, CREATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), } } console.log('reqreqreqreq', req); const data = await handleSynchroCOUPONService(req) if (data.Result_Code === 100) { message.success(data.Result_Desc) ModalFormRef?.current?.resetFields() setCurrentRow(undefined) setShowDetail(false) actionRef.current?.reload() } else { message.error(data.Result_Desc) } handleSetlogSave(currentRow?.COOPSHOP_RULE_ID ? '卡券的编辑' : '卡券的新增') } return (
{ // 打印报表 if (!reqDetailList || reqDetailList.length === 0) return; setPrintOut(el); }} >
单品销售排行统计} headerTitle={} search={{ span: 6 }} request={async (params) => { const req: any = { SearchParameter: { OWNERUNIT_ID: 911, COUPON_TYPES: params?.COUPON_TYPES || "", COUPON_ISVALID: 1 }, PageIndex: 1, PageSize: 999999 } setSearchParams(params) const data = await handleGetCOUPONList(req) if (data && data.length > 0) { return { data, success: true } } return { data: [], success: true } }} toolbar={{ actions: [ ] }} />
{/* 图片预览组件 */} {fileList && fileList.length > 0 &&
{ handleChangePreview(vis) } }}> { fileList.map((n) => ) }
} { ModalFormRef?.current?.resetFields() setCurrentRow(null) setShowDetail(false) setFileList([]) }} confirmLoading={modalLoading} width={900} bodyStyle={{ height: '700px', // 你可以根据需要调整高度 overflowY: 'auto', }} destroyOnClose title={currentRow?.COUPON_ID ? currentRow?.COUPON_NAME : "新增卡券"} onOk={() => { ModalFormRef?.current?.validateFields().then(async (res) => { await handleSynchroCOUPON(res) }) }} footer={ { await handleDeleteShopRule(currentRow?.COUPON_ID) }} handleCancel={() => { ModalFormRef?.current?.resetFields() setCurrentRow(null) setShowDetail(false) setFileList([]) }} handleOK={() => { ModalFormRef?.current?.validateFields().then(async (res) => { await handleSynchroCOUPON(res) }) }} />} >
0 ? COUPONTYPEList[0].value : "", CATEGORY_RULE_ID: currentRow?.CATEGORY_RULE_ID || 0, PAY_METHOD: currentRow?.PAY_METHOD || 1000, COOPSHOP_RULE_ID: currentRow?.COOPSHOP_RULE_ID ? currentRow?.COOPSHOP_RULE_ID : (COOPSHOPRULEIDOPTIONS && COOPSHOPRULEIDOPTIONS.lengtg > 0 ? COOPSHOPRULEIDOPTIONS[0].value : ""), VALID_TYPE: currentRow?.VALID_TYPE || 1000, OVERLAY: currentRow?.OVERLAY || 0, LIMIT_COUNT: currentRow?.LIMIT_COUNT || -1, LIMIT_COUNT_PERDAY: currentRow?.LIMIT_COUNT_PERDAY || -1, COUPON_ISVALID: currentRow?.COUPON_ISVALID || currentRow?.COUPON_ISVALID === 0 ? currentRow?.COUPON_ISVALID : 1 }}> 基本信息 基本规则 { const req: any = { SearchParameter: { OWNERUNIT_ID: 911, ISVALID: 1 }, PageIndex: 1, PageSize: 999999 } const data = await handleGetCOOPSHOP_RULEList(req) let list: any = [] console.log('data', data); if (data && data.length > 0) { data.forEach((item: any) => { list.push({ label: item.COOPSHOP_RULE_NAME, value: item.COOPSHOP_RULE_ID }) }) } setCOOPSHOPRULEIDOPTIONS(list) return list }} rules={[ { required: true, message: '请选择适用门店' } ]} /> 上架信息 详情介绍 卡券图标 { const formData = new FormData(); formData.append('files', info.file); formData.append('TableType', '1208'); formData.append('ImageName', typeof info.file !== 'string' ? info.file?.name : ''); if (info.filename) { const success = await uploadPicture(formData) if (success) { const list = [{ // uid: `${success.ImageId}`, // 注意,这个uid一定不能少,否则上传失败 name: success.Result_Data.ImageName, // status: 'done', url: success.Result_Data.ImageUrl, // url 是展示在页面上的绝对链接 // imgUrl: success.ImagePath // + success.ImageUrl, }] setFileList(list) } } else { message.error("您上传的图片不存在.") } }, onChange: async (info: any) => { if (info.file.status === 'removed') { confirm({ title: '确认删除该图片吗?', icon: , async onOk() { console.log('infoinfoinfoinfo', info); setFileList([]) // const deleteLoading = message.loading('正在删除...') // try { // const deleteIndex = fileList?.findIndex((n: any) => n.uid === info.file.uid) // const success = await deletePicture(info.file?.ImagePath, info.file?.ImageId, '1208') // if (deleteIndex !== -1) { // const files = [...fileList] // files.splice(deleteIndex, 1) // setFileList(files) // } // deleteLoading() // return true // } catch (error) { // deleteLoading() // return false // } } }); } } }} />
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser }))(CardInformationManager);