ant design pro 如何去保存颜色

news2024/9/22 19:44:18

上图

在这里插入图片描述
在这里插入图片描述
就是实现这样的效果

后端是这样的,这个颜色肯定是存到字符串里的
在这里插入图片描述
这是第一步

import mongoose, { Schema, Document } from 'mongoose';

interface IDiscountCard extends Document {
  title: string;
  subtitle: string;
  image: string;
  shopUrl: string;
  bgColor: string;
}

const DiscountCardSchema: Schema = new Schema({
  title: { type: String, required: true },
  subtitle: { type: String, required: true },
  image: { type: String, required: true },
  shopUrl: { type: String, required: true },
  bgColor: { type: String, required: true },
}, { timestamps: true });

const DiscountCard = mongoose.model<IDiscountCard>('DiscountCard', DiscountCardSchema);

export default DiscountCard;

 <ProFormColorPicker
          name="bgColor"
          initialValue={bgColor}
          label={intl.formatMessage({ id: 'background.color' })}
          rules={[
            { required: true, message: intl.formatMessage({ id: 'background.color.required' }) },
          ]}
          fieldProps={{
            onChange: (color: any) => {
              console.log('Color changed:', color.toHexString());
              setBgColor(color.toHexString());
            },
          }}
        />
import { useIntl } from '@umijs/max';
import { ModalForm } from '@ant-design/pro-components';
import BasicForm from './BasicForm';
import { useState } from 'react';
import extractPathFromUrl from '@/utils/extractPathFromUrl';
import { message } from 'antd';

interface Props {
  open: boolean;
  onOpenChange: (visible: boolean) => void;
  onFinish: (formData: any) => Promise<void>;
}

const Create: React.FC<Props> = (props) => {
  const intl = useIntl();
  const { open, onOpenChange, onFinish } = props;
  const [imageUrl, setImageUrl] = useState<string | undefined>('');
  const [bgColor, setBgColor] = useState<string>('#ffffff');
  return (
    <ModalForm
      title={intl.formatMessage({ id: 'pages.searchTable.new' })}
      width="50%"
      open={open}
      onOpenChange={onOpenChange}
      modalProps={{
        destroyOnClose: true,
        maskClosable: false,
      }}
      onFinish={async (values) => {
        // 确保在提交前已经上传了图片和资源
        if (!imageUrl) {
          message.error(intl.formatMessage({ id: 'message.error.imageUpload' }));
          return;
        }
        // 将图片和资源URL添加到表单数据中
        await onFinish({
          ...values,
          image: extractPathFromUrl(imageUrl),
          bgColor,
        });
      }}
    >
      <BasicForm setImageUrl={setImageUrl} setBgColor={setBgColor} newRecord />
    </ModalForm>
  );
};

export default Create;
import { useIntl } from '@umijs/max';
import React, { useEffect, useState } from 'react';
import BasicForm from './BasicForm';
import { ModalForm } from '@ant-design/pro-components';
import { Form, Input } from 'antd';
import extractPathFromUrl from '@/utils/extractPathFromUrl';

export type FormValueType = Partial<API.ItemData>;

export type UpdateFormProps = {
  onCancel: (visible: boolean) => void;
  onSubmit: (values: FormValueType) => Promise<void>;
  updateModalOpen: boolean;
  values: {
    image?: string;
    bgColor?: string;
  } & Partial<API.ItemData>;
};

const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
  const { updateModalOpen, onCancel, onSubmit, values } = props;
  const [imageUrl, setImageUrl] = useState<string | undefined>('');
  const [bgColor, setBgColor] = useState<string>(values.bgColor!);
  useEffect(() => {
    setImageUrl(values.image);
  }, [values]);
  return (
    <ModalForm
      title={intl.formatMessage({ id: 'pages.searchTable.change' })}
      width="50%"
      modalProps={{
        destroyOnClose: true,
        maskClosable: false,
      }}
      open={updateModalOpen}
      onOpenChange={onCancel}
      onFinish={async (values: any) => {
        onSubmit({
          ...values,
          image: extractPathFromUrl(imageUrl!),
          bgColor
        });
      }}
      initialValues={{ ...values }}
    >
      <BasicForm
        bgColor={bgColor}
        setBgColor={setBgColor}
        setImageUrl={setImageUrl}
        imageUrl={imageUrl} // 传递图片URL以显示已上传的图片
        values={values}
      />
      <Form.Item name="_id" label={false}>
        <Input type="hidden" />
      </Form.Item>
    </ModalForm>
  );
};

export default UpdateForm;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

望繁信科技荣膺上海市浦东新区博士后创新实践基地称号

近日&#xff0c;上海望繁信科技有限公司&#xff08;简称“望繁信科技”&#xff09;凭借在大数据流程智能领域的卓越表现&#xff0c;成功入选上海市浦东新区博士后创新实践基地。这一荣誉不仅是对望繁信科技创新能力和技术实力的高度认可&#xff0c;也标志着公司在推动产学…

基于springboot养老院管理系统pf

TOC springboot332基于springboot养老院管理系统pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记…

Hive3:简单ETL实操案例

一、ETL概念简介 ETL&#xff1a; E&#xff0c;Extract&#xff0c;抽取 T&#xff0c;Transform&#xff0c;转换 L&#xff0c;Load&#xff0c;加载 从A抽取数据(E)&#xff0c;进行数据转换过滤(T)&#xff0c;将结果加载到B(L)&#xff0c;就是ETL 二、情景描述 聊天平…

数据结构(邓俊辉)学习笔记】优先级队列 04——完全二叉堆:插入与上滤

