Explorar o código

修改连接接口

zs hai 8 meses
pai
achega
a034dfeb31
Modificáronse 46 ficheiros con 1228 adicións e 2439 borrados
  1. 1 1
      .env.development
  2. BIN=BIN
      public/images/friendbg.jpg
  3. BIN=BIN
      public/images/jsjcpjqwlyyjs.png
  4. BIN=BIN
      public/images/sever.png
  5. 1 4
      src/App.vue
  6. 2 2
      src/assets/main.css
  7. 22 12
      src/components/custom/custom-layout.vue
  8. 6 0
      src/router/index.js
  9. 40 0
      src/store/api/platform/footplate.js
  10. 40 0
      src/store/api/platform/journal.js
  11. 40 0
      src/store/api/platform/notes.js
  12. 40 0
      src/store/api/platform/sector.js
  13. 40 0
      src/store/api/platform/support.js
  14. 49 0
      src/store/api/system/region.js
  15. 1 1
      src/views/chat/index copy.vue
  16. 1 1
      src/views/chat/index.vue
  17. 1 1
      src/views/detail/demandDetail.vue
  18. 1 0
      src/views/detail/expert.vue
  19. 3 3
      src/views/detail/expertDetail.vue
  20. 81 0
      src/views/detail/industryDetail.vue
  21. 105 21
      src/views/detail/matchDetail.vue
  22. 7 3
      src/views/detail/news.vue
  23. 39 74
      src/views/detail/newsDetail.vue
  24. 47 67
      src/views/detail/platformDetail.vue
  25. 28 50
      src/views/detail/project.vue
  26. 1 1
      src/views/detail/projectDetail.vue
  27. 38 36
      src/views/detail/serviceDetail.vue
  28. 1 1
      src/views/detail/supplyDetail.vue
  29. 21 126
      src/views/eight/index.vue
  30. 27 477
      src/views/five/index.vue
  31. 1 1
      src/views/four/parts/index.vue
  32. 2 8
      src/views/help/index.vue
  33. 34 54
      src/views/nine/index.vue
  34. 225 675
      src/views/one/index.vue
  35. 66 96
      src/views/seven/index.vue
  36. 44 128
      src/views/six/index.vue
  37. 24 131
      src/views/ten/index.vue
  38. 25 19
      src/views/thirteen/index.vue
  39. 43 226
      src/views/thirteen/list.vue
  40. 23 64
      src/views/thr/index.vue
  41. 20 20
      src/views/thr/parts/demand.vue
  42. 14 14
      src/views/thr/parts/supply.vue
  43. 1 1
      src/views/two/index.vue
  44. 11 63
      src/views/two/parts/demand.vue
  45. 10 56
      src/views/two/parts/supply.vue
  46. 2 2
      vite.config.js

+ 1 - 1
.env.development

@@ -11,7 +11,7 @@ VITE_APP_BASE_APIWS ='/websocket/api'
 
 VITE_APP_HOME = "http://localhost:3003/"
 
-VITE_APP_HOST = "http://192.168.1.197"
+VITE_APP_HOST = "http://127.0.0.1:19700"
 
 VITE_BASE_URL = "/cxyyWeb"
 VITE_OUT_DIR = "cxyyWeb"

BIN=BIN
public/images/friendbg.jpg


BIN=BIN
public/images/jsjcpjqwlyyjs.png


BIN=BIN
public/images/sever.png


+ 1 - 4
src/App.vue

@@ -8,10 +8,7 @@
 body {
   margin: 0;
 }
-.w_1200 {
-  width: 1200px;
-  margin: 0 auto;
-}
+
 .w_1300 {
   width: 1300px;
   margin: 0 auto;

+ 2 - 2
src/assets/main.css

@@ -2,8 +2,8 @@ body {
   margin: 0;
 }
 
-.w_1200 {
-  width: 1200px;
+.w_1300 {
+  width: 1300px;
   margin: 0 auto;
 }
 

+ 22 - 12
src/components/custom/custom-layout.vue

@@ -3,9 +3,10 @@
     <div class="header">
       <el-col :span="24" class="header_1">
         <div class="left">
-          <el-image class="image" :src="siteInfo.logoUrl" fit="fill" />
+          <el-image class="image" v-if="configInfo && configInfo.logoUrl && configInfo.logoUrl.length > 0" :src="getUrl(configInfo.logoUrl)" fit="fill" />
+          <el-image class="image" v-else :src="siteInfo.logoUrl" fit="fill" />
           <div class="content">
-            <text class="title">{{ siteInfo.zhTitle }}</text>
+            <text class="title">{{ configInfo.zhTitle || siteInfo.zhTitle }}</text>
           </div>
         </div>
         <div class="right">
@@ -38,7 +39,7 @@
           </div>
         </el-col>
         <el-col :span="24" class="info">
-          <div class="info_1" v-if="info.key == '3'">
+          <!-- <div class="info_1" v-if="info.key == '3'">
             <el-col :span="12" class="list_1" v-for="(agg, index) in info.children" :key="index">
               <div class="title">{{ agg.title }}</div>
               <div class="list_1_1">
@@ -47,7 +48,7 @@
                 </div>
               </div>
             </el-col>
-          </div>
+          </div> -->
           <div class="info_2" v-if="info.key == '10'">
             <el-col :span="24" class="list_2">
               <div v-for="(tag, indexs) in info.children" :key="indexs" class="title1" @click="selectMenu(tag.route)">
@@ -64,13 +65,15 @@
     <div class="footer" v-if="is_foot">
       <div class="footer_1">
         <div class="left">
-          <el-image class="image" :src="footInfo.Logo" fit="fill" />
-          <div class="title">电话:{{ footInfo.Phone }}</div>
-          <div class="title">邮箱:{{ footInfo.Email }}</div>
-          <div class="title">地址:{{ footInfo.Address }}</div>
+          <el-image class="image" v-if="footInfos && footInfos.Logo && footInfos.Logo.length > 0" :src="getUrl(footInfos.Logo)" fit="fill" />
+          <el-image class="image" v-else :src="footInfo.Logo" fit="fill" />
+          <div class="title">电话:{{ footInfos.Phone || footInfo.Phone }}</div>
+          <div class="title">邮箱:{{ footInfos.Email || footInfo.Email }}</div>
+          <div class="title">地址:{{ footInfos.Address || footInfo.Address }}</div>
         </div>
         <div class="right">
-          <el-image class="image" :src="footInfo.Code" fit="fill" />
+          <el-image class="image" v-if="footInfos && footInfos.Code && footInfos.Code.length > 0" :src="getUrl(footInfos.Code)" fit="fill" />
+          <el-image class="image" v-else :src="footInfo.Code" fit="fill" />
           <div class="title" @click="toHelp">关于我们</div>
         </div>
       </div>
@@ -93,6 +96,7 @@ const props = defineProps({
   is_foot: { type: Boolean, default: () => true }
 })
 const configInfo = ref({})
+const footInfos = ref({})
 const data = ref([])
 const info = ref({})
 // 请求
@@ -105,9 +109,12 @@ const search = async () => {
     else val.hover = false
   }
   data.value = menuList
-  // // 基础设置
-  // const result = await designStore.query({})
-  // if ($checkRes(result)) configInfo.value = result.data[0] || {}
+  // 基础设置
+  const result = await designStore.query({})
+  if ($checkRes(result)) {
+    configInfo.value = result.data[0] || {}
+    footInfo.value = result.data[0].footInfo || {}
+  }
 }
 // 登录|注册
 const toLogin = (status) => {
@@ -143,6 +150,9 @@ const handleMousOut = (index) => {
     }
   }
 }
+const getUrl = (item) => {
+  if (item && item.length > 0) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
+}
 </script>
 
 <style lang="scss" scoped>

+ 6 - 0
src/router/index.js

