scorpio 2 years ago
parent
commit
b3e29da10e

+ 3 - 3
index.html

@@ -1,13 +1,13 @@
 <!DOCTYPE html>
-<html lang="en" style='height: 100%'>
+<html lang="en" style='background-color: #f6f7f8'>
   <head>
     <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" />
     <title>梧桐树项目管理平台</title>
   </head>
-  <body style='height: 100%;background-color: #f6f7f8'>
-    <div id="app" style='height: 100%'></div>
+  <body style='background-color: #f6f7f8'>
+    <div id="app"></div>
     <script type="module" src="/src/main.js">
       console.info('%c由%cFantastic-admin%c提供支持', 'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: #707070;', 'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: #e24329;', 'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: #707070;', '\nhttps://gitee.com/hooray/fantastic-admin')
     </script>

+ 11 - 1
src/App.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="app">
+  <div id="app" class="flex flex-center padding-top light-blue-bg">
     <router-view />
   </div>
 </template>
@@ -22,6 +22,16 @@ export default {
       'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: orange;',
       'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: #707070;'
     )
+  },
+  mounted() {
+    window.addEventListener('scroll', this.menu)
+  },
+  methods: {
+    menu() {
+      const scroll =
+        document.documentElement.scrollTop || document.body.scrollTop
+      this.$bus.emit('scorll', scroll)
+    }
   }
 }
 </script>

+ 0 - 1
src/assets/style/style.css

@@ -65,7 +65,6 @@ button:focus-visible {
 }
 
 #app {
-  max-width: 1280px;
   text-align: center;
 }
 

File diff suppressed because it is too large
+ 2 - 0
src/assets/svg/logo-white.svg


+ 1 - 0
src/assets/svg/qrcode.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1687337843399" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2405" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M85.312 85.312V384H384V85.312H85.312zM0 0h469.248v469.248H0V0z m170.624 170.624h128v128h-128v-128zM0 554.624h469.248v469.248H0V554.624z m85.312 85.312v298.624H384V639.936H85.312z m85.312 85.312h128v128h-128v-128zM554.624 0h469.248v469.248H554.624V0z m85.312 85.312V384h298.624V85.312H639.936z m383.936 682.56H1024v85.376h-298.752V639.936H639.936V1023.872H554.624V554.624h255.936v213.248h128V554.624h85.312v213.248z m-298.624-597.248h128v128h-128v-128z m298.624 853.248h-85.312v-85.312h85.312v85.312z m-213.312 0h-85.312v-85.312h85.312v85.312z" fill="#262626" p-id="2406"></path></svg>

+ 48 - 0
src/layout/foolter.vue

