guhongwei 4 éve
szülő
commit
42b4c19099

+ 9 - 1
src/router/index.js

@@ -14,10 +14,18 @@ const routes = [
   // 科技超市
   {
     path: '/market/index',
-    name: '',
+    name: 'market_index',
     meta: { title: '科技超市', isleftarrow: true },
     component: () => import('../views/market/index.vue'),
   },
+  // 科技超市-发布产品
+  {
+    path: '/market/detail',
+    name: 'market_detail',
+    meta: { title: '发布产品', isleftarrow: true },
+    component: () => import('../views/market/detail.vue'),
+  },
+
   // 个人中心
   {
     path: '/user/index',

+ 6 - 2
src/store/index.js

@@ -1,11 +1,15 @@
 import Vue from 'vue';
 import Vuex from 'vuex';
-
+import marketproduct from '@common/store/market/marketproduct';
+import expertsuser from '@common/store/market/exportuser';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
   state: {},
   mutations: {},
   actions: {},
-  modules: {},
+  modules: {
+    marketproduct,
+    expertsuser,
+  },
 });

+ 65 - 0
src/views/market/detail.vue

@@ -0,0 +1,65 @@
+<template>
+  <div id="detail">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          发布
+        </el-col>
+        <el-col :span="24" class="foot">
+          <footInfo></footInfo>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import footInfo from '@/layout/common/footInfo.vue';
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    NavBar,
+    footInfo,
+  },
+  data: () => ({
+    // 头部标题
+    title: '',
+    // meta为true
+    isleftarrow: '',
+    // 返回
+    navShow: true,
+  }),
+  created() {},
+  computed: {},
+  methods: {},
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 100%;
+  min-height: 667px;
+  position: relative;
+  background-color: #f9fafc;
+}
+.top {
+  height: 46px;
+  overflow: hidden;
+}
+.main {
+  min-height: 570px;
+}
+.foot {
+  position: absolute;
+  bottom: 0;
+}
+</style>

+ 64 - 1
src/views/market/index.vue

@@ -6,7 +6,41 @@
           <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
         </el-col>
         <el-col :span="24" class="main">
-          主体
+          <el-col :span="24" class="one">
+            <van-tabs v-model="active" animated>
+              <van-tab>
+                <template #title>
+                  <van-icon name="todo-list" />
+                  <p>技术供求</p>
+                </template>
+                <technologyList></technologyList>
+              </van-tab>
+              <van-tab>
+                <template #title>
+                  <van-icon name="cluster" />
+                  <p>产品供求</p>
+                </template>
+                <productList></productList>
+              </van-tab>
+              <van-tab>
+                <template #title>
+                  <van-icon name="label" />
+                  <p>服务供求</p>
+                </template>
+                <serviceList></serviceList>
+              </van-tab>
+              <van-tab>
+                <template #title>
+                  <van-icon name="manager" />
+                  <p>专家供求</p>
+                </template>
+                <expertList></expertList>
+              </van-tab>
+            </van-tabs>
+          </el-col>
+          <el-col :span="24" class="two">
+            <van-button type="primary" @click="$router.push({ path: '/market/detail' })">发布产品</van-button>
+          </el-col>
         </el-col>
         <el-col :span="24" class="foot">
           <footInfo></footInfo>
@@ -19,12 +53,20 @@
 <script>
 import NavBar from '@/layout/common/topInfo.vue';
 import footInfo from '@/layout/common/footInfo.vue';
