浏览代码

修改收藏

zs 9 月之前
父节点
当前提交
b1f22f932f

+ 8 - 1
src/components/custom/custom-layout.vue

@@ -47,7 +47,7 @@
       <el-col :span="24" class="header_2">
         <div class="list_1300">
           <el-col :span="24" class="list">
-            <div class="text" v-for="(item, index) in data" @click="selectMenu(item.route)" :class="[item.hover == '1' ? 'menuTrue' : '']" :style="{ padding: isIncubator ? '0 29px' : '0 37px' }" :key="index" @mouseover="handleMouseOver(index)" @mouseout="handleMousOut(index)">
+            <div class="text" v-for="(item, index) in data" @click="selectMenu(item.route)" :class="[item.hover == '1' ? 'menuTrue' : '']" :style="{ padding: isIncubator ? '0 37px' : hasbrain ? '0 37px' : '0 52px' }" :key="index" @mouseover="handleMouseOver(index)" @mouseout="handleMousOut(index)">
               {{ item.title }}
             </div>
           </el-col>
@@ -103,6 +103,7 @@ const footInfos = ref({})
 const data = ref([])
 const info = ref({})
 const isIncubator = ref(false)
+const hasbrain = ref(false)
 // 请求
 onMounted(async () => {
   search()
@@ -119,6 +120,12 @@ const search = async () => {
     if (hasIncubator) isIncubator.value = true
   }
   if (!isIncubator.value) menus = menus.filter((f) => f.key !== '11')
+
+  // 特定用户查看产业大脑
+  if (user.value && user.value.id == 17) hasbrain.value = true
+  else hasbrain.value = false
+  if (!hasbrain.value) menus = menus.filter((f) => f.key !== '12')
+
   data.value = menus
 
   // 基础设置

+ 10 - 1
src/store/api/platform/collection.js

@@ -13,6 +13,14 @@ export const CollectionStore = defineStore('collection', () => {
     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
@@ -36,10 +44,11 @@ export const CollectionStore = defineStore('collection', () => {
   }
   return {
     query,
+    list,
+    cancel,
     fetch,
     create,
     update,
-    cancel,
     del
   }
 })

+ 54 - 35
src/views/center/collection.vue

@@ -5,7 +5,7 @@
         <el-col :span="24" class="one">
           <div class="one_left">
             <span>收藏分类</span>
-            <el-select v-model="searchForm.type" placeholder="请选择" style="width: 240px">
+            <el-select v-model="searchForm.type" placeholder="请选择" style="width: 240px" @change="search">
               <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value" />
             </el-select>
           </div>
@@ -18,17 +18,17 @@
             <template #empty>
               <el-empty description="暂无数据" />
             </template>
-            <el-table-column prop="name" align="center" label="需求名称" />
-            <el-table-column prop="created_time" align="center" label="发布时间" width="180" />
-            <el-table-column prop="status" align="center" label="状态" width="180">
+            <el-table-column prop="source_name" align="center" label="名称" />
+            <el-table-column prop="created_time" align="center" label="收藏时间" width="180" />
+            <el-table-column prop="status" align="center" label="来源" width="180">
               <template #default="scope">
-                <div>{{ getDict(scope.row.status, 'status') }}</div>
+                <div>{{ getDict(scope.row.type, 'type') }}</div>
               </template>
             </el-table-column>
             <el-table-column align="center" label="操作" width="180">
               <template #default="{ row }">
-                <el-link :underline="false" type="primary" size="mini" @click="toEdit(row)" style="margin-right: 10px">修改</el-link>
-                <el-link :underline="false" type="danger" size="mini" @click="toDelete(row)"> 删除 </el-link>
+                <el-link :underline="false" type="primary" size="mini" @click="toView(row)" style="margin-right: 10px">查看</el-link>
+                <el-link :underline="false" type="danger" size="mini" @click="toDelete(row)"> 取消收藏 </el-link>
               </template>
             </el-table-column>
           </el-table>
@@ -48,9 +48,12 @@ const $checkRes = inject('$checkRes')
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+// 路由
+const router = useRouter()
+
 // 接口
-import { DemandStore } from '@/store/api/platform/demand'
-const store = DemandStore()
+import { CollectionStore } from '@/store/api/platform/collection'
+const store = CollectionStore()
 import { DictDataStore } from '@/store/api/system/dictData'
 const dictDataStore = DictDataStore()
 // 加载中
@@ -63,15 +66,7 @@ const total = ref(0)
 const currentPage = ref(1)
 const searchForm = ref({})
 // 字典表
-const statusList = ref([])
-const typeList = ref([
-  { value: '1', label: '全部' },
-  { value: '2', label: '需求' },
-  { value: '3', label: '成果' },
-  { value: '4', label: '项目' },
-  { value: '5', label: '专家' },
-  { value: '5', label: '企业' }
-])
+const typeList = ref([])
 // 请求
 onMounted(async () => {
   loading.value = true
@@ -80,34 +75,58 @@ onMounted(async () => {
   loading.value = false
 })
 const search = async (query = { skip, limit }) => {
-  // skip = query.skip
-  // limit = query.limit
-  // const info = {
-  //   skip: query.skip,
-  //   limit: query.limit,
-  //   user: user.value.id,
-  // ...searchForm.value
-  // }
-  // const res = await store.list(info)
-  // if (res.errcode == '0') {
-  //   list.value = res.data
-  //   total.value = res.total
-  // }
+  skip = query.skip
+  limit = query.limit
+  const info = {
+    skip: query.skip,
+    limit: query.limit,
+    user: user.value.id,
+    ...searchForm.value
+  }
+  const res = await store.list(info)
+  if (res.errcode == '0') {
+    list.value = res.data
+    total.value = res.total
+  }
 }
 const searchOther = async () => {
   let result
-  // 状态
-  result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
-  if ($checkRes(result)) statusList.value = result.data
+  // 类型
+  result = await dictDataStore.query({ code: 'collectType', is_use: '0' })
+  if ($checkRes(result)) typeList.value = result.data
 }
 // 字典数据转换
 const getDict = (data, model) => {
   if (data) {
     let res
-    if (model == 'status') res = statusList.value.find((f) => f.value == data)
+    if (model == 'type') res = typeList.value.find((f) => f.value == data)
     return get(res, 'label')
   }
 }
+// 查看
+const toView = (data) => {
+  if (data.type == 'achievement') router.push({ path: '/achievement/detail', query: { id: data.source } })
+  if (data.type == 'company') router.push({ path: '/company/detail', query: { id: data.source } })
+  if (data.type == 'demand') router.push({ path: '/demand/detail', query: { id: data.source } })
+  if (data.type == 'expert') router.push({ path: '/expert/detail', query: { id: data.source } })
+  if (data.type == 'match') router.push({ path: '/match/detail', query: { id: data.source } })
+  if (data.type == 'news') router.push({ path: '/news/detail', query: { id: data.source } })
+  if (data.type == 'footplate') router.push({ path: '/platform/detail', query: { id: data.source } })
+  if (data.type == 'project') router.push({ path: '/project/detail', query: { id: data.source } })
+  if (data.type == 'support') router.push({ path: '/service/detail', query: { id: data.source } })
+  if (data.type == 'supply') router.push({ path: '/supply/detail', query: { id: data.source } })
+}
+// 删除
+const toDelete = (data) => {
+  ElMessageBox.confirm(`您确认取消收藏?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' })
+    .then(async () => {
+      const res = await store.del(data.id)
+      if ($checkRes(res, true)) {
+        search({ skip, limit })
+      }
+    })
+    .catch(() => {})
+}
 // 分页
 const changePage = (page = currentPage.value) => {
   search({ skip: (page - 1) * limit, limit: limit })

+ 24 - 0
src/views/detail/achievementDetail.vue

@@ -117,6 +117,11 @@ import icon9 from '/images/achievement/cg-detail-icon9.png'
 // 接口
 import { AchievementStore } from '@/store/api/platform/achievement'
 const store = AchievementStore()
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -163,6 +168,25 @@ const toView = async (item) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'achievement',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 24 - 0
src/views/detail/companyDetail.vue

@@ -57,6 +57,11 @@ import { get } from 'lodash-es'
 // 接口
 import { CompanyStore } from '@/store/api/user/company'
 const store = CompanyStore()
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -124,6 +129,25 @@ const getUrl = (item) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'company',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 24 - 0
src/views/detail/demandDetail.vue

@@ -86,6 +86,11 @@ import { DictDataStore } from '@/store/api/system/dictData'
 import { DemandStore } from '@/store/api/platform/demand'
 const store = DemandStore()
 const dictDataStore = DictDataStore()
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -187,6 +192,25 @@ const toView = (item) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'demand',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 25 - 0
src/views/detail/expertDetail.vue

@@ -97,6 +97,12 @@
 import userLogo from '/images/userLogo.png'
 import { ExpertStore } from '@/store/api/user/expert'
 const store = ExpertStore()
+
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
@@ -152,6 +158,25 @@ const toActive = (item) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'expert',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 24 - 0
src/views/detail/matchDetail.vue

@@ -147,6 +147,11 @@ import { SignStore } from '@/store/api/platform/sign'
 const dictDataStore = DictDataStore()
 const store = MatchStore()
 const signStore = SignStore()
+
+// 收藏
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 // 加载中
 const loading = ref(false)
 // 路由
@@ -262,6 +267,25 @@ const submitForm = async (formEl) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'match',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 // provide

+ 24 - 0
src/views/detail/newsDetail.vue

@@ -110,6 +110,11 @@ const projectStore = ProjectStore()
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+
+// 收藏
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 // 路由
 const router = useRouter()
 const route = useRoute()
@@ -179,6 +184,25 @@ const toView = (item, type) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'news',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 25 - 0
src/views/detail/platformDetail.vue

@@ -108,6 +108,12 @@ const store = FootplateStore()
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 // 加载中
 const loading = ref(false)
 const route = useRoute()
@@ -149,6 +155,25 @@ const getUrl = (item, type) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'footplate',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 25 - 0
src/views/detail/projectDetail.vue

@@ -145,6 +145,12 @@ const expertStore = ExpertStore()
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 // 加载中
 const loading = ref(false)
 const is_show = ref(false)
@@ -238,6 +244,25 @@ const toClose = () => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'project',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 // provide

+ 25 - 0
src/views/detail/serviceDetail.vue

@@ -77,6 +77,12 @@ const store = SupportStore()
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 // 加载中
 const loading = ref(false)
 // 路由
@@ -116,6 +122,25 @@ const getUrl = (item) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'support',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 25 - 0
src/views/detail/supplyDetail.vue

@@ -88,6 +88,12 @@ import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
 const $checkRes = inject('$checkRes')
+
+// 收藏
+import moment from 'moment'
+import { CollectionStore } from '@/store/api/platform/collection'
+const collectionStore = CollectionStore()
+
 // 加载中
 const loading = ref(false)
 // 路由
@@ -175,6 +181,25 @@ const toView = (item) => {
 const toCollect = async () => {
   if (user.value.id) {
     info.value.is_collection = !info.value.is_collection
+    let res
+    let message
+    const data = {
+      user: user.value.id,
+      source: info.value.id,
+      type: 'supply',
+      time: moment().format('YYYY-MM-DD')
+    }
+    if (info.value.is_collection) {
+      message = '收藏成功'
+      res = await collectionStore.create(data)
+    } else {
+      message = '取消收藏成功'
+      res = await collectionStore.cancel(data)
+    }
+    if (res.errcode === 0) {
+      ElMessage({ message, type: 'success' })
+      await search()
+    }
   } else ElMessage({ message: '未登录!', type: 'error' })
 }
 </script>

+ 7 - 7
src/views/one/index.vue

@@ -8,9 +8,9 @@
           <div class="remark">成果征集入口</div>
         </div>
         <div class="left_more left_2" @click="toComon('/center/basic', '0')">
-          <div class="name">个人中心</div>
-          <div class="english">PERSONAL CENTER</div>
-          <div class="remark">个人信息入口</div>
+          <div class="name">信息发布</div>
+          <div class="english">INFORMATION DELIVERY</div>
+          <div class="remark">信息发布入口</div>
         </div>
         <div class="left_more left_3" @click="toComon('/four', '1')">
           <div class="name">信息检索</div>
@@ -70,7 +70,7 @@
         <div class="title">赛事推广</div>
       </div>
       <div class="thr_2">
-        <div class="left">
+        <div class="left" v-if="matchInfo && matchInfo.id">
           <el-image v-if="matchInfo.file && matchInfo.file.length > 0" class="image" :src="getUrl(matchInfo.file, 'array')" fit="cover">
             <template v-slot:error>
               <el-image class="image" :src="match_3" fit="fill" />
@@ -181,7 +181,7 @@ onMounted(async () => {
   loading.value = false
 })
 const searchOther = async () => {
-  const info = { skip: 0, limit: 10, is_use: '0', status: '1' }
+  const info = { skip: 0, limit: 10, is_use: '0', is_show: '0', status: '1' }
   let res
   // 政策新闻
   res = await newsStore.query({ ...info })
@@ -202,7 +202,7 @@ const searchOther = async () => {
   }
 }
 const searchMatch = async () => {
-  const info = { skip: 0, limit: 5, is_use: '0', status: '1' }
+  const info = { skip: 0, limit: 5, is_use: '0', is_show: '0', status: '1' }
   const res = await matchStore.query(info)
   if (res.errcode == '0') {
     matchList.value = res.data.slice(1, 5)
@@ -426,7 +426,7 @@ const getUrl = (item, type) => {
   .thr_2 {
     display: flex;
     .left {
-      width: 598px;
+      width: 580px;
       padding: 10px;
       transition: box-shadow 0.3s ease; /* 添加过渡效果,使阴影的出现更平滑 */
       .image {