Sfoglia il codice sorgente

Merge branch 'master' of http://47.103.92.60:3003/skyversation/sq_manage.git

wdq 2 settimane fa
parent
commit
0701cd7ee0

+ 2 - 1
.gitignore

@@ -1,7 +1,8 @@
 .DS_Store
 node_modules
 /dist
-
+/harness
+AGENTS.md
 
 # local env files
 .env.local

BIN
favicon.ico


BIN
favicon2.ico


BIN
public/favicon.ico


BIN
public/favicon2.ico


BIN
public/static/image/logo.png


+ 5 - 2
src/layouts/MainLayout.vue

@@ -3,7 +3,8 @@
     <!-- 左侧菜单 -->
     <aside class="sidebar">
       <div class="brand">
-        <div class="brand-icon">申</div>
+        <!-- <div class="brand-icon">申</div> -->
+         <div class="brand-icon"><img :src="logo" alt="logo" style="width: 40px; height: 40px;" /></div>
         <div>
           <strong>申勤物业</strong>
           <span>数字化平台</span>
@@ -76,6 +77,8 @@ import { ElMessage } from 'element-plus'
 import { useUserStore } from '@/stores/user'
 import { UserFilled } from '@element-plus/icons-vue'
 
+const logo = new URL('/static/image/logo.png', import.meta.url).href
+
 const userStore = useUserStore()
 const router = useRouter()
 const userName = "徐天炜"