+import technologyList from './parts/technologyList.vue';
+import productList from './parts/productList.vue';
+import serviceList from './parts/serviceList.vue';
+import expertList from './parts/expertList.vue';
 export default {
   name: 'index',
   props: {},
   components: {
     NavBar,
     footInfo,
+    technologyList, //技术供求
+    productList, //产品供求
+    serviceList, //服务供求
+    expertList, //专家供求
   },
   data: () => ({
     // 头部标题
@@ -33,6 +75,8 @@ export default {
     isleftarrow: '',
     // 返回
     navShow: true,
+    // 标签
+    active: '1',
   }),
   created() {},
   computed: {},
@@ -57,6 +101,25 @@ export default {
 }
 .main {
   min-height: 570px;
+  .two {
+    position: fixed;
+    top: 80%;
+    left: 10px;
+    z-index: 999;
+  }
+}
+/deep/.van-tab {
+  text-align: center;
+}
+/deep/.van-tabs--line .van-tabs__wrap {
+  height: 70px;
+  margin: 0 0 10px 0;
+}
+/deep/.van-tab--active {
+  color: red;
+}
+.van-icon {
+  font-size: 20px;
 }
 .foot {
   position: absolute;

+ 87 - 0
src/views/market/parts/expertList.vue

@@ -0,0 +1,87 @@
+<template>
+  <div id="expertList">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <el-col :span="4" class="left">
+            <el-image :src="item.img_path"></el-image>
+          </el-col>
+          <el-col :span="20" class="right">
+            <p>
+              <span>{{ item.name }}</span>
+            </p>
+            <p><span>从事专业:</span>{{ item.professional || '暂无' }}</p>
+            <p><span>邮箱:</span>{{ item.email }}</p>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
+export default {
+  name: 'expertList',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      list: [],
+    };
+  },
+  created() {
+    this.searchInfo();
+  },
+  methods: {
+    ...expertsuser({ expertQuery: 'query' }),
+    async searchInfo() {
+      let res = await this.expertQuery({ skip: 0, limit: 6 });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  border-top: 1px solid #f5f5f5;
+  .list {
+    background: #fff;
+    padding: 0 10px;
+    border-bottom: 1px solid #ccc;
+    .left {
+      padding: 12px 0;
+      .el-image {
+        width: 60px;
+        height: 60px;
+        border-radius: 90px;
+      }
+    }
+    .right {
+      padding: 0 10px;
+      p {
+        font-size: 14px;
+        color: #000;
+        padding: 5px 0;
+      }
+      p:first-child {
+        color: blue;
+        font-size: 16px;
+      }
+    }
+  }
+}
+</style>

+ 94 - 0
src/views/market/parts/productList.vue

@@ -0,0 +1,94 @@
+<template>
+  <div id="productList">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.name }}</p>
+          <p>
+            <span class="ptwo"><span>产品类型:</span>{{ item.product_type_name || '暂无' }}</span>
+            <span class="ptwo"><span>研发阶段:</span>{{ item.phase == 1 ? '阶段成果' : item.phase == 2 ? '最终成果' : '暂无' }}</span>
+          </p>
+          <p class="textOver"><span>应用领域:</span>{{ item.field || '暂无' }}</p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('marketproduct');
+export default {
+  name: 'productList',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      list: [
+        {
+          name: '产品产品产品产品',
+          product_type_name: '产品',
+          phase: '1',
+          field: '产品产品产品产品',
+        },
+        {
+          name: '产品产品产品产品',
+          product_type_name: '产品',
+          phase: '1',
+          field: '产品产品产品产品',
+        },
+      ],
+    };
+  },
+  created() {
+    this.searchInfo();
+  },
+  methods: {
+    ...product(['newquery']),
+    async searchInfo() {
+      // let res = await this.newquery({ skip: 0, limit: 6, totaltype: '1', status: '1' });
+      // if (this.$checkRes(res)) {
+      //   this.$set(this, `list`, res.data);
+      // }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  border-top: 1px solid #f5f5f5;
+  .list {
+    background: #fff;
+    padding: 0 10px;
+    border-bottom: 1px solid #ccc;
+    p {
+      font-size: 14px;
+      color: #000;
+      padding: 5px 0;
+    }
+    p:first-child {
+      font-size: 16px;
+    }
+    p:nth-child(2) .ptwo {
+      display: inline-block;
+      width: 50%;
+    }
+    p:nth-child(2) .ptwo span:first-child {
+      color: #ccc;
+    }
+    p:last-child span {
+      color: #ccc;
+    }
+  }
+}
+</style>

+ 94 - 0
src/views/market/parts/serviceList.vue

@@ -0,0 +1,94 @@
+<template>
+  <div id="serviceList">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.name }}</p>
+          <p>
+            <span class="ptwo"><span>产品类型:</span>{{ item.product_type_name || '暂无' }}</span>
+            <span class="ptwo"><span>研发阶段:</span>{{ item.phase == 1 ? '阶段成果' : item.phase == 2 ? '最终成果' : '暂无' }}</span>
+          </p>
+          <p class="textOver"><span>应用领域:</span>{{ item.field || '暂无' }}</p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('marketproduct');
+export default {
+  name: 'technologyList',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      list: [
+        {
+          name: '服务服务服务服务',
+          product_type_name: '服务',
+          phase: '1',
+          field: '服务服务服务服务',
+        },
+        {
+          name: '服务服务服务服务',
+          product_type_name: '服务',
+          phase: '1',
+          field: '服务服务服务服务',
+        },
+      ],
+    };
+  },
+  created() {
+    this.searchInfo();
+  },
+  methods: {
+    ...product(['newquery']),
+    async searchInfo() {
+      // let res = await this.newquery({ skip: 0, limit: 6, totaltype: '2', status: '1' });
+      // if (this.$checkRes(res)) {
+      //   this.$set(this, `list`, res.data);
+      // }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  border-top: 1px solid #f5f5f5;
+  .list {
+    background: #fff;
+    padding: 0 10px;
+    border-bottom: 1px solid #ccc;
+    p {
+      font-size: 14px;
+      color: #000;
+      padding: 5px 0;
+    }
+    p:first-child {
+      font-size: 16px;
+    }
+    p:nth-child(2) .ptwo {
+      display: inline-block;
+      width: 50%;
+    }
+    p:nth-child(2) .ptwo span:first-child {
+      color: #ccc;
+    }
+    p:last-child span {
+      color: #ccc;
+    }
+  }
+}
+</style>

+ 94 - 0
src/views/market/parts/technologyList.vue

@@ -0,0 +1,94 @@
+<template>
+  <div id="technologyList">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.name }}</p>
+          <p>
+            <span class="ptwo"><span>产品类型:</span>{{ item.product_type_name || '暂无' }}</span>
+            <span class="ptwo"><span>研发阶段:</span>{{ item.phase == 1 ? '阶段成果' : item.phase == 2 ? '最终成果' : '暂无' }}</span>
+          </p>
+          <p class="textOver"><span>应用领域:</span>{{ item.field || '暂无' }}</p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('marketproduct');
+export default {
+  name: 'technologyList',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      list: [
+        {
+          name: '技术技术技术技术',
+          product_type_name: '技术',
+          phase: '1',
+          field: '技术技术技术技术',
+        },
+        {
+          name: '技术技术技术技术',
+          product_type_name: '技术',
+          phase: '1',
+          field: '技术技术技术技术',
+        },
+      ],
+    };
+  },
+  created() {
+    this.searchInfo();
+  },
+  methods: {
+    ...product(['newquery']),
+    async searchInfo() {
+      // let res = await this.newquery({ skip: 0, limit: 6, totaltype: '0', status: '1' });
+      // if (this.$checkRes(res)) {
+      //   this.$set(this, `list`, res.data);
+      // }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  border-top: 1px solid #f5f5f5;
+  .list {
+    background: #fff;
+    padding: 0 10px;
+    border-bottom: 1px solid #ccc;
+    p {
+      font-size: 14px;
+      color: #000;
+      padding: 5px 0;
+    }
+    p:first-child {
+      font-size: 16px;
+    }
+    p:nth-child(2) .ptwo {
+      display: inline-block;
+      width: 50%;
+    }
+    p:nth-child(2) .ptwo span:first-child {
+      color: #ccc;
+    }
+    p:last-child span {
+      color: #ccc;
+    }
+  }
+}
+</style>

+ 2 - 2
vue.config.js

@@ -1,5 +1,5 @@
 const path = require('path');
-const publics = path.resolve(__dirname, '../web-common');
+const common = path.resolve(__dirname, '../common');
 module.exports = {
   publicPath: process.env.NODE_ENV === 'development' ? '/' : process.env.VUE_APP_ROUTER,
   configureWebpack: config => {
@@ -10,7 +10,7 @@ module.exports = {
           '@': path.resolve(__dirname, './src'),
           '@c': path.resolve(__dirname, './src/components'),
           '@a': path.resolve(__dirname, './src/assets'),
-          '@publics': publics,
+          '@common': common,
         },
       },
     });