@@ -0,0 +1,48 @@
+<template>
+  <div>
+    <div class="mb-20 pointer">
+      <span @click="goNext('https://www.wutongshucloud.com')">关于梧桐</span>
+      <el-divider direction="vertical" />
+      <span @click="goNext('https://www.wutongshucloud.com/user/privacyclause')"
+        >隐私条款</span
+      >
+      <el-divider direction="vertical" />
+      <span @click="goNext('https://www.wutongshucloud.com/user/useragreement')"
+        >用户协议</span
+      >
+      <el-divider direction="vertical" />
+      <span @click="show = true">联系我们</span>
+    </div>
+    <span
+      >Copyright © 2019-{{
+        new Date().getFullYear()
+      }}
+      梧凤桐凰规划研究院(云南)有限公司 版权所有 All Rights Reserved.</span
+    >
+    <el-dialog v-model="show" width="540px" title="联系我们">
+      <div class="flex flex-center flex-col font-16">
+        <span>电 话:+86-13908866200</span>
+        <span class="mt-20 text-left"
+          >地 址 : 昆明市五华区昌源北路620号融城圆城医药健康科技园-1408</span
+        >
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      show: false
+    }
+  },
+  methods: {
+    goNext(url) {
+      window.open(url, '_bank')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 36 - 5
src/layout/index.vue

@@ -1,14 +1,33 @@
 <template>
-  <div class="full-screen flex flex-justify-start">
+  <div class="full-screen flex flex-justify-start" @scroll="scroll">
     <el-container>
       <el-header class="header">
         <top @openMenu="show = true" />
       </el-header>
-      <div class="flex" style="padding: 20px 20px; background-color: #f6f7f8">
+      <div class="flex" style="background-color: #f6f7f8">
         <el-aside style="width: 200px; position: fixed; left: 0" v-if="!mini">
           <left />
         </el-aside>
         <el-main class="wt-main hide-scrollbar">
+          <el-popover :width="200" trigger="hover" placement="left">
+            <template #reference>
+              <div class="mp">
+                <div class="flex flex-center flex-col">
+                  <img src="@/assets/svg/qrcode.svg" style="width: 30px" />
+                  <span class="mt-10">小程序</span>
+                </div>
+              </div>
+            </template>
+            <div class="ml-20 flex flex-center flex-col">
+              <img
+                class="icon"
+                src="https://wutong-1302848345.cos.ap-chengdu.myqcloud.com/wtzx/23fcdf89312f4c969eeb636d1adf9adc.jpg"
+              />
+              <div class="mt-20 text-center">
+                打开微信扫一扫<br />随时掌握项目动态
+              </div>
+            </div>
+          </el-popover>
           <div class="wrapper mb-20">
             <tips />
           </div>
@@ -114,14 +133,26 @@ export default {
 }
 
 .wt-main {
-  height: calc(100vh - 100px);
   background-color: #f6f7f8;
   overflow-x: scroll;
-  padding: 0;
+  padding: 20px 0;
+  .mp {
+    top: 200px;
+    right: 0;
+    z-index: 999;
+    border-radius: 4px;
+    position: fixed;
+    background-color: white;
+    padding: 20px 10px;
+    font-size: 12px;
+  }
+}
+.icon {
+  width: 140px;
 }
 .content {
   overflow-x: scroll;
-  height: calc(100vh - 100px);
+  height: calc(100vh - 80px);
 }
 
 .tips {

+ 1 - 1
src/layout/left.vue

@@ -131,7 +131,7 @@ export default {
             : 'project'
         )
       } else {
-        // this.$router.push(this.data[index].path)
+        this.$router.push(this.data[index].path)
         localStorage.setItem(
           'data-type',
           this.data[index].remark ? this.data[index].remark : 'project'

+ 4 - 3
src/layout/top.vue

@@ -10,13 +10,14 @@
             icon="Menu"
             class="mr-20 white"
             circle
-            color=#C1C4CB
+            color="#C1C4CB"
             @click="openMenu"
             v-if="mini"
           />
           <router-link to="/">
             <div class="flex flex-center">
-              <img src="@/assets/svg/logo.svg" />
+              <img v-if="dataType === 'project'" src="@/assets/svg/logo.svg" />
+              <img v-else src="@/assets/svg/logo-white.svg" />
             </div>
           </router-link>
         </div>
@@ -280,7 +281,7 @@ export default {
   padding: 0 40px;
   position: fixed;
   border-bottom: whitesmoke solid 1px;
-  box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.1);
+  box-shadow: 0 6px 8px 0 rgba(51, 51, 51, 0.05098);
 }
 
 .avatar {

+ 11 - 2
src/page/login.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="full-screen flex flex-center bg">
+  <div class="full-screen flex flex-center bg flex-col">
     <div class="login white-bg radius" v-loading="loading">
       <div class="flex flex-center flex-child-average">
         <div class="flex left">
@@ -170,6 +170,9 @@
         </div>
       </div>
     </div>
+    <div class="footer">
+      <foolter />
+    </div>
   </div>
 </template>
 
@@ -187,10 +190,11 @@ import { useStore } from '@/store/user.js'
 import { removeToken, setToken } from '../utils/auth.js'
 import permissionStore from '@/store/permission.js'
 import VueQr from 'vue-qr/src/packages/vue-qr.vue'
+import foolter from '@/layout/foolter.vue'
 
 export default {
   name: 'login',
-  components: { VueQr },
+  components: { VueQr, foolter },
   watch: {
     qrCodeLogin: {
       handler(val) {
@@ -388,6 +392,11 @@ export default {
 //noinspection ALL
 .bg {
   background-image: url('https://wutong-1302848345.cos.ap-chengdu.myqcloud.com/wtzx/7667edec62f44063a50c66e8654eaa87.png');
+  .footer {
+    position: fixed;
+    bottom: 50px;
+    color: white;
+  }
 }
 
 .login {

+ 4 - 2
src/views/home/component/dash.vue

@@ -643,7 +643,7 @@ export default {
     },
     beforeOpen(done, type) {
       if (['edit'].includes(type)) {
-        this.$router.push({
+        const routeData = this.$router.resolve({
           path: '/home/details',
           query: {
             id: this.form.id,
@@ -651,11 +651,13 @@ export default {
             ownerId: this.form.createUser
           }
         })
+        window.open(routeData.href, '_blank')
       } else if (type === 'view') {
-        this.$router.push({
+        const routeData = this.$router.resolve({
           path: '/home/pro_detail',
           query: { id: this.form.id, projectStage: this.form.project_stage }
         })
+        window.open(routeData.href, '_blank')
       }
     },
     currentChange(currentPage) {

+ 3 - 3
src/views/home/component/params/params1.vue

@@ -13,7 +13,7 @@
       <el-form
         v-if="form"
         :model="form"
-        label-width="240px"
+        label-width="140px"
         :disabled="disabled"
         label-position="left"
         class="form-content flex flex-col"
@@ -86,10 +86,10 @@
           </el-form-item>
         </div>
         <div class="full-width flex">
-          <el-form-item label="项目负责人及联系电话" style="flex: 1">
+          <el-form-item label="负责人及联系电话" style="flex: 1">
             <el-input
               v-model="form.construction_unit"
-              placeholder="项目负责人及联系电话"
+              placeholder="负责人及联系电话"
             />
           </el-form-item>
         </div>

+ 89 - 54
src/views/home/component/params/params2.vue

@@ -1,85 +1,120 @@
 <template>
-  <div class='flex flex-justify-start flex-align-center flex-col'>
-    <div class='flex flex-center full-width flex-justify-between mt-10 mb-10'>
-      <span class='full-width text-left bold'>{{ info.dictValue }}</span>
-      <el-button v-if='detail.can_update' type='primary' @click='disabled = !disabled'>
+  <div class="flex flex-justify-start flex-align-center flex-col">
+    <div class="flex flex-center full-width flex-justify-between mt-10 mb-10">
+      <span class="full-width text-left bold">{{ info.dictValue }}</span>
+      <el-button
+        v-if="detail.can_update"
+        type="primary"
+        @click="disabled = !disabled"
+      >
         {{ disabled ? '编 辑' : '保 存' }}
       </el-button>
     </div>
-    <div class='mt-10' style='width: 90%;'>
+    <div class="mt-10" style="width: 90%">
       <el-form
-          :model="form"
-          label-width='240px'
-          label-position="left"
-          :disabled='disabled'
-          class='form-content flex flex-col'
+        :model="form"
+        label-width="210px"
+        label-position="left"
+        :disabled="disabled"
+        class="form-content flex flex-col"
       >
-        <div class='flex flex-justify-start '>
-          <el-form-item label="中央预算内投资" style='flex:1'>
-            <el-input v-model="form.investment_invest" placeholder='中央预算内投资'/>
+        <div class="flex flex-justify-start">
+          <el-form-item label="中央预算内投资" style="flex: 1">
+            <el-input
+              v-model="form.investment_invest"
+              placeholder="中央预算内投资"
+            />
           </el-form-item>
-          <el-form-item label="地方预算内投资" style='flex:1' class='ml-20'>
-            <el-input v-model="form.region_invest" placeholder='地方预算内投资'/>
+          <el-form-item label="地方预算内投资" style="flex: 1" class="ml-20">
+            <el-input
+              v-model="form.region_invest"
+              placeholder="地方预算内投资"
+            />
           </el-form-item>
         </div>
-        <div class='full-width  flex'>
-          <el-form-item label="专项债券资金" style='flex:1'>
-            <el-input v-model="form.special_funds" placeholder='专项债券资金'/>
+        <div class="full-width flex">
+          <el-form-item label="专项债券资金" style="flex: 1">
+            <el-input v-model="form.special_funds" placeholder="专项债券资金" />
           </el-form-item>
-          <el-form-item label="抗疫特别国债资金" style='flex:1' class='ml-20'>
-            <el-input v-model="form.epidemic_funds" placeholder='抗疫特别国债资金'/>
+          <el-form-item label="抗疫特别国债资金" style="flex: 1" class="ml-20">
+            <el-input
+              v-model="form.epidemic_funds"
+              placeholder="抗疫特别国债资金"
+            />
           </el-form-item>
         </div>
 
-        <div class='full-width  flex'>
-          <el-form-item label="政策性开发性金融工具(基金)" style='flex:1'>
-            <el-input v-model="form.policy_finance_funds" placeholder='政策性开发性金融工具(基金'/>
+        <div class="full-width flex">
+          <el-form-item label="政策性开发性金融工具(基金)" style="flex: 1">
+            <el-input
+              v-model="form.policy_finance_funds"
+              placeholder="政策性开发性金融工具(基金"
+            />
           </el-form-item>
-          <el-form-item label="其他地方财政性建设资金" style='flex:1' class='ml-20'>
-            <el-input v-model="form.other_funds" placeholder='其他地方财政性建设资金'/>
+          <el-form-item
+            label="其他地方财政性建设资金"
+            style="flex: 1"
+            class="ml-20"
+          >
+            <el-input
+              v-model="form.other_funds"
+              placeholder="其他地方财政性建设资金"
+            />
           </el-form-item>
         </div>
-        <div class='full-width  flex'>
-          <el-form-item label="是否民间投资项目" style='flex:1'>
-            <div class='full-width'>
-              <el-select v-model='form.social_investment' placeholder='是否民间投资项目' class='full-width'>
+        <div class="full-width flex">
+          <el-form-item label="是否民间投资项目" style="flex: 1">
+            <div class="full-width">
+              <el-select
+                v-model="form.social_investment"
+                placeholder="是否民间投资项目"
+                class="full-width"
+              >
                 <el-option
-                    v-for="item in yesOrNo"
-                    :key='item.label'
-                    :label="item.label"
-                    :value="item.value"
+                  v-for="item in yesOrNo"
+                  :key="item.label"
+                  :label="item.label"
+                  :value="item.value"
                 />
               </el-select>
             </div>
           </el-form-item>
-          <el-form-item label="是否产业项目" style='flex:1' class='ml-20'>
-            <div class='full-width'>
-              <el-select v-model='form.industrial_investment' placeholder='是否产业项目' class='full-width'>
+          <el-form-item label="是否产业项目" style="flex: 1" class="ml-20">
+            <div class="full-width">
+              <el-select
+                v-model="form.industrial_investment"
+                placeholder="是否产业项目"
+                class="full-width"
+              >
                 <el-option
-                    v-for="item in yesOrNo"
-                    :key='item.label'
-                    :label="item.label"
-                    :value="item.value"
+                  v-for="item in yesOrNo"
+                  :key="item.label"
+                  :label="item.label"
+                  :value="item.value"
                 />
               </el-select>
             </div>
           </el-form-item>
         </div>
 
-        <div class='full-width  flex'>
-          <el-form-item label="是否获得资金支持项目" style='flex:1'>
-            <div class='full-width'>
-              <el-select v-model='form.is_funded_project' placeholder='是否获得资金支持项目' class='full-width'>
+        <div class="full-width flex">
+          <el-form-item label="是否获得资金支持项目" style="flex: 1">
+            <div class="full-width">
+              <el-select
+                v-model="form.is_funded_project"
+                placeholder="是否获得资金支持项目"
+                class="full-width"
+              >
                 <el-option
-                    v-for="item in yesOrNo"
-                    :key='item.label'
-                    :label="item.label"
-                    :value="item.value"
+                  v-for="item in yesOrNo"
+                  :key="item.label"
+                  :label="item.label"
+                  :value="item.value"
                 />
               </el-select>
             </div>
           </el-form-item>
-          <div style='flex:1' class='ml-20'></div>
+          <div style="flex: 1" class="ml-20"></div>
         </div>
       </el-form>
     </div>
@@ -101,13 +136,13 @@ export default {
   },
   watch: {
     detail: {
-      handler (val) {
+      handler(val) {
         this.form = val
       },
       immediate: true
     },
     disabled: {
-      handler (val) {
+      handler(val) {
         if (val) {
           this.updata()
         }
@@ -115,7 +150,7 @@ export default {
       immediate: false
     }
   },
-  data () {
+  data() {
     return {
       disabled: true,
       yesOrNo: [
@@ -126,7 +161,7 @@ export default {
     }
   },
   methods: {
-    updata () {
+    updata() {
       this.$nextTick(() => {
         this.form.projectId = this.detail.id
         this.form.total_amount = Number.parseFloat(this.detail.total_amount)
@@ -144,7 +179,7 @@ export default {
 }
 </script>
 
-<style lang='scss' scoped>
+<style lang="scss" scoped>
 .form-content {
   border: 1px solid #eeeeee;
   padding: 20px;

+ 1 - 1
src/views/home/component/params/params4.vue

@@ -3,7 +3,7 @@
     <div class="flex flex-center full-width flex-justify-between mt-10 mb-10">
       <span class="full-width text-left bold">{{ info.dictValue }}</span>
     </div>
-    <div class="mt-10" style="width: 80%">
+    <div class="mt-10" style="width: 90%">
       <avue-crud
         :option="option"
         :data="data"

+ 2 - 2
src/views/home/component/pro_left.vue

@@ -214,7 +214,7 @@ export default {
     },
     onScroll() {
       this.$bus.on('scorll', e => {
-        const scrollTop = e.target.scrollTop
+        const scrollTop = e
         const index = this.scorllTopList.findIndex(
           e => scrollTop >= e.start && scrollTop < e.end
         )
@@ -304,7 +304,7 @@ export default {
 .top {
   width: 300px;
   position: sticky;
-  height: calc(100vh - 155px);
+  height: calc(100vh - 20px);
   background-color: white;
 }
 

+ 3 - 3
src/views/home/details.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="flex flex-justify-start full-height">
+  <div class="flex flex-justify-start full-height wrapper">
     <div class="full-height">
       <left-bar
         :active="type === '0' ? -1 : active"
@@ -34,8 +34,8 @@
 
 <route>
 {
-name: '资料管理',
-meta: { keepAlive: true,back: true }
+name: '项目详情',
+meta: { layout: 'empty', }
 }
 </route>
 

+ 2 - 0
src/views/home/index.vue

@@ -12,6 +12,7 @@
 {
 path: '/home',
 name: '固定资产项目管理',
+meta: {keepAlive: true}
 }
 </route>
 
@@ -24,6 +25,7 @@ import { useStore } from '@/store/user.js'
 import tokenStore from '../../store/token.js'
 
 export default {
+  name: '固定资产项目管理',
   components: { topSerach, dash, ownerSerach },
   setup() {
     const store = useStore()

+ 13 - 5
src/views/home/pro_detail.vue

@@ -1,6 +1,6 @@
 <template>
-  <div class="flex flex-justify-start">
-    <div class="full-height">
+  <div class="flex flex-justify-start wrapper">
+    <div class="full-height left">
       <pro-left
         :data="data"
         :code="code"
@@ -20,7 +20,7 @@
         </basic-container>
       </div>
 
-      <div v-if="currentTab.value === 1">
+      <div v-if="currentTab.value === 1" @scroll="scroll">
         <basic-container v-for="(item, index) in resultList" :key="item.id">
           <div class="full-width padding-top" :id="`header` + (index + 1)">
             <params1 v-if="item.dictKey === '1'" :info="item" :detail="data" />
@@ -50,7 +50,7 @@
 <route>
 {
 name: '项目详情',
-meta :{ back:true }
+meta :{ layout: 'empty' }
 }
 </route>
 
@@ -118,6 +118,9 @@ export default {
     }, 1500)
   },
   methods: {
+    scroll(event) {
+      this.$bus.emit('scorll', event)
+    },
     changeYear(year) {
       this.year = year
     },
@@ -149,4 +152,9 @@ export default {
 }
 </script>
 
-<style scoped></style>
+<style scoped>
+.left {
+  position: sticky;
+  top: 10px;
+}
+</style>

+ 2 - 0
src/views/home/project.vue

@@ -12,6 +12,7 @@
 {
 path: '/project',
 name: '项目管理',
+meta: {keepAlive: true}
 }
 </route>
 
@@ -24,6 +25,7 @@ import { useStore } from '@/store/user.js'
 import tokenStore from '../../store/token.js'
 
 export default {
+  name: '项目管理',
   components: { topSerach, dash, ownerSerach },
   setup() {
     const store = useStore()

Some files were not shown because too many files changed in this diff