@@ -162,7 +165,7 @@ const handleLogout = () => {
 .brand-icon {
   width: 36px;
   height: 36px;
-  background: var(--primary);
+  /* background: var(--primary); */
   border-radius: 8px;
   color: #fff;
   display: flex;

+ 3 - 1
src/views/bidPreparation/RenewalExpireDetail.vue

@@ -1004,8 +1004,10 @@ const confirmTask = async (task: any) => {
         finishBidOption.value = res
         if(task.type != 2){
           dialogFinishBidVisible.value = true
+          dialogFinishBidVisible2.value = false
         }else{
-         dialogFinishBidVisible2.value = true
+          dialogFinishBidVisible2.value = true
+          dialogFinishBidVisible.value = false
         }
       }else{
         finishBidOption.value = []

+ 66 - 59
src/views/bidResult/BidResult.vue

@@ -92,77 +92,84 @@
               <el-option v-for="item in finishProjects" :selected="item.id == selectedBid" :key="item.id" :label="item.c_xmmc" :value="item" />
             </el-select>
         </div>
-        <div class="result-banner" :class="{ lost: !showWin }">
-          <div>
-            <span style="font-size: large;font-weight: bold;">{{ showWin ? '🎉 中标' : '😔 未中标' }} </span> · <span>{{jkObject.c_xmmc}}</span>
-            <!-- {{jkObject.project?.c_winning_suppliers || '未中标'}} -->
-            <p>{{ showWin ? '恭喜您的标书在本次招标中脱颖而出!' : '请再接再厉,下次一定成功!' }} · 结果发布:{{ jkObject.project?.c_publish_time || '2025-07-11' }} · 中标单位:上海申勤物业管理服务有限公司</p> 
-          </div>
+        
+        <div class="empty-state" v-if="finishProjects.length < 1">
+          <span class="empty-icon">🔍</span>
+          <p>暂无数据</p>
         </div>
 
-        <!-- <div class="card">
-          <div class="card-head">中标结果详情</div>
-          <div class="card-body">
-            <dl class="info info-wide">
-              <dt>项目名称</dt>
-              <dd>XX商业综合体物业管理服务</dd>
-              <dt>中标金额</dt>
-              <dd>¥5,000,000 /年</dd>
-              <dt>服务期限</dt>
-              <dd>2026年7月1日 - 2029年6月30日</dd>
-              <dt>开标时间</dt>
-              <dd>2026年6月20日 14:00</dd>
-            </dl>
-          </div>
-        </div> -->
-
-        <div class="card">
-          <div class="card-head">中标结果确认</div>
-          <div class="card-body markdown-container">
-            
-            <!-- <div class="markdown-content"  v-html="markdownContent"></div> -->
-           <div class="markdown-content" v-if="jkObject.c_gljg" v-html="markdownContent"></div>
-           <div class="markdown-content"v-else>人工处理结果:<span style="cursor: pointer;color: var(--primary);"  @click="handleOpenPageClick()">点击查看中标结果详情</span></div>
+        <div v-if="finishProjects.length > 0">
+          <div class="result-banner" :class="{ lost: !showWin }">
+            <div>
+              <span style="font-size: large;font-weight: bold;">{{ showWin ? '🎉 中标' : '😔 未中标' }} </span> · <span>{{jkObject.c_xmmc}}</span>
+              <!-- {{jkObject.project?.c_winning_suppliers || '未中标'}} -->
+              <p>{{ showWin ? '恭喜您的标书在本次招标中脱颖而出!' : '请再接再厉,下次一定成功!' }} · 结果发布:{{ jkObject.project?.c_publish_time || '2025-07-11' }} · 中标单位:上海申勤物业管理服务有限公司</p> 
+            </div>
           </div>
-          <div style="padding: 20px;" >
-            <el-button type="primary" class="btn enter-btn" @click="handleConfirmBidPush" :disabled="jkObject.c_sfts">确认中标 · 一键推送</el-button>
 
-            <el-button type="primary" class="btn enter-btn" @click="openFileForm('1')">上传合同</el-button>
-            <el-button type="primary" class="btn enter-btn" @click="openFileForm('2')">上传投标文件</el-button>
-            <el-button type="primary" class="btn enter-btn" @click="openFileForm('3')">上传采购资料</el-button>
-          </div>
-        </div>
+          <!-- <div class="card">
+            <div class="card-head">中标结果详情</div>
+            <div class="card-body">
+              <dl class="info info-wide">
+                <dt>项目名称</dt>
+                <dd>XX商业综合体物业管理服务</dd>
+                <dt>中标金额</dt>
+                <dd>¥5,000,000 /年</dd>
+                <dt>服务期限</dt>
+                <dd>2026年7月1日 - 2029年6月30日</dd>
+                <dt>开标时间</dt>
+                <dd>2026年6月20日 14:00</dd>
+              </dl>
+            </div>
+          </div> -->
 
-        <div class="panel-card" style="margin-bottom: 16px;">
-            <div class="card-header">
-              <span class="card-title">推送预览</span>
-              <span :class="['tag', pushStartsOptions.done ? 'tag-success': 'tag-warn']" style="float: right;">{{pushStartsOptions.done ? '已完成' : '待推送'}}</span>
+          <div class="card">
+            <div class="card-head">中标结果确认</div>
+            <div class="card-body markdown-container">
+              
+              <!-- <div class="markdown-content"  v-html="markdownContent"></div> -->
+            <div class="markdown-content" v-if="jkObject.c_gljg" v-html="markdownContent"></div>
+            <div class="markdown-content"v-else>人工处理结果:<span style="cursor: pointer;color: var(--primary);"  @click="handleOpenPageClick()">点击查看中标结果详情</span></div>
             </div>
-            <div class="card-body">
-                <div class="push-grid">
-                  <div 
-                    v-for="item in pushStartsOptions.data" 
-                    :key="item.name"
-                    :class="['push-item', { done: pushStartsOptions.done }]"
-                  >
-                    <strong :style="{'color': pushStartsOptions.done ? '' : 'var(--text3)'}">{{ item.name }}</strong>
-                    <span :style="{'color': pushStartsOptions.done ? '' : 'var(--text3)'}">{{ item.desc }}</span><br/>
-                    <span v-if="pushStartsOptions.done" style="color: var(--text3);">{{ moment(item.time).format('YYYY-MM-DD HH:mm') }}</span>
-                  </div>
-                </div>
+            <div style="padding: 20px;" >
+              <el-button type="primary" class="btn enter-btn" @click="handleConfirmBidPush" :disabled="jkObject.c_sfts">确认中标 · 一键推送</el-button>
+
+              <el-button type="primary" class="btn enter-btn" @click="openFileForm('1')">上传合同</el-button>
+              <el-button type="primary" class="btn enter-btn" @click="openFileForm('2')">上传投标文件</el-button>
+              <el-button type="primary" class="btn enter-btn" @click="openFileForm('3')">上传采购资料</el-button>
             </div>
           </div>
 
-        <div class="card">
-          <div class="card-head">中标流程</div>
-          <div class="card-body">
-            <ul class="timeline">
-              <li class="done" v-for="item in jkObject.c_lcsjx">{{moment(item.create_time).format('YYYY-MM-DD')}} · {{item.desc}} · {{item.username}}</li>
-            </ul>
+          <div class="panel-card" style="margin-bottom: 16px;">
+              <div class="card-header">
+                <span class="card-title">推送预览</span>
+                <span :class="['tag', pushStartsOptions.done ? 'tag-success': 'tag-warn']" style="float: right;">{{pushStartsOptions.done ? '已完成' : '待推送'}}</span>
+              </div>
+              <div class="card-body">
+                  <div class="push-grid">
+                    <div 
+                      v-for="item in pushStartsOptions.data" 
+                      :key="item.name"
+                      :class="['push-item', { done: pushStartsOptions.done }]"
+                    >
+                      <strong :style="{'color': pushStartsOptions.done ? '' : 'var(--text3)'}">{{ item.name }}</strong>
+                      <span :style="{'color': pushStartsOptions.done ? '' : 'var(--text3)'}">{{ item.desc }}</span><br/>
+                      <span v-if="pushStartsOptions.done" style="color: var(--text3);">{{ moment(item.time).format('YYYY-MM-DD HH:mm') }}</span>
+                    </div>
+                  </div>
+              </div>
+            </div>
+
+          <div class="card">
+            <div class="card-head">中标流程</div>
+            <div class="card-body">
+              <ul class="timeline">
+                <li class="done" v-for="item in jkObject.c_lcsjx">{{moment(item.create_time).format('YYYY-MM-DD')}} · {{item.desc}} · {{item.username}}</li>
+              </ul>
+            </div>
           </div>
         </div>
       </div>
-
       <div v-if="addFormVisible" >
         <addContent :flag="addFormVisible" :areaProject="areaProject" :glArea="glArea" :close="closeAddForm"/>
       </div>

+ 4 - 3
src/views/login/Login.vue

@@ -3,7 +3,8 @@
     <div class="login-container">
       <div class="login-header">
         <div class="brand">
-          <div class="brand-icon">申</div>
+          <!-- <div class="brand-icon">申</div> -->
+          <div class="brand-icon"><img :src="logo" alt="logo" style="width: 40px; height: 40px;" /></div>
           <div>
             <strong>申勤物业</strong>
             <span>数字化平台</span>
@@ -55,7 +56,7 @@ import { useRouter } from 'vue-router'
 import encrypt from '@/utils/encrypt'
 
 const router = useRouter()
-
+const logo = new URL('/static/image/logo.png', import.meta.url).href
 const loginForm = reactive({
   username: '',
   password: ''
@@ -114,7 +115,7 @@ const handleLogin = async () => {
 .brand-icon {
   width: 48px;
   height: 48px;
-  background: #0d9488;
+  /* background: #0d9488; */
   border-radius: 12px;
   color: #fff;
   display: flex;