Explorar o código

Merge branch 'master' of http://git.cc-lotus.info/service-platform/web-test

guhongwei %!s(int64=5) %!d(string=hai) anos
pai
achega
fcfd88ad71

+ 11 - 8
src/layout/market/context.vue

@@ -5,7 +5,7 @@
         <el-carousel trigger="click" height="210px">
           <template v-if="detailInfo.image && detailInfo.image.length > 0">
             <el-carousel-item v-for="(item, index) in detailInfo.image" :key="index">
-              <el-image :src="item.url"> </el-image>
+              <el-image :src="item.url" style="width:100%"> </el-image>
             </el-carousel-item>
           </template>
         </el-carousel>
@@ -53,13 +53,12 @@
           <p>服务范围:</p>
           <p class="moreScope" v-if="scope != ''">{{ detailInfo.scope || '暂无' }}</p>
           <p class="moreScope1" v-else>{{ detailInfo.scope || '暂无' }}</p>
-          <el-button size="mini" @click="scopeMore()" v-if="scope != ''">更多</el-button>
-          <el-button size="mini" @click="scopeMore1()" v-else>收起</el-button>
-        </div>
-        <div>
-          <p>服务范围:</p>
-          <p>{{ detailInfo.scope || '暂无' }}</p>
+          <span v-if="detailInfo.scope">
+            <el-button size="mini" @click="scopeMore()" v-if="scope != ''">更多</el-button>
+            <el-button size="mini" @click="scopeMore1()" v-else>收起</el-button>
+          </span>
         </div>
+        <div></div>
         <div>
           <p>产品简介:</p>
           <p class="introduction" v-if="introduction != ''">{{ detailInfo.introduction || '暂无' }}</p>
@@ -69,8 +68,8 @@
             <span v-else @click="introductionMore1()">收起</span>
           </el-button>
         </div>
-        <el-col :span="24"><el-button @click="onSubmit">洽谈交易</el-button></el-col>
       </el-col>
+      <el-col :span="24" class="anniu"><el-button @click="onSubmit" type="primary">洽谈交易</el-button></el-col>
     </el-col>
   </div>
 </template>
@@ -244,4 +243,8 @@ p {
     text-align: center;
   }
 }
+.anniu {
+  float: left;
+  text-align: center;
+}
 </style>

+ 9 - 3
src/router/index.js

