9 Коммиты a41f38f3ad ... b142d7f973

Автор SHA1 Сообщение Дата
  yinxiangke b142d7f973 Merge branch 'dev-yxk' 2 месяцев назад
  zhangningning a296ef2cfb ``` 2 месяцев назад
  zhangningning 28cd79a0c8 ``` 2 месяцев назад
  zhangningning fe3a959249 ``` 2 месяцев назад
  zhangningning 80c7b8f22d ``` 2 месяцев назад
  zhangningning 99336ea1b7 ``` 2 месяцев назад
  zhangningning a20c4f2f10 ``` 2 месяцев назад
  zhangningning be70f48823 Merge branch 'master' of http://git.dgtis.com/zhangningning/ali_ai_learn_web 2 месяцев назад
  zhangningning e46234fa34 ``` 2 месяцев назад

+ 2 - 1
.env.development

@@ -8,6 +8,7 @@
 
 
 # 线上环境
-VITE_API_BASE_URL=http://47.104.167.40/prod-api/api
+# VITE_API_BASE_URL=http://47.104.167.40/prod-api/api
+VITE_API_BASE_URL=http://www.baomiai.com/prod-api/api
 
 

+ 1 - 1
.env.production

@@ -1 +1 @@
-VITE_API_BASE_URL=http://47.104.167.40/prod-api/api
+VITE_API_BASE_URL=http://www.baomiai.com/prod-api/api

+ 3 - 0
index.html

@@ -4,6 +4,9 @@
     <meta charset="UTF-8" />
     <link rel="icon" type="image/svg+xml" href="/vite.svg" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name="description" content="工作流 AI 学习平台">
+    <meta name="keywords" content="工作流, AI, 学习平台, 人工智能, 在线学习,爆米Ai,www.baomiai.com">
+    <meta name="robots" content="index, follow">
     <title></title>
      <!-- PayPal JS SDK 核心引入,替换为你的 Client ID -->
     <script src="https://www.paypal.com/sdk/js?client-id=AWTqiGF8Tcnuu_gnZzJ_k4a-LvPFj4IbUh98l2zCKxdngjCth3s2fwH0kcC5G-zjyD2t8ty67O1BV0N-&currency=USD"></script>

+ 48 - 0
src/components/FileUploader.vue

@@ -346,6 +346,54 @@ const handleBeforeUpload = (rawFile) => {
       return false
     }
   }
+  // 文件类型校验
+  if (props.accept) {
+    // 解析accept字符串,支持MIME类型和文件扩展名
+    const acceptTypes = props.accept.split(',').map(type => type.trim())
+    let isAcceptable = false
+    
+    // 获取文件的MIME类型和扩展名
+    const fileType = rawFile.type
+    const fileName = rawFile.name
+    const fileExt = fileName.substring(fileName.lastIndexOf('.')).toLowerCase()
+    
+    // 检查是否符合任何一个accept类型
+    for (const acceptType of acceptTypes) {
+      if (acceptType === '') continue
+      
+      // 检查MIME类型(如image/*、application/pdf)
+      if (acceptType.includes('/')) {
+        if (acceptType.endsWith('*')) {
+          // 通配符类型,如image/*
+          const mimePrefix = acceptType.substring(0, acceptType.indexOf('*'))
+          if (fileType.startsWith(mimePrefix)) {
+            isAcceptable = true
+            break
+          }
+        } else {
+          // 具体MIME类型,如application/pdf
+          if (fileType === acceptType) {
+            isAcceptable = true
+            break
+          }
+        }
+      } else if (acceptType.startsWith('.')) {
+        // 检查文件扩展名(如.jpg、.png)
+        if (fileExt === acceptType.toLowerCase()) {
+          isAcceptable = true
+          break
+        }
+      }
+    }
+    
+    if (!isAcceptable) {
+      DGTMessage.error(`${t('common.fileTypeNotAllow')} ${props.accept}`)
+      emit('error', {
+        message: `${t('common.fileTypeNotAllow')} ${props.accept}`
+      })
+      return false
+    }
+  }
 
   // 调用外部before-upload钩子
   return emit('before-upload', rawFile) !== false

+ 2 - 1
src/locales/en.js

@@ -121,6 +121,7 @@ export default {
     notFoundPage:"Sorry, the page you visited cannot be found!",
     addTags: 'New Tag',
     mibiShopPaypSuccessMsg:"Pay Success, Please wait for the seller to ship your order",
+    fileTypeNotAllow:"File type not allowed, only support upload",
   },
   login: {
     smsLogin: 'Captcha Login',
@@ -178,7 +179,7 @@ export default {
     workflowDescription:"Workflow Description",
     placeholderWorkflowDescription:"Please input workflow description",
     placeholderCoverImageUpload:"Please upload cover image",
-    supportBatchUpload:"Support batch upload files, max 5 files",
+    supportBatchUpload:"Support batch upload files, max 5 image files",
     priceSetting:"Price Setting",
     paySetting:"Pay Setting",
     paySettingTip:"Pay (Users need to pay to use)",

+ 2 - 1
src/locales/zh-CN.js

@@ -126,6 +126,7 @@ export default {
     readAndAgree:"我已阅读并同意",
     notFoundPage:"对不起,您访问的页面找不到啦!",
     mibiShopPaypSuccessMsg:"支付成功,请等待商家发货。",
+    fileTypeNotAllow:"文件类型不允许,仅支持上传",
   },
   login: {
     smsLogin: '验证码登录',
@@ -181,7 +182,7 @@ export default {
     workflowDescription:"工作流描述",
     placeholderWorkflowDescription:"请输入工作流描述",
     placeholderCoverImageUpload:"请上传封面图",
-    supportBatchUpload:"支持批量上传文件,最多只能上传 5 份文件",
+    supportBatchUpload:"支持批量上传文件,最多只能上传 5 份图片",
     priceSetting:"价格设置",
     paySetting:"付费设置",
     paySettingTip:"付费(用户需付费后使用)",

+ 2 - 2
src/pages/WorkflowAdd.vue

@@ -33,7 +33,7 @@
             </div>
             <div class="mt10">
               <el-form-item :label="$t('workflowTrade.workflowTitle')" prop="workflowTitle"  v-show="!isFullscreen">
-                <el-input v-model="ruleForm.workflowTitle" :placeholder="$t('workflowTrade.placeholderWorkflowTitle')"  maxlength="50"/>
+                <el-input v-model="ruleForm.workflowTitle" :placeholder="$t('workflowTrade.placeholderWorkflowTitle')"  maxlength="50" show-word-limit/>
               </el-form-item>
               <el-form-item :label="$t('workflowTrade.workflowCategory')" prop="categoryId3"  v-show="!isFullscreen">
                 <el-cascader 
@@ -51,7 +51,7 @@
               <el-form-item :label="$t('workflowTrade.workflowDescription')" prop="description"  v-show="!isFullscreen">
                 <el-input type="textarea" 
                 v-model="ruleForm.description" 
-                :autosize="{ minRows: 2 }"
+                :autosize="{ minRows: 5 }"
                 :placeholder="$t('workflowTrade.placeholderWorkflowDescription')"  
                 maxlength="500" show-word-limit/>
               </el-form-item>

+ 12 - 1
src/pages/order/orderConfirm.vue

@@ -48,7 +48,8 @@
             </div>
             <div class="flex_1 font_size18">
               <div>
-                <el-input-number v-model="orderInfo.orderAmt" :min="0" :max="1000" :step="1" class="w100" 
+                <!-- 只能输入正整数 -->
+                <el-input-number v-model="orderInfo.orderAmt" :min="0" :max="1000000" :step="1" class="w100" 
                 @change="handleOrderAmtChange"
                 />
               </div>
@@ -382,6 +383,16 @@ const pay_paypal = () => {
 
 // 计算汇率
 const handleOrderAmtChange = () => {
+  // 先验证输入值
+  if (orderInfo.orderAmt !== null && orderInfo.orderAmt !== undefined) {
+    // 确保为整数
+    orderInfo.orderAmt = Math.floor(Number(orderInfo.orderAmt));
+    
+    // 确保为正数
+    if (orderInfo.orderAmt <= 0) {
+      orderInfo.orderAmt = 1;
+    }
+  }
   if(orderInfo.orderAmt){
     calRate({
       orderType: orderInfo.orderType,

+ 1 - 1
src/pages/workflowTrade/workflowTrade.vue

@@ -103,7 +103,7 @@
                 <span class="font_size14">{{$t('common.signUpDeadline')}}:{{item.deadline}}</span>
               </div>
             </div>
-            <div class="font_size16 gray mt10">{{item.requirements || ''}}</div>
+            <div class="font_size16 gray mt10 line3">{{item.background || ''}}</div>
           </div>
           <div class="mt20">
             <div class="flex-between">

+ 2 - 2
src/pages/workflowTrade/workflowTradeAdd.vue

@@ -21,7 +21,7 @@
                   <span class="font_size16 bold">{{t('workflowTradeAdd.demandTitle')}}</span>
                   <span class="font_size14 gray999 ml20">{{t('workflowTradeAdd.demandTitleTip')}}</span>
                 </div>
-                <el-input v-model="ruleForm.title" :placeholder="t('workflowTradeAdd.placeholderDemandTitle')"  maxlength="50"/>
+                <el-input v-model="ruleForm.title" :placeholder="t('workflowTradeAdd.placeholderDemandTitle')"  maxlength="50" show-word-limit/>
               </el-form-item>
               <el-form-item label="" prop="categoryId3">
                 <div>
@@ -52,7 +52,7 @@
             </div>
             <div class="mt10">
               <el-form-item :label="$t('workflowTradeAdd.background')" prop="background">
-                <el-input v-model="ruleForm.background" :placeholder="t('workflowTradeAdd.placeholderBackground')"  maxlength="500" type="textarea" show-word-limit/>
+                <el-input v-model="ruleForm.background" :placeholder="t('workflowTradeAdd.placeholderBackground')"  maxlength="500" type="textarea" show-word-limit rows="7"/>
               </el-form-item>
               <el-form-item :label="$t('workflowTradeAdd.requirements')" prop="requirements">
                 <el-input v-model="ruleForm.requirements"