|  | @@ -5,7 +5,7 @@ import style from '../index.less'
 | 
											
												
													
														|  |  import New1Radio from "@/pages/launchSystemV3/components/New1Radio";
 |  |  import New1Radio from "@/pages/launchSystemV3/components/New1Radio";
 | 
											
												
													
														|  |  import { useUpdateEffect } from "ahooks";
 |  |  import { useUpdateEffect } from "ahooks";
 | 
											
												
													
														|  |  import { QuestionCircleFilled } from "@ant-design/icons";
 |  |  import { QuestionCircleFilled } from "@ant-design/icons";
 | 
											
												
													
														|  | -import { txtLength } from "@/utils/utils";
 |  | 
 | 
											
												
													
														|  | 
 |  | +import { extractAndFilterBracketsContent, txtLength } from "@/utils/utils";
 | 
											
												
													
														|  |  import TextAideInput from "@/pages/launchSystemV3/components/TextAideInput";
 |  |  import TextAideInput from "@/pages/launchSystemV3/components/TextAideInput";
 | 
											
												
													
														|  |  import styles from '../Material/index.less'
 |  |  import styles from '../Material/index.less'
 | 
											
												
													
														|  |  import SelectLabel from "./SelectLable"
 |  |  import SelectLabel from "./SelectLable"
 | 
											
										
											
												
													
														|  | @@ -19,7 +19,8 @@ import SelectBarrage from "./SelectBarrage";
 | 
											
												
													
														|  |  const CreativeConversionAssistant: React.FC<{ automaticSiteEnabled?: boolean, putInType?: 'NOVEL' | 'GAME' }> = ({ automaticSiteEnabled, putInType }) => {
 |  |  const CreativeConversionAssistant: React.FC<{ automaticSiteEnabled?: boolean, putInType?: 'NOVEL' | 'GAME' }> = ({ automaticSiteEnabled, putInType }) => {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**************************************/
 |  |      /**************************************/
 | 
											
												
													
														|  | -    const { creativeComponents, form, isUpdate, setIsUpdate } = useContext(DispatchDynamic)!;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    const { creativeComponents, form, isUpdate, setIsUpdate, adgroups } = useContext(DispatchDynamic)!;
 | 
											
												
													
														|  | 
 |  | +    const { siteSet } = adgroups
 | 
											
												
													
														|  |      const textLinkShow = Form.useWatch('textLinkShow', form)
 |  |      const textLinkShow = Form.useWatch('textLinkShow', form)
 | 
											
												
													
														|  |      const actionButtonShow = Form.useWatch('actionButtonShow', form)
 |  |      const actionButtonShow = Form.useWatch('actionButtonShow', form)
 | 
											
												
													
														|  |      const showDataShow = Form.useWatch('showDataShow', form)
 |  |      const showDataShow = Form.useWatch('showDataShow', form)
 | 
											
										
											
												
													
														|  | @@ -31,6 +32,7 @@ const CreativeConversionAssistant: React.FC<{ automaticSiteEnabled?: boolean, pu
 | 
											
												
													
														|  |      const floatingZoneSwitch = Form.useWatch(['floatingZone', 'value', 'floatingZoneSwitch'], form)
 |  |      const floatingZoneSwitch = Form.useWatch(['floatingZone', 'value', 'floatingZoneSwitch'], form)
 | 
											
												
													
														|  |      const floatingZoneType = Form.useWatch(['floatingZone', 'value', 'floatingZoneType'], form)
 |  |      const floatingZoneType = Form.useWatch(['floatingZone', 'value', 'floatingZoneType'], form)
 | 
											
												
													
														|  |      const image = Form.useWatch(['floatingZone', 'value', 'image'], form)
 |  |      const image = Form.useWatch(['floatingZone', 'value', 'image'], form)
 | 
											
												
													
														|  | 
 |  | +    const pageType = Form.useWatch(['jumpInfo', 'pageType'], form)
 | 
											
												
													
														|  |      const creativeTemplateId = Form.useWatch('creativeTemplateId', form)
 |  |      const creativeTemplateId = Form.useWatch('creativeTemplateId', form)
 | 
											
												
													
														|  |      const cardType: string[] = Form.useWatch('cardType', form)
 |  |      const cardType: string[] = Form.useWatch('cardType', form)
 | 
											
												
													
														|  |      const [cardData, setCardData] = useState<{ label: string, value: string, disabled?: boolean }[]>([])
 |  |      const [cardData, setCardData] = useState<{ label: string, value: string, disabled?: boolean }[]>([])
 | 
											
										
											
												
													
														|  | @@ -287,9 +289,9 @@ const CreativeConversionAssistant: React.FC<{ automaticSiteEnabled?: boolean, pu
 | 
											
												
													
														|  |      const barrageContent = useMemo(() => {
 |  |      const barrageContent = useMemo(() => {
 | 
											
												
													
														|  |          let barrage = creativeComponents?.barrage;
 |  |          let barrage = creativeComponents?.barrage;
 | 
											
												
													
														|  |          if (barrage) {
 |  |          if (barrage) {
 | 
											
												
													
														|  | -            return <Form.Item 
 |  | 
 | 
											
												
													
														|  | -                name={'creativeBarrageDTOS'} 
 |  | 
 | 
											
												
													
														|  | -                style={{ marginTop: 16, marginBottom: 0 }} 
 |  | 
 | 
											
												
													
														|  | 
 |  | +            return <Form.Item
 | 
											
												
													
														|  | 
 |  | +                name={'creativeBarrageDTOS'}
 | 
											
												
													
														|  | 
 |  | +                style={{ marginTop: 16, marginBottom: 0 }}
 | 
											
												
													
														|  |                  label={<strong>   弹幕{barrage.required ? '' : '(选填)'}</strong>}
 |  |                  label={<strong>   弹幕{barrage.required ? '' : '(选填)'}</strong>}
 | 
											
												
													
														|  |                  rules={[
 |  |                  rules={[
 | 
											
												
													
														|  |                      {
 |  |                      {
 | 
											
										
											
												
													
														|  | @@ -569,6 +571,38 @@ const CreativeConversionAssistant: React.FC<{ automaticSiteEnabled?: boolean, pu
 | 
											
												
													
														|  |          return null
 |  |          return null
 | 
											
												
													
														|  |      }, [creativeComponents?.floating_zone, floatingZoneSwitch, floatingZoneType, image])
 |  |      }, [creativeComponents?.floating_zone, floatingZoneSwitch, floatingZoneType, image])
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    /** 微信朋友首评论 */
 | 
											
												
													
														|  | 
 |  | +    const socialSkillContent = useMemo(() => {
 | 
											
												
													
														|  | 
 |  | +        if ((automaticSiteEnabled || siteSet.includes('SITE_SET_MOMENTS')) && ![717, 727].includes(creativeTemplateId)) {
 | 
											
												
													
														|  | 
 |  | +            const disabled = !["PAGE_TYPE_WECHAT_CHANNELS_PROFILE", "PAGE_TYPE_WECHAT_OFFICIAL_ACCOUNT_DETAIL"].includes(pageType)
 | 
											
												
													
														|  | 
 |  | +            return <Form.Item
 | 
											
												
													
														|  | 
 |  | +                name={['creativeFirstReplyDTO', 'text']}
 | 
											
												
													
														|  | 
 |  | +                label={<strong>   首评(选填)</strong>}
 | 
											
												
													
														|  | 
 |  | +                rules={[{
 | 
											
												
													
														|  | 
 |  | +                    required: false, validator: (rule, value) => {
 | 
											
												
													
														|  | 
 |  | +                        if (value) {
 | 
											
												
													
														|  | 
 |  | +                            if (!value.match(RegExp("^[^\\<\\>\\&'\\\"\\x08\\x09\\x0A\\x0D\\\\]+$"))) {
 | 
											
												
													
														|  | 
 |  | +                                return Promise.reject('请输入正确的首评')
 | 
											
												
													
														|  | 
 |  | +                            } else if (txtLength(value) > 30) {
 | 
											
												
													
														|  | 
 |  | +                                return Promise.reject('请输入正确的首评')
 | 
											
												
													
														|  | 
 |  | +                            }
 | 
											
												
													
														|  | 
 |  | +                            const result = extractAndFilterBracketsContent(value);
 | 
											
												
													
														|  | 
 |  | +                            if (result.extracted.length > 1) {
 | 
											
												
													
														|  | 
 |  | +                                return Promise.reject('表情数量不得超出: 1 个')
 | 
											
												
													
														|  | 
 |  | +                            }
 | 
											
												
													
														|  | 
 |  | +                        }
 | 
											
												
													
														|  | 
 |  | +                        return Promise.resolve()
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                }]}
 | 
											
												
													
														|  | 
 |  | +                help={disabled ? <span style={{ color: 'red' }}>只有【品牌形象】是公众号和视频号支持</span> : null}
 | 
											
												
													
														|  | 
 |  | +            >
 | 
											
												
													
														|  | 
 |  | +                <TextAideInput placeholder={'请输入首评'} disabled={disabled} style={{ width: 750 }} isShowAjax={false} maxTextLength={30} putInType={putInType} />
 | 
											
												
													
														|  | 
 |  | +            </Form.Item>
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        return null
 | 
											
												
													
														|  | 
 |  | +    }, [automaticSiteEnabled, siteSet, creativeTemplateId, pageType])
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      useEffect(() => {
 |  |      useEffect(() => {
 | 
											
												
													
														|  |          let data = [
 |  |          let data = [
 | 
											
												
													
														|  |              { label: '不使用', value: 'not', disabled: false },
 |  |              { label: '不使用', value: 'not', disabled: false },
 | 
											
										
											
												
													
														|  | @@ -645,6 +679,7 @@ const CreativeConversionAssistant: React.FC<{ automaticSiteEnabled?: boolean, pu
 | 
											
												
													
														|  |              {barrageContent}
 |  |              {barrageContent}
 | 
											
												
													
														|  |              {showDataContent}
 |  |              {showDataContent}
 | 
											
												
													
														|  |              {floatingZoneContent}
 |  |              {floatingZoneContent}
 | 
											
												
													
														|  | 
 |  | +            {socialSkillContent}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              {/* 选择视频素材 */}
 |  |              {/* 选择视频素材 */}
 | 
											
												
													
														|  |              {(selectVideoVisible && selectCloudData) && <SelectCloudNew
 |  |              {(selectVideoVisible && selectCloudData) && <SelectCloudNew
 |