소스 검색

3.0 修改版本

bding 10 달 전
부모
커밋
13fda004b9

+ 1 - 1
scripts/start.js

@@ -44,7 +44,7 @@ if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {
 }
 
 // Tools like Cloud9 rely on this.
-const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;
+const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 5000;
 const HOST = process.env.HOST || '0.0.0.0';
 
 if (process.env.HOST) {

+ 51 - 1
src/Column/Column.service.ts

@@ -1,6 +1,6 @@
 import NewAxiosInstanceFunc from '../Service/NewAxiosInstance'
 import { INewResponse } from '../Service/INewResponse'
-import { IPaging } from 'Material/Material.service'
+import { IGoodsListItem, IPaging } from 'Material/Material.service'
 
 export interface IColumnAuthorList {
   BgImg: string
@@ -69,6 +69,56 @@ export interface IUpdateParams {
   NickName: string
 }
 export interface IColumnDetail {
+  CompanyTags: string[] // 公司标签
+  IndustryTags: string[] // 行业标签
+  SpecialColumnId: number
+  BgImg: string
+  CollectNum: number
+  Content: string
+  ContentHasImg: number
+  CreateTime: string
+  DocUrl: string
+  Docs: IDocsList[]
+  HeadImg: string
+  Id: number
+  ImgUrl: string
+  ImgUrlList: string[]
+  Introduction: string
+  IsCollect: number
+  Label: string
+  Mobile: string
+  ModifyTime: string
+  MyCollectNum: number
+  NickName: string
+  PublishTime: string
+  RealName: string
+  Reason: string
+  SpecialName: string
+  Status: number // 1:未发布,2:审核中 3:已发布 4:驳回
+  TagList: string[]
+  Tags: string
+  Title: string
+  Type: number //类型1:笔记,2:观点
+  UserId: number
+  Pv: number
+  IsApprovalAdmin: boolean // 是否是审批人员
+  IsFollowAuthor: boolean // 是否已关注
+  ShareImg: string //分享图片
+  GoodsList: IGoodsListItem[] // 商品信息
+  HasPermission: number //1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下(ficc),3:无该品类权限,已提交过申请,4:无该品类权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请
+  IsCompanyApply: boolean // 机构是否申请过试用
+  IsNeedBusinessCard: boolean // 是否需要上传名片
+  IsResearch: boolean // 是否是买方研选
+  IsResearchSpecial: boolean // 是否属于特殊的研选
+  IsShowWxPay: boolean // 是否展示微信支付
+  OrderCode: string // 订单号
+  PayTimeCountdown: number // 支付倒计时
+  PopupMsg: string //权限弹窗信息
+  PopupPriceMsg: string //价格弹窗信息
+  Detail: IActivityDetialBase
+}
+
+export interface IActivityDetialBase {
   CompanyTags: string[] // 公司标签
   IndustryTags: string[] // 行业标签
   SpecialColumnId: number

+ 47 - 17
src/Column/ColumnDetail.tsx

@@ -7,9 +7,13 @@ import ColumnContent from './components/ColumnContent'
 import ValidateEmpty from 'components/ValidateEmpty'
 import { WebNotPublish } from 'components/Empty'
 import useTimeCount from 'Material/hooks/useTimeCount'
-import { INewPermissionType } from 'Material/components/NoPermission'
+import NoPermission, { INewPermissionType, ISpecialType, ITryType } from 'Material/components/NoPermission'
 import { setWxShare } from 'utils/wxConfig'
 import styles from './css/ColumnDetail.module.scss'
+import { useMedia } from 'Context/Media/MediaContext'
+
+import PayNoPermission from 'Material/components/PayNoPermission'
+
 export enum ColumnHasPermissionType {
   OK = 1,
   NO = 2
@@ -23,38 +27,64 @@ interface IColumnDetailProps {
 const ColumnDetail: React.FC<IColumnDetailProps> = props => {
   const login2p = useLogin2p()
   // 详情
-  const { data, loading, refresh } = useRequest(ColumnService.getColumnDetail, {
+  const {
+    data,
+    loading,
+    refresh: refreshArcticleDetail
+  } = useRequest(ColumnService.getColumnDetail, {
     defaultParams: [props.articleId, sessionStorage.getItem('invite_code') || login2p.inviteCode],
     formatResult: response => response.data.Data,
     onSuccess: res => {
       setWxShare(res.Title, '', res.ShareImg)
     }
   })
-
+  const media = useMedia()
   useTimeCount(
     props.articleId,
     'column',
     (data?.HasPermission && data?.HasPermission === INewPermissionType.OK) || false
   )
+  const handleToRefresh = () => {
+    refreshArcticleDetail()
+  }
   const formatRender = (data: IColumnDetail) => {
     // 买方研选网页版1.0,专栏详情页不需要判断权限,只要登录就能查看
-    // if (data.HasPermission !== ColumnHasPermissionType.OK) {
-    //   return (
-    //     <div className={`${styles['columndetail-page']}`}>
-    //       <NoPermission
-    //         hasPermission={data?.HasPermission}
-    //         detailID={data.Id}
-    //         specialType={ISpecialType.YanxuanSpecial}
-    //         tryType={ITryType.YanxuanSpecial}
-    //         border={true}
-    //       />
-    //     </div>
-    //   )
-    // }
+    if (data.HasPermission !== ColumnHasPermissionType.OK) {
+      return (
+        <div className={styles['art-nopower-bg']}>
+          {data?.IsShowWxPay && !media.isSmallMax ? ( // 暂时这么写
+            <PayNoPermission
+              dataInfo={data as IColumnDetail}
+              tryType={ITryType.YanxuanSpecial}
+              border={true}
+              onRefresh={handleToRefresh}
+            />
+          ) : (
+            <NoPermission
+              hasPermission={data?.HasPermission}
+              detailID={data.Id}
+              specialType={ISpecialType.YanxuanSpecial}
+              tryType={ITryType.YanxuanSpecial}
+              border={true}
+            />
+          )}
+        </div>
+
+        // <div className={`${styles['columndetail-page']}`}>
+        //   <NoPermission
+        //     hasPermission={data?.HasPermission}
+        //     detailID={data.Id}
+        //     specialType={ISpecialType.YanxuanSpecial}
+        //     tryType={ITryType.YanxuanSpecial}
+        //     border={true}
+        //   />
+        // </div>
+      )
+    }
     if (login2p.userInfo?.UserId === data.UserId || data.IsApprovalAdmin || data.Status === 3) {
       return (
         <div className={`${styles['columndetail-page']}`}>
-          <ColumnContent detail={data as IColumnDetail} onCollect={refresh} />
+          <ColumnContent detail={data as IColumnDetail} onCollect={handleToRefresh} />
         </div>
       )
     }

+ 10 - 0
src/Material/Material.service.ts

@@ -353,5 +353,15 @@ export const MaterialService = {
       url: `/order/addByActivity`,
       method: 'post',
       data: { GoodsId, SourceId, InviteShareCode }
+    }),
+  postCreateOrderByYanXuan: (
+    GoodsId: number,
+    SourceId: number,
+    InviteShareCode: string | null
+  ): INewResponse<IOrderInfoRes> =>
+    NewAxiosInstanceFunc({
+      url: `/order/addByYanxuanspecial`,
+      method: 'post',
+      data: { GoodsId, SourceId, InviteShareCode }
     })
 }

+ 2 - 2
src/Material/components/ApplyResult.tsx

@@ -37,7 +37,7 @@ const ApplyResult: React.FC<IApplyPermissionProps> = props => {
       footer={null}
     >
       <div className={styles['paymodel-content-wrapper']}>
-        {info.Source === 'article' && (
+        {(info.Source === 'article' || info.Source === 'yanxuanspecial') && (
           <>
             <div className="paymodel-title">
               {info.OrderStatus === EOrderStatus.Payed ? (
@@ -77,7 +77,7 @@ const ApplyResult: React.FC<IApplyPermissionProps> = props => {
       <div className={styles['paymodel-footer-wrapper']}>
         {}
         <NButton type="primary" onClick={handleToClose} size="large" className="pay-btn">
-          {info.Source === 'article' ? '关闭' : '返回活动页'}
+          {info.Source === 'article' || info.Source === 'yanxuanspecial' ? '关闭' : '返回活动页'}
         </NButton>
       </div>
     </Modal>

+ 2 - 2
src/Material/components/PayNoPermission.tsx

@@ -14,9 +14,9 @@ import { PayType } from './BuyModel'
 import { IActivityTypeDetailRes } from 'Activity/Activity.service'
 import PayProcessModel from './PayProcessModel'
 import styles from '../css/NoPermission.module.scss'
-
+import { IColumnDetail } from 'Column/Column.service'
 interface IPayNoPermissionProps {
-  dataInfo: IArcticleInfo | IActivityTypeDetailRes
+  dataInfo: IArcticleInfo | IActivityTypeDetailRes | IColumnDetail
   tryType: ITryType
   border?: boolean
   onRefresh?: () => void // 刷新页面

+ 43 - 4
src/Material/components/PayProcessModel.tsx

@@ -12,9 +12,10 @@ import QRCodeModel from './QRCodeModel'
 import UploadInfoModel from './UploadInfoModel'
 import { IActivityTypeDetailRes } from 'Activity/Activity.service'
 import styles from '../css/NoPermission.module.scss'
+import { IColumnDetail } from 'Column/Column.service'
 
 interface IPayProcessModelProps {
-  dataInfo: IArcticleInfo | IActivityTypeDetailRes
+  dataInfo: IArcticleInfo | IActivityTypeDetailRes | IColumnDetail
   tryType: ITryType
   open?: boolean // 是否打开支付流程弹框
   applyTrial?: boolean // 是否申请试用
@@ -47,6 +48,18 @@ const PayProcessModel: React.FC<IPayProcessModelProps> = props => {
       }
     }
   )
+  // 报告畅读卡购买,创建订单
+  const { data: yanxuanOrderInfo, run: postCreateOrderByYanXuan } = useRequest(
+    MaterialService.postCreateOrderByYanXuan,
+    {
+      manual: true,
+      formatResult: response => response.data,
+      onSuccess: res => {
+        // 订单创建成功打开支付二维码弹框
+        res.Success ? setVisibleOrderCode(true) : message.error(res.Msg || res.ErrMsg)
+      }
+    }
+  )
   // 活动报名购买,创建订单
   const { data: activityOrderInfo, run: postCreateOrderByActivity } = useRequest(
     MaterialService.postCreateOrderByActivity,
@@ -115,6 +128,14 @@ const PayProcessModel: React.FC<IPayProcessModelProps> = props => {
         sessionStorage.getItem('invite_code')
       )
     }
+    // --------
+    if (tryType === ITryType.YanxuanSpecial) {
+      postCreateOrderByYanXuan(
+        wantBuyGoodsId,
+        (dataInfo as IColumnDetail).Detail.Id,
+        sessionStorage.getItem('invite_code')
+      )
+    }
     if (tryType === ITryType.Activity) {
       postCreateOrderByActivity(
         wantBuyGoodsId,
@@ -153,6 +174,9 @@ const PayProcessModel: React.FC<IPayProcessModelProps> = props => {
         sessionStorage.getItem('invite_code')
       )
     }
+    if (tryType === ITryType.YanxuanSpecial) {
+      postCreateOrderByYanXuan(GoodsId, (dataInfo as IColumnDetail).Detail.Id, sessionStorage.getItem('invite_code'))
+    }
     if (tryType === ITryType.Activity) {
       postCreateOrderByActivity(
         GoodsId,
@@ -179,6 +203,8 @@ const PayProcessModel: React.FC<IPayProcessModelProps> = props => {
       const detailId =
         tryType === ITryType.Article
           ? (dataInfo as IArcticleInfo).Detail.ArticleId
+          : tryType === ITryType.YanxuanSpecial
+          ? (dataInfo as IColumnDetail).Detail.Id
           : (dataInfo as IActivityTypeDetailRes).Detail.ActivityId
       postApplyTry({ ApplyMethod: 1, DetailId: detailId, TryType: tryType })
       return
@@ -217,9 +243,20 @@ const PayProcessModel: React.FC<IPayProcessModelProps> = props => {
     <>
       <QRCodeModel
         visible={visibleOrderCode}
-        codeUrl={articleOrderInfo?.Data.CodeUrl || activityOrderInfo?.Data.CodeUrl || ''}
-        orderCode={articleOrderInfo?.Data.OrderCode || activityOrderInfo?.Data.OrderCode || ''}
-        countDown={articleOrderInfo?.Data.PayTimeCountdown || activityOrderInfo?.Data.PayTimeCountdown}
+        codeUrl={
+          yanxuanOrderInfo?.Data.CodeUrl || articleOrderInfo?.Data.CodeUrl || activityOrderInfo?.Data.CodeUrl || ''
+        }
+        orderCode={
+          yanxuanOrderInfo?.Data.OrderCode ||
+          articleOrderInfo?.Data.OrderCode ||
+          activityOrderInfo?.Data.OrderCode ||
+          ''
+        }
+        countDown={
+          articleOrderInfo?.Data.PayTimeCountdown ||
+          activityOrderInfo?.Data.PayTimeCountdown ||
+          yanxuanOrderInfo?.Data.PayTimeCountdown
+        }
         onCloseModel={handleCloseCode}
         onSendPayResult={handleDoPayResult}
       />
@@ -241,6 +278,8 @@ const PayProcessModel: React.FC<IPayProcessModelProps> = props => {
         detailID={
           tryType === ITryType.Article
             ? (dataInfo as IArcticleInfo).Detail.ArticleId
+            : tryType === ITryType.YanxuanSpecial
+            ? (dataInfo as IColumnDetail).Detail.Id
             : (dataInfo as IActivityTypeDetailRes).Detail.ActivityId
         }
         tryType={tryType}