@@ -79,9 +79,15 @@ const live = [
 
       //科技超市列表
       {
-        path: '/supermaket/list',
-        name: 'supermarketlists',
-        component: () => import('../views/supermaket/list.vue'),
+        path: '/market/list',
+        name: 'marketlists',
+        component: () => import('../views/market/list.vue'),
+      },
+      {
+        path: '/market/marketlists',
+        name: 'marketlist_index',
+        meta: { title: '科技超市', subSite: true },
+        component: () => import('../views/market/marketlists.vue'),
       },
 
       {

+ 8 - 8
src/views/market/index.vue

@@ -220,28 +220,28 @@ export default {
       if (this.$checkRes(res)) this.$set(this, `expertsList`, res.data);
     },
     toProductList() {
-      this.$router.push({ path: '/supermaket/list', query: { totaltype: 1, column_name: '科技产品', display: 1 } });
+      this.$router.push({ path: '/market/marketlists', query: { totaltype: 1, column_name: '科技产品', display: 1 } });
     },
     productDetail(id) {
-      this.$router.push({ path: '/supermaket/list', query: { totaltype: 2, id: id, display: 2, column_name: '科技产品' } });
+      this.$router.push({ path: '/market/marketlists', query: { totaltype: 2, id: id, display: 2, column_name: '科技产品' } });
     },
     toTecList() {
-      this.$router.push({ path: '/supermaket/list', query: { totaltype: 0, column_name: '技术供求', display: 1 } });
+      this.$router.push({ path: '/market/marketlists', query: { totaltype: 0, column_name: '技术供求', display: 1 } });
     },
     tecDetail(id) {
-      this.$router.push({ path: '/supermaket/list', query: { totaltype: 0, id: id, display: 2, column_name: '技术供求' } });
+      this.$router.push({ path: '/market/marketlists', query: { totaltype: 0, id: id, display: 2, column_name: '技术供求' } });
     },
     toServiceList() {
-      this.$router.push({ path: '/supermaket/list', query: { totaltype: 2, column_name: '技术供求', display: 1 } });
+      this.$router.push({ path: '/market/marketlists', query: { totaltype: 2, column_name: '技术供求', display: 1 } });
     },
     serviceDetail(id) {
-      this.$router.push({ path: '/supermaket/list', query: { totaltype: 2, id: id, display: 2, column_name: '技术供求' } });
+      this.$router.push({ path: '/market/marketlists', query: { totaltype: 2, id: id, display: 2, column_name: '技术供求' } });
     },
     zhuanjia() {
-      this.$router.push({ path: '/supermaket/list', query: { column_name: '专家供求', display: 1 } });
+      this.$router.push({ path: '/market/marketlists', query: { column_name: '专家供求', display: 1 } });
     },
     zhuanjiaDetail(id) {
-      this.$router.push({ path: '/supermaket/list', query: { id: id, display: 3, column_name: '专家供求' } });
+      this.$router.push({ path: '/market/marketlists', query: { id: id, display: 3, column_name: '专家供求' } });
     },
     fabu() {
       if (this.user.role == '2' || this.user.role == '3') {

+ 19 - 6
src/views/supermaket/list.vue

@@ -17,7 +17,8 @@
             <el-col class="infoLeftList" :span="24" v-for="(item, index) in zhuantiList" :key="index">
               <p>{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</p>
               <p>
-                <span class="textOver" @click="clickshanpin(item.id)">{{ item.name }}</span>
+                <span class="textOver" @click="clickshanpin(item.id)">{{ item.name }} </span>
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
                 <span>{{ item.introduction }}</span>
               </p>
             </el-col>
@@ -28,8 +29,10 @@
             </el-col>
             <el-col class="infoRightList" :span="24" v-for="(item, index) in jishuList" :key="index">
               <p>
-                <span class="textOver" @click="clickjishu(item.id)">{{ item.name }}</span
-                ><span class="textOver">{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</span>
+                <span class="textOver" @click="clickjishu(item.id)">{{ item.name }}</span>
+
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
+                <span class="textOver">{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</span>
               </p>
             </el-col>
           </el-col>
@@ -39,8 +42,9 @@
             </el-col>
             <el-col class="infoRightList" :span="24" v-for="(item, index) in hangyeList" :key="index">
               <p>
-                <span class="textOver" @click="clickfuwu(item.id)">{{ item.name }}</span
-                ><span class="textOver">{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</span>
+                <span class="textOver" @click="clickfuwu(item.id)">{{ item.name }}</span>
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
+                <span class="textOver">{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</span>
               </p>
             </el-col>
           </el-col>
@@ -52,6 +56,7 @@
               <p>{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</p>
               <p>
                 <span class="textOver" @click="clickzhuanjia(item.id)">{{ item.name }}</span>
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
                 <span>{{ item.job_profile }}</span>
               </p>
             </el-col>
@@ -255,6 +260,14 @@ export default {
       this.$set(this, `zhuanjiainfo`, res.data);
     },
 
+    fabu() {
+      if (this.user.role == '2' || this.user.role == '3') {
+        this.$router.push({ path: '/market/marketfabu' });
+      } else if (this.user.uid == undefined) {
+        this.$router.push({ path: '/login' });
+      } else {
+      }
+    },
     async onSubmit() {
       console.log(this.user.uid);
       let form = {};
@@ -396,7 +409,7 @@ export default {
   word-break: break-all;
   display: -webkit-box;
   -webkit-box-orient: vertical;
-  margin: 5px 0 0 0;
+  margin: -20px 0 0 0;
   color: #666;
 }
 .page {

+ 461 - 0
src/views/market/marketlists.vue

@@ -0,0 +1,461 @@
+<template>
+  <div id="list">
+    <el-col :span="24" class="main">
+      <el-col :span="24">
+        <el-col :span="5" class="menu">
+          <el-image :src="squareImage"></el-image>
+          <span>Menu</span>
+          <el-col class="menuList" :span="24" v-for="(item, index) in menuList" :key="index">
+            <p @click="changeMenu(item.name, index)" :style="`color:${menuIndex == index ? menuColor : ''}`">{{ item.name }}</p>
+          </el-col>
+        </el-col>
+        <el-col :span="19" class="info" v-if="display == '1'">
+          <el-col v-if="menuIndex == '0'" class="leftInfo">
+            <el-col :span="24" class="leftTop">
+              <span>|</span> <span>{{ menuName }}</span>
+            </el-col>
+            <el-col class="infoLeftList" :span="24" v-for="(item, index) in zhuantiList" :key="index">
+              <p>{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</p>
+              <p>
+                <span class="textOver" @click="clickshanpin(item.id)">{{ item.name }} </span>
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
+                <span>{{ item.introduction }}</span>
+              </p>
+            </el-col>
+          </el-col>
+          <el-col v-if="menuIndex == '1'" class="leftInfo">
+            <el-col :span="24" class="leftTop">
+              <span>|</span> <span>{{ menuName }}</span>
+            </el-col>
+            <el-col class="infoRightList" :span="24" v-for="(item, index) in jishuList" :key="index">
+              <p>
+                <span class="textOver" @click="clickjishu(item.id)">{{ item.name }}</span>
+
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
+                <span class="textOver">{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</span>
+              </p>
+            </el-col>
+          </el-col>
+          <el-col v-if="menuIndex == '2'" class="leftInfo">
+            <el-col :span="24" class="leftTop">
+              <span>|</span> <span>{{ menuName }}</span>
+            </el-col>
+            <el-col class="infoRightList" :span="24" v-for="(item, index) in hangyeList" :key="index">
+              <p>
+                <span class="textOver" @click="clickfuwu(item.id)">{{ item.name }}</span>
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
+                <span class="textOver">{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</span>
+              </p>
+            </el-col>
+          </el-col>
+          <el-col v-if="menuIndex == '3'" class="leftInfo">
+            <el-col :span="24" class="leftTop">
+              <span>|</span> <span>{{ menuName }}</span>
+            </el-col>
+            <el-col class="infoLeftList" :span="24" v-for="(item, index) in jiaoyuList" :key="index">
+              <p>{{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}</p>
+              <p>
+                <span class="textOver" @click="clickzhuanjia(item.id)">{{ item.name }}</span>
+                <span><el-button type="text" @click="fabu()">我要发布</el-button></span>
+                <span>{{ item.job_profile }}</span>
+              </p>
+            </el-col>
+          </el-col>
+          <el-col class="page">
+            <el-pagination
+              background
+              @current-change="handleCurrentChange"
+              :current-page.sync="currentPage"
+              :page-size="pageSize"
+              layout="total,prev, pager, next, jumper"
+              :total="pageTotal"
+            >
+            </el-pagination>
+          </el-col>
+        </el-col>
+        <el-col :span="19" v-else-if="display == '2'" class="info">
+          <context :detailInfo="detailInfo" @onSubmit="onSubmit"></context>
+        </el-col>
+        <el-col :span="19" v-else-if="display == '3'" class="info">
+          <zhuanjia :zhuanjiainfo="zhuanjiainfo"></zhuanjia>
+        </el-col>
+      </el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('enterpriseproject');
+const { mapActions: talentExperts } = createNamespacedHelpers('talentExperts');
+const { mapActions: transaction } = createNamespacedHelpers('transaction');
+const { mapActions: tranaudit } = createNamespacedHelpers('tranaudit');
+import zhuanjia from '@/layout/market/zhuanjia.vue';
+import context from '@/layout/market/context.vue';
+
+export default {
+  name: 'list',
+  props: {},
+  components: {
+    context,
+    zhuanjia,
+  },
+  data: () => ({
+    squareImage: require('@/assets/live/square_big.png'),
+    menuList: [{ name: '科技产品' }, { name: '技术供求' }, { name: '服务供求' }, { name: '专家供求' }],
+    menuIndex: '0',
+    menuName: '科技产品',
+    menuColor: 'rgb(254, 149, 14)',
+    currentPage: 1,
+    pageTotal: 0,
+    pageSize: 10,
+    limit: 10,
+    zhuantiList: [],
+    jishuList: [],
+    hangyeList: [],
+    jiaoyuList: [],
+    display: '1',
+    detailInfo: {},
+    zhuanjiainfo: {},
+  }),
+  created() {
+    this.searchList();
+    this.search();
+    console.log(this.$route.query.display);
+  },
+  computed: {
+    ...mapState(['user']),
+    dispaly() {
+      return this.$route.query.display;
+    },
+
+    id() {
+      return this.$route.query.id;
+    },
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+    totaltype() {
+      return this.$route.query.totaltype;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+
+  methods: {
+    ...product({ list: 'newquery', newfetch: 'newfetch' }),
+    ...talentExperts({ lists: 'query', fetch: 'fetch' }),
+    ...transaction({ transactioncreate: 'create', transactionfetch: 'fetch' }),
+    ...tranaudit({ tranauditcreate: 'create' }),
+    async searchList({ skip = 0, limit = 10, ...info } = {}) {
+      if (this.$route.query.column_name == '科技产品') {
+        this.display = '1';
+        this.changeMenu(this.$route.query.column_name, 0);
+      } else if (this.$route.query.column_name == '技术供求') {
+        this.display = '1';
+        this.changeMenu(this.$route.query.column_name, 1);
+      } else if (this.$route.query.column_name == '服务供求') {
+        this.display = '1';
+        this.changeMenu(this.$route.query.column_name, 2);
+      } else if (this.$route.query.column_name == '专家供求') {
+        this.display = '1';
+        this.changeMenu(this.$route.query.column_name, 3);
+      }
+    },
+    async changeMenu(name, index) {
+      console.log(index, name);
+
+      this.menuIndex = index;
+      this.menuColor = 'rgb(254, 149, 14)';
+      this.menuName = name;
+      this.initList({ name });
+    },
+    async initList({ name, skip = 0, limit = 10, ...info } = {}) {
+      this.display = '1';
+      let res = [];
+      this.pageSize = 5;
+      if (name == '科技产品') {
+        let totaltype = '1';
+        console.log(totaltype);
+
+        res = await this.list({ skip, limit, totaltype, status: 1, ...info });
+
+        this.$set(this, `zhuantiList`, res.data);
+      } else if (name == '技术供求') {
+        let totaltype = '0';
+        console.log(totaltype);
+        res = await this.list({ skip, limit, totaltype, status: 1, ...info });
+        this.$set(this, `jishuList`, res.data);
+      } else if (name == '服务供求') {
+        let totaltype = '2';
+        console.log(totaltype);
+        res = await this.list({ skip, limit, totaltype, status: 1, ...info });
+        this.$set(this, `hangyeList`, res.data);
+      } else if (name == '专家供求') {
+        let totaltype = this.totaltype;
+        res = await this.lists({ skip, limit, status: 1, ...info });
+        this.$set(this, `jiaoyuList`, res.data);
+      }
+      this.$set(this, `pageTotal`, res.total);
+    },
+    handleCurrentChange(val) {
+      const name = this.menuName;
+      if (name == '科技产品' || name == '专家供求') {
+        this.limit = 5;
+      }
+      this.initList({ name: name, skip: (val - 1) * this.limit, limit: this.limit });
+    },
+    async clickshanpin(id) {
+      this.display = '2';
+      console.log(id);
+      const res = await this.newfetch(id);
+      console.log(res.data);
+      this.$set(this, `detailInfo`, res.data);
+    },
+
+    async clickjishu(id) {
+      this.display = '2';
+      console.log(id);
+      const res = await this.newfetch(id);
+      console.log(res.data);
+      this.$set(this, `detailInfo`, res.data);
+    },
+
+    async search() {
+      this.display = this.$route.query.display;
+      console.log(this.display);
+
+      if (this.display == '2') {
+        console.log(this.id);
+        const res = await this.newfetch(this.id);
+        console.log(res.data);
+        this.$set(this, `detailInfo`, res.data);
+      }
+      // else if (this.dispaly == '1') {
+      //   const res = await this.newquery(this.id);
+      //   console.log(res.data);
+      //   this.$set(this, `detailInfo`, res.data);
+      // }
+      else if (this.dispaly == '3') {
+        const res = await this.fetch(this.id);
+        console.log(res.data);
+        this.$set(this, `zhuanjiainfo`, res.data);
+      }
+    },
+
+    async clickfuwu(id) {
+      this.display = '2';
+      console.log(id);
+      const res = await this.newfetch(id);
+      console.log(res.data);
+      this.$set(this, `detailInfo`, res.data);
+    },
+
+    async clickzhuanjia(id) {
+      this.display = '3';
+      const res = await this.fetch(id);
+      console.log(res.data);
+      this.$set(this, `zhuanjiainfo`, res.data);
+    },
+
+    fabu() {
+      if (this.user.role == '2' || this.user.role == '3') {
+        this.$router.push({ path: '/market/marketfabu' });
+      } else if (this.user.uid == undefined) {
+        this.$router.push({ path: '/login' });
+      } else {
+      }
+    },
+    async onSubmit() {
+      console.log(this.user.uid);
+      let form = {};
+      form.userid = this.user.uid;
+      form.username = this.user.name;
+      form.product_id = this.detailInfo.id;
+      form.product_name = this.detailInfo.name;
+      form.market_userid = this.detailInfo.userid;
+      form.market_username = this.detailInfo.contact_user;
+      form.status = '0';
+      console.log(form);
+      let res = await this.transactioncreate(form);
+      this.$checkRes(res, '发起洽谈交易成功', '交易失败');
+      let shenhe = {};
+      shenhe.result = '0';
+      console.log(res.data.id);
+
+      shenhe.transaction_id = res.data.id;
+      shenhe.userid = this.detailInfo.userid;
+      shenhe.product_id = this.detailInfo.userid;
+      console.log(shenhe);
+      let ress = await this.tranauditcreate(shenhe);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  width: 80%;
+  margin: 0 auto;
+  float: none;
+}
+.menu {
+  float: left;
+  min-height: 600px;
+  width: 20%;
+  background: no-repeat bottom right;
+  background-image: url(../../assets/live/menu_back.jpg);
+  margin: 30px 0;
+  padding: 10px 0 0 10px;
+  box-sizing: border-box;
+  box-shadow: 0 0 10px #bbbaba;
+}
+.menu .el-image {
+  width: 30px;
+  display: inline-table;
+  margin: 10px 5px;
+}
+.menu span {
+  font-size: 24px;
+  color: #92959a;
+  font-weight: 600;
+  margin-left: 3px;
+  position: relative;
+  top: 10px;
+}
+.menuList p {
+  line-height: 60px;
+  font-size: 18px;
+  cursor: pointer;
+  border-bottom: 1px solid #2d64b3;
+  color: #044b79;
+  font-weight: 600;
+}
+.info {
+  width: 77%;
+  float: right;
+  margin: 30px 0 30px 2px;
+  min-height: 600px;
+  box-shadow: 0 0 10px #2d64b3;
+  overflow: hidden;
+  right: 0px;
+  background: #ffffff;
+}
+.leftInfo {
+  height: 500px;
+  overflow: hidden;
+}
+.leftTop {
+  font-size: 18px;
+  width: 96%;
+  height: 41px;
+  line-height: 35px;
+  border-bottom: 1px solid #e5e5e5;
+  position: relative;
+  bottom: 1px;
+  margin: 10px;
+  font-weight: 600;
+  color: #22529a;
+}
+.infoLeftList {
+  float: left;
+  width: 95%;
+  border-bottom: 1px dashed #ccc;
+  padding: 10px 0 10px 10px;
+  height: 87px;
+  margin: 0 0 0 5px;
+}
+.infoLeftList:hover p:last-child span:first-child {
+  -webkit-transform: translateY(-3px);
+  -ms-transform: translateY(-3px);
+  transform: translateY(-3px);
+  -webkit-box-shadow: 0 0 6px #999;
+  box-shadow: 0 0 6px #999;
+  -webkit-transition: all 0.5s ease-out;
+  transition: all 0.5s ease-out;
+  color: #005293;
+  cursor: pointer;
+}
+.infoLeftList p:first-child {
+  float: left;
+  width: 20%;
+  font-size: 15px;
+  background: #044b79;
+  text-align: center;
+  color: #fff;
+  font-weight: bold;
+  padding: 4px 0px;
+  margin: 0 0 0 5px;
+}
+.infoLeftList p:last-child {
+  float: right;
+  width: 70%;
+  padding: 0 0 0 10px;
+}
+.infoLeftList p:last-child span:first-child {
+  float: left;
+  width: 90%;
+  font-size: 18px;
+}
+.infoLeftList p:last-child span:last-child {
+  float: left;
+  width: 90%;
+  font-size: 16px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 2;
+  word-break: break-all;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  margin: -20px 0 0 0;
+  color: #666;
+}
+.page {
+  text-align: center;
+  margin: 10px 0;
+}
+.infoRightList {
+  float: left;
+  width: 95%;
+  padding: 7px 0;
+  margin: 0 0 0 5px;
+}
+.infoRightList:nth-child(6) {
+  border-bottom: 1px solid #ccc;
+  padding: 0 0 17px 0;
+}
+.infoRightList:nth-child(7) {
+  padding: 15px 0 0 0;
+}
+.infoRightList:nth-child(11) {
+  border-bottom: 1px solid #ccc;
+  padding: 0 0 15px 0;
+}
+.infoRightList:hover p span:first-child {
+  -webkit-transform: translateY(-3px);
+  -ms-transform: translateY(-3px);
+  transform: translateY(-3px);
+  -webkit-box-shadow: 0 0 6px #999;
+  box-shadow: 0 0 6px #999;
+  -webkit-transition: all 0.5s ease-out;
+  transition: all 0.5s ease-out;
+  color: #005293;
+  cursor: pointer;
+}
+.infoRightList p {
+  font-size: 18px;
+}
+.infoRightList p span:first-child {
+  display: inline-block;
+  width: 70%;
+  margin: 0 20px 0 10px;
+}
+.infoRightList p span:last-child {
+  display: inline-block;
+  width: 21%;
+  text-align: center;
+  font-size: 16px;
+}
+</style>