文章目录 1. 上滤2. 实例3. 实现4. 效率 1. 上滤 好&#xff0c;接下来我们就来学习在一个完全二叉堆中&#xff0c;如何有效地插入一个新的元素。我们将会看到插入过程中的核心技巧是所谓的 ”上滤“ 过程。 为了在完全二叉堆中引入一个新的词条 e&#xff0c;我们只需在物…

【网络编程】TCP实现网络通信(C语言、Ubuntu实现)

TCP服务器通信模型&#xff1a;&#xff08;分为以下6个步骤&#xff09; 1、sfd socket(); //创建一个用于连接的套接字文件描述符 2、bind(); //为服务器套接字绑定ip地址和端口号&#xff0c;为了让客户端额能够找到服务器 3、l…

C++第三十七弹---深入理解红黑树:旋转、着色与性质维护

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 红黑树 1.1 红黑树的概念 1.2 红黑树的性质 1.3 红黑树节点的定义 1.4 红黑树结构 1.5 红黑树的插入操作 1.6 红黑树的验证 1.7 红黑树与…

XSS的一些相关案例及DOM破坏的案例

目录 第一关 第二关 第三关 第四关 第五关 第六关 第七关 第八关(DOM破坏) 网址&#xff1a;XSS Game - Learning XSS Made Simple! | Created by PwnFunction 第一关 来分析一下代码 就是一个URL类里进行一个get接收参数(somebody)如果没参数就默认接收(Somebody)这…

C++仿C#实现事件处理

测试 #include "beacon/beacon.hpp" #include <cstdio> #include <thread>class mouseEvent : public beacon::args { public:mouseEvent(int x, int y) : x(x), y(y) {}int x, y; };class object : public beacon::sender { public:};class mouseHandl…

6大企业必备的公司常用的加密软件推荐|2024公司常用加密软件推荐!

2024年上半年&#xff0c;企业对于数据加密的需求日益增长&#xff0c;以确保数据在存储和传输过程中的安全性。以下是六款企业常用的加密软件推荐&#xff0c;它们各具特色&#xff0c;能够满足不同企业的加密需求&#xff1a; 1.NordLocker&#xff1a; 特点&#xff1a;它是…

【Linux系列】telnet使用入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

什么是视频比特率?与视频时长是什么关系

​ ‌比特率是指单位时间内传输或处理的比特的数量&#xff0c;单位为‌bps(‌bit per second)。‌ 比特率经常用于描述在电信和计算领域中数据传输的速度&#xff0c;也可以作为衡量音频和视频文件数据率的指标。比特率越高&#xff0c;传送的数据越大&#xff0c;音频或视频…

Ubuntu安装Anaconda3

本文详细阐述了在 Ubuntu 系统中安装 Anaconda3 的完整流程。包括 Anaconda3 安装包的获取途径&#xff0c;具体安装过程中的每一个步骤及注意事项&#xff0c;还有安装后的环境变量设置和安装成功的验证方法。旨在为 Ubuntu 用户提供清晰、易懂且准确的 Anaconda3 安装指南&am…

Windows Microsoft Edge 浏览器 配置【密码】

在浏览 Web 时&#xff0c;Microsoft Edge 可以轻松保存密码。 在桌面或移动设备上的 Edge 浏览器中输入新密码时&#xff0c;Microsoft Edge 会询问你是否要记住用户名和密码。 下次访问该网站时&#xff0c;浏览器将完成帐户信息的填写。 如果使用 Microsoft 帐户登录到 Edg…

重塑业务生态,Vatee万腾平台:引领行业变革的新引擎

在数字经济浪潮汹涌的今天&#xff0c;传统行业的边界正被不断模糊与重塑&#xff0c;新兴技术如云计算、大数据、人工智能等正以前所未有的速度改变着商业世界的面貌。在这一背景下&#xff0c;Vatee万腾平台应运而生&#xff0c;以其独特的创新模式和强大的技术实力&#xff…

i.MX6裸机开发(1):环境搭建

1. 熟悉sdk SDK&#xff08;Software Development Kit&#xff09;是NXP针对其官方评估 版的软件开发包&#xff0c;可以在NXP的官网下载得到。SDK中包含了 各种程序范例&#xff0c;我们心心念念的固件库也包含在它里边。 NXP官网链接&#xff1a;https://www.nxp.com 未登录…

Camera基础知识系列(2)——对焦和变焦

目录 一. 引言 二. 对焦 定义&#xff1a; 原理 三. 变焦 定义 用途 四. 总结 一. 引言 这一节简单聊一下对焦和变焦&#xff0c;这两个是摄影种出现的高频词&#xff0c;但这里把它们放一起讲&#xff0c;主要还是因为它们在字面上就一字之差&#xff0c;初次接触…

XSS DOM破坏实战案例

目录 案例一 思考 源码分析 查找问题 实现 案例二 查看源码 问题查找 实现 实验环境&#xff1a;DOM clobbering | Web Security Academy (portswigger.net) 案例一 里面是一篇篇的博客&#xff0c;点击进去里面是一些评论 思考 尝试一些常规的xss 没什么效果... 他将…

Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

无人机之螺旋桨的安装与维护

一、安装&#xff1a;正确安装桨叶至关重要。请确保顺时针旋转的桨叶安装在对应的电机上&#xff0c;并使逆时针旋转的桨叶安装在相应的电机上。否则&#xff0c;无人机可能无法正常飞行或失去控制。 二、维护&#xff1a;为了确保无人机的安全及长久使用&#xff0c;请定期检…

pytorch-AutoEncoders

目录 1. 监督学习&无监督学习1.1 监督学习1.2 无监督学习1.3 为什么需要无监督学习 2. AutoEncoders3. Auto Encoders loss function4. PCA VS Auto Encoders5. Auto Encoders的变种5.1 Denoising Auto Encoders5.2 Dropout AutoEncoders5.3 Adversarial AutoEncoders5.4 V…