@@ -176,6 +176,12 @@ const router = createRouter({
       meta: { title: '产学研用协同创新数字化平台-服务支撑详情' },
       component: () => import('@/views/detail/achievementDetail.vue')
     },
+    {
+      path: '/industry/detail',
+      name: 'industryDetail',
+      meta: { title: '产学研用协同创新数字化平台-产业集群详情' },
+      component: () => import('@/views/detail/industryDetail.vue')
+    },
     {
       path: '/study/detail',
       name: 'studyDetail',

+ 40 - 0
src/store/api/platform/footplate.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/footplate'
+const axios = new AxiosWrapper()
+
+export const FootplateStore = defineStore('footplate', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, 'id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/platform/journal.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/journal'
+const axios = new AxiosWrapper()
+
+export const JournalStore = defineStore('journal', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, 'id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/platform/notes.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/notes'
+const axios = new AxiosWrapper()
+
+export const NotesStore = defineStore('notes', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, 'id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/platform/sector.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/sector'
+const axios = new AxiosWrapper()
+
+export const SectorStore = defineStore('sector', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/platform/support.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/support'
+const axios = new AxiosWrapper()
+
+export const SupportStore = defineStore('support', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, 'id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 49 - 0
src/store/api/system/region.js

@@ -0,0 +1,49 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/region'
+const axios = new AxiosWrapper()
+
+export const RegionStore = defineStore('region', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const list = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}/list`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, 'id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    list,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 1 - 1
src/views/chat/index copy.vue

@@ -1,6 +1,6 @@
 <template>
   <custom-layout class="main" v-loading="loading">
-    <div class="w_1200">
+    <div class="w_1300">
       <el-container>
         <el-aside width="400px" class="aside">
           <el-col :span="24" class="one">

+ 1 - 1
src/views/chat/index.vue

@@ -1,6 +1,6 @@
 <template>
   <custom-layout class="main" v-loading="loading">
-    <div class="one w_1200">
+    <div class="one w_1300">
       <div class="left">
         <el-image class="image" :src="userLogo" fit="fill" />
         <div class="name">{{ user.name || '测试用户' }}</div>

+ 1 - 1
src/views/detail/demandDetail.vue

@@ -1,7 +1,7 @@
 <template>
   <custom-layout class="main">
     <el-col :span="24" class="one">
-      <div class="w_1200">
+      <div class="w_1300">
         <div class="info_1"></div>
         <div class="info_2">
           <div class="area">

+ 1 - 0
src/views/detail/expert.vue

@@ -119,6 +119,7 @@ const typeList = ref([
   { label: '电子信息', value: '8' }
 ])
 const plateList = ref([
+  { label: '不限', value: '-1' },
   { label: '汽车电子及新型汽车零部件', value: '0' },
   { label: '精细化工及天然气化工', value: '1' },
   { label: '农产品加工及绿色食品', value: '2' },

+ 3 - 3
src/views/detail/expertDetail.vue

@@ -1,7 +1,7 @@
 <template>
   <custom-layout class="main">
     <el-col :span="24" class="one">
-      <div class="w_1200">
+      <div class="w_1300">
         <div class="info_1"></div>
         <div class="info_2">
           <div class="infoName">
@@ -16,11 +16,11 @@
           </div>
           <div class="infoBrief">
             <div class="Brief_1">
-              <span>所属产业</span>
+              <span>所属产业:</span>
               <span>{{ info.industry || '暂无' }}</span>
             </div>
             <div class="Brief_2">
-              <span>工作单位</span>
+              <span>工作单位:</span>
               <span>{{ info.work || '暂无' }}</span>
             </div>
           </div>

+ 81 - 0
src/views/detail/industryDetail.vue

@@ -0,0 +1,81 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one" v-loading="loading">
+      <div class="w_1300">
+        <div class="info_1"></div>
+        <div class="info_2">
+          <div class="info_name">{{ info.title || '暂无' }}</div>
+          <div class="info_friend" v-if="info.partner && info.partner.length > 0">
+            <span>合作伙伴:</span>
+            <div class="other_1" v-for="(tag, indexx) in info.partner" :key="indexx">{{ tag.name }}</div>
+          </div>
+          <div class="info_brief">
+            <div v-html="info.brief"></div>
+          </div>
+        </div>
+      </div>
+    </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+// 接口
+import { SectorStore } from '@/store/api/platform/sector'
+const store = SectorStore()
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = userStore.user
+// 加载中
+const loading = ref(false)
+// 路由
+const route = useRoute()
+
+const info = ref({})
+// 请求
+onMounted(async () => {
+  loading.value = true
+  await search()
+  loading.value = false
+})
+const search = async () => {
+  let id = route.query.id
+  if (id) {
+    let res = await store.fetch(id)
+    if (res.errcode == '0') info.value = res.data
+  }
+}
+</script>
+<style scoped lang="scss">
+.main {
+  .one {
+    background: url(/images/friendbg.jpg) no-repeat;
+    background-position: center top;
+    .info_1 {
+      padding: 30px 0;
+    }
+    .info_2 {
+      padding: 20px;
+      background-color: #fff;
+      box-shadow: 0 0 13px 0 rgba(5, 88, 219, 0.18);
+      .info_name {
+        text-align: center;
+        font-size: $global-font-size-22;
+        font-weight: bold;
+      }
+      .info_friend {
+        display: flex;
+        font-size: $global-font-size-18;
+        color: $global-color-595;
+        margin: 5px 0 0 0;
+        .other_1 {
+          display: flex;
+          margin: 0 5px;
+        }
+      }
+      .info_brief {
+        margin: 10px 0 0 0;
+      }
+    }
+  }
+}
+</style>

+ 105 - 21
src/views/detail/matchDetail.vue

@@ -1,10 +1,11 @@
 <template>
   <custom-layout class="main">
-    <el-col :span="24" class="one">
-      <div class="w_1200">
+    <el-col :span="24" class="one" v-loading="loading">
+      <div class="w_1300">
         <div class="info_1">
           <h3 class="name">{{ info.name || '暂无' }}</h3>
-          <p class="brief">{{ info.brief || '暂无' }}</p>
+          <p class="brief">{{ info.industry || '暂无' }}</p>
+          <p class="money">{{ info.money || '暂无' }}</p>
           <div class="time">
             <el-image class="image" :src="time" fit="fill"></el-image>
             <span>{{ info.start_time || '暂无' }} ~ {{ info.end_time || '暂无' }}</span>
@@ -16,18 +17,89 @@
           <div class="content">
             <!-- 正文 -->
             <div class="content_1">
-              {{ info.content || '暂无' }}
+              <div v-html="info.brief"></div>
             </div>
             <!-- 封面 -->
             <div class="image">
-              <el-image class="images" :src="info.url" fit="fill"></el-image>
+              <el-image class="images" :src="getUrl(info.file, 'array')" fit="fill"></el-image>
             </div>
           </div>
         </div>
         <div class="info_3">
           <div class="title">活动说明</div>
           <div class="content">
-            <el-image class="images" :src="match_6" fit="fill"></el-image>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules1">
+              <div class="thr_1">大赛背景</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules1"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules2">
+              <div class="thr_1">大赛主题和目标</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules2"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules3">
+              <div class="thr_1">大赛基本情况介绍</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules3"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules4">
+              <div class="thr_1">赛题任务</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules4"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules5">
+              <div class="thr_1">赛程安排</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules5"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules6">
+              <div class="thr_1">赛制阶段</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules6"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules7">
+              <div class="thr_1">参赛资格</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules7"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules8">
+              <div class="thr_1">参赛报名</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules8"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules9">
+              <div class="thr_1">奖项设置与奖励办法</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules9"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules10">
+              <div class="thr_1">组织单位</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules10"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules11">
+              <div class="thr_1">赛事联络</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules11"></div>
+              </div>
+            </div>
+            <div class="thr_cont" v-if="info.rules && info.rules.rules12">
+              <div class="thr_1">赛事交流</div>
+              <div class="thr_2">
+                <div v-html="info.rules.rules12"></div>
+              </div>
+            </div>
             <div class="button">活动报名</div>
           </div>
         </div>
@@ -38,24 +110,38 @@
 
 <script setup>
 import time from '/images/time.png'
-import match_4 from '/images/match_4.jpg'
-import match_6 from '/images/match_6.jpg'
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+// 接口
+import { MatchStore } from '@/store/api/platform/match'
+const store = MatchStore()
 // 加载中
 const loading = ref(false)
 // 路由
-const router = useRouter()
-const info = ref({
-  name: '金牛区2024年就业创业大赛暨“骄创杯”大赛',
-  brief: '赢在成都·创在金牛',
-  start_time: '2024-05-27 00:00',
-  end_time: '2024-07-10 00:00',
-  url: match_4,
-  content:
-    '为落实国家创新驱动发展战略、就业优先战略及人才强国战略,鼓励创业带动就业,营造浓厚的创新创业氛围和良好的创业环境,搭建创新创业服务平台,决定举办“赢在成都·创在金牛”金牛区2024年科技创新、卫星互联网、大健康产业就业创业大赛暨“骄创杯”大赛。'
+const route = useRoute()
+const info = ref({})
+// 请求
+onMounted(async () => {
+  loading.value = true
+  await searchOther()
+  await search()
+  loading.value = false
 })
+const searchOther = async () => {}
+const search = async () => {
+  let id = route.query.id
+  if (id) {
+    let res = await store.fetch(id)
+    if (res.errcode == '0') info.value = res.data
+  }
+}
+const getUrl = (item, type) => {
+  if (item) {
+    if (type == 'array') return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
+    else return `${import.meta.env.VITE_APP_HOST}${item.uri}`
+  }
+}
 </script>
 <style scoped lang="scss">
 .main {
@@ -94,8 +180,7 @@ const info = ref({
         height: 44px;
         color: #fff;
         font-size: 16px;
-        background-image: linear-gradient(90deg, #0455da 0%, #378cff 100%),
-          linear-gradient(#0455da, #0455da);
+        background-image: linear-gradient(90deg, #0455da 0%, #378cff 100%), linear-gradient(#0455da, #0455da);
         background-blend-mode: normal, normal;
         border-radius: 4px;
       }
@@ -158,8 +243,7 @@ const info = ref({
           height: 44px;
           color: #fff;
           font-size: 16px;
-          background-image: linear-gradient(90deg, #0455da 0%, #378cff 100%),
-            linear-gradient(#0455da, #0455da);
+          background-image: linear-gradient(90deg, #0455da 0%, #378cff 100%), linear-gradient(#0455da, #0455da);
           background-blend-mode: normal, normal;
           border-radius: 4px;
         }

+ 7 - 3
src/views/detail/news.vue

@@ -1,6 +1,6 @@
 <template>
   <custom-layout class="main">
-    <el-col :span="24" class="one">
+    <el-col :span="24" class="one" v-loading="loading">
       <div class="w_1300">
         <el-col :span="24" class="one_1">
           <h2 class="name">双高新闻资讯</h2>
@@ -84,6 +84,7 @@ const projectStore = ProjectStore()
 const achievementStore = AchievementStore()
 // 路由
 const router = useRouter()
+const route = useRoute()
 // 图片引入
 import new_4 from '/images/new_4.png'
 // 加载中
@@ -105,7 +106,9 @@ onMounted(async () => {
 const searchOther = async () => {
   const info = {
     skip: 0,
-    limit: 6
+    limit: 6,
+    status: '1',
+    is_use: '0'
   }
   let res
   res = await achievementStore.query(info)
@@ -119,6 +122,7 @@ const search = async (query = { skip, limit }) => {
   const info = {
     skip: query.skip,
     limit: query.limit,
+    type: route.query.type,
     status: '1',
     is_use: '0'
   }
@@ -164,7 +168,7 @@ const sizeChange = (limits) => {
   search({ skip: 0, limit: limit })
 }
 const getUrl = (item) => {
-  if (item) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
+  if (item && item.length > 0) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
 }
 </script>
 <style scoped lang="scss">

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 39 - 74
src/views/detail/newsDetail.vue


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 47 - 67
src/views/detail/platformDetail.vue


+ 28 - 50
src/views/detail/project.vue

@@ -18,10 +18,10 @@
                 <span>行业</span>
               </div>
               <div v-if="!twoShow" class="OneRight">
-                <el-checkbox class="label" v-for="(item, index) in plateList.slice(0, 6)" :key="index" v-model="checked1" :label="item.label" size="large" />
+                <el-checkbox class="label" v-for="(item, index) in plateList.slice(0, 6)" :key="index" v-model="checked1" :label="item.title" size="large" />
               </div>
               <div v-else class="OneRight">
-                <el-checkbox class="label" v-for="(item, index) in plateList" :key="index" v-model="checked1" :label="item.label" size="large" />
+                <el-checkbox class="label" v-for="(item, index) in plateList" :key="index" v-model="checked1" :label="item.title" size="large" />
               </div>
               <div class="button">
                 <span v-if="!twoShow" @click="twoShow = true">
@@ -36,19 +36,11 @@
               <div class="OneLeft">
                 <span>技术领域</span>
               </div>
-              <div class="OneRight">
-                <el-checkbox class="label" v-for="(item, index) in typeList" :key="index" v-model="checked2" :label="item.label" size="large" />
-              </div>
-            </div>
-            <div class="Seacher">
-              <div class="OneLeft">
-                <span>所在地</span>
-              </div>
               <div v-if="!oneShow" class="OneRight">
-                <el-checkbox class="label" v-for="(item, index) in cityList.slice(0, 12)" :key="index" v-model="checked3" :label="item.label" size="large" />
+                <el-checkbox class="label" v-for="(item, index) in typeList.slice(0, 8)" :key="index" v-model="checked1" :label="item.label" size="large" />
               </div>
               <div v-else class="OneRight">
-                <el-checkbox class="label" v-for="(item, index) in cityList" :key="index" v-model="checked3" :label="item.label" size="large" />
+                <el-checkbox class="label" v-for="(item, index) in typeList" :key="index" v-model="checked1" :label="item.label" size="large" />
               </div>
               <div class="button">
                 <span v-if="!oneShow" @click="oneShow = true">
@@ -59,6 +51,14 @@
                 </span>
               </div>
             </div>
+            <div class="Seacher">
+              <div class="OneLeft">
+                <span>所在地</span>
+              </div>
+              <div class="OneRight">
+                <el-checkbox class="label" v-for="(item, index) in cityList" :key="index" v-model="checked3" :label="item.name" size="large" />
+              </div>
+            </div>
             <div class="Seacher">
               <div class="OneLeft">
                 <span>项目成熟度</span>
@@ -95,13 +95,16 @@
 </template>
 
 <script setup>
-import { getCity } from '@/utils/city'
 const $checkRes = inject('$checkRes')
 // 接口
 import { ProjectStore } from '@/store/api/platform/project'
 import { DictDataStore } from '@/store/api/system/dictData'
+import { RegionStore } from '@/store/api/system/region'
+import { SectorStore } from '@/store/api/platform/sector'
 const store = ProjectStore()
 const dictDataStore = DictDataStore()
+const regionStore = RegionStore()
+const sectorStore = SectorStore()
 // 路由
 const router = useRouter()
 // 是否展开
@@ -112,40 +115,10 @@ const loading = ref(false)
 const checked1 = ref([])
 const checked2 = ref([])
 const checked3 = ref([])
-const typeList = ref([
-  { label: '不限', value: '-1' },
-  { label: '教育休闲', value: '0' },
-  { label: '包装印刷', value: '1' },
-  { label: '电气自动化', value: '2' },
-  { label: '采矿冶金', value: '3' },
-  { label: '航空航天', value: '4' },
-  { label: '海洋开发', value: '5' },
-  { label: '衣林牧业', value: '6' },
-  { label: '医药与医疗', value: '7' },
-  { label: '电子信息', value: '8' }
-])
-const plateList = ref([
-  { label: '不限', value: '-1' },
-  { label: '汽车电子及新型汽车零部件', value: '0' },
-  { label: '精细化工及天然气化工', value: '1' },
-  { label: '农产品加工及绿色食品', value: '2' },
-  { label: '光电子及智能传感器', value: '3' },
-  { label: '车规级芯片及功率半导体器件', value: '4' },
-  { label: '新能源及动力电池', value: '5' },
-  { label: '生物基新材料', value: '6' },
-  { label: '人工智能及智能机器人', value: '7' },
-  { label: '碳纤维及复合材料', value: '8' },
-  { label: '遥感卫星及航天航空技术', value: '9' },
-  { label: '精密仪器及先进装备', value: '10' },
-  { label: '生物医药及先进医疗器械', value: '11' },
-  { label: '生物制造', value: '12' }
-])
+const typeList = ref([])
+const plateList = ref([])
 // 字典表
-const projectList = ref([])
 const maturityList = ref([])
-const industryList = ref([])
-// 字典表
-const fieldList = ref([])
 const cityList = ref([])
 // 列表
 const list = ref([])
@@ -170,12 +143,17 @@ const searchOther = async () => {
   // // 行业分类
   // result = await dictDataStore.query({ code: 'industry', is_use: '0' })
   // if ($checkRes(result)) industryList.value = result.data
-  // // 技术领域
-  // result = await dictDataStore.query({ code: 'field', is_use: '0' })
-  // if ($checkRes(result)) fieldList.value = result.data
-  // 城市
-  getCity().then((response) => (cityList.value = [{ label: '不限', value: '-1' }, ...response.address]))
+  // 技术领域
+  result = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if ($checkRes(result)) typeList.value = result.data
+
   maturityList.value.unshift({ value: '-1', label: '不限' })
+  result = await regionStore.list({ level: 'city', parent_code: 22 })
+  if ($checkRes(result)) cityList.value = result.data
+  cityList.value.unshift({ code: '-1', name: '不限' })
+  result = await sectorStore.query({ is_use: '0' })
+  if ($checkRes(result)) plateList.value = result.data
+  plateList.value.unshift({ id: '-1', title: '不限' })
 }
 const search = async (query = { skip, limit }) => {
   skip = query.skip

+ 1 - 1
src/views/detail/projectDetail.vue

@@ -1,7 +1,7 @@
 <template>
   <custom-layout class="main">
     <el-col :span="24" class="one">
-      <div class="w_1200">
+      <div class="w_1300">
         <div class="info_1"></div>
         <div class="info_2">
           <div class="info_left">

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 38 - 36
src/views/detail/serviceDetail.vue


+ 1 - 1
src/views/detail/supplyDetail.vue

@@ -1,7 +1,7 @@
 <template>
   <custom-layout class="main">
     <el-col :span="24" class="one">
-      <div class="w_1200">
+      <div class="w_1300">
         <div class="info_1"></div>
         <div class="info_2">
           <div class="area">

+ 21 - 126
src/views/eight/index.vue

@@ -4,15 +4,15 @@
       <el-image class="image" :src="jiqun" fit="fill" />
     </el-col>
     <el-col :span="24" class="two">
-      <div class="w_1200">
+      <div class="w_1300">
         <el-row class="two_1" :gutter="20">
           <el-col :span="6" v-for="(item, index) in list" :key="index" @click="toView(item)">
             <el-row class="list">
-              <el-image class="image" :src="item.url" fit="fill" />
+              <el-image class="image" :src="getUrl(item.file) || eight1" fit="fill" />
               <el-col :span="24" class="other">
-                <el-col :span="24" class="title">{{ item.label }}</el-col>
-                <el-col :span="24" class="friend">合作伙伴</el-col>
-                <el-col :span="24" class="other_1" v-for="(tag, indexx) in item.partner" :key="indexx">{{ tag }}</el-col>
+                <el-col :span="24" class="title">{{ item.title || '暂无' }}</el-col>
+                <el-col :span="24" class="friend" v-if="item.partner && item.partner.length > 0">合作伙伴</el-col>
+                <el-col :span="24" class="other_1" v-for="(tag, indexx) in item.partner" :key="indexx">{{ tag.name }}</el-col>
               </el-col>
             </el-row>
           </el-col>
@@ -23,14 +23,12 @@
 </template>
 
 <script setup>
+// 接口
+import { SectorStore } from '@/store/api/platform/sector'
+const store = SectorStore()
 // 图片引入
 import jiqun from '/images/jiqun.png'
 import eight1 from '/images/rcjs-1.png'
-import eight2 from '/images/rcjs-2.png'
-import eight3 from '/images/rcjs-3.png'
-import eight4 from '/images/rcjs-4.png'
-import eight5 from '/images/rcjs-5.png'
-import eight6 from '/images/rcjs-6.png'
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -39,130 +37,27 @@ const router = useRouter()
 
 // 加载中
 const loading = ref(false)
-const list = ref([
-  {
-    id: '1',
-    label: '人工智能及智能机器人',
-    value: '0',
-    url: eight1,
-    brief: '简介',
-    partner: ['博立', '吉大', '科大讯飞']
-  },
-  {
-    id: '1',
-    label: '精细化工及天然气化工',
-    value: '1',
-    url: eight2,
-    brief: '简介',
-    partner: ['吉化星云']
-  },
-  {
-    id: '1',
-    label: '新能源及动力电池',
-    value: '2',
-    url: eight3,
-    brief: '简介',
-    partner: ['东北师范大学']
-  },
-  {
-    id: '1',
-    label: '精密仪器及先进设备',
-    value: '3',
-    url: eight4,
-    brief: '简介',
-    partner: []
-  },
-  {
-    id: '1',
-    label: '生物基新材料',
-    value: '4',
-    url: eight4,
-    partner: [],
-    brief: '简介'
-  },
-  {
-    id: '1',
-    label: '生物医药及先进医疗器械',
-    value: '5',
-    url: eight3,
-    brief: '简介',
-    partner: ['净月区苏州医工所']
-  },
-  {
-    id: '1',
-    label: '农产品加工及绿色食品',
-    value: '6',
-    url: eight2,
-    brief: '简介',
-    partner: ['绿色食品研究院']
-  },
-  {
-    id: '1',
-    label: '碳纤维及复合材料',
-    value: '7',
-    url: eight1,
-    brief: '简介',
-    partner: ['吉林化纤', '国兴碳纤']
-  },
-  {
-    id: '1',
-    label: '车规级芯片及功率半导体器件',
-    value: '8',
-    url: eight2,
-    brief: '简介',
-    partner: ['华为', '一汽']
-  },
-  {
-    id: '1',
-    label: '光电子及智能传感器',
-    value: '9',
-    url: eight3,
-    brief: '简介',
-    partner: ['长春光机所', '光电信息产业园']
-  },
-  {
-    id: '1',
-    label: '遥感卫星及航天航空',
-    value: '10',
-    url: eight4,
-    brief: '简介',
-    partner: ['卫星研究院', '星网', '长春理工', '长光卫星']
-  },
-  {
-    id: '1',
-    label: '氢能及储能',
-    value: '12',
-    url: eight5,
-    brief: '简介',
-    partner: ['氢能产研院', '长春应化所']
-  },
-  {
-    id: '1',
-    label: '汽车电子及新型汽车零部件',
-    value: '13',
-    url: eight6,
-    brief: '简介',
-    partner: ['富赛', '旗智', '富奥']
-  },
-  {
-    id: '1',
-    label: '生物制造',
-    value: '14',
-    url: eight2,
-    brief: '简介',
-    partner: []
-  }
-])
+const list = ref([])
 // 请求
 onMounted(async () => {
   loading.value = true
   await search()
   loading.value = false
 })
-const search = async () => {}
+const search = async () => {
+  const info = {
+    is_use: '0',
+    status: '1'
+  }
+  const res = await store.query(info)
+  if (res.errcode == '0') list.value = res.data
+}
+const getUrl = (item) => {
+  if (item && item.length > 0) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}` || eight1
+}
 // 查看详情
 const toView = async (item) => {
-  console.log(item)
+  router.push({ path: '/industry/detail', query: { id: item.id || item._id } })
 }
 </script>
 <style scoped lang="scss">

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 27 - 477
src/views/five/index.vue


+ 1 - 1
src/views/four/parts/index.vue

@@ -515,7 +515,7 @@ const getDict = (data, model) => {
   return get(res, 'label')
 }
 const getUrl = (item) => {
-  if (item) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
+  if (item && item.length > 0) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
 }
 // 地区显示
 const getArea = (data) => {

+ 2 - 8
src/views/help/index.vue

@@ -1,15 +1,9 @@
 <template>
   <custom-layout class="main" v-loading="loading">
-    <div class="w_1200">
+    <div class="w_1300">
       <el-row class="help">
         <el-col :span="6" class="left">
-          <a-menu
-            v-model:selectedKeys="selectedKeys"
-            style="width: 256px"
-            mode="inline"
-            :items="menuList"
-            @select="onOpenChange"
-          ></a-menu>
+          <a-menu v-model:selectedKeys="selectedKeys" style="width: 256px" mode="inline" :items="menuList" @select="onOpenChange"></a-menu>
         </el-col>
         <el-col v-if="select === '1'" :span="18" class="right">
           <h2>关于我们</h2>

+ 34 - 54
src/views/nine/index.vue

@@ -11,12 +11,12 @@
           </div>
           <div v-if="!oneShow" class="twoRight">
             <div class="label" v-for="(item, index) in plateList.slice(0, 6)" :key="index">
-              {{ item.label }}
+              {{ item.title }}
             </div>
           </div>
           <div v-else class="twoRight">
             <div class="label" v-for="(item, index) in plateList" :key="index">
-              {{ item.label }}
+              {{ item.title }}
             </div>
           </div>
           <div class="button">
@@ -32,11 +32,24 @@
           <div class="twoLeft">
             <span>技术领域</span>
           </div>
-          <div class="twoRight">
+          <div v-if="!twoShow" class="twoRight">
+            <div class="label" v-for="(item, index) in typeList.slice(0, 10)" :key="index">
+              {{ item.label }}
+            </div>
+          </div>
+          <div v-else class="twoRight">
             <div class="label" v-for="(item, index) in typeList" :key="index">
               {{ item.label }}
             </div>
           </div>
+          <div class="button">
+            <span v-if="!twoShow" @click="twoShow = true">
+              <el-icon><ArrowDown /></el-icon>
+            </span>
+            <span v-else @click="twoShow = false">
+              <el-icon><ArrowUp /></el-icon>
+            </span>
+          </div>
         </div>
         <div class="twoSeacher">
           <div class="twoLeft">
@@ -72,24 +85,11 @@
           <div class="twoLeft">
             <span>所在地</span>
           </div>
-          <div v-if="!twoShow" class="twoRight">
-            <div class="label" v-for="(item, index) in cityList.slice(0, 15)" :key="index">
-              {{ item.label }}
-            </div>
-          </div>
-          <div v-else class="twoRight">
+          <div class="twoRight">
             <div class="label" v-for="(item, index) in cityList" :key="index">
-              {{ item.label }}
+              {{ item.name }}
             </div>
           </div>
-          <div class="button">
-            <span v-if="!twoShow" @click="twoShow = true">
-              <el-icon><ArrowDown /></el-icon>
-            </span>
-            <span v-else @click="twoShow = false">
-              <el-icon><ArrowUp /></el-icon>
-            </span>
-          </div>
         </div>
       </div>
       <div class="thr">
@@ -138,7 +138,6 @@ import bg_9 from '/images/achievement/tec_bg_7.png'
 import one from '/images/achievement/bg-cgyx-list-icon1.png'
 import two from '/images/achievement/bg-cgyx-list-icon2.png'
 import thr from '/images/achievement/bg-cgyx-list-icon3.png'
-import { getCity } from '@/utils/city'
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -146,8 +145,12 @@ const $checkRes = inject('$checkRes')
 // 接口
 import { AchievementStore } from '@/store/api/platform/achievement'
 import { DictDataStore } from '@/store/api/system/dictData'
+import { RegionStore } from '@/store/api/system/region'
+import { SectorStore } from '@/store/api/platform/sector'
 const store = AchievementStore()
 const dictDataStore = DictDataStore()
+const regionStore = RegionStore()
+const sectorStore = SectorStore()
 // 路由
 const router = useRouter()
 
@@ -163,40 +166,12 @@ const total = ref(0)
 const oneShow = ref(false)
 const twoShow = ref(false)
 // 字典表
-const fieldList = ref([])
 const moneyList = ref([])
 const matureList = ref([])
 const sellList = ref([])
-const technologyList = ref([])
 const cityList = ref([])
-const typeList = ref([
-  { label: '不限', value: '-1' },
-  { label: '教育休闲', value: '0' },
-  { label: '包装印刷', value: '1' },
-  { label: '电气自动化', value: '2' },
-  { label: '采矿冶金', value: '3' },
-  { label: '航空航天', value: '4' },
-  { label: '海洋开发', value: '5' },
-  { label: '衣林牧业', value: '6' },
-  { label: '医药与医疗', value: '7' },
-  { label: '电子信息', value: '8' }
-])
-const plateList = ref([
-  { label: '不限', value: '-1' },
-  { label: '汽车电子及新型汽车零部件', value: '0' },
-  { label: '精细化工及天然气化工', value: '1' },
-  { label: '农产品加工及绿色食品', value: '2' },
-  { label: '光电子及智能传感器', value: '3' },
-  { label: '车规级芯片及功率半导体器件', value: '4' },
-  { label: '新能源及动力电池', value: '5' },
-  { label: '生物基新材料', value: '6' },
-  { label: '人工智能及智能机器人', value: '7' },
-  { label: '碳纤维及复合材料', value: '8' },
-  { label: '遥感卫星及航天航空技术', value: '9' },
-  { label: '精密仪器及先进装备', value: '10' },
-  { label: '生物医药及先进医疗器械', value: '11' },
-  { label: '生物制造', value: '12' }
-])
+const typeList = ref([])
+const plateList = ref([])
 // 请求
 onMounted(async () => {
   loading.value = true
@@ -219,9 +194,9 @@ const search = async (query = { skip, limit }) => {
 }
 const searchOther = async () => {
   let result
-  // // 技术领域
-  // result = await dictDataStore.query({ code: 'field', is_use: '0' })
-  // if ($checkRes(result)) fieldList.value = result.data
+  // 技术领域
+  result = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if ($checkRes(result)) typeList.value = result.data
   // 成熟度
   result = await dictDataStore.query({ code: 'mature', is_use: '0' })
   if ($checkRes(result)) matureList.value = result.data
@@ -236,8 +211,13 @@ const searchOther = async () => {
   if ($checkRes(result)) moneyList.value = result.data
   matureList.value.unshift({ value: '-1', label: '不限' })
   sellList.value.unshift({ value: '-1', label: '不限' })
-  // 城市
-  getCity().then((response) => (cityList.value = [{ label: '不限', value: '-1' }, ...response.address]))
+  typeList.value.unshift({ value: '-1', label: '不限' })
+  result = await regionStore.list({ level: 'city', parent_code: 22 })
+  if (result.errcode == '0') cityList.value = result.data
+  cityList.value.unshift({ code: '-1', name: '不限' })
+  result = await sectorStore.query({ is_use: '0' })
+  if (result.errcode == '0') plateList.value = result.data
+  plateList.value.unshift({ id: '-1', title: '不限' })
 }
 // 查看详情
 const toView = async (item) => {

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 225 - 675
src/views/one/index.vue


+ 66 - 96
src/views/seven/index.vue

@@ -11,12 +11,12 @@
           </div>
           <div v-if="!oneShow" class="twoRight">
             <div class="label" v-for="(item, index) in plateList.slice(0, 6)" :key="index">
-              {{ item.label }}
+              {{ item.title }}
             </div>
           </div>
           <div v-else class="twoRight">
             <div class="label" v-for="(item, index) in plateList" :key="index">
-              {{ item.label }}
+              {{ item.title }}
             </div>
           </div>
           <div class="button">
@@ -32,23 +32,13 @@
           <div class="twoLeft">
             <span>技术领域</span>
           </div>
-          <div class="twoRight">
-            <div class="label" v-for="(item, index) in typeList" :key="index">
-              {{ item.label }}
-            </div>
-          </div>
-        </div>
-        <div class="twoSeacher">
-          <div class="twoLeft">
-            <span>所在地</span>
-          </div>
           <div v-if="!twoShow" class="twoRight">
-            <div class="label" v-for="(item, index) in cityList.slice(0, 15)" :key="index">
+            <div class="label" v-for="(item, index) in typeList.slice(0, 10)" :key="index">
               {{ item.label }}
             </div>
           </div>
           <div v-else class="twoRight">
-            <div class="label" v-for="(item, index) in cityList" :key="index">
+            <div class="label" v-for="(item, index) in typeList" :key="index">
               {{ item.label }}
             </div>
           </div>
@@ -61,6 +51,16 @@
             </span>
           </div>
         </div>
+        <div class="twoSeacher">
+          <div class="twoLeft">
+            <span>所在地</span>
+          </div>
+          <div class="twoRight">
+            <div class="label" v-for="(item, index) in cityList" :key="index">
+              {{ item.name }}
+            </div>
+          </div>
+        </div>
       </div>
       <div class="twoTwo">
         <div class="twoTable">
@@ -78,7 +78,7 @@
           </div>
         </div>
         <div class="twoTotal">
-          <el-pagination background layout="prev, pager, next" :total="1000" />
+          <el-pagination background layout="prev, pager, next" :total="total" :page-size="limit" v-model:current-page="currentPage" @current-change="changePage" @size-change="sizeChange" />
         </div>
       </div>
     </div>
@@ -88,7 +88,15 @@
 <script setup>
 // 图片引入
 import lists from '/images/bg-xqk.jpg'
-import { getCity } from '@/utils/city'
+// 接口
+import { SupportStore } from '@/store/api/platform/support'
+import { RegionStore } from '@/store/api/system/region'
+import { SectorStore } from '@/store/api/platform/sector'
+import { DictDataStore } from '@/store/api/system/dictData'
+const store = SupportStore()
+const regionStore = RegionStore()
+const sectorStore = SectorStore()
+const dictDataStore = DictDataStore()
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -100,34 +108,8 @@ const router = useRouter()
 const oneShow = ref(false)
 const twoShow = ref(false)
 const cityList = ref([])
-const typeList = ref([
-  { label: '不限', value: '-1' },
-  { label: '教育休闲', value: '0' },
-  { label: '包装印刷', value: '1' },
-  { label: '电气自动化', value: '2' },
-  { label: '采矿冶金', value: '3' },
-  { label: '航空航天', value: '4' },
-  { label: '海洋开发', value: '5' },
-  { label: '衣林牧业', value: '6' },
-  { label: '医药与医疗', value: '7' },
-  { label: '电子信息', value: '8' }
-])
-const plateList = ref([
-  { label: '不限', value: '-1' },
-  { label: '汽车电子及新型汽车零部件', value: '0' },
-  { label: '精细化工及天然气化工', value: '1' },
-  { label: '农产品加工及绿色食品', value: '2' },
-  { label: '光电子及智能传感器', value: '3' },
-  { label: '车规级芯片及功率半导体器件', value: '4' },
-  { label: '新能源及动力电池', value: '5' },
-  { label: '生物基新材料', value: '6' },
-  { label: '人工智能及智能机器人', value: '7' },
-  { label: '碳纤维及复合材料', value: '8' },
-  { label: '遥感卫星及航天航空技术', value: '9' },
-  { label: '精密仪器及先进装备', value: '10' },
-  { label: '生物医药及先进医疗器械', value: '11' },
-  { label: '生物制造', value: '12' }
-])
+const typeList = ref([])
+const plateList = ref([])
 const column = ref([
   { name: '序号', style: { width: '240px' }, key: 'key' },
   { name: '公司名称', style: { width: '280px' }, key: 'name' },
@@ -135,67 +117,55 @@ const column = ref([
   { name: '登记时间', style: { width: '260px' }, key: 'time' },
   { name: '操作', style: { width: '260px' }, key: 'operation' }
 ])
-const list = ref([
-  {
-    key: '1',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2020-07-01'
-  },
-  {
-    key: '2',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2021-02-09'
-  },
-  {
-    key: '3',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2023-11-11'
-  },
-  {
-    key: '4',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2021-04-21'
-  },
-  {
-    key: '5',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2022-09-11'
-  },
-  {
-    key: '6',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2023-07-51'
-  },
-  {
-    key: '7',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2023-07-51'
-  },
-  {
-    key: '8',
-    name: '长春市XXX有限公司',
-    field: '科技金融',
-    time: '2023-07-51'
-  }
-])
+const searchForm = ref({})
+const list = ref([])
+let skip = 0
+let limit = 8
+const total = ref(0)
 // 请求
 onMounted(async () => {
   loading.value = true
-  // 城市
-  getCity().then((response) => (cityList.value = [{ label: '不限', value: '-1' }, ...response.address]))
+  await searchOther()
+  await search({ skip, limit })
   loading.value = false
 })
+const searchOther = async () => {
+  let res
+  res = await regionStore.list({ level: 'city', parent_code: 22 })
+  if (res.errcode == '0') cityList.value = res.data
+  cityList.value.unshift({ code: '-1', name: '不限' })
+  res = await sectorStore.query({ is_use: '0' })
+  if (res.errcode == '0') plateList.value = res.data
+  plateList.value.unshift({ id: '-1', title: '不限' })
+  // 技术领域
+  res = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if (res.errcode == '0') typeList.value = res.data
+  typeList.value.unshift({ value: '-1', label: '不限' })
+}
+const search = async (query = { skip, limit }) => {
+  skip = query.skip
+  limit = query.limit
+  const info = { skip: query.skip, limit: query.limit, ...searchForm.value }
+  const res = await store.query(info)
+  if (res.errcode == '0') {
+    list.value = res.data
+    total.value = res.total
+  }
+}
 // 查看详情
 const toView = (item) => {
   router.push({ path: '/service/detail', query: { id: item.id || item._id } })
 }
+const currentPage = ref(1)
+// 分页
+const changePage = (page = currentPage.value) => {
+  search({ skip: (page - 1) * limit, limit: limit })
+}
+const sizeChange = (limits) => {
+  limit = limits
+  currentPage.value = 1
+  search({ skip: 0, limit: limit })
+}
 </script>
 <style scoped lang="scss">
 .main {

+ 44 - 128
src/views/six/index.vue

@@ -11,12 +11,12 @@
           </div>
           <div v-if="!oneShow" class="twoRight">
             <div class="label" v-for="(item, index) in plateList.slice(0, 6)" :key="index">
-              {{ item.label }}
+              {{ item.title }}
             </div>
           </div>
           <div v-else class="twoRight">
             <div class="label" v-for="(item, index) in plateList" :key="index">
-              {{ item.label }}
+              {{ item.title }}
             </div>
           </div>
           <div class="button">
@@ -32,30 +32,17 @@
           <div class="twoLeft">
             <span>所在地</span>
           </div>
-          <div v-if="!twoShow" class="twoRight">
-            <div class="label" v-for="(item, index) in cityList.slice(0, 15)" :key="index">
-              {{ item.label }}
-            </div>
-          </div>
-          <div v-else class="twoRight">
+          <div class="twoRight">
             <div class="label" v-for="(item, index) in cityList" :key="index">
-              {{ item.label }}
+              {{ item.name }}
             </div>
           </div>
-          <div class="button">
-            <span v-if="!twoShow" @click="twoShow = true">
-              <el-icon><ArrowDown /></el-icon>
-            </span>
-            <span v-else @click="twoShow = false">
-              <el-icon><ArrowUp /></el-icon>
-            </span>
-          </div>
         </div>
         <div class="twoIpunt">
-          <a-input class="input" v-model:value="value" size="large" placeholder="中试平台/实验室名称" />
-          <a-input class="input" size="large" v-model:value="value" placeholder="建设主体" />
-          <a-input class="input" size="large" v-model:value="value" placeholder="运营主体" />
-          <a-input class="input" size="large" v-model:value="value" placeholder="服务产业领域" />
+          <a-input class="input" size="large" v-model:value="searchForm.name" placeholder="中试平台/实验室名称" />
+          <a-input class="input" size="large" v-model:value="searchForm.build" placeholder="建设主体" />
+          <a-input class="input" size="large" v-model:value="searchForm.operate" placeholder="运营主体" />
+          <a-input class="input" size="large" v-model:value="searchForm.field" placeholder="服务产业领域" />
           <a-button class="button" size="large" type="primary">检索</a-button>
         </div>
       </div>
@@ -65,7 +52,7 @@
         <el-row :gutter="16">
           <el-col :span="6" v-for="(item, index) in list" :key="index" @click="toView(item)">
             <div class="list">
-              <el-image class="image" :src="item.url" fit="cover"> </el-image>
+              <el-image class="image" :src="getUrl(item.file)" fit="cover"> </el-image>
               <el-col :span="24" class="name textOne">
                 <el-tooltip effect="dark" :content="item.name" placement="top">
                   {{ item.name || '暂无名称' }}
@@ -101,7 +88,7 @@
       </div>
     </el-col>
     <el-col :span="24" class="four">
-      <el-pagination background layout="prev, pager, next" :total="1000" />
+      <el-pagination background layout="prev, pager, next" :total="total" :page-size="limit" v-model:current-page="currentPage" @current-change="changePage" @size-change="sizeChange" />
     </el-col>
   </custom-layout>
 </template>
@@ -109,8 +96,13 @@
 <script setup>
 // 图片引入
 import lists from '/images/bg-khal-list.jpg'
-import sever from '/images/sever.png'
-import { getCity } from '@/utils/city'
+// 接口
+import { FootplateStore } from '@/store/api/platform/footplate'
+import { RegionStore } from '@/store/api/system/region'
+import { SectorStore } from '@/store/api/platform/sector'
+const store = FootplateStore()
+const regionStore = RegionStore()
+const sectorStore = SectorStore()
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -120,119 +112,40 @@ const loading = ref(false)
 const router = useRouter()
 // 是否展开
 const oneShow = ref(false)
-const twoShow = ref(false)
 const cityList = ref([])
-const plateList = ref([
-  { label: '不限', value: '-1' },
-  { label: '汽车电子及新型汽车零部件', value: '0' },
-  { label: '精细化工及天然气化工', value: '1' },
-  { label: '农产品加工及绿色食品', value: '2' },
-  { label: '光电子及智能传感器', value: '3' },
-  { label: '车规级芯片及功率半导体器件', value: '4' },
-  { label: '新能源及动力电池', value: '5' },
-  { label: '生物基新材料', value: '6' },
-  { label: '人工智能及智能机器人', value: '7' },
-  { label: '碳纤维及复合材料', value: '8' },
-  { label: '遥感卫星及航天航空技术', value: '9' },
-  { label: '精密仪器及先进装备', value: '10' },
-  { label: '生物医药及先进医疗器械', value: '11' },
-  { label: '生物制造', value: '12' }
-])
+const plateList = ref([])
 // 列表
-const list = ref([
-  {
-    url: sever,
-    name: '粉末冶金新材料中试基地',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  },
-  {
-    url: sever,
-    name: '药物开发中试平台',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  },
-  {
-    url: sever,
-    name: '高端化学制剂实验室',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  },
-  {
-    url: sever,
-    name: '粉末冶金新材料中试基地',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  },
-  {
-    url: sever,
-    name: '粉末冶金新材料中试基地',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  },
-  {
-    url: sever,
-    name: '粉末冶金新材料中试基地',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  },
-  {
-    url: sever,
-    name: '粉末冶金新材料中试基地',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  },
-  {
-    url: sever,
-    name: '粉末冶金新材料中试基地',
-    build: 'xxxx有限公司',
-    operate: 'xxxx有限公司',
-    field: '新材料',
-    address: '长春市蔚山路333号',
-    contacts: '张先生',
-    phone: '13334566543'
-  }
-])
+const searchForm = ref({})
+const list = ref([])
 let skip = 0
 let limit = inject('limit')
 const total = ref(6)
 // 请求
 onMounted(async () => {
   loading.value = true
-  // 城市
-  getCity().then((response) => (cityList.value = [{ label: '不限', value: '-1' }, ...response.address]))
-  await search()
+  await searchOther()
+  await search({ skip, limit })
   loading.value = false
 })
-const search = async () => {}
+const searchOther = async () => {
+  let res
+  res = await regionStore.list({ level: 'city', parent_code: 22 })
+  if (res.errcode == '0') cityList.value = res.data
+  cityList.value.unshift({ code: '-1', name: '不限' })
+  res = await sectorStore.query({ is_use: '0' })
+  if (res.errcode == '0') plateList.value = res.data
+  plateList.value.unshift({ id: '-1', title: '不限' })
+}
+const search = async (query = { skip, limit }) => {
+  skip = query.skip
+  limit = query.limit
+  const info = { skip: query.skip, limit: query.limit, ...searchForm.value }
+  const res = await store.query(info)
+  if (res.errcode == '0') {
+    list.value = res.data
+    total.value = res.total
+  }
+}
 // 查看
 const toView = (item) => {
   router.push({ path: '/platform/detail', query: { id: item.id || item._id } })
@@ -247,6 +160,9 @@ const sizeChange = (limits) => {
   currentPage.value = 1
   search({ skip: 0, limit: limit })
 }
+const getUrl = (item) => {
+  if (item && item.length > 0) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
+}
 </script>
 <style scoped lang="scss">
 .main {

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 24 - 131
src/views/ten/index.vue


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 25 - 19
src/views/thirteen/index.vue


+ 43 - 226
src/views/thirteen/list.vue

@@ -4,7 +4,7 @@
       <el-image class="image" :src="news" fit="fill" />
     </el-col>
     <el-col :span="24" class="two">
-      <div class="w_1200">
+      <div class="w_1300">
         <el-col :span="24" class="two_1">
           <el-row class="two_1_1" :gutter="20">
             <el-col :span="6">
@@ -12,19 +12,15 @@
                 <el-col :span="24" class="top1">
                   <el-carousel :interval="4000" type="card" height="200px" @change="toChange">
                     <el-carousel-item v-for="(item, index) in carouselList" :key="index">
-                      <el-image class="image" :src="item.url" fit="fill" />
+                      <el-image class="image" :src="getfile(item.file)" fit="fill" />
                     </el-carousel-item>
                   </el-carousel>
                 </el-col>
                 <el-col :span="24" class="center1">
-                  <el-col :span="24" class="title">{{ info.name }}</el-col>
-                  <el-col :span="24" class="other_1" v-if="info.client">
-                    委托方: {{ info.client }}
-                  </el-col>
-                  <el-col :span="24" class="other_1" v-if="info.partner">
-                    合作方: {{ info.partner }}
-                  </el-col>
-                  <el-col :span="24" class="other_2">{{ info.brief }}</el-col>
+                  <el-col :span="24" class="title">{{ info.name || '暂无' }}</el-col>
+                  <el-col :span="24" class="other_1" v-if="info.client"> 委托方: {{ info.client || '暂无' }} </el-col>
+                  <el-col :span="24" class="other_1" v-if="info.partner"> 合作方: {{ info.partner || '暂无' }} </el-col>
+                  <el-col :span="24" class="other_2">{{ info.brief || '暂无' }}</el-col>
                 </el-col>
                 <el-col :span="24" class="bottom1">
                   <el-button @click="toView(info)" type="primary">查看详情</el-button>
@@ -33,18 +29,12 @@
             </el-col>
             <el-col :span="18">
               <el-row class="two_1_1_2" :gutter="20">
-                <el-col
-                  :span="6"
-                  class="list"
-                  v-for="(item, index) in list.slice(0, 8)"
-                  :key="index"
-                  @click="toView(item)"
-                >
+                <el-col :span="6" class="list" v-for="(item, index) in list.slice(0, 8)" :key="index" @click="toView(item)">
                   <el-row>
-                    <el-image class="image" :src="item.url" fit="fill" />
+                    <el-image class="image" :src="getfile(item.file)" fit="fill" />
                     <el-col :span="24" class="other">
-                      <el-col :span="24" class="title textOne">{{ item.name }}</el-col>
-                      <el-col :span="24" class="other_2">{{ item.brief }}</el-col>
+                      <el-col :span="24" class="title textOne">{{ item.name || '暂无' }}</el-col>
+                      <el-col :span="24" class="other_2">{{ item.brief || '暂无' }}</el-col>
                     </el-col>
                   </el-row>
                 </el-col>
@@ -59,18 +49,12 @@
           <el-row :gutter="20">
             <el-col :span="18" class="left">
               <el-row class="left_1" :gutter="20">
-                <el-col
-                  :span="6"
-                  class="list"
-                  v-for="(item, index) in list"
-                  :key="index"
-                  @click="toView(item)"
-                >
+                <el-col :span="6" class="list" v-for="(item, index) in list" :key="index" @click="toView(item)">
                   <el-row>
-                    <el-image class="image" :src="item.url" fit="fill" />
+                    <el-image class="image" :src="getfile(item.file)" fit="fill" />
                     <el-col :span="24" class="other">
-                      <el-col :span="24" class="title textOne">{{ item.name }}</el-col>
-                      <el-col :span="24" class="other_2">{{ item.brief }}</el-col>
+                      <el-col :span="24" class="title textOne">{{ item.name || '暂无' }}</el-col>
+                      <el-col :span="24" class="other_2">{{ item.brief || '暂无' }}</el-col>
                     </el-col>
                   </el-row>
                 </el-col>
@@ -90,12 +74,8 @@
                   </el-col>
                   <el-col :span="24" class="content">
                     <a-timeline>
-                      <a-timeline-item
-                        v-for="(item, index) in list"
-                        :key="index"
-                        @click="toView(item)"
-                      >
-                        <div class="name textOne">{{ item.name }}</div>
+                      <a-timeline-item v-for="(item, index) in list" :key="index" @click="toView(item)">
+                        <div class="name textOne">{{ item.name || '暂无' }}</div>
                       </a-timeline-item>
                     </a-timeline>
                   </el-col>
@@ -105,17 +85,7 @@
           </el-row>
           <el-row>
             <el-col :span="24" class="page">
-              <el-pagination
-                background
-                layout="total, prev, pager, next"
-                :page-sizes="[10, 20, 50, 100, 200]"
-                :total="total"
-                :page-size="limit"
-                v-model:current-page="currentPage"
-                @current-change="changePage"
-                @size-change="sizeChange"
-              >
-              </el-pagination>
+              <el-pagination background layout="total, prev, pager, next" :page-sizes="[10, 20, 50, 100, 200]" :total="total" :page-size="limit" v-model:current-page="currentPage" @current-change="changePage" @size-change="sizeChange"> </el-pagination>
             </el-col>
           </el-row>
         </el-col>
@@ -127,199 +97,43 @@
 <script setup>
 // 图片引入
 import news from '/images/news.png'
-import journal1 from '/images/journal_1.jpeg'
-import journal2 from '/images/journal_2.jpeg'
-import journal3 from '/images/journal_3.jpeg'
-import journal4 from '/images/journal_4.jpeg'
 import journal5 from '/images/journal_5.jpg'
 import journal6 from '/images/journal_6.jpg'
-const carouselList = ref([
-  {
-    id: '1',
-    url: journal1,
-    name: '吉林省智能传感器产业链创新发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief: '结合我曾经济发展特色和科研院所技术优势,明确产业发展方向'
-  },
-  {
-    id: '1',
-    url: journal2,
-    name: '吉林省玉米深加工产业链创新发展研究',
-    client: '省工信厅',
-    partner: '省石化院',
-    brief: '针对产业锁条的堵点、断点,明确重需突破的关键共性技术,促进全首玉米深加工高质量发展'
-  },
-  {
-    id: '1',
-    url: journal3,
-    name: '松原市玉米深加工产业园区高质量发展规划',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  }
-])
-const list = ref([
-  {
-    id: '1',
-    url: journal1,
-    name: '吉林省智能传感器产业链创新发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief: '结合我曾经济发展特色和科研院所技术优势,明确产业发展方向'
-  },
-  {
-    id: '1',
-    url: journal2,
-    name: '吉林省玉米深加工产业链创新发展研究',
-    client: '省工信厅',
-    partner: '省石化院',
-    brief: '针对产业锁条的堵点、断点,明确重需突破的关键共性技术,促进全首玉米深加工高质量发展'
-  },
-  {
-    id: '1',
-    url: journal3,
-    name: '松原市玉米深加工产业园区高质量发展规划',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  },
-  {
-    id: '1',
-    url: journal4,
-    name: '吉林省肉牛(加工》产业发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  },
-  {
-    id: '1',
-    url: journal1,
-    name: '吉林省智能传感器产业链创新发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief: '结合我曾经济发展特色和科研院所技术优势,明确产业发展方向'
-  },
-  {
-    id: '1',
-    url: journal2,
-    name: '吉林省玉米深加工产业链创新发展研究',
-    client: '省工信厅',
-    partner: '省石化院',
-    brief: '针对产业锁条的堵点、断点,明确重需突破的关键共性技术,促进全首玉米深加工高质量发展'
-  },
-  {
-    id: '1',
-    url: journal3,
-    name: '松原市玉米深加工产业园区高质量发展规划',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  },
-  {
-    id: '1',
-    url: journal4,
-    name: '吉林省肉牛(加工》产业发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  },
-  {
-    id: '1',
-    url: journal1,
-    name: '吉林省智能传感器产业链创新发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief: '结合我曾经济发展特色和科研院所技术优势,明确产业发展方向'
-  },
-  {
-    id: '1',
-    url: journal2,
-    name: '吉林省玉米深加工产业链创新发展研究',
-    client: '省工信厅',
-    partner: '省石化院',
-    brief: '针对产业锁条的堵点、断点,明确重需突破的关键共性技术,促进全首玉米深加工高质量发展'
-  },
-  {
-    id: '1',
-    url: journal3,
-    name: '松原市玉米深加工产业园区高质量发展规划',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  },
-  {
-    id: '1',
-    url: journal4,
-    name: '吉林省肉牛(加工》产业发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  },
-  {
-    id: '1',
-    url: journal1,
-    name: '吉林省智能传感器产业链创新发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief: '结合我曾经济发展特色和科研院所技术优势,明确产业发展方向'
-  },
-  {
-    id: '1',
-    url: journal2,
-    name: '吉林省玉米深加工产业链创新发展研究',
-    client: '省工信厅',
-    partner: '省石化院',
-    brief: '针对产业锁条的堵点、断点,明确重需突破的关键共性技术,促进全首玉米深加工高质量发展'
-  },
-  {
-    id: '1',
-    url: journal3,
-    name: '松原市玉米深加工产业园区高质量发展规划',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  },
-  {
-    id: '1',
-    url: journal4,
-    name: '吉林省肉牛(加工》产业发展研究',
-    client: '省工信厅',
-    partner: '吉林大学',
-    brief:
-      '以松原市嘉吉生物化工产业园区为研究核心。提出推进产业基础高级化和产业现代化的政策保隐措施'
-  }
-])
+// 接口
+import { NotesStore } from '@/store/api/platform/notes'
+const store = NotesStore()
+const carouselList = ref([])
+const list = ref([])
 let skip = 0
 let limit = inject('limit')
 const total = ref(0)
+const info = ref({})
+
 // 路由
 const router = useRouter()
+const route = useRoute()
 // 加载中
 const loading = ref(false)
-const info = ref({
-  id: '1',
-  url: journal1,
-  name: '吉林省智能传感器产业链创新发展研究',
-  client: '省工信厅',
-  partner: '吉林大学',
-  brief: '结合我曾经济发展特色和科研院所技术优势,明确产业发展方向'
-})
 // 请求
 onMounted(async () => {
   loading.value = true
-  await search()
+  await search({ skip, limit })
   loading.value = false
 })
-const search = async () => {}
+const search = async (query = { skip, limit }) => {
+  if (route.query.id) {
+    skip = query.skip
+    limit = query.limit
+    const info = { skip: query.skip, limit: query.limit, journal: route.query.id }
+    const res = await store.query(info)
+    if (res.errcode == '0') {
+      carouselList.value = res.data.slice(0, 3)
+      info.value = carouselList.value[0]
+      list.value = res.data
+      total.value = res.total
+    }
+  }
+}
 // 轮播图改变
 const toChange = async (e) => {
   info.value = carouselList.value[e]
@@ -328,6 +142,9 @@ const toChange = async (e) => {
 const toView = async (item) => {
   router.push({ path: '/study/detail', query: { id: item.id || item._id } })
 }
+const getfile = (item) => {
+  if (item && item.length > 0) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
+}
 </script>
 <style scoped lang="scss">
 .main {

+ 23 - 64
src/views/thr/index.vue

@@ -36,52 +36,22 @@ import supply from './parts/supply.vue'
 // 加载中
 const loading = ref(false)
 const active = ref('0')
-const $checkRes = inject('$checkRes')
-import { getCity } from '@/utils/city'
-import { DictDataStore } from '@/store/api/system/dictData'
 import { DemandStore } from '@/store/api/platform/demand'
 import { SupplyStore } from '@/store/api/platform/supply'
+import { RegionStore } from '@/store/api/system/region'
+import { SectorStore } from '@/store/api/platform/sector'
+import { DictDataStore } from '@/store/api/system/dictData'
+const regionStore = RegionStore()
+const sectorStore = SectorStore()
 const demandStore = DemandStore()
 const supplyStore = SupplyStore()
 const dictDataStore = DictDataStore()
 // 路由
 const route = useRoute()
 // 字典表
-const isUseList = ref([])
-const statusList = ref([])
-const methodList = ref([])
-const urgentList = ref([])
-const fieldList = ref([])
 const cityList = ref([])
-const demandList = ref([])
-const typeList = ref([
-  { label: '不限', value: '-1' },
-  { label: '教育休闲', value: '0' },
-  { label: '包装印刷', value: '1' },
-  { label: '电气自动化', value: '2' },
-  { label: '采矿冶金', value: '3' },
-  { label: '航空航天', value: '4' },
-  { label: '海洋开发', value: '5' },
-  { label: '衣林牧业', value: '6' },
-  { label: '医药与医疗', value: '7' },
-  { label: '电子信息', value: '8' }
-])
-const plateList = ref([
-  { label: '不限', value: '-1' },
-  { label: '汽车电子及新型汽车零部件', value: '0' },
-  { label: '精细化工及天然气化工', value: '1' },
-  { label: '农产品加工及绿色食品', value: '2' },
-  { label: '光电子及智能传感器', value: '3' },
-  { label: '车规级芯片及功率半导体器件', value: '4' },
-  { label: '新能源及动力电池', value: '5' },
-  { label: '生物基新材料', value: '6' },
-  { label: '人工智能及智能机器人', value: '7' },
-  { label: '碳纤维及复合材料', value: '8' },
-  { label: '遥感卫星及航天航空技术', value: '9' },
-  { label: '精密仪器及先进装备', value: '10' },
-  { label: '生物医药及先进医疗器械', value: '11' },
-  { label: '生物制造', value: '12' }
-])
+const typeList = ref([])
+const plateList = ref([])
 // 列表
 const list = ref([])
 let skip = 0
@@ -94,13 +64,25 @@ const toTab = async (status) => {
 }
 // 请求
 onMounted(async () => {
+  loading.value = true
   if (route.query.type) active.value = route.query.type
-  getCity().then((response) => {
-    cityList.value = response.address
-  })
   await searchOther()
-  await search()
+  await search({ skip, limit })
+  loading.value = false
 })
+const searchOther = async () => {
+  let res
+  res = await regionStore.list({ level: 'city', parent_code: 22 })
+  if (res.errcode == '0') cityList.value = res.data
+  cityList.value.unshift({ code: '-1', name: '不限' })
+  res = await sectorStore.query({ is_use: '0' })
+  if (res.errcode == '0') plateList.value = res.data
+  plateList.value.unshift({ id: '-1', title: '不限' })
+  // 技术领域
+  res = await dictDataStore.query({ code: 'field', is_use: '0' })
+  if (res.errcode == '0') typeList.value = res.data
+  typeList.value.unshift({ value: '-1', label: '不限' })
+}
 const search = async (query = { skip, limit }) => {
   skip = query.skip
   limit = query.limit
@@ -118,29 +100,6 @@ const search = async (query = { skip, limit }) => {
     total.value = res.total
   }
 }
-const searchOther = async () => {
-  let result
-  // // 是否使用
-  // result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
-  // if ($checkRes(result)) isUseList.value = result.data
-  // // 状态
-  // result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
-  // if ($checkRes(result)) statusList.value = result.data
-  // // 合作方式
-  // result = await dictDataStore.query({ code: 'method', is_use: '0' })
-  // if ($checkRes(result)) methodList.value = result.data
-  // // 需求紧急度
-  // result = await dictDataStore.query({ code: 'urgent', is_use: '0' })
-  // if ($checkRes(result)) urgentList.value = result.data
-  // // 技术领域
-  // result = await dictDataStore.query({ code: 'field', is_use: '0' })
-  // if ($checkRes(result)) fieldList.value = result.data
-  // // 需求状态
-  // result = await dictDataStore.query({ code: 'demandStatus', is_use: '0' })
-  // if ($checkRes(result)) demandList.value = result.data
-  // 城市
-  getCity().then((response) => (cityList.value = [{ label: '不限', value: '-1' }, ...response.address]))
-}
 const currentPage = ref(1)
 // 分页
 const changePage = (page = currentPage.value) => {

+ 20 - 20
src/views/thr/parts/demand.vue

@@ -5,21 +5,21 @@
         <div class="demandOneLeft">
           <span>行业</span>
         </div>
-        <div v-if="!twoShow" class="demandOneRight">
+        <div v-if="!oneShow" class="demandOneRight">
           <div class="label" v-for="(item, index) in plateList.slice(0, 6)" :key="index">
-            {{ item.label }}
+            {{ item.title }}
           </div>
         </div>
         <div v-else class="demandOneRight">
           <div class="label" v-for="(item, index) in plateList" :key="index">
-            {{ item.label }}
+            {{ item.title }}
           </div>
         </div>
         <div class="button">
-          <span v-if="!twoShow" @click="twoShow = true">
+          <span v-if="!oneShow" @click="oneShow = true">
             <el-icon><ArrowDown /></el-icon>
           </span>
-          <span v-else @click="twoShow = false">
+          <span v-else @click="oneShow = false">
             <el-icon><ArrowUp /></el-icon>
           </span>
         </div>
@@ -28,35 +28,35 @@
         <div class="demandOneLeft">
           <span>技术领域</span>
         </div>
-        <div class="demandOneRight">
-          <div class="label" v-for="(item, index) in typeList" :key="index">
-            {{ item.label }}
-          </div>
-        </div>
-      </div>
-      <div class="demandSeacher">
-        <div class="demandOneLeft">
-          <span>所在地</span>
-        </div>
-        <div v-if="!oneShow" class="demandOneRight">
-          <div class="label" v-for="(item, index) in cityList.slice(0, 15)" :key="index">
+        <div v-if="!twoShow" class="demandOneRight">
+          <div class="label" v-for="(item, index) in typeList.slice(0, 10)" :key="index">
             {{ item.label }}
           </div>
         </div>
         <div v-else class="demandOneRight">
-          <div class="label" v-for="(item, index) in cityList" :key="index">
+          <div class="label" v-for="(item, index) in typeList" :key="index">
             {{ item.label }}
           </div>
         </div>
         <div class="button">
-          <span v-if="!oneShow" @click="oneShow = true">
+          <span v-if="!twoShow" @click="twoShow = true">
             <el-icon><ArrowDown /></el-icon>
           </span>
-          <span v-else @click="oneShow = false">
+          <span v-else @click="twoShow = false">
             <el-icon><ArrowUp /></el-icon>
           </span>
         </div>
       </div>
+      <div class="demandSeacher">
+        <div class="demandOneLeft">
+          <span>所在地</span>
+        </div>
+        <div class="demandOneRight">
+          <div class="label" v-for="(item, index) in cityList" :key="index">
+            {{ item.name }}
+          </div>
+        </div>
+      </div>
     </div>
     <div class="demandTwo">
       <div class="demandTable">

+ 14 - 14
src/views/thr/parts/supply.vue

@@ -7,12 +7,12 @@
         </div>
         <div v-if="!oneShow" class="demandOneRight">
           <div class="label" v-for="(item, index) in plateList.slice(0, 6)" :key="index">
-            {{ item.label }}
+            {{ item.title }}
           </div>
         </div>
         <div v-else class="demandOneRight">
           <div class="label" v-for="(item, index) in plateList" :key="index">
-            {{ item.label }}
+            {{ item.title }}
           </div>
         </div>
         <div class="button">
@@ -28,23 +28,13 @@
         <div class="demandOneLeft">
           <span>技术领域</span>
         </div>
-        <div class="demandOneRight">
-          <div class="label" v-for="(item, index) in typeList" :key="index">
-            {{ item.label }}
-          </div>
-        </div>
-      </div>
-      <div class="demandSeacher">
-        <div class="demandOneLeft">
-          <span>所在地</span>
-        </div>
         <div v-if="!twoShow" class="demandOneRight">
-          <div class="label" v-for="(item, index) in cityList.slice(0, 15)" :key="index">
+          <div class="label" v-for="(item, index) in typeList.slice(0, 10)" :key="index">
             {{ item.label }}
           </div>
         </div>
         <div v-else class="demandOneRight">
-          <div class="label" v-for="(item, index) in cityList" :key="index">
+          <div class="label" v-for="(item, index) in typeList" :key="index">
             {{ item.label }}
           </div>
         </div>
@@ -57,6 +47,16 @@
           </span>
         </div>
       </div>
+      <div class="demandSeacher">
+        <div class="demandOneLeft">
+          <span>所在地</span>
+        </div>
+        <div class="demandOneRight">
+          <div class="label" v-for="(item, index) in cityList" :key="index">
+            {{ item.name }}
+          </div>
+        </div>
+      </div>
     </div>
     <div class="demandTwo">
       <div class="demandTable">

+ 1 - 1
src/views/two/index.vue

@@ -135,7 +135,7 @@ const toMore = (type) => {
 .main {
   .one {
     margin: 0 0 10px 0;
-    padding: 10px;
+    padding: 0 0 10px 0;
     background-image: url(/images/information.jpg);
     background-position: center center;
     background-repeat: no-repeat;

+ 11 - 63
src/views/two/parts/demand.vue

@@ -2,110 +2,58 @@
   <div class="demand">
     <el-form ref="DemandRules" :model="form" :rules="rules" class="form">
       <el-form-item label="需求名称" prop="name">
-        <el-input size="large" clearable v-model="form.name" placeholder="请输入需求名称">
-        </el-input>
+        <el-input size="large" clearable v-model="form.name" placeholder="请输入需求名称"> </el-input>
       </el-form-item>
 
       <el-form-item label="行业领域" prop="field">
         <el-select size="large" v-model="form.field" clearable placeholder="请选择行业领域">
-          <el-option
-            v-for="(item, index) in fieldList"
-            :key="index"
-            :label="item.label"
-            :value="item.value"
-          />
+          <el-option v-for="(item, index) in fieldList" :key="index" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
 
       <el-form-item label="需求紧急度" prop="urgent">
         <el-select size="large" v-model="form.urgent" clearable placeholder="请选择需求紧急度">
-          <el-option
-            v-for="(item, index) in urgentList"
-            :key="index"
-            :label="item.label"
-            :value="item.value"
-          />
+          <el-option v-for="(item, index) in urgentList" :key="index" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
 
       <el-form-item label="合作方式" prop="method">
         <el-select size="large" v-model="form.method" clearable placeholder="请选择合作方式">
-          <el-option
-            v-for="(item, index) in methodList"
-            :key="index"
-            :label="item.label"
-            :value="item.value"
-          />
+          <el-option v-for="(item, index) in methodList" :key="index" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
 
       <el-form-item label="价格(万元)" prop="money">
-        <el-input size="large" clearable v-model="form.money" placeholder="请输入价格(万元)">
-        </el-input>
+        <el-input size="large" clearable v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
       </el-form-item>
 
       <el-form-item label="需求地区" prop="area">
-        <el-cascader
-          size="large"
-          v-model="form.area"
-          :props="{ value: 'label', label: 'label' }"
-          :options="cityList"
-          style="width: 100%"
-        />
+        <el-cascader size="large" v-model="form.area" :props="{ value: 'label', label: 'label' }" :options="cityList" style="width: 100%" />
       </el-form-item>
 
       <el-form-item label="有效期" prop="time">
-        <el-date-picker
-          size="large"
-          v-model="form.time"
-          type="daterange"
-          format="YYYY-MM-DD"
-          value-format="YYYY-MM-DD"
-          range-separator="至"
-          start-placeholder="开始时间"
-          end-placeholder="结束时间"
-        />
+        <el-date-picker size="large" v-model="form.time" type="daterange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
       </el-form-item>
 
       <el-form-item label="是否启用" prop="is_use">
         <el-radio-group v-model="form.is_use">
-          <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
-            item.label
-          }}</el-radio>
+          <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{ item.label }}</el-radio>
         </el-radio-group>
       </el-form-item>
       <el-row :gutter="20" align="middle">
         <el-col :span="12">
           <el-form-item label="上传图片" prop="file">
-            <custom-upload
-              model="file"
-              :list="form.file"
-              :limit="1"
-              url="/files/web/template_demand/upload"
-              @change="onUpload"
-            ></custom-upload>
+            <custom-upload model="file" :list="form.file" :limit="1" url="/files/web/cxyy_demand/upload" @change="onUpload"></custom-upload>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="上传视频" prop="video">
-            <custom-upload
-              model="video"
-              :list="form.video"
-              :limit="1"
-              url="/files/web/template_demand/upload"
-              @change="onUpload"
-            ></custom-upload>
+            <custom-upload model="video" :list="form.video" :limit="1" url="/files/web/cxyy_demand/upload" @change="onUpload"></custom-upload>
           </el-form-item>
         </el-col>
       </el-row>
       <el-form-item label="简介" prop="brief">
-        <el-input
-          size="large"
-          v-model="form.brief"
-          :autosize="{ minRows: 2, maxRows: 8 }"
-          type="textarea"
-          placeholder="请输入简介"
-        />
+        <el-input size="large" v-model="form.brief" :autosize="{ minRows: 2, maxRows: 8 }" type="textarea" placeholder="请输入简介" />
       </el-form-item>
       <el-col :span="24" class="button">
         <el-button type="primary" @click="submitForm(DemandRules)">发布</el-button>

+ 10 - 56
src/views/two/parts/supply.vue

@@ -2,96 +2,50 @@
   <div class="supply">
     <el-form ref="SupplyRules" :model="form" :rules="rules" class="form">
       <el-form-item label="供应名称" prop="name">
-        <el-input size="large" clearable v-model="form.name" placeholder="请输入供应名称">
-        </el-input>
+        <el-input size="large" clearable v-model="form.name" placeholder="请输入供应名称"> </el-input>
       </el-form-item>
       <el-form-item label="行业领域" prop="field">
         <el-select size="large" v-model="form.field" clearable placeholder="请选择行业领域">
-          <el-option
-            v-for="(item, index) in fieldList"
-            :key="index"
-            :label="item.label"
-            :value="item.value"
-          />
+          <el-option v-for="(item, index) in fieldList" :key="index" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
 
       <el-form-item label="供应紧急度" prop="urgent">
         <el-select size="large" v-model="form.urgent" clearable placeholder="请选择供应紧急度">
-          <el-option
-            v-for="(item, index) in urgentList"
-            :key="index"
-            :label="item.label"
-            :value="item.value"
-          />
+          <el-option v-for="(item, index) in urgentList" :key="index" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
       <el-form-item label="合作方式" prop="method">
         <el-select size="large" v-model="form.method" clearable placeholder="请选择合作方式">
-          <el-option
-            v-for="(item, index) in methodList"
-            :key="index"
-            :label="item.label"
-            :value="item.value"
-          />
+          <el-option v-for="(item, index) in methodList" :key="index" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
 
       <el-form-item label="价格(万元)" prop="money">
-        <el-input size="large" clearable v-model="form.money" placeholder="请输入价格(万元)">
-        </el-input>
+        <el-input size="large" clearable v-model="form.money" placeholder="请输入价格(万元)"> </el-input>
       </el-form-item>
 
       <el-form-item label="供应地区" prop="area">
-        <el-cascader
-          size="large"
-          v-model="form.area"
-          :props="{ value: 'label', label: 'label' }"
-          :options="cityList"
-          style="width: 100%"
-        />
+        <el-cascader size="large" v-model="form.area" :props="{ value: 'label', label: 'label' }" :options="cityList" style="width: 100%" />
       </el-form-item>
 
       <el-form-item label="有效期" prop="time">
-        <el-date-picker
-          size="large"
-          v-model="form.time"
-          type="daterange"
-          format="YYYY-MM-DD"
-          value-format="YYYY-MM-DD"
-          range-separator="至"
-          start-placeholder="开始时间"
-          end-placeholder="结束时间"
-        />
+        <el-date-picker size="large" v-model="form.time" type="daterange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
       </el-form-item>
       <el-form-item label="是否启用" prop="is_use">
         <el-radio-group v-model="form.is_use">
-          <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{
-            item.label
-          }}</el-radio>
+          <el-radio v-for="(item, index) in isUseList" :key="index" :value="item.value">{{ item.label }}</el-radio>
         </el-radio-group>
       </el-form-item>
       <el-row :gutter="20" align="middle">
         <el-col :span="12">
           <el-form-item label="上传图片" prop="file">
-            <custom-upload
-              model="file"
-              :list="form.file"
-              :limit="1"
-              url="/files/web/template_demand/upload"
-              @change="onUpload"
-            ></custom-upload>
+            <custom-upload model="file" :list="form.file" :limit="1" url="/files/web/cxyy_demand/upload" @change="onUpload"></custom-upload>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="上传视频" prop="video">
-            <custom-upload
-              model="video"
-              :list="form.video"
-              :limit="1"
-              url="/files/web/template_demand/upload"
-              @change="onUpload"
-            ></custom-upload>
+            <custom-upload model="video" :list="form.video" :limit="1" url="/files/web/cxyy_demand/upload" @change="onUpload"></custom-upload>
           </el-form-item>
         </el-col>
       </el-row>

+ 2 - 2
vite.config.js

@@ -37,7 +37,7 @@ export default defineConfig(({ mode }) => {
       open: true,
       proxy: {
         '/files': {
-          target: 'http://192.168.1.197', // https://broadcast.waityou24.cn
+          target: 'http://10.120.114.6:19700', // https://broadcast.waityou24.cn
           changeOrigin: true
         },
         /**
@@ -45,7 +45,7 @@ export default defineConfig(({ mode }) => {
          */
         [env.VITE_APP_BASE_API]: {
           changeOrigin: true,
-          target: 'http://127.0.0.1:9700'
+          target: 'http://127.0.0.1:19700'
         }
       }
     },