feat:添加二维码操作类型

This commit is contained in:
1708-huayu 2025-07-28 18:53:32 +08:00
parent e1a40a8980
commit 5493acab8e
6 changed files with 99 additions and 4 deletions

View File

@ -244,7 +244,9 @@ const DiaryOption = (props: SelectDiary) => {
label: '复制', label: '复制',
key: '1', key: '1',
onClick: () => { onClick: () => {
copyToClipboard(clickTaskDiary!.description) copyToClipboard(clickTaskDiary!.description).then(res=>{
res && message.info(`复制成功${clickTaskDiary!.description.length>5?clickTaskDiary!.description.substring(0,5)+"...":clickTaskDiary!.description}`)
})
} }
}, },
{ {

View File

@ -0,0 +1,85 @@
import React, {Fragment, useEffect, useState} from 'react';
import {Button, Image, Modal, QRCode} from 'antd';
import { v4 as uuidv4 } from 'uuid';
const ShareOption = (props:{taskId:string} ) => {
const [loading, setLoading] = useState(false);
const [open, setOpen] = useState(false);
const [buttonIndex, setButtonIndex] = useState(0);
const [qrCodeValue, setQrCodeValue] = useState<string>("-");
const [qrCodeStatus, setQrCodeStatus]=useState<'active' | 'expired' | 'loading' | 'scanned'>("active");
const generateQrcode =()=>{
}
const showModal = () => {
setOpen(true);
};
const handleOk = () => {
setLoading(true);
setTimeout(() => {
setLoading(false);
setOpen(false);
}, 3000);
};
const handleCancel = () => {
setOpen(false);
};
useEffect(() => {
// 分享人必须有权限
const clientId: string = uuidv4();
let qrCodeData={
taskId:props.taskId,pass:clientId,local:"马上行计划管理",opType:"SHARE_OPTION"
}
setQrCodeValue(JSON.stringify(qrCodeData))
}, []);
return (
<Fragment>
<Button type="primary" onClick={showModal}>
</Button>
<Modal
open={open}
title="Title"
onOk={handleOk}
onCancel={handleCancel}
footer={[
<Button key="back" onClick={handleCancel}>
</Button>,
<Button key="submit" type="primary" loading={loading} onClick={handleOk}>
使
</Button>,
<Button
key="link"
href="https://google.com"
target="_blank"
type="primary"
loading={loading}
onClick={handleOk}
>
使
</Button>,
]}
>
{buttonIndex==1&& <div>
<div>
<div className="title"></div>
<Image width={300} src="/static/pc-Web.png"/>
<Button></Button>
</div>
<div>
<div className="title">7</div>
<QRCode value={qrCodeValue} size={300} status={qrCodeStatus} onRefresh={generateQrcode}/>
<Button></Button>
</div>
</div>}
</Modal>
</Fragment>
);
};
export default ShareOption;

View File

@ -40,7 +40,8 @@ export default function XcxLoginPage() {
const clientId: string = uuidv4(); const clientId: string = uuidv4();
generateQrcodeAPI({clientId}).then(res=>{ generateQrcodeAPI({clientId}).then(res=>{
let qrCodeData={ let qrCodeData={
clientId,serverId:res.data.data,local:"马上行计划管理" clientId,serverId:res.data.data,local:"马上行计划管理",
opType:"LOGIN_OPTION"
} }
setQrCodeValue(JSON.stringify(qrCodeData)) setQrCodeValue(JSON.stringify(qrCodeData))
setQrCodeStatus("active") setQrCodeStatus("active")

View File

@ -7,6 +7,7 @@ import Link from "next/link";
import {DetailModelForm} from "@/ui/task/project/DetailModelForm"; import {DetailModelForm} from "@/ui/task/project/DetailModelForm";
interface OperationButtonProps { interface OperationButtonProps {
itemId: string, itemId: string,
taskType?:string,
itemName: string, itemName: string,
priority?:string, priority?:string,
pid: string, pid: string,
@ -124,11 +125,13 @@ const RightOption: React.FC<OperationButtonProps> = (props) => {
itemId={operateState.operationId === OPERATION_BUTTON_TYPE.UPDATE||operateState.operationId === OPERATION_BUTTON_TYPE.DETAIL?props.itemId:undefined} itemId={operateState.operationId === OPERATION_BUTTON_TYPE.UPDATE||operateState.operationId === OPERATION_BUTTON_TYPE.DETAIL?props.itemId:undefined}
pPid={props.pPid} pPid={props.pPid}
pid={operateState.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD ?props.itemId:undefined} pid={operateState.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD ?props.itemId:undefined}
taskType={props.taskType}
operationId={operateState.operationId} operationId={operateState.operationId}
description={operateState.operationId === OPERATION_BUTTON_TYPE.DETAIL ? '任务详情' : description={operateState.operationId === OPERATION_BUTTON_TYPE.DETAIL ? '任务详情' :
operateState.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD ? '添加支线任务' : operateState.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD ? '添加支线任务' :
operateState.operationId === OPERATION_BUTTON_TYPE.UPDATE ? '修改任务' : '未知操作'} operateState.operationId === OPERATION_BUTTON_TYPE.UPDATE ? '修改任务' : '未知操作'}
open={operateState.openModal} open={operateState.openModal}
closeOpen={() => setOperateState({...operateState, openModal: false})}
reloadData={handleCancel}/>} reloadData={handleCancel}/>}
</Fragment> </Fragment>
); );

View File

@ -83,6 +83,7 @@ export const DroppableTable = React.memo((props: DroppableTableProps) => {
{(provided, snapshot) => ( {(provided, snapshot) => (
<RightOption refreshDate={props.refreshDate} itemId={record.id} <RightOption refreshDate={props.refreshDate} itemId={record.id}
itemName={record.name} pid={record.pid} itemName={record.name} pid={record.pid}
taskType={record.taskType}
pPid={record.pPid} children={<div pPid={record.pPid} children={<div
ref={provided.innerRef} ref={provided.innerRef}
{...provided.draggableProps} {...provided.draggableProps}

View File

@ -18,11 +18,13 @@ import {
import {DataType} from "@/lib/definitions"; import {DataType} from "@/lib/definitions";
import dayjs, {Dayjs} from "dayjs"; import dayjs, {Dayjs} from "dayjs";
import DiaryOption from "@/components/DiaryOption"; import DiaryOption from "@/components/DiaryOption";
import ShareOption from "@/components/ShareOption";
export type DetailModelFormProps = { export type DetailModelFormProps = {
// 当前内容id // 当前内容id
itemId?: string, itemId?: string,
pid?: string, pid?: string,
taskType?:string,
// 祖宗任务id // 祖宗任务id
pPid?: string, pPid?: string,
// 操作id // 操作id
@ -164,8 +166,9 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
if (!editFormDisable) { if (!editFormDisable) {
result.push(...defaultDoms) result.push(...defaultDoms)
} else { } else {
result.push(<Button type="primary" key="join" if (props.taskType=='1') {
onClick={() => props.closeOpen?.()}></Button>) result.push(<ShareOption taskId={props.itemId!}/>)
}
result.push(<Button type="primary" key="close" result.push(<Button type="primary" key="close"
onClick={() => props.closeOpen?.()}></Button>) onClick={() => props.closeOpen?.()}></Button>)
} }