Explorar el Código

```
feat(workflow): 添加工作流需求发布功能

- 在FileUploader组件中添加gradient样式和large尺寸
- 添加工作流需求发布页面的路由配置和翻译
- 实现工作流需求发布页面的表单样式和功能
- 更新工作流交易页面的跳转路径
- 添加相关样式类和国际化翻译
```

zhangningning hace 2 días
padre
commit
f214192e04

+ 1 - 1
src/components/FileUploader.vue

@@ -37,7 +37,7 @@
       
       <template v-else>
         <slot name="trigger">
-          <el-button type="primary">
+          <el-button type="primary" class="gradient" size="large">
             <el-icon><Plus /></el-icon>
             <span class="ml10">{{ buttonText }}</span>
           </el-button>

+ 3 - 0
src/locales/en.js

@@ -28,6 +28,9 @@ export default {
   // 添加路由标题翻译
   route: {
     home: 'Home',
+    gongzuoliu_trade_add: 'Publish Workflow Demand',
+
+
 
     
     courseDetail: 'Course Detail',

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

@@ -29,6 +29,7 @@ export default {
   // 添加路由标题翻译
   route: {
     home: '首页',
+    gongzuoliu_trade_add: '发布工作流需求',
 
 
 

+ 11 - 19
src/pages/WorkflowAdd.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="workflow-add container-height">
     <Breadcrumb />
-    <el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" label-position="top">
+    <el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" label-position="top" class="page-add">
       <div class="padding16 bg_color_fff border_radius_10">
         <div class="gap10">
           <div class="line_vertical"></div>
@@ -83,11 +83,11 @@
         </el-form-item>
       </div>
       <div class="mt20">
-        <el-button type="primary" class="font_size16" @click="submitForm">
+        <el-button type="primary" class="font_size16 gradient" @click="submitForm"  size="large">
           <el-icon><Promotion /></el-icon>
           <span class="ml10">发布工作流</span>
         </el-button>
-        <el-button class="font_size16" @click="goBack">
+        <el-button class="font_size16" @click="goBack"  size="large">
           <el-icon><Close /></el-icon>
           <span class="ml10">取消</span>
         </el-button>
@@ -98,11 +98,14 @@
 
 <script setup>
 import { ref, onMounted, reactive } from 'vue'
-import { useRoute } from 'vue-router'
+import { useRoute, useRouter } from 'vue-router'
 import FileUploader from '@/components/FileUploader.vue'
 import DGTMessage from '@/utils/message'
 import BlockNoteEditor from '@/components/BlockNoteEditor.vue';
 const route = useRoute()
+const router = useRouter()
+
+
 
 // 从路由参数中获取 activePlatform
 const activePlatform = ref(route.query.activePlatform || '');
@@ -173,24 +176,13 @@ const handleUploadError = (error, rawFile, uploadedFiles) => {
 const handleUploadProgress = (event, file, uploadedFiles) => {
   console.log('上传进度:', event.percent)
 };
+
+const goBack = () => {
+  router.back()
+}
 </script>
 <style lang="scss">
 .workflow-add{
-  .inputBg{
-    background: #F5F7FA !important;
-  }
-  .el-form-item__label{
-    font-size: 16px;
-    color: #333333;
-    font-weight: 400;
-  }
-  .el-input__wrapper {
-    background: #F5F7FA !important;
-    .el-input__inner{
-      height: 44px !important;
-      line-height: 44px !important;
-    }
-  }
   .payType{
     background: #EAF0FF;
     border-radius: 8px 8px 8px 8px;

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

@@ -163,9 +163,8 @@
   const goWorkflowAdd = () => {
     //增加参数名称
     router.push({
-      path: `/search-platform/workflow-add`,
+      path: `/workflow-trade/workflow-trade-add`,
       query: {
-        activePlatform: activePlatform.value,
       }
     })
   };

+ 218 - 0
src/pages/workflowTrade/workflowTradeAdd.vue

@@ -0,0 +1,218 @@
+<template>
+  <div class="workflowTradeDetail container-height">
+    <Breadcrumb />
+    <div class="flex-column-center">
+      <div class="font_size30 bold">发布工作流需求</div>
+      <div class="gray font_size20">填写以下信息,让更多专业人士了解您的需求</div>
+    </div>
+    <div class="flex-between mt10">
+      <div class="flex_1 mr20">
+        <el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" label-position="top" class="page-add">
+          <!-- 基本信息 -->
+          <div class="padding16 bg_color_fff border_radius_10 mt10 box_shadow_card">
+            <div class="gap10">
+              <div class="line_vertical"></div>
+              <div class="font_size20 bold">基本信息</div>
+            </div>
+            <div class="mt10">
+              <el-form-item label="" prop="name">
+                <div>
+                  <span class="color_required font_size16">*</span>
+                  <span class="font_size16 bold">需求标题</span>
+                  <span class="font_size14 gray999 ml20">一个好的标题能吸引更多专业人士关注</span>
+                </div>
+                <el-input v-model="ruleForm.name" placeholder="请输入工作流标题"  maxlength="50"/>
+              </el-form-item>
+              <el-form-item label="" prop="name">
+                <div>
+                  <span class="color_required font_size16">*</span>
+                  <span class="font_size16 bold">工作流类型</span>
+                  <span class="font_size14 gray999 ml20">选择最贴合的工作流分类</span>
+                </div>
+                <el-input v-model="ruleForm.name" placeholder="请输入工作流标题"  maxlength="50"/>
+              </el-form-item>
+            </div>
+          </div>
+          <!-- 详细内容 -->
+          <div class="padding16 bg_color_fff border_radius_10 mt10 box_shadow_card">
+            <div class="gap10">
+              <div class="line_vertical"></div>
+              <div class="font_size20 bold">详细内容</div>
+            </div>
+            <div class="mt10">
+              <el-form-item label="需求背景" prop="name">
+                <el-input v-model="ruleForm.name" placeholder="说明您的需求来源和目的"  maxlength="500" type="textarea" show-word-limit/>
+              </el-form-item>
+              <el-form-item label="具体要求" prop="name">
+                <el-input v-model="ruleForm.name" 
+                rows="7"
+                placeholder="详细描述功能要求、技术要求等(50-2000字)
+建议分点说明:
+1.功能需求
+2.技术要求
+3.经验要求
+4.其他说明
+                "  maxlength="2000" type="textarea" show-word-limit/>
+              </el-form-item>
+            </div>
+          </div>
+          <!-- 项目信息 -->
+          <div class="padding16 bg_color_fff border_radius_10 mt10 box_shadow_card">
+            <div class="gap10">
+              <div class="line_vertical"></div>
+              <div class="font_size20 bold">项目信息</div>
+            </div>
+            <div class="mt10">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="" prop="name">
+                    <div>
+                      <span class="color_required font_size16">*</span>
+                      <span class="font_size16 bold">预算下限(元)</span>
+                      <span class="font_size14 gray999 ml20">选填,有助于吸引合适的服务者</span>
+                    </div>
+                    <el-input v-model="ruleForm.name" placeholder="最低预算"  maxlength="11" type="number" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="" prop="name">
+                    <div>
+                      <span class="color_required font_size16">*</span>
+                      <span class="font_size16 bold">预算上限(元)</span>
+                      <span class="font_size14 gray999 ml20">选填,有助于吸引合适的服务者</span>
+                    </div>
+                    <el-input v-model="ruleForm.name" placeholder="最高预算"  maxlength="11" type="number" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-form-item label="报名截止时间" prop="name">
+                <!-- 只能选择之后的时间 -->
+                <el-date-picker
+                  v-model="ruleForm.name"
+                  type="date"
+                  value-format="YYYY-MM-DD"
+                  placeholder="选择报名截止时间"
+                  :disabled-date="time => time.getTime() < Date.now() - 8.64e7"
+                />
+              </el-form-item>
+            </div>
+          </div>
+          <!-- 联系方式 -->
+          <div class="padding16 bg_color_fff border_radius_10 mt10 box_shadow_card">
+            <div class="gap10">
+              <div class="line_vertical"></div>
+              <div class="font_size20 bold">联系方式</div>
+            </div>  
+            <div class="mt10">
+              <el-form-item label="手机号" prop="name">
+                <el-input v-model="ruleForm.name" placeholder="请输入手机号"  maxlength="11" type="number" />
+              </el-form-item>
+              <el-form-item label="微信">
+                <el-input v-model="ruleForm.name" placeholder="请输入手机号"  maxlength="50"/>
+              </el-form-item>
+              <el-form-item label="邮箱">
+                <el-input v-model="ruleForm.name" placeholder="请输入手机号"  maxlength="50"/>
+              </el-form-item>
+            </div>
+          </div>
+          <div class="mt20">
+            <el-button type="primary" class="font_size16 gradient" @click="submitForm" size="large">
+              <el-icon><Promotion /></el-icon>
+              <span class="ml10">发布需求</span>
+            </el-button>
+            <el-button class="font_size16" @click="goBack"  size="large">
+              <el-icon><Close /></el-icon>
+              <span class="ml10">取消</span>
+            </el-button>
+          </div>
+        </el-form>
+      </div>
+      <div class="workflowTradeDetail_right detail_right">
+        <div class="padding16 bg_color_fff border_radius_16 box_shadow_card">
+          <div class="gap10">
+            <div class="line_vertical"></div>
+            <div class="font_size20 bold">发布提示</div>
+          </div>
+          <!-- 无序列表 -->
+          <ul class="font_size16">
+            <li>标题要简洁明了,突出核心需求</li>
+            <li>详细描述需求背景和具体要求</li>
+            <li>明确交付标准和验收方式</li>
+            <li>合理设置预算范围</li>
+            <li>添加相关标签提高匹配度</li>
+          </ul>
+        </div>
+        <div class="padding16 bg_color_fff border_radius_16 mt20 box_shadow_card">
+          <div class="gap10">
+            <div class="line_vertical"></div>
+            <div class="font_size20 bold">发布规则</div>
+          </div>
+          <!-- 有序列表 -->
+          <ol class="font_size16">
+            <li>这里是发布规则文字说明</li>
+            <li>这里是发布规则文字说明</li>
+            <li>这里是发布规则文字说明</li>
+            <li>这里是发布规则文字说明</li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+  import riliIcon from '@/assets/imgs/rili.png'
+  import biaoqianIcon from '@/assets/imgs/biaoqian.png'
+  import yuangong from '@/assets/imgs/yuangong.png'
+  import zaixianbaomingIcon from '@/assets/imgs/zaixianbaoming.png'
+  import dianhuaIcon from '@/assets/imgs/dianhua.png'
+  import weixinIcon from '@/assets/imgs/weixin.png'
+  import youxiangIcon from '@/assets/imgs/youxiang.png'
+
+
+  import { useRouter, useRoute } from 'vue-router'
+  const router = useRouter()
+  const route = useRoute()
+  console.log(router,route)
+  import { ref, computed, reactive } from 'vue'
+  import { useAppStore } from '@/pinia/appStore'
+  const appStore = useAppStore()
+
+  //获取参数
+  const query = route.query;
+  // 表单实例
+const ruleFormRef = ref(null)
+const ruleForm = reactive({
+  name: '',
+})
+// 校验规则
+const rules = reactive({
+  name: [
+    { required: true, message: '请输入需求标题', trigger: 'blur' },
+  ],
+});
+
+// 提交表单
+const submitForm = async () => {
+  await ruleFormRef.value.validate((valid, fields) => {
+    console.log(valid, fields)
+    if (!valid) {
+      DGTMessage.warning(fields.name[0].message)
+      return
+    }
+    DGTMessage.success('表单提交成功')
+  })
+};
+const goBack = () => {
+  router.back()
+}
+
+</script>
+
+<style scoped lang="scss">
+  .workflowTradeDetail{
+    .workflowTradeDetail_right{
+    }
+  }
+
+</style>

+ 5 - 17
src/pages/workflowTrade/workflowTradeDetail.vue

@@ -43,7 +43,7 @@
             <div class="line_vertical"></div>
             <div class="font_size20 bold">联系方式</div>
           </div>
-          <div class="contactInfo mt10 padding16 flex-center-between">
+          <div class="contactInfo_bg mt10 padding16 flex-center-between">
             <div class="flex_1 flex-center">
               <div class="gap10">
                 <img :src="dianhuaIcon" alt="员工" style="width: 24px; height: 24px;">
@@ -65,13 +65,13 @@
           </div>
         </div>
       </div>
-      <div class="workflowTradeDetail_right">
+      <div class="workflowTradeDetail_right detail_right">
         <div class="padding16 bg_color_fff border_radius_16 box_shadow_card">
           <div class="flex-column-center">
             <el-avatar :size="80" :src="appStore.avatar" />
             <div class="font_size16 bold mt10">张三</div>
           </div>
-          <div class="totalInfo mt20 flex-center-between">
+          <div class="totalInfo mt20 flex-center-between contactInfo_bg">
             <div class="flex-column-center flex_1 border_right">
               <div class="font_size24 bold">24</div>
               <div class="font_size14 mt10">发布需求数</div>
@@ -130,33 +130,21 @@
   const appStore = useAppStore()
 
   //获取参数
-  const query = route.query
-  const activePlatform = ref(query.activePlatform || '')
-  //获取当前路由路径
-  // const currentPath = ref(router.currentRoute.value.path)
-  const isChildRoute = computed(() => {
-    return route.matched.length > 1
-  });
+  const query = route.query;
+
 
 </script>
 
 <style scoped lang="scss">
   .workflowTradeDetail{
     .workflowTradeDetail_right{
-      width: 410px;
       .totalInfo{
-        background: #F5F7FA;
-        border-radius: 8px 8px 8px 8px;
         padding: 13px;
         .border_right{
           border-right: 1px solid #D8D8D8;
         }
       }
     }
-    .contactInfo{
-      background: #F5F7FA;
-      border-radius: 8px 8px 8px 8px;
-    }
   }
 
 </style>

+ 6 - 0
src/router/index.js

@@ -64,6 +64,12 @@ const routes = [
         name: 'WorkflowTradeDetail',
         component: () => import('@/pages/workflowTrade/workflowTradeDetail.vue'),
         meta: { title: '' }
+      },
+      {
+        path: 'workflow-trade-add',
+        name: 'WorkflowTradeAdd',
+        component: () => import('@/pages/workflowTrade/workflowTradeAdd.vue'),
+        meta: { title: 'route.gongzuoliu_trade_add' }
       }
     ]
   },

+ 40 - 0
src/styles/index.scss

@@ -52,6 +52,13 @@ body{
 	background-size: 100% 100%;
 }
 
+.detail_right{
+	width: 410px;
+}
+.contactInfo_bg{
+	background: #F5F7FA;
+	border-radius: 8px 8px 8px 8px;
+}
 // 3. 公共样式类(全局可复用)
 // 容器宽度限制(统一页面最大宽度,居中显示)
 .container {
@@ -545,6 +552,9 @@ wx-image{
 .font_size18{
 	font-size: 18px;
 }
+.font_size16{
+	font-size: 16px;
+}
 .font_size14{
 	font-size: 14px;
 }
@@ -563,6 +573,10 @@ wx-image{
 .color_price{
 	color: #E43434;
 }
+.color_required{
+	color: #f56c6c;
+	margin-right: 5px;
+}
 .color_vip{
 	color: #fee189;
 }
@@ -634,4 +648,30 @@ wx-image{
 		transform: translateY(-5px);
 		box-shadow: 0 5px 15px rgba(0,0,0,0.1);
 	}
+}
+
+.page-add{
+  .inputBg{
+    background: #F5F7FA !important;
+  }
+  .el-form-item__label{
+    font-size: 16px;
+    color: #333333;
+    font-weight: bold;
+  }
+  .el-input__wrapper {
+    background: #F5F7FA !important;
+    .el-input__inner{
+      height: 44px !important;
+      line-height: 44px !important;
+    }
+  }
+	.el-date-editor.el-input{
+		height: 44px !important;
+    line-height: 44px !important;
+		width: 100% !important;
+	}
+	.el-textarea__inner{
+		background: #F5F7FA !important;
+	}
 }