guhongwei 4 年 前
コミット
3d0d5b4053
31 ファイル変更4236 行追加9 行削除
  1. 123 1
      src/router/index.js
  2. 76 8
      src/viewTwo/account/index.vue
  3. 96 0
      src/viewTwo/account/parts/clickBtn.vue
  4. 245 0
      src/viewTwo/adminCenter/duijiehui/add.vue
  5. 133 0
      src/viewTwo/adminCenter/duijiehui/index.vue
  6. 103 0
      src/viewTwo/adminCenter/duijiehui/parts/docklist.vue
  7. 209 0
      src/viewTwo/adminCenter/enterpriseProduct/detail.vue
  8. 125 0
      src/viewTwo/adminCenter/enterpriseProduct/index.vue
  9. 81 0
      src/viewTwo/adminCenter/enterpriseProduct/parts/list.vue
  10. 120 0
      src/viewTwo/adminCenter/transaction/detail.vue
  11. 90 0
      src/viewTwo/adminCenter/transaction/index.vue
  12. 89 0
      src/viewTwo/adminCenter/transaction/parts/list.vue
  13. 127 0
      src/viewTwo/adminCenter/user/detail.vue
  14. 120 0
      src/viewTwo/adminCenter/user/index.vue
  15. 167 0
      src/viewTwo/adminCenter/user/parts/detailInfo.vue
  16. 68 0
      src/viewTwo/adminCenter/user/parts/userlist.vue
  17. 153 0
      src/viewTwo/twoLogin.vue
  18. 112 0
      src/viewTwo/updatePwd/index.vue
  19. 198 0
      src/viewTwo/userCenter/dock/detail.vue
  20. 119 0
      src/viewTwo/userCenter/dock/index.vue
  21. 101 0
      src/viewTwo/userCenter/dock/parts/docklist.vue
  22. 139 0
      src/viewTwo/userCenter/dock/parts/producInfo.vue
  23. 115 0
      src/viewTwo/userCenter/matter/detail.vue
  24. 151 0
      src/viewTwo/userCenter/matter/index.vue
  25. 82 0
      src/viewTwo/userCenter/matter/parts/list.vue
  26. 226 0
      src/viewTwo/userCenter/myProduct/detail.vue
  27. 160 0
      src/viewTwo/userCenter/myProduct/index.vue
  28. 318 0
      src/viewTwo/userCenter/myProduct/parts/producInfo.vue
  29. 91 0
      src/viewTwo/userCenter/myProduct/parts/productList.vue
  30. 176 0
      src/viewTwo/userCenter/parts/message.vue
  31. 123 0
      src/viewTwo/userCenter/user/index.vue

+ 123 - 1
src/router/index.js

@@ -365,6 +365,127 @@ const routes = [
     meta: { title: '账号管理', isleftarrow: false },
     component: () => import('../viewTwo/account/index.vue'),
   },
+  {
+    path: '/twoLogin',
+    name: 'twoLogin',
+    meta: { title: '登录', isleftarrow: true },
+    component: () => import('../viewTwo/twoLogin.vue'),
+  },
+  // 个人中心
+  // 个人-机构-专家
+  // 个人中心
+  {
+    path: '/viewTwo/userCenter/user/index',
+    name: 'userCenter',
+    meta: { title: '个人中心', isleftarrow: true },
+    component: () => import('../viewTwo/userCenter/user/index.vue'),
+  },
+  // 我的发布
+  {
+    path: '/viewTwo/userCenter/myProduct/index',
+    name: 'userCenter',
+    meta: { title: '我的发布', isleftarrow: true },
+    component: () => import('../viewTwo/userCenter/myProduct/index.vue'),
+  },
+  // 信息发布
+  {
+    path: '/viewTwo/userCenter/myProduct/detail',
+    name: 'userCenter',
+    meta: { title: '信息发布', isleftarrow: true },
+    component: () => import('../viewTwo/userCenter/myProduct/detail.vue'),
+  },
+  // 事项管理
+  {
+    path: '/viewTwo/userCenter/matter/index',
+    name: 'userCenter',
+    meta: { title: '事项管理', isleftarrow: true },
+    component: () => import('../viewTwo/userCenter/matter/index.vue'),
+  },
+  // 事项操作
+  {
+    path: '/viewTwo/userCenter/matter/detail',
+    name: 'userCenter',
+    meta: { title: '事项管理', isleftarrow: true },
+    component: () => import('../viewTwo/userCenter/matter/detail.vue'),
+  },
+  // 展会管理
+  {
+    path: '/viewTwo/userCenter/dock/index',
+    name: 'userCenter',
+    meta: { title: '展会管理', isleftarrow: true },
+    component: () => import('../viewTwo/userCenter/dock/index.vue'),
+  },
+  // 申请参展
+  {
+    path: '/viewTwo/userCenter/dock/detail',
+    name: 'userCenter',
+    meta: { title: '申请参展', isleftarrow: true },
+    component: () => import('../viewTwo/userCenter/dock/detail.vue'),
+  },
+  // 修改密码
+  {
+    path: '/viewTwo/updatePwd/index',
+    name: 'userCenter',
+    meta: { title: '修改密码', isleftarrow: true },
+    component: () => import('../viewTwo/updatePwd/index.vue'),
+  },
+  // 管理用户个人中心
+  // 用户管理
+  {
+    path: '/viewTwo/adminCenter/user/index',
+    name: 'adminCenter',
+    meta: { title: '用户管理', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/user/index.vue'),
+  },
+  // 用户审核
+  {
+    path: '/viewTwo/adminCenter/user/detail',
+    name: 'adminCenter',
+    meta: { title: '用户审核', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/user/detail.vue'),
+  },
+  // 展会管理
+  {
+    path: '/viewTwo/adminCenter/duijiehui/index',
+    name: 'adminCenter',
+    meta: { title: '展会管理', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/duijiehui/index.vue'),
+  },
+  // 创建展会
+  {
+    path: '/viewTwo/adminCenter/duijiehui/add',
+    name: 'adminCenter',
+    meta: { title: '创建展会', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/duijiehui/add.vue'),
+  },
+  // 审核管理
+  {
+    path: '/viewTwo/adminCenter/enterpriseProduct/index',
+    name: 'adminCenter',
+    meta: { title: '审核管理', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/enterpriseProduct/index.vue'),
+  },
+  // 产品审核
+  {
+    path: '/viewTwo/adminCenter/enterpriseProduct/detail',
+    name: 'adminCenter',
+    meta: { title: '产品审核', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/enterpriseProduct/detail.vue'),
+  },
+  // 交易审核
+  {
+    path: '/viewTwo/adminCenter/transaction/index',
+    name: 'adminCenter',
+    meta: { title: '交易审核', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/transaction/index.vue'),
+  },
+  // 审核详情
+  {
+    path: '/viewTwo/adminCenter/transaction/detail',
+    name: 'adminCenter',
+    meta: { title: '审核详情', isleftarrow: true },
+    component: () => import('../viewTwo/adminCenter/transaction/detail.vue'),
+  },
   // 公众号第二版结束
 ];
 
@@ -375,7 +496,7 @@ const router = new VueRouter({
 });
 
 router.beforeEach(async (to, form, next) => {
-  if (to.name == 'account_user') {
+  if (to.name == 'account_user' || to.name == 'viewTwo_account') {
     let res = await store.dispatch('login/toGetUser');
     if (res && res.uid) {
       next();
@@ -387,6 +508,7 @@ router.beforeEach(async (to, form, next) => {
         next();
       } else {
         next({ name: 'login' });
+        next({ name: 'twoLogin' });
       }
     }
   } else {

+ 76 - 8
src/viewTwo/account/index.vue

@@ -1,24 +1,49 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24">
-        <p>账号管理</p>
+      <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 :span="24" class="info">
+            <el-col :span="8" class="img">
+              <el-image :src="imgUrl"></el-image>
+            </el-col>
+            <el-col :span="16" class="name">{{ user.name }}</el-col>
+          </el-col>
+          <el-col :span="24" class="btn">
+            <clickBtn></clickBtn>
+          </el-col>
+        </el-col>
       </el-col>
     </el-row>
   </div>
 </template>
 
 <script>
+import NavBar from '@/layout/common/topInfo.vue';
+import footInfo from '@/layout/common/footInfo.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
+import clickBtn from './parts/clickBtn.vue';
 export default {
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    NavBar,
+    // footInfo,
+    clickBtn,
+  },
   data: function() {
-    return {};
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      imgUrl: require('@/assets/test.jpg'),
+    };
   },
   created() {},
   methods: {},
@@ -26,7 +51,50 @@ export default {
     ...mapState(['user']),
   },
   watch: {},
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.style {
+  width: 100%;
+  min-height: 667px;
+  position: relative;
+  background-color: #f9fafc;
+}
+.top {
+  height: 46px;
+  overflow: hidden;
+}
+.main {
+  min-height: 570px;
+  .info {
+    height: 100px;
+    padding: 10px;
+    .img {
+      text-align: center;
+      .el-image {
+        width: 75%;
+        height: 80px;
+        border-radius: 50%;
+        text-align: center;
+      }
+    }
+    .name {
+      font-size: 18px;
+      font-weight: bolder;
+      margin-top: 20px;
+    }
+  }
+}
+.foot {
+  position: absolute;
+  bottom: 0;
+}
+</style>

+ 96 - 0
src/viewTwo/account/parts/clickBtn.vue

@@ -0,0 +1,96 @@
+<template>
+  <div id="clickBtn">
+    <el-row>
+      <el-col :span="24" class="style">
+        <span v-if="user.role == '4' || user.role == '5' || user.role == '6'">
+          <van-cell is-link title="基本信息" @click="$router.push({ path: '/viewTwo/userCenter/user/index' })" />
+          <van-cell is-link title="我的发布" @click="$router.push({ path: '/viewTwo/userCenter/myProduct/index' })" />
+          <van-cell is-link title="事项管理" @click="$router.push({ path: '/viewTwo/userCenter/matter/index' })" />
+          <van-cell is-link title="展会管理" @click="$router.push({ path: '/viewTwo/userCenter/dock/index' })" />
+        </span>
+        <span v-else-if="user.role == '0'">
+          <van-cell is-link title="用户管理" @click="$router.push({ path: '/viewTwo/adminCenter/user/index' })" />
+          <van-cell is-link title="展会管理" @click="$router.push({ path: '/viewTwo/adminCenter/duijiehui/index' })" />
+          <van-cell is-link title="审核管理" @click="$router.push({ path: '/viewTwo/adminCenter/enterpriseProduct/index' })" />
+          <van-cell is-link title="交易审核" @click="$router.push({ path: '/viewTwo/adminCenter/transaction/index' })" />
+        </span>
+        <span v-else-if="user.role == '1'">
+          <van-cell is-link title="用户管理" @click="$router.push({ path: '/viewTwo/adminCenter/user/index' })" />
+          <van-cell is-link title="审核管理" @click="$router.push({ path: '/viewTwo/adminCenter/enterpriseProduct/index' })" />
+        </span>
+        <span v-else-if="user.role == '3'">
+          展会负责人
+        </span>
+        <span v-else-if="user.role == '8'">
+          展会vip用户
+        </span>
+        <van-cell is-link title="修改密码" @click="change()" />
+        <van-cell is-link title="退出登录" @click="loginOut()" />
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: login } = createNamespacedHelpers('login');
+export default {
+  name: 'clickBtn',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      oneName: '',
+      twoName: '',
+      threeName: '',
+      fourName: '',
+    };
+  },
+  created() {
+    this.searchMenu();
+  },
+  methods: {
+    ...login(['toGetMenu', 'logout']),
+    async searchMenu() {
+      if (this.user.uid) {
+        const res = await this.toGetMenu({ id: this.user.uid });
+        for (const val of res.data.menus) {
+          if (val.role_name == '用户管理') {
+            this.$set(this, `oneName`, val.role_name);
+          } else if (val.role_name == '对接会') {
+            this.$set(this, `twoName`, val.role_name);
+          } else if (val.role_name == '产品供求审核管理') {
+            this.$set(this, `threeName`, val.role_name);
+          } else if (val.role_name == '产品供求交易状态审核管理') {
+            this.$set(this, `fourName`, val.role_name);
+          }
+        }
+      }
+    },
+    // 退出登录
+    async loginOut() {
+      this.logout();
+      this.$notify({
+        message: '退出成功',
+        type: 'success',
+      });
+      this.$router.push({ path: '/twoLogin' });
+    },
+    //修改密码
+    change() {
+      this.$router.push({ path: '/viewTwo/updatePwd/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 245 - 0
src/viewTwo/adminCenter/duijiehui/add.vue

@@ -0,0 +1,245 @@
+<template>
+  <div id="add">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-form>
+            <van-field v-model="form.title" name="标题" label="标题" placeholder="标题" />
+            <van-field readonly clickable name="datetimePicker" :value="form.start_time" label="开始时间" placeholder="点击选择时间" @click="onepic = true" />
+            <van-popup v-model="onepic" position="bottom">
+              <van-datetime-picker type="datetime" @confirm="oneSubmit" @cancel="onepic = false" />
+            </van-popup>
+            <van-field readonly clickable name="datetimePicker" :value="form.end_time" label="结束时间" placeholder="点击选择时间" @click="twopic = true" />
+            <van-popup v-model="twopic" position="bottom">
+              <van-datetime-picker type="datetime" @confirm="twoSubmit" @cancel="twopic = false" />
+            </van-popup>
+            <van-field readonly clickable name="datetimePicker" :value="form.join_end" label="报名截止" placeholder="点击选择时间" @click="threepic = true" />
+            <van-popup v-model="threepic" position="bottom">
+              <van-datetime-picker type="datetime" @confirm="threeSubmit" @cancel="threepic = false" />
+            </van-popup>
+            <van-field readonly clickable name="picker" :value="form.province" label="省份" placeholder="点击选择省份" @click="provincepic = true" />
+            <van-popup v-model="provincepic" position="bottom">
+              <van-picker show-toolbar :columns="prodata" @confirm="proSubmit" @cancel="provincepic = false" />
+            </van-popup>
+            <van-field readonly clickable name="picker" :value="form.place" label="市区" placeholder="点击选择市区" @click="placepic = true" />
+            <van-popup v-model="placepic" position="bottom">
+              <van-picker show-toolbar :columns="placedate" @confirm="plaSubmit" @cancel="placepic = false" />
+            </van-popup>
+            <van-field v-model="form.desc" rows="1" autosize label="简介" type="textarea" placeholder="企业简介" />
+            <van-field v-model="form.adminuser" name="负责人" label="负责人" placeholder="负责人" />
+            <van-field v-model="form.phone" name="手机号" label="手机号" placeholder="手机号" />
+            <van-field v-model="form.sponsor" name="主办方" label="主办方" placeholder="主办方" />
+            <van-field v-model="form.organizer" name="承办方" label="承办方" placeholder="承办方" />
+            <van-field v-model="form.videointro" name="文件标题" label="文件标题" placeholder="文件标题" />
+            <van-field name="radio" label="展会状态">
+              <template #input>
+                <van-radio-group v-model="form.status" direction="horizontal">
+                  <van-radio name="0">准备中</van-radio>
+                  <van-radio name="1">开始</van-radio>
+                  <van-radio name="2">结束</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <!-- <van-field v-model="form.file_path" name="视频" label="视频" placeholder="视频" /> -->
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </el-col>
+      </el-col>
+    </el-row>
+    <van-dialog v-model="show" title="展会信息" @confirm="closedia">
+      <p style="padding: 10px 15px;">房间号:{{ dockinfo.room_id }}</p>
+      <p style="padding: 10px 15px;">手机号:{{ dockinfo.phone }}</p>
+      <p style="padding: 10px 15px;">密码:{{ dockinfo.passwd }}</p>
+    </van-dialog>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: place } = createNamespacedHelpers('place');
+const { mapActions: dock } = createNamespacedHelpers('dock');
+var moment = require('moment');
+// import { Dialog } from 'vant';
+const jwt = require('jsonwebtoken');
+export default {
+  name: 'add',
+  props: {},
+  components: {
+    NavBar,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      form: {},
+      onepic: false,
+      twopic: false,
+      threepic: false,
+      // 字典表
+      // 省份
+      // 原数组
+      province: [],
+      // 重组
+      prodata: [],
+      // 市区
+      // 原数组
+      place: [],
+      // 重组
+      placedate: [],
+      // 省份选择
+      provincepic: false,
+      // 市区选择
+      placepic: false,
+      // 展会成功信息
+      dockinfo: {},
+      show: false,
+    };
+  },
+  async created() {
+    await this.searchother();
+    if (this.id) {
+      await this.searchinfo();
+    }
+  },
+  methods: {
+    ...place({ placequery: 'query' }),
+    ...dock(['create', 'fetch', 'update']),
+    // 提交
+    async onSubmit() {
+      let data = this.form;
+      let province = this.province.find(i => i.name == data.province);
+      if (province) data.province = province.code;
+      let place = this.place.find(i => i.name == data.place);
+      if (place) data.place = place.code;
+      if (data.id) {
+        let res = await this.update(data);
+        if (this.$checkRes(res)) {
+          this.$notify({
+            message: '修改成功',
+            type: 'success',
+          });
+          this.closedia();
+        }
+      } else {
+        data.user_id = this.user.uid;
+        let res = await this.create(data);
+        if (this.$checkRes(res)) {
+          res.data.passwd = jwt.decode(res.data.password);
+          this.$set(this, `dockinfo`, res.data);
+          this.show = true;
+        }
+      }
+    },
+    // 关闭
+    closedia() {
+      this.show = false;
+      this.$router.push({ path: '/viewTwo/adminCenter/duijiehui/index' });
+    },
+    // 查询其他信息
+    async searchother() {
+      let res = await this.placequery({ level: 1 });
+      let arr = await this.placequery({ level: 2 });
+      if (res || arr) {
+        this.$set(this, `province`, res.data);
+        var prodata = res.data.map(item => item.name);
+        this.$set(this, `prodata`, prodata);
+        this.$set(this, `place`, arr.data);
+        var placedate = arr.data.map(item => item.name);
+        this.$set(this, `placedate`, placedate);
+      }
+    },
+    // 省份选择
+    async proSubmit(value) {
+      this.$set(this.form, `province`, value);
+      let parentdata = this.province.find(i => i.name == value);
+      if (parentdata) {
+        let arr = await this.placequery({ level: 2, parent: parentdata.code });
+        this.$set(this, `place`, arr.data);
+        var placedate = arr.data.map(item => item.name);
+        this.$set(this, `placedate`, placedate);
+      }
+      this.provincepic = false;
+    },
+    // 市区选择
+    plaSubmit(value) {
+      this.$set(this.form, `place`, value);
+      this.placepic = false;
+    },
+    // 开始时间
+    oneSubmit(time) {
+      let date = moment(time).format('YYYY-MM-DD HH:mm:ss');
+      if (date) this.$set(this.form, `start_time`, date);
+      this.onepic = false;
+    },
+    // 结束时间
+    twoSubmit(time) {
+      let date = moment(time).format('YYYY-MM-DD HH:mm:ss');
+      if (date) this.$set(this.form, `end_time`, date);
+      this.twopic = false;
+    },
+    // 报名截止
+    threeSubmit(time) {
+      let date = moment(time).format('YYYY-MM-DD HH:mm:ss');
+      if (date) this.$set(this.form, `join_end`, date);
+      this.threepic = false;
+    },
+    // 查询详情
+    async searchinfo() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        let data = res.data;
+        let province = this.province.find(i => i.code == res.data.province);
+        if (province) data.province = province.name;
+        let place = this.place.find(i => i.code == res.data.place);
+        if (place) data.place = place.name;
+        this.$set(this, `form`, data);
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/adminCenter/duijiehui/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 133 - 0
src/viewTwo/adminCenter/duijiehui/index.vue

@@ -0,0 +1,133 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <el-col :span="24" style="text-align:center;padding:10px 0;">
+            <el-button type="primary" size="mini" @click="add()">创建对接会</el-button>
+          </el-col>
+          <el-col :span="24">
+            <van-tabs v-model="active">
+              <van-tab title="下期预告">
+                <docklist :list="nextList" @detailBtn="detailBtn" :province="province" :place="place"></docklist>
+              </van-tab>
+              <van-tab title="正在直播">
+                <docklist :list="nowList" @detailBtn="detailBtn" :province="province" :place="place"></docklist>
+              </van-tab>
+              <van-tab title="已往直播">
+                <docklist :list="pastList" @detailBtn="detailBtn" :province="province" :place="place"></docklist>
+              </van-tab>
+            </van-tabs>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import docklist from './parts/docklist.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: dock } = createNamespacedHelpers('dock');
+const { mapActions: place } = createNamespacedHelpers('place');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    docklist,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: '1',
+      // 下期预告
+      nextList: [],
+      // 正在直播
+      nowList: [],
+      // 以往直播
+      pastList: [],
+      // 省
+      province: [],
+      // 市
+      place: [],
+    };
+  },
+  async created() {
+    await this.searchplace();
+    await this.search();
+  },
+  methods: {
+    ...place({ palcequery: 'query', transactiondtetle: 'delete' }),
+    ...dock(['query', 'delete', 'update', 'create']),
+    async search() {
+      let res = await this.query({ user_id: this.user.uid, status: '0' });
+      if (this.$checkRes(res)) this.$set(this, `nextList`, res.data);
+      res = await this.query({ user_id: this.user.uid, status: '1' });
+      if (this.$checkRes(res)) this.$set(this, `nowList`, res.data);
+      res = await this.query({ user_id: this.user.uid, status: '2' });
+      if (this.$checkRes(res)) this.$set(this, `pastList`, res.data);
+    },
+    // 创建对接会
+    add() {
+      this.$router.push({ path: '/viewTwo/adminCenter/duijiehui/add' });
+    },
+    // 审核,编辑
+    detailBtn(data) {
+      if (data.status == '0' || data.status == '1') {
+        this.$router.push({ path: '/viewTwo/adminCenter/duijiehui/add', query: { id: data.id } });
+      } else {
+        console.log(data);
+      }
+    },
+    // 查询省市
+    async searchplace() {
+      let res = await this.palcequery({ level: 1 });
+      let arr = await this.palcequery({ level: 2 });
+      if (res || arr) {
+        this.$set(this, `province`, res.data);
+        this.$set(this, `place`, arr.data);
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 103 - 0
src/viewTwo/adminCenter/duijiehui/parts/docklist.vue

@@ -0,0 +1,103 @@
+<template>
+  <div id="docklist">
+    <el-row>
+      <el-col :span="24" class="docklist">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p>
+            <span class="textOver">[{{ item.room_id }}]</span>
+            <span class="textOver">{{ item.title }}</span>
+          </p>
+          <p>
+            <span class="textOver">负责人:{{ item.adminuser }}</span>
+            <span class="textOver">手机号:{{ item.phone }}</span>
+          </p>
+          <p>
+            <span class="textOver">地址:{{ getprovince(item.province) }}-{{ getplace(item.place) }}</span>
+            <span class="textOver">状态:{{ item.status == '0' ? '准备中' : item.status == '1' ? '开始' : '结束' }}</span>
+          </p>
+          <el-col :span="24" class="btn">
+            <el-button type="primary" size="mini" @click="detailBtn(item)">{{
+              item.status == '0' || item.status == '1' ? '编辑/状态审核' : '查看成果'
+            }}</el-button>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'docklist',
+  props: {
+    list: { type: Array },
+    // 省
+    province: { type: Array, default: () => [] },
+    // 市
+    place: { type: Array, default: () => [] },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    // 过滤省
+    getprovince(item) {
+      let res = this.province.find(i => i.code == item);
+      if (res) return res.name;
+    },
+    // 过滤市
+    getplace(item) {
+      let res = this.place.find(i => i.code == item);
+      if (res) return res.name;
+    },
+    detailBtn(data) {
+      this.$emit('detailBtn', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.docklist {
+  padding: 0 10px;
+  .list {
+    border-bottom: 1px dashed #ccc;
+    padding: 10px 0;
+    p {
+      font-size: 16px;
+      color: #666;
+      padding: 0 0 5px 0;
+      span {
+        display: inline-block;
+        width: 50%;
+      }
+    }
+    p:nth-child(1) {
+      font-size: 18px;
+      font-weight: bold;
+      span:nth-child(1) {
+        width: 15%;
+        color: #ff0000;
+      }
+      span:nth-child(2) {
+        width: 85%;
+      }
+    }
+    .btn {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 209 - 0
src/viewTwo/adminCenter/enterpriseProduct/detail.vue

@@ -0,0 +1,209 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <span v-if="form.type == '0'">
+            <van-form>
+              <van-field v-model="form.name" name="名称" label="名称" placeholder="名称" readonly />
+              <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" readonly />
+              <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
+              <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" readonly />
+              <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+              <van-field v-model="form.field" name="所属领域" label="所属领域" placeholder="所属领域" readonly />
+              <van-field v-model="form.cooperation" name="合作方式" label="合作方式" placeholder="合作方式" readonly />
+              <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
+              <van-field v-model="form.companybrief" rows="1" autosize label="企业简介" type="textarea" placeholder="企业简介" readonly />
+              <van-field v-model="form.companyweb" name="企业网站" label="企业网站" placeholder="企业网站" readonly />
+              <van-field v-model="form.condition" name="合作条件及要求" label="合作条件及要求" placeholder="合作条件及要求" readonly />
+              <!-- <van-field v-model="form.image" name="产品图片" label="产品图片" placeholder="产品图片" readonly /> -->
+              <van-field v-model="form.budget" name="投资预算" label="投资预算" placeholder="投资预算" readonly />
+              <van-field v-model="form.companytype" name="投资预算" label="投资预算" placeholder="投资预算" readonly />
+              <van-field v-model="form.zzjgdm" name="信用代码" label="信用代码" placeholder="信用代码" readonly />
+              <van-field v-model="form.companydate" name="注册时间" label="注册时间" placeholder="注册时间" readonly />
+              <van-field v-model="form.companycapital" name="注册资金" label="注册资金" placeholder="注册资金" readonly />
+              <van-field v-model="form.companyperson" name="企业法人" label="企业法人" placeholder="企业法人" readonly />
+              <van-field v-model="form.sndqyzsr" name="企业总收入" label="企业总收入" placeholder="企业总收入" readonly />
+              <van-field v-model="form.sndyffy" name="研发费用" label="研发费用" placeholder="研发费用" readonly />
+              <van-field v-model="form.companytotal" name="总人数" label="总人数" placeholder="总人数" readonly />
+              <van-field v-model="form.zjzyfrs" name="研发人数" label="研发人数" placeholder="研发人数" readonly />
+              <van-field v-model="form.degreeurgency" name="需求紧急程度" label="需求紧急程度" placeholder="需求紧急程度" readonly />
+              <van-field v-model="form.requirementdesc" rows="1" autosize label="技术难题" type="textarea" placeholder="技术难题" readonly />
+              <van-field v-model="form.expect" rows="1" autosize label="预期目标" type="textarea" placeholder="预期目标" readonly />
+              <van-field v-model="form.present" rows="1" autosize label="需求现状" type="textarea" placeholder="需求现状" readonly />
+              <van-field v-model="form.mainproduct" rows="1" autosize label="主要产品" type="textarea" placeholder="主要产品" readonly />
+              <van-field v-model="form.qualifications" rows="1" autosize label="资质/荣誉" type="textarea" placeholder="资质/荣誉" readonly />
+              <van-field name="radio" label="状态">
+                <template #input>
+                  <van-radio-group v-model="form.status" direction="horizontal">
+                    <van-radio name="0">待审核</van-radio>
+                    <van-radio name="1">通过</van-radio>
+                    <van-radio name="2">拒绝</van-radio>
+                  </van-radio-group>
+                </template>
+              </van-field>
+              <div style="margin: 16px;">
+                <van-button round block type="info" @click="onSubmit">
+                  提交
+                </van-button>
+              </div>
+            </van-form>
+          </span>
+          <span v-if="form.type == '1'">
+            <van-form>
+              <van-field v-model="form.name" name="名称" label="名称" placeholder="名称" readonly />
+              <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" readonly />
+              <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
+              <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" readonly />
+              <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+              <van-field v-model="form.field" name="所属领域" label="所属领域" placeholder="所属领域" readonly />
+              <van-field v-model="form.cooperation" name="合作方式" label="合作方式" placeholder="合作方式" readonly />
+              <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
+              <van-field v-model="form.companybrief" rows="1" autosize label="企业简介" type="textarea" placeholder="企业简介" readonly />
+              <van-field v-model="form.companyweb" name="企业网站" label="企业网站" placeholder="企业网站" readonly />
+              <van-field v-model="form.condition" name="合作条件及要求" label="合作条件及要求" placeholder="合作条件及要求" readonly />
+              <van-field v-model="form.achievestatus" name="成果状态" label="成果状态" placeholder="成果状态" readonly />
+              <van-field v-model="form.achieveown" name="成果权属" label="成果权属" placeholder="成果权属" readonly />
+              <van-field v-model="form.degreeurgency" name="成果来源" label="成果来源" placeholder="成果来源" readonly />
+              <van-field v-model="form.roadshow" name="项目路演" label="项目路演" placeholder="项目路演" readonly />
+              <van-field v-model="form.intentionprice" name="意向价格" label="意向价格" placeholder="意向价格" readonly />
+              <van-field v-model="form.achievebrief" rows="1" autosize label="成果简介" type="textarea" placeholder="成果简介" readonly />
+              <van-field v-model="form.maxRows" rows="1" autosize label="技术特点" type="textarea" placeholder="技术特点" readonly />
+              <van-field v-model="form.team" rows="1" autosize label="技术团队" type="textarea" placeholder="技术团队" readonly />
+              <van-field v-model="form.expectations" rows="1" autosize label="商业预期" type="textarea" placeholder="商业预期" readonly />
+              <van-field name="radio" label="状态">
+                <template #input>
+                  <van-radio-group v-model="form.status" direction="horizontal">
+                    <van-radio name="0">待审核</van-radio>
+                    <van-radio name="1">通过</van-radio>
+                    <van-radio name="2">拒绝</van-radio>
+                  </van-radio-group>
+                </template>
+              </van-field>
+              <div style="margin: 16px;">
+                <van-button round block type="info" @click="onSubmit">
+                  提交
+                </van-button>
+              </div>
+            </van-form>
+          </span>
+          <span v-if="form.type == '2'">
+            <van-form>
+              <van-field v-model="form.name" name="名称" label="名称" placeholder="名称" readonly />
+              <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" readonly />
+              <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
+              <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" readonly />
+              <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+              <van-field v-model="form.messattribute" name="信息属性" label="信息属性" placeholder="信息属性" readonly />
+              <van-field v-model="form.demand" name="需求程度" label="需求程度" placeholder="需求程度" readonly />
+              <van-field v-model="form.informationdesc" rows="1" autosize label="信息描述" type="textarea" placeholder="信息描述" readonly />
+              <van-field v-model="form.coreelements" rows="1" autosize label="核心要素" type="textarea" placeholder="核心要素" readonly />
+              <van-field v-model="form.priceinfo" rows="1" autosize label="价格信息" type="textarea" placeholder="价格信息" readonly />
+              <van-field v-model="form.businessexpect" rows="1" autosize label="商业预期" type="textarea" placeholder="商业预期" readonly />
+              <van-field name="radio" label="状态">
+                <template #input>
+                  <van-radio-group v-model="form.status" direction="horizontal">
+                    <van-radio name="0">待审核</van-radio>
+                    <van-radio name="1">通过</van-radio>
+                    <van-radio name="2">拒绝</van-radio>
+                  </van-radio-group>
+                </template>
+              </van-field>
+              <div style="margin: 16px;">
+                <van-button round block type="info" @click="onSubmit">
+                  提交
+                </van-button>
+              </div>
+            </van-form>
+          </span>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('product');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      form: {},
+    };
+  },
+  async created() {
+    if (this.id) {
+      await this.search();
+    }
+  },
+  methods: {
+    ...product(['query', 'comquery', 'delete', 'fetch', 'update']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    // 提交
+    async onSubmit() {
+      let data = this.form;
+      const res = await this.update(data);
+      if (this.$checkRes(res)) {
+        this.$notify({
+          message: '审核成功',
+          type: 'success',
+        });
+        this.$router.push({ path: '/viewTwo/adminCenter/enterpriseProduct/index' });
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/adminCenter/enterpriseProduct/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 125 - 0
src/viewTwo/adminCenter/enterpriseProduct/index.vue

@@ -0,0 +1,125 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-tabs v-model="active">
+            <van-tab title="待审核">
+              <list :list="oneList" status="0" @query="search" @check="check" @deleteBtn="deleteBtn"></list>
+            </van-tab>
+            <van-tab title="审核成功">
+              <list :list="twoList" status="1" @query="search" @check="check" @deleteBtn="deleteBtn"></list>
+            </van-tab>
+            <van-tab title="审核拒绝">
+              <list :list="threeList" status="2" @query="search" @check="check" @deleteBtn="deleteBtn"></list>
+            </van-tab>
+          </van-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import list from './parts/list.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('product');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    list,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: '1',
+      // 待审核
+      oneList: [],
+      // 审核成功
+      twoList: [],
+      // 审核拒绝
+      threeList: [],
+    };
+  },
+  async created() {
+    await this.search({ status: '0' });
+    await this.search({ status: '1' });
+    await this.search({ status: '2' });
+  },
+  methods: {
+    ...product(['query', 'comquery', 'delete', 'fetch', 'update']),
+    async search({ skip = 0, status, ...info } = {}) {
+      let code = this.user.code;
+      let pid = this.user.uid;
+      let res = await this.comquery({ status, code, pid, ...info });
+      if (res.errcode === 0) {
+        if (status == '0') {
+          this.$set(this, `oneList`, res.data);
+        } else if (status == '1') {
+          this.$set(this, `twoList`, res.data);
+        } else if (status == '2') {
+          this.$set(this, `threeList`, res.data);
+        }
+      }
+    },
+    // 审核/查看
+    check(data) {
+      this.$router.push({ path: '/viewTwo/adminCenter/enterpriseProduct/detail', query: { id: data.id } });
+    },
+    // 删除
+    async deleteBtn(data) {
+      const res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$notify({
+          message: '删除成功',
+          type: 'success',
+        });
+        this.search({ status: '0' });
+        this.search({ status: '1' });
+        this.search({ status: '2' });
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 81 - 0
src/viewTwo/adminCenter/enterpriseProduct/parts/list.vue

@@ -0,0 +1,81 @@
+<template>
+  <div id="list">
+    <el-row>
+      <el-col :span="24" class="product">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.name }}</p>
+          <p>
+            <span>产品类型:{{ item.type == '0' ? '技术' : item.type == '1' ? '产品' : '商务' }}</span>
+            <span>产品状态:{{ item.status == '0' ? '待审核' : item.status == '1' ? '审核通过' : '审核拒绝' }}</span>
+          </p>
+          <p>
+            <el-button type="primary" size="mini" @click="check(item)">{{ item.status == '0' ? '审核' : '查看' }}</el-button>
+            <el-button type="danger" size="mini" @click="deleteBtn(item)">删除</el-button>
+          </p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'list',
+  props: {
+    list: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    // 审核/查看
+    check(data) {
+      this.$emit('check', data);
+    },
+    // 删除
+    deleteBtn(data) {
+      this.$emit('deleteBtn', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.product {
+  padding: 0 10px;
+  .list {
+    padding: 10px 0;
+    border-bottom: 1px dashed #ccc;
+    p {
+      font-size: 16px;
+      color: #000;
+      padding: 0 0 10px 0;
+    }
+    p:nth-child(1) {
+      font-size: 18px;
+      font-weight: bold;
+    }
+    p:nth-child(2) {
+      span {
+        display: inline-block;
+        width: 50%;
+      }
+    }
+    p:nth-child(3) {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 120 - 0
src/viewTwo/adminCenter/transaction/detail.vue

@@ -0,0 +1,120 @@
+<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" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-form>
+            <van-field v-model="form.product_name" name="产品名称" label="产品名称" placeholder="产品名称" readonly />
+            <van-field v-model="form.market_username" name="营销人名称" label="营销人名称" placeholder="营销人名称" readonly />
+            <van-field v-model="form.username" name="购买人名称" label="购买人名称" placeholder="购买人名称" readonly />
+            <van-field v-model="form.description" rows="1" autosize label="描述" type="textarea" placeholder="描述" />
+            <van-field name="radio" label="状态">
+              <template #input>
+                <van-radio-group v-model="form.status" direction="horizontal">
+                  <van-radio name="0">待审核</van-radio>
+                  <van-radio name="1">通过</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: transaction } = createNamespacedHelpers('transaction');
+const { mapActions: productpact } = createNamespacedHelpers('productpact');
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    NavBar,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      form: {},
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...transaction({ transactionfetch: 'fetch', transactionlist: 'query', transactiondetele: 'detele', transactionupdate: 'update' }),
+    ...productpact({ transactionQuery: 'query', productpactFetch: 'findpact', productpactUpdate: 'update' }),
+    async search() {
+      let res = await this.productpactFetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, 'form', res.data);
+      }
+    },
+    // 提交审核
+    async onSubmit() {
+      let data = this.form;
+      const res = await this.productpactUpdate(data);
+      if (this.$checkRes(res)) {
+        data.status = '2';
+        data.id = data.transaction_id;
+        const arr = await this.transactionupdate(data);
+        if (this.$checkRes(arr)) {
+          this.$notify({
+            message: '审核成功',
+            type: 'success',
+          });
+          this.$router.push({ path: '/viewTwo/adminCenter/transaction/index' });
+        }
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/adminCenter/transaction/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 90 - 0
src/viewTwo/adminCenter/transaction/index.vue

@@ -0,0 +1,90 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <list :list="oneList" @check="check"></list>
+          <!-- <van-tabs v-model="active">
+            <van-tab title="待审核">
+            </van-tab>
+          </van-tabs> -->
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import list from './parts/list.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: transaction } = createNamespacedHelpers('transaction');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    list,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: '1',
+      oneList: [],
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...transaction({ transactionsfetch: 'fetch', transactionslist: 'query', transactiondetele: 'detele' }),
+    async search() {
+      let res = await this.transactionslist();
+      if (this.$checkRes(res)) {
+        this.$set(this, 'oneList', res.data);
+      }
+    },
+    check(data) {
+      this.$router.push({ path: '/viewTwo/adminCenter/transaction/detail', query: { id: data.id } });
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 89 - 0
src/viewTwo/adminCenter/transaction/parts/list.vue

@@ -0,0 +1,89 @@
+<template>
+  <div id="list">
+    <el-row>
+      <el-col :span="24" class="train">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.product_name }}</p>
+          <p>
+            <span class="textOver">营销人:{{ item.market_username }}</span>
+            <span class="textOver">购买人:{{ item.username }}</span>
+          </p>
+          <p>
+            交易状态:{{
+              item.status == '0'
+                ? '未交易'
+                : item.status == '1'
+                ? '交易中'
+                : item.status == '2'
+                ? '交易完成'
+                : item.status == '3'
+                ? '交易失败'
+                : item.status == '4'
+                ? '待确定'
+                : '暂无'
+            }}
+          </p>
+          <p>
+            <el-button type="primary" size="mini" @click="check(item)">审核/查看</el-button>
+          </p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'list',
+  props: {
+    list: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    check(data) {
+      this.$emit('check', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.train {
+  padding: 0 10px;
+  .list {
+    padding: 10px;
+    border-bottom: 1px dashed #ccc;
+    p {
+      font-size: 16px;
+      color: #666;
+      padding: 0 0 5px 0;
+      span {
+        display: inline-block;
+        width: 50%;
+      }
+    }
+    p:nth-child(1) {
+      font-size: 18px;
+      font-weight: bold;
+      color: #000;
+    }
+    p:nth-child(4) {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 127 - 0
src/viewTwo/adminCenter/user/detail.vue

@@ -0,0 +1,127 @@
+<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" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <detailInfo :form="form" :role="userrole" @onSubmit="onSubmit"></detailInfo>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import detailInfo from './parts/detailInfo.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: marketuser } = createNamespacedHelpers('marketuser');
+const { mapActions: exportuser } = createNamespacedHelpers('exportuser');
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    NavBar,
+    detailInfo,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      // 用户详情
+      form: {},
+      // 用户类别
+      userrole: '',
+    };
+  },
+  async created() {
+    if (this.id) {
+      this.$set(this, `userrole`, this.role);
+      await this.search();
+    }
+  },
+  methods: {
+    ...marketuser({ marketuserfetch: 'fetch', marketuserupdate: 'update' }),
+    ...exportuser({ exportuserfetch: 'fetch', exportuserupdate: 'update' }),
+    // 查询详情
+    async search() {
+      let role = this.role;
+      if (role == '4' || role == '5') {
+        let res = await this.marketuserfetch(this.id);
+        if (this.$checkRes(res)) {
+          this.$set(this, `form`, res.data);
+        }
+      } else {
+        let res = await this.exportuserfetch(this.id);
+        if (this.$checkRes(res)) {
+          this.$set(this, `form`, res.data);
+        }
+      }
+    },
+    // 审核提交
+    async onSubmit({ data }) {
+      if (data.role == '4' || data.role == '5') {
+        let res = await this.marketuserupdate(data);
+        if (this.$checkRes(res)) {
+          this.$notify({
+            message: '审核成功',
+            type: 'success',
+          });
+          this.$router.push({ path: '/viewTwo/adminCenter/user/index' });
+        }
+      } else {
+        let res = await this.exportuserupdate(data);
+        if (this.$checkRes(res)) {
+          this.$notify({
+            message: '审核成功',
+            type: 'success',
+          });
+          this.$router.push({ path: '/viewTwo/adminCenter/user/index' });
+        }
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/adminCenter/user/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    role() {
+      return this.$route.query.role;
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 120 - 0
src/viewTwo/adminCenter/user/index.vue

@@ -0,0 +1,120 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <el-col :span="24">
+            <van-tabs v-model="active">
+              <van-tab title="待审核">
+                <userlist :list="oneList" @shenhebtn="shenhebtn"></userlist>
+              </van-tab>
+              <van-tab title="审核通过">
+                <userlist :list="twoList" @shenhebtn="shenhebtn"></userlist>
+              </van-tab>
+              <van-tab title="审核拒绝">
+                <userlist :list="threeList" @shenhebtn="shenhebtn"></userlist>
+              </van-tab>
+            </van-tabs>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, mapMutations, createNamespacedHelpers } from 'vuex';
+import NavBar from '@/layout/common/topInfo.vue';
+import userlist from './parts/userlist.vue';
+const { mapActions: marketuser } = createNamespacedHelpers('marketuser');
+export default {
+  name: 'index',
+  props: {},
+  components: { NavBar, userlist },
+  data: () => ({
+    // 头部标题
+    title: '',
+    // meta为true
+    isleftarrow: '',
+    // 返回
+    navShow: true,
+    show: false,
+    // 用户列表
+    active: '1',
+    // 待审核
+    oneList: [],
+    // 审核通过
+    twoList: [],
+    // 审核拒绝
+    threeList: [],
+    // 搜索
+    value: '',
+  }),
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...marketuser(['userquery']),
+    async search({ ...info } = {}) {
+      let user = this.user;
+      if (this.user.code == 'JLCJGLY') {
+        const res = await this.userquery({ ...info });
+        if (this.$checkRes(res)) {
+          let one = res.data.filter(i => i.status == '0' && i.isdel == '0');
+          if (one) this.$set(this, `oneList`, one);
+          let two = res.data.filter(i => i.status == '1' && i.isdel == '0');
+          if (two) this.$set(this, `twoList`, two);
+          let three = res.data.filter(i => i.status == '2' && i.isdel == '0');
+          if (three) this.$set(this, `threeList`, three);
+        }
+      } else {
+        const res = await this.userquery({ code: this.user.code, ...info });
+        if (this.$checkRes(res)) {
+          let one = res.data.filter(i => i.status == '0' && i.isdel == '0');
+          if (one) this.$set(this, `oneList`, one);
+          let two = res.data.filter(i => i.status == '1' && i.isdel == '0');
+          if (two) this.$set(this, `twoList`, two);
+          let three = res.data.filter(i => i.status == '2' && i.isdel == '0');
+          if (three) this.$set(this, `threeList`, three);
+        }
+      }
+    },
+    // 审核用户。查看用户
+    shenhebtn(data) {
+      this.$router.push({ path: '/viewTwo/adminCenter/user/detail', query: { id: data.uid, role: data.role } });
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  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;
+  position: relative;
+  z-index: 999;
+}
+.main {
+  min-height: 570px;
+}
+</style>

+ 167 - 0
src/viewTwo/adminCenter/user/parts/detailInfo.vue

@@ -0,0 +1,167 @@
+<template>
+  <div id="detailInfo">
+    <el-row>
+      <el-col :span="24">
+        <span v-if="role == '4'">
+          <van-form>
+            <van-field v-model="form.name" name="用户名" label="用户名" placeholder="用户名" readonly />
+            <van-field v-model="form.phone" name="手机号" label="手机号" placeholder="手机号" readonly />
+            <van-field v-model="form.code" name="机构代码" label="机构代码" readonly />
+            <van-field name="radio" label="用户类别">
+              <template #input>
+                <van-radio-group v-model="form.role" direction="horizontal" disabled>
+                  <van-radio name="4">个人</van-radio>
+                  <van-radio name="5">机构</van-radio>
+                  <van-radio name="6">专家</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+            <van-field v-model="form.addr" name="联系地址" label="联系地址" placeholder="联系地址" readonly />
+            <van-field v-model="form.office_phone" name="办公电话" label="办公电话" placeholder="办公电话" readonly />
+            <van-field v-model="form.profession" name="所属行业" label="所属行业" placeholder="所属行业" readonly />
+            <van-field name="radio" label="用户状态">
+              <template #input>
+                <van-radio-group v-model="form.status" direction="horizontal">
+                  <van-radio name="0">已注册</van-radio>
+                  <van-radio name="1">通过</van-radio>
+                  <van-radio name="2">未通过</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </span>
+        <span v-else-if="role == '5'">
+          <van-form>
+            <van-field v-model="form.name" name="用户名" label="用户名" placeholder="用户名" readonly />
+            <van-field v-model="form.phone" name="手机号" label="手机号" placeholder="手机号" readonly />
+            <van-field v-model="form.code" name="机构代码" label="机构代码" readonly />
+            <van-field name="radio" label="用户类别">
+              <template #input>
+                <van-radio-group v-model="form.role" direction="horizontal" disabled>
+                  <van-radio name="4">个人</van-radio>
+                  <van-radio name="5">机构</van-radio>
+                  <van-radio name="6">专家</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+            <van-field v-model="form.addr" name="联系地址" label="联系地址" placeholder="联系地址" readonly />
+            <van-field v-model="form.office_phone" name="办公电话" label="办公电话" placeholder="办公电话" readonly />
+            <van-field v-model="form.profession" name="所属行业" label="所属行业" placeholder="所属行业" readonly />
+            <van-field v-model="form.institution_code" name="信用代码" label="信用代码" placeholder="信用代码" readonly />
+            <van-field v-model="form.companytype" name="注册类型" label="注册类型" placeholder="注册类型" readonly />
+            <van-field v-model="form.companydate" name="注册时间" label="注册时间" placeholder="注册时间" readonly />
+            <van-field v-model="form.companycapital" name="注册资金" label="注册资金" placeholder="注册资金" readonly />
+            <van-field v-model="form.companyperson" name="企业法人" label="企业法人" placeholder="企业法人" readonly />
+            <van-field v-model="form.sndqyzsr" name="企业总收入" label="企业总收入" placeholder="企业总收入" readonly />
+            <van-field v-model="form.sndyffy" name="研发费用" label="研发费用" placeholder="研发费用" readonly />
+            <van-field v-model="form.companytotal" name="总人数" label="总人数" placeholder="总人数" readonly />
+            <van-field v-model="form.companybrief" rows="1" autosize label="企业简介" type="textarea" placeholder="企业简介" />
+            <van-field v-model="form.mainproduct" rows="1" autosize label="主要产品" type="textarea" placeholder="主要产品" />
+            <van-field v-model="form.qualifications" rows="1" autosize label="资质/荣誉" type="textarea" placeholder="资质/荣誉" />
+            <van-field name="radio" label="用户状态">
+              <template #input>
+                <van-radio-group v-model="form.status" direction="horizontal">
+                  <van-radio name="0">已注册</van-radio>
+                  <van-radio name="1">通过</van-radio>
+                  <van-radio name="2">未通过</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </span>
+        <span v-else-if="role == '6'">
+          <van-form>
+            <van-field v-model="form.name" name="用户名" label="用户名" placeholder="用户名" readonly />
+            <van-field v-model="form.phone" name="手机号" label="手机号" placeholder="手机号" readonly />
+            <van-field v-model="form.code" name="机构代码" label="机构代码" readonly />
+            <van-field name="radio" label="用户类别">
+              <template #input>
+                <van-radio-group v-model="form.role" direction="horizontal" disabled>
+                  <van-radio name="4">个人</van-radio>
+                  <van-radio name="5">机构</van-radio>
+                  <van-radio name="6">专家</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field name="uploader" label="用户头像">
+              <template #input>
+                <van-image width="100" height="100" :src="form.expertimage" />
+              </template>
+            </van-field>
+            <van-field v-model="form.education" name="最高学历" label="最高学历" placeholder="最高学历" readonly />
+            <van-field v-model="form.school" name="毕业院校" label="毕业院校" placeholder="毕业院校" readonly />
+            <van-field v-model="form.birthDate" name="出生日期" label="出生日期" placeholder="出生日期" readonly />
+            <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="电子邮箱" readonly />
+            <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+            <van-field v-model="form.company" name="工作单位" label="工作单位" placeholder="工作单位" readonly />
+            <van-field v-model="form.zwzc" name="职务职称" label="职务职称" placeholder="职务职称" readonly />
+            <van-field v-model="form.expertise" name="擅长领域" label="擅长领域" placeholder="擅长领域" readonly />
+            <van-field v-model="form.workexperience" rows="1" autosize label="工作经历" type="textarea" placeholder="工作经历" />
+            <van-field v-model="form.scientific" rows="1" autosize label="科研综述" type="textarea" placeholder="科研综述" />
+            <van-field v-model="form.undertakingproject" rows="1" autosize label="承担项目" type="textarea" placeholder="承担项目" />
+            <van-field v-model="form.scienceaward" rows="1" autosize label="科技奖励" type="textarea" placeholder="科技奖励" />
+            <van-field v-model="form.social" rows="1" autosize label="社会任职" type="textarea" placeholder="社会任职" />
+            <van-field name="radio" label="用户状态">
+              <template #input>
+                <van-radio-group v-model="form.status" direction="horizontal">
+                  <van-radio name="0">已注册</van-radio>
+                  <van-radio name="1">通过</van-radio>
+                  <van-radio name="2">未通过</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </span>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'detailInfo',
+  props: {
+    form: { type: Object },
+    role: { type: String },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.form });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 68 - 0
src/viewTwo/adminCenter/user/parts/userlist.vue

@@ -0,0 +1,68 @@
+<template>
+  <div id="userlist">
+    <el-row>
+      <el-col :span="24" class="userlist">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.name }}</p>
+          <p class="textOver">联系电话:{{ item.phone }}</p>
+          <p class="textOver">用户类别:{{ item.role == '4' ? '个人' : item.role == '5' ? '机构用户' : '专家用户' }}</p>
+          <p>
+            <el-button type="primary" size="mini" @click="shenhebtn(item)">{{ item.status == '0' ? '审核用户' : '查看用户' }}</el-button>
+          </p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'userlist',
+  props: {
+    list: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    shenhebtn(data) {
+      this.$emit('shenhebtn', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.userlist {
+  padding: 0 10px;
+  .list {
+    border-bottom: 1px dashed #ccc;
+    padding: 10px 0;
+    p {
+      font-size: 16px;
+      color: #666;
+      padding: 0 0 5px 0;
+    }
+    p:nth-child(1) {
+      font-size: 18px;
+      font-weight: bold;
+      color: #000;
+    }
+    p:nth-child(4) {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 153 - 0
src/viewTwo/twoLogin.vue

@@ -0,0 +1,153 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-tabs>
+            <van-tab title="平台登录">
+              <el-col :span="24">
+                <van-form>
+                  <van-field v-model="webform.phone" name="手机/统一社会信用代码" label="手机/统一社会信用代码" placeholder="手机/统一社会信用代码" />
+                  <van-field v-model="webform.passwd" type="password" name="密码" label="密码" placeholder="密码" />
+                  <van-field name="radio" label="用户类别">
+                    <template #input>
+                      <van-radio-group v-model="webform.role" direction="horizontal">
+                        <van-radio name="4">个人</van-radio>
+                        <van-radio name="5">机构</van-radio>
+                        <van-radio name="6">专家</van-radio>
+                        <!-- <van-radio name="2">VIP用户</van-radio> -->
+                      </van-radio-group>
+                    </template>
+                  </van-field>
+                  <div style="margin: 16px;">
+                    <van-button round block type="info" @click="onwebSubmit">
+                      登录
+                    </van-button>
+                  </div>
+                </van-form>
+              </el-col>
+            </van-tab>
+            <van-tab title="管理登录">
+              <el-col :span="24">
+                <van-form>
+                  <van-field v-model="form.phone" name="手机/机构代码" label="手机/机构代码" placeholder="手机/机构代码" />
+                  <van-field v-model="form.passwd" type="password" name="密码" label="密码" placeholder="密码" />
+                  <van-field name="radio" label="用户类别">
+                    <template #input>
+                      <van-radio-group v-model="form.role">
+                        <van-radio name="1">合作机构/业务管理员</van-radio>
+                      </van-radio-group>
+                    </template>
+                  </van-field>
+                  <div style="margin: 16px;">
+                    <van-button round block type="info" @click="onSubmit">
+                      登录
+                    </van-button>
+                  </div>
+                </van-form>
+              </el-col>
+            </van-tab>
+          </van-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: login } = createNamespacedHelpers('login');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      // 平台登录
+      webform: {},
+      // 管理登录
+      form: {},
+    };
+  },
+  created() {},
+  methods: {
+    ...login({ toLogin: 'login' }),
+    // 平台登录
+    async onwebSubmit() {
+      let data = this.webform;
+      const res = await this.toLogin({ user: data });
+      if (res.uid) {
+        console.log(res);
+        this.$router.push({ path: '/viewTwo/account/index' });
+      }
+    },
+    // 管理登录
+    async onSubmit() {
+      let data = this.form;
+      if (data.role == null) {
+        data.role = '0';
+        const res = await this.toLogin({ user: data });
+        if (res.uid) {
+          this.$router.push({ path: '/viewTwo/account/index' });
+        }
+      } else {
+        const res = await this.toLogin({ user: data });
+        if (res.uid) {
+          this.$router.push({ path: '/viewTwo/account/index' });
+        }
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/user/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+/deep/.van-field__label {
+  width: 7.2em;
+}
+/deep/.van-radio--horizontal {
+  margin: 0 15px 10px 0;
+}
+/deep/.van-field__label {
+  text-align: center;
+}
+</style>

+ 112 - 0
src/viewTwo/updatePwd/index.vue

@@ -0,0 +1,112 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="pwd">
+          <van-form>
+            <van-field
+              v-model="form.oldpasswd"
+              type="password"
+              name="旧密码"
+              label="旧密码"
+              placeholder="旧密码"
+              :rules="[{ required: true, message: '请填写旧密码' }]"
+            />
+            <van-field
+              v-model="form.newpasswd"
+              type="password"
+              name="新密码"
+              label="新密码"
+              placeholder="新密码"
+              :rules="[{ required: true, message: '请填写新密码' }]"
+            />
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+import NavBar from '@/layout/common/topInfo.vue';
+const { mapActions: password } = createNamespacedHelpers('password');
+const { mapActions: login } = createNamespacedHelpers('login');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      form: {},
+    };
+  },
+  created() {},
+  methods: {
+    ...password(['query', 'update']),
+    ...login(['toGetMenu', 'logout']),
+    resetForm(formName) {
+      this.form = {};
+    },
+    async onSubmit() {
+      let data = this.form;
+      data.id = this.user.uid;
+      let res = await this.update(data);
+      if (res.errcode === 0) {
+        this.$notify({
+          message: '修改成功',
+          type: 'success',
+        });
+        this.logout();
+      } else {
+        this.$notify({
+          message: res.errmsg,
+          type: 'danger',
+        });
+      }
+      this.$router.push({ path: '/twoLogin' });
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  height: 46px;
+  overflow: hidden;
+}
+.btn1 {
+  text-align: center;
+  margin-top: 10px;
+}
+</style>

+ 198 - 0
src/viewTwo/userCenter/dock/detail.vue

@@ -0,0 +1,198 @@
+<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" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-tabs v-model="active">
+            <van-tab title="科技需求">
+              <producInfo :form="form" @onSubmit="onSubmit" :fieldList="fieldList" :cooperationList="cooperationList"></producInfo>
+            </van-tab>
+            <van-tab title="技术产品">
+              <el-form :model="productForm" label-width="100px">
+                <el-form-item label="选择产品">
+                  <el-select v-model="productForm.goodsList" value-key="id" multiple placeholder="请选择选择产品">
+                    <el-option v-for="(item, index) in goodsLists" :key="index" :label="item.name" :value="item"> </el-option>
+                  </el-select>
+                </el-form-item>
+                <el-form-item>
+                  <el-button type="primary" @click="achOnsubmit()">申请提交</el-button>
+                </el-form-item>
+              </el-form>
+            </van-tab>
+          </van-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import producInfo from './parts/producInfo.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: markettype } = createNamespacedHelpers('markettype');
+const { mapActions: marketuser } = createNamespacedHelpers('marketuser');
+const { mapActions: exportuser } = createNamespacedHelpers('exportuser');
+const { mapActions: product } = createNamespacedHelpers('product');
+const { mapActions: apply } = createNamespacedHelpers('apply');
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    NavBar,
+    producInfo,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: 0,
+      form: {},
+      // 字典表
+      fieldList: [],
+      cooperationList: [],
+      //成果列表
+      goodsLists: [],
+      productForm: {
+        goodsList: [],
+      },
+    };
+  },
+  async created() {
+    await this.searchtype();
+    await this.searchinfo();
+    await this.searchproduct();
+  },
+  methods: {
+    ...markettype({ markettypeList: 'query' }),
+    ...marketuser({ marketuserfetch: 'fetch' }),
+    ...exportuser({ exportuserfetch: 'fetch' }),
+    ...apply({ applyupdate: 'update', applyCreate: 'create' }),
+    ...product({ productFetch: 'fetch', productCreate: 'create', productUpdate: 'update', marketquery: 'query' }),
+    // 查询企业详情
+    async searchinfo() {
+      let user = this.user;
+      if (user.role == '4' || user.role == '5') {
+        let res = await this.marketuserfetch(user.userid);
+        if (res.errcode === 0) {
+          let message = {
+            company: res.data.name,
+            phone: res.data.phone,
+            email: res.data.email,
+            companytype: res.data.companytype,
+            companydate: res.data.companydate,
+            companycapital: res.data.companycapital,
+          };
+          this.$set(this, `form`, message);
+        }
+      } else {
+        let res = await this.exportuserfetch(user.userid);
+        if (res.errcode === 0) {
+          let message = {
+            company: res.data.name,
+            phone: res.data.phone,
+            email: res.data.email,
+            qqwx: res.data.qqwx,
+          };
+          this.$set(this, `form`, message);
+        }
+      }
+    },
+    // 查询字典表
+    async searchtype() {
+      // 所属领域;
+      let res = await this.markettypeList({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+      // 合作方式;
+      res = await this.markettypeList({ category: '03' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `cooperationList`, res.data);
+      }
+    },
+    //查询产品列表
+    async searchproduct() {
+      let res = await this.marketquery({ userid: this.user.uid, status: 1 });
+      if (this.$checkRes(res)) {
+        this.$set(this, `goodsLists`, res.data);
+      }
+    },
+    // 技术申请对接会
+    async onSubmit({ data }) {
+      data.type = this.type;
+      data.userid = this.user.uid;
+      let res = await this.productCreate(data);
+      if (this.$checkRes(res)) {
+        this.$notify({
+          message: '申请参加对接会成功',
+          type: 'success',
+        });
+        this.$router.push({ path: '/viewTwo/userCenter/dock/index' });
+      }
+    },
+    // 产品申请对接会
+    async achOnsubmit() {
+      let data = this.productForm;
+      data.user_id = this.user.uid;
+      data.user_name = this.user.name;
+      data.contact_tel = this.user.phone;
+      data.role = this.user.role;
+      const res = await this.applyCreate({ id: this.id, ...data });
+      if (res.errcode === 0) {
+        this.$notify({
+          message: '申请参加对接会成功',
+          type: 'success',
+        });
+        this.$router.push({ path: '/viewTwo/userCenter/dock/index' });
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/userCenter/dock/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+/deep/.van1 {
+  padding-top: 20px;
+}
+/deep/.el-form-item {
+  margin-top: 15px;
+}
+</style>

+ 119 - 0
src/viewTwo/userCenter/dock/index.vue

@@ -0,0 +1,119 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <el-col :span="24">
+            <van-tabs v-model="active">
+              <van-tab title="下期直播">
+                <docklist :list="nextList" @detailBtn="detailBtn" :province="province" :place="place"></docklist>
+              </van-tab>
+              <van-tab title="以往直播">
+                <docklist :list="pastList" @detailBtn="detailBtn" :province="province" :place="place"></docklist>
+              </van-tab>
+            </van-tabs>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import docklist from './parts/docklist.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: dock } = createNamespacedHelpers('dock');
+const { mapActions: place } = createNamespacedHelpers('place');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    docklist,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: '1',
+      // 下期直播
+      nextList: [],
+      // 以往直播
+      pastList: [],
+      // 省
+      province: [],
+      // 市
+      place: [],
+    };
+  },
+  async created() {
+    await this.searchplace();
+    await this.search();
+  },
+  methods: {
+    ...place({ palcequery: 'query', transactiondtetle: 'delete' }),
+    ...dock(['query', 'delete', 'update', 'create']),
+    async search() {
+      let res = await this.query({ status: '0' });
+      if (this.$checkRes(res)) this.$set(this, `nextList`, res.data);
+      res = await this.query({ status: '2' });
+      if (this.$checkRes(res)) this.$set(this, `pastList`, res.data);
+    },
+    // 申请
+    detailBtn(data) {
+      if (data.status == '0') {
+        this.$router.push({ path: '/viewTwo/userCenter/dock/detail/', query: { id: data.id } });
+      } else {
+        console.log(data);
+      }
+    },
+    // 查询省市
+    async searchplace() {
+      let res = await this.palcequery({ level: 1 });
+      let arr = await this.palcequery({ level: 2 });
+      if (res || arr) {
+        this.$set(this, `province`, res.data);
+        this.$set(this, `place`, arr.data);
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 101 - 0
src/viewTwo/userCenter/dock/parts/docklist.vue

@@ -0,0 +1,101 @@
+<template>
+  <div id="docklist">
+    <el-row>
+      <el-col :span="24" class="docklist">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p>
+            <span class="textOver">[{{ item.room_id }}]</span>
+            <span class="textOver">{{ item.title }}</span>
+          </p>
+          <p>
+            <span class="textOver">负责人:{{ item.adminuser }}</span>
+            <span class="textOver">手机号:{{ item.phone }}</span>
+          </p>
+          <p>
+            <span class="textOver">地址:{{ getprovince(item.province) }}-{{ getplace(item.place) }}</span>
+            <span class="textOver">状态:{{ item.status == '0' ? '准备中' : item.status == '1' ? '开始' : '结束' }}</span>
+          </p>
+          <el-col :span="24" class="btn">
+            <el-button v-if="item.status === '0'" type="primary" size="mini" @click="detailBtn(item)">申请</el-button>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'docklist',
+  props: {
+    list: { type: Array },
+    // 省
+    province: { type: Array, default: () => [] },
+    // 市
+    place: { type: Array, default: () => [] },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    // 过滤省
+    getprovince(item) {
+      let res = this.province.find(i => i.code == item);
+      if (res) return res.name;
+    },
+    // 过滤市
+    getplace(item) {
+      let res = this.place.find(i => i.code == item);
+      if (res) return res.name;
+    },
+    detailBtn(data) {
+      this.$emit('detailBtn', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.docklist {
+  padding: 0 10px;
+  .list {
+    border-bottom: 1px dashed #ccc;
+    padding: 10px 0;
+    p {
+      font-size: 16px;
+      color: #666;
+      padding: 0 0 5px 0;
+      span {
+        display: inline-block;
+        width: 50%;
+      }
+    }
+    p:nth-child(1) {
+      font-size: 18px;
+      font-weight: bold;
+      span:nth-child(1) {
+        width: 15%;
+        color: #ff0000;
+      }
+      span:nth-child(2) {
+        width: 85%;
+      }
+    }
+    .btn {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 139 - 0
src/viewTwo/userCenter/dock/parts/producInfo.vue

@@ -0,0 +1,139 @@
+<template>
+  <div id="producInfo">
+    <el-row>
+      <el-col :span="24">
+        <van-form>
+          <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
+          <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
+          <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+          <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" />
+          <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" />
+          <van-field v-model="form.name" name="需求名称" label="需求名称" placeholder="需求名称" />
+          <van-field name="radio" label="紧急程度">
+            <template #input>
+              <van-radio-group v-model="form.degreeurgency" direction="horizontal">
+                <van-radio name="特急">特急</van-radio>
+                <van-radio name="一般">一般</van-radio>
+                <van-radio name="长期">长期</van-radio>
+              </van-radio-group>
+            </template>
+          </van-field>
+          <van-field readonly clickable name="picker" :value="form.field" label="所属领域" placeholder="点击选择" @click="fieldpic = true" />
+          <van-popup v-model="fieldpic" position="bottom">
+            <van-picker show-toolbar :columns="fieldList" @confirm="fieldSubmit" @cancel="fieldpic = false" value-key="name" />
+          </van-popup>
+          <van-field readonly clickable name="picker" :value="form.cooperation" label="合作方式" placeholder="点击选择" @click="cooperationpic = true" />
+          <van-popup v-model="cooperationpic" position="bottom">
+            <van-picker show-toolbar :columns="cooperationList" @confirm="cooperationSubmit" @cancel="cooperationpic = false" value-key="name" />
+          </van-popup>
+          <van-field v-model="form.budget" name="投资预算" label="投资预算" placeholder="投资预算" />
+          <van-field v-model="form.requirementdesc" rows="1" autosize label="技术说明" type="textarea" placeholder="技术说明" />
+          <van-field v-model="form.expect" rows="1" autosize label="预期目标" type="textarea" placeholder="预期目标" />
+          <van-field v-model="form.present" rows="1" autosize label="合作要求" type="textarea" placeholder="合作要求" />
+          <van-field name="expertimage" label="产品图片(6)">
+            <template #input
+              ><upload
+                :limit="6"
+                :data="form.image"
+                type="image"
+                :url="`/files/imgpath/upload`"
+                @upload="uploadSuccess"
+                :uploadBtn="true"
+                @delete="uploadDelete"
+              ></upload>
+            </template>
+          </van-field>
+          <div style="margin: 16px;">
+            <van-button round block type="info" @click="onSubmit">
+              提交申请
+            </van-button>
+          </div>
+        </van-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import upload from '@/components/upload.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'producInfo',
+  props: {
+    form: { type: Object },
+    fieldList: { type: Array },
+    cooperationList: { type: Array },
+  },
+  components: {
+    upload,
+  },
+  data: function() {
+    return {
+      field: [],
+      fieldpic: false,
+      cooperation: [],
+      cooperationpic: false,
+    };
+  },
+  created() {},
+  methods: {
+    // 所屬領域
+    fieldSubmit(value) {
+      this.$set(this.form, `field`, value.name);
+      this.fieldpic = false;
+    },
+    // 合作方式
+    cooperationSubmit(value) {
+      this.$set(this.form, `cooperation`, value.name);
+      this.cooperationpic = false;
+    },
+    // 图片上传
+    uploadSuccess({ type, data }) {
+      let arr = _.get(this.form, type);
+      if (_.isArray(arr)) {
+        let datas = { name: data.name, url: data.uri };
+        this.form[type].push({ name: data.name, url: data.uri });
+      } else {
+        let newArr = [{ name: data.name, url: data.uri }];
+        this.$set(this.form, `${type}`, newArr);
+      }
+    },
+    // 删除图片
+    uploadDelete(index) {
+      this.form.image.splice(index, 1);
+    },
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.form });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.patentList {
+  padding: 0 10px;
+  border-bottom: 1px dashed #ccc;
+  p {
+    font-size: 16px;
+    color: #666;
+    padding: 0 0 5px 0;
+  }
+  p:nth-child(1) {
+    font-size: 18px;
+    color: #000;
+    font-weight: bold;
+  }
+  p:nth-child(3) {
+    text-align: center;
+  }
+}
+</style>

+ 115 - 0
src/viewTwo/userCenter/matter/detail.vue

@@ -0,0 +1,115 @@
+<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" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-form>
+            <van-field v-model="form.product_name" name="产品名称" label="产品名称" placeholder="产品名称" readonly />
+            <van-field v-model="form.market_username" name="营销人名称" label="营销人名称" placeholder="营销人名称" readonly />
+            <van-field v-model="form.username" name="购买人名称" label="购买人名称" placeholder="购买人名称" readonly />
+            <van-field v-model="form.description" rows="1" autosize label="描述" type="textarea" placeholder="描述" />
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: transaction } = createNamespacedHelpers('transaction');
+const { mapActions: productpact } = createNamespacedHelpers('productpact');
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    NavBar,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      form: {},
+    };
+  },
+  async created() {
+    if (this.id) {
+      await this.search();
+    }
+  },
+  methods: {
+    ...transaction({ transactionfetch: 'fetch', transactionlist: 'query', transactiondetele: 'detele', transactionupdate: 'update' }),
+    ...productpact({ transactionQuery: 'query', productpactFetch: 'findpact', productpactUpdate: 'update', productpactCreate: 'create' }),
+    async search() {
+      let res = await this.transactionfetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, 'form', res.data);
+      }
+    },
+    // 提交
+    async onSubmit() {
+      let data = this.form;
+      data.status = '0';
+      data.transaction_id = this.form.id;
+      const res = await this.productpactCreate(data);
+      if (this.$checkRes(res)) {
+        data.status = '4';
+        const arr = await this.transactionupdate(data);
+        if (this.$checkRes(arr)) {
+          this.$notify({
+            message: '提交交易成功,等待管理员审核,方可交易完成',
+            type: 'success',
+          });
+          this.$router.push({ path: '/viewTwo/userCenter/matter/index' });
+        }
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/userCenter/matter/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 151 - 0
src/viewTwo/userCenter/matter/index.vue

@@ -0,0 +1,151 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-tabs v-model="active">
+            <van-tab title="我的全部">
+              <list :list="oneList" status="3" @query="search" @checkBtn="checkBtn"></list>
+            </van-tab>
+            <van-tab title="我的洽谈">
+              <list :list="twoList" status="0" @query="search" @checkBtn="checkBtn"></list>
+            </van-tab>
+            <van-tab title="我的意向">
+              <list :list="threeList" status="1" @query="search" @checkBtn="checkBtn"></list>
+            </van-tab>
+            <van-tab title="我的交易">
+              <list :list="fourList" status="2" @query="search" @checkBtn="checkBtn"></list>
+            </van-tab>
+          </van-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import list from './parts/list.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: transaction } = createNamespacedHelpers('transaction');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    list,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: 0,
+      oneList: [],
+      twoList: [],
+      threeList: [],
+      fourList: [],
+    };
+  },
+  async created() {
+    await this.search({ status: '3' });
+    await this.search({ status: '0' });
+    await this.search({ status: '1' });
+    await this.search({ status: '2' });
+  },
+  methods: {
+    ...transaction({ transactionsfetch: 'fetch', transactionslist: 'query', transactiondetele: 'detele', shenheupdate: 'update' }),
+    async search({ skip = 0, status, ...info } = {}) {
+      let userid = this.user.uid;
+      let market_userid = this.user.uid;
+      if (status == '3') {
+        const res = await this.transactionslist({ skip, userid, ...info });
+        const arr = await this.transactionslist({ skip, market_userid, ...info });
+        var newData = res.data.concat(arr.data);
+        if (this.$checkRes(newData)) {
+          this.$set(this, `oneList`, newData);
+        }
+      } else if (status == '0') {
+        const res = await this.transactionslist({ skip, userid, status: '0', ...info });
+        const arr = await this.transactionslist({ skip, market_userid, status: '0', ...info });
+        var newData = res.data.concat(arr.data);
+        if (this.$checkRes(res)) {
+          this.$set(this, `twoList`, newData);
+        }
+      } else if (status == '1') {
+        const res = await this.transactionslist({ skip, userid, status: '1', ...info });
+        const arr = await this.transactionslist({ skip, market_userid, status: '4', ...info });
+        var newData = res.data.concat(arr.data);
+        if (this.$checkRes(newData)) {
+          this.$set(this, `threeList`, newData);
+        }
+      } else if (status == '2') {
+        const res = await this.transactionslist({ skip, userid, status: '2', ...info });
+        const arr = await this.transactionslist({ skip, market_userid, status: '2', ...info });
+        var newData = res.data.concat(arr.data);
+        if (this.$checkRes(newData)) {
+          this.$set(this, `fourList`, newData);
+        }
+      }
+    },
+    // 交易按钮
+    async checkBtn(data) {
+      // 同意交易%交易完成
+      if (data.status == '0') {
+        data.status = '1';
+        let res = await this.shenheupdate(data);
+        this.$notify({
+          message: ' 同意交易成功',
+          type: 'success',
+        });
+        this.searchevery();
+      } else if (data.status == '1') {
+        this.$router.push({ path: '/viewTwo/userCenter/matter/detail', query: { id: data.id } });
+      }
+    },
+    // 提交刷新
+    searchevery() {
+      this.search({ status: '3' });
+      this.search({ status: '0' });
+      this.search({ status: '1' });
+      this.search({ status: '2' });
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 82 - 0
src/viewTwo/userCenter/matter/parts/list.vue

@@ -0,0 +1,82 @@
+<template>
+  <div id="list">
+    <el-row>
+      <el-col :span="24" class="metter">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.product_name }}</p>
+          <p>
+            <span class="textOver">营销人:{{ item.market_username }}</span>
+            <span class="textOver">购买人:{{ item.username }}</span>
+          </p>
+          <p class="textOver">
+            交易状态:{{
+              item.status == '0' ? '正在洽谈' : item.status == '1' ? '达成意向' : item.status == '2' ? '我的交易' : item.status == '4' ? '合同审核中' : '暂无'
+            }}
+          </p>
+          <p>
+            <el-button type="primary" size="mini" v-if="item.status == '0' || item.status == '1'" @click="checkBtn(item)">{{
+              item.status == '0' ? '同意交易' : item.status == '1' ? '交易完成' : '暂无'
+            }}</el-button>
+          </p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'list',
+  props: {
+    list: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    checkBtn(data) {
+      this.$emit('checkBtn', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.metter {
+  padding: 0 10px;
+  .list {
+    padding: 10px 0;
+    border-bottom: 1px dashed #ccc;
+    p {
+      font-size: 16px;
+      color: #000;
+      padding: 0 0 10px 0;
+    }
+    p:nth-child(1) {
+      font-size: 18px;
+      font-weight: bold;
+    }
+    p:nth-child(2) {
+      span {
+        display: inline-block;
+        width: 50%;
+      }
+    }
+    p:nth-child(4) {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 226 - 0
src/viewTwo/userCenter/myProduct/detail.vue

@@ -0,0 +1,226 @@
+<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" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <van-tabs v-model="active" @click="clickbtn">
+            <van-tab title="科技需求">
+              <producInfo
+                :type="type"
+                :form="form"
+                @onSubmit="onSubmit"
+                :fieldList="fieldList"
+                :achievestatusList="achievestatusList"
+                :cooperationList="cooperationList"
+              ></producInfo>
+            </van-tab>
+            <van-tab title="技术成果">
+              <producInfo
+                :type="type"
+                :form="form"
+                @onSubmit="onSubmit"
+                :fieldList="fieldList"
+                :achievestatusList="achievestatusList"
+                :cooperationList="cooperationList"
+              ></producInfo>
+            </van-tab>
+            <van-tab title="商务服务">
+              <producInfo
+                :type="type"
+                :form="form"
+                @onSubmit="onSubmit"
+                :fieldList="fieldList"
+                :achievestatusList="achievestatusList"
+                :cooperationList="cooperationList"
+              ></producInfo>
+            </van-tab>
+          </van-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import producInfo from './parts/producInfo.vue';
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: markettype } = createNamespacedHelpers('markettype');
+const { mapActions: marketuser } = createNamespacedHelpers('marketuser');
+const { mapActions: exportuser } = createNamespacedHelpers('exportuser');
+const { mapActions: product } = createNamespacedHelpers('product');
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    NavBar,
+    producInfo,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: 0,
+      type: '0',
+      form: {},
+      // 字典表
+      fieldList: [],
+      achievestatusList: [],
+      cooperationList: [],
+    };
+  },
+  async created() {
+    await this.searchtype();
+    await this.searchinfo();
+    if (this.id) {
+      await this.searchproductinfo();
+    }
+  },
+  methods: {
+    ...markettype({ markettypeList: 'query' }),
+    ...marketuser({ marketuserfetch: 'fetch' }),
+    ...exportuser({ exportuserfetch: 'fetch' }),
+    ...product({ productFetch: 'fetch', productCreate: 'create', productUpdate: 'update' }),
+    // 查询企业详情
+    async searchinfo() {
+      let user = this.user;
+      if (user.role == '4' || user.role == '5') {
+        let res = await this.marketuserfetch(user.userid);
+        if (res.errcode === 0) {
+          let message = {
+            company: res.data.name,
+            phone: res.data.phone,
+            email: res.data.email,
+            companytype: res.data.companytype,
+            companydate: res.data.companydate,
+            companycapital: res.data.companycapital,
+          };
+          this.$set(this, `form`, message);
+        }
+      } else {
+        let res = await this.exportuserfetch(user.userid);
+        if (res.errcode === 0) {
+          let message = {
+            company: res.data.name,
+            phone: res.data.phone,
+            email: res.data.email,
+            qqwx: res.data.qqwx,
+          };
+          this.$set(this, `form`, message);
+        }
+      }
+    },
+    // 查询产品详情
+    async searchproductinfo() {
+      let res = await this.productFetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    // 查询字典表
+    async searchtype() {
+      // 所属领域;
+      let res = await this.markettypeList({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+      // 成果状态;
+      res = await this.markettypeList({ category: '02' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `achievestatusList`, res.data);
+      }
+      // 合作方式;
+      res = await this.markettypeList({ category: '03' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `cooperationList`, res.data);
+      }
+    },
+    // 选择类型
+    clickbtn(name) {
+      this.$set(this, `type`, String(name));
+    },
+    // 提交
+    async onSubmit({ data }) {
+      if (data.id) {
+        let res = await this.productUpdate(data);
+        if (this.$checkRes(res)) {
+          this.$notify({
+            message: '修改草稿信息成功',
+            type: 'success',
+          });
+          this.$router.push({ path: '/viewTwo/userCenter/myProduct/index' });
+        }
+      } else {
+        data.type = this.type;
+        data.userid = this.user.uid;
+        let res = await this.productCreate(data);
+        if (this.$checkRes(res)) {
+          this.$notify({
+            message: '保存草稿成功',
+            type: 'success',
+          });
+          this.$router.push({ path: '/viewTwo/userCenter/myProduct/index' });
+        }
+      }
+    },
+    // 监听显示类型
+    changetype() {
+      let type = this.producttype;
+      this.$set(this, `active`, Number(type));
+      this.$set(this, `type`, type);
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/userCenter/myProduct/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    producttype() {
+      return this.$route.query.type;
+    },
+  },
+  watch: {
+    producttype: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        this.changetype();
+      },
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+}
+</style>

+ 160 - 0
src/viewTwo/userCenter/myProduct/index.vue

@@ -0,0 +1,160 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <el-col :span="24" class="btn">
+            <el-button type="primary" size="mini" @click="add()">信息发布</el-button>
+          </el-col>
+          <el-col :span="24">
+            <van-tabs v-model="active">
+              <van-tab title="待发布">
+                <productList :list="oneList" @editbtn="editbtn" @checkbtn="checkbtn" @deletebtn="deletebtn"> </productList>
+              </van-tab>
+              <van-tab title="审核中">
+                <productList :list="twoList" @editbtn="editbtn" @checkbtn="checkbtn" @deletebtn="deletebtn"></productList>
+              </van-tab>
+              <van-tab title="已发布">
+                <productList :list="threeList" @editbtn="editbtn" @checkbtn="checkbtn" @deletebtn="deletebtn"></productList>
+              </van-tab>
+            </van-tabs>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+import productList from './parts/productList.vue';
+const { mapActions: product } = createNamespacedHelpers('product');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    productList,
+  },
+  data: function() {
+    return {
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      active: '1',
+      // 待发布
+      oneList: [],
+      // 审核中
+      twoList: [],
+      // 已发布
+      threeList: [],
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...product({ productQuery: 'query', columnInfo: 'fetch', marketcerate: 'create', productdeltet: 'delete', upup: 'update' }),
+    async search() {
+      let userid = this.user.uid;
+      let res = await this.productQuery({ userid, status: 2 });
+      let res1 = await this.productQuery({ userid, status: 3 });
+      var newDate = res.data.concat(res1.data);
+      if (newDate.length > 0) {
+        this.$set(this, `oneList`, newDate);
+      }
+      res = await this.productQuery({ userid, status: 0 });
+      if (this.$checkRes(res)) {
+        this.$set(this, `twoList`, res.data);
+      }
+      res = await this.productQuery({ userid, status: 1 });
+      if (this.$checkRes(res)) {
+        this.$set(this, `threeList`, res.data);
+      }
+    },
+    // 添加
+    add() {
+      this.$router.push({ path: '/viewTwo/userCenter/myProduct/detail', query: { type: '0' } });
+    },
+    // 编辑
+    editbtn(data) {
+      this.$router.push({ path: '/viewTwo/userCenter/myProduct/detail', query: { id: data.id, type: data.type } });
+    },
+    // 发布
+    async checkbtn(data) {
+      data.status = '0';
+      data.userid = this.user.uid;
+      let res = await this.upup(data);
+      if (this.$checkRes(res)) {
+        this.$notify({
+          message: '发布成功',
+          type: 'success',
+        });
+        this.search();
+      } else {
+        this.$notify({
+          message: res.errmsg,
+          type: 'danger',
+        });
+      }
+    },
+    //删除
+    async deletebtn(data) {
+      const res = await this.productdeltet(data.id);
+      if (this.$checkRes(res)) {
+        this.$notify({
+          message: '删除成功',
+          type: 'success',
+        });
+        this.search();
+      } else {
+        this.$notify({
+          message: res.errmsg,
+          type: 'danger',
+        });
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</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;
+  .btn {
+    text-align: center;
+    padding: 10px 0;
+  }
+}
+</style>

+ 318 - 0
src/viewTwo/userCenter/myProduct/parts/producInfo.vue

@@ -0,0 +1,318 @@
+<template>
+  <div id="producInfo">
+    <el-row>
+      <el-col :span="24">
+        <span v-if="type == '0'">
+          <van-form>
+            <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
+            <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
+            <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+            <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" />
+            <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" />
+            <van-field v-model="form.name" name="需求名称" label="需求名称" placeholder="需求名称" />
+            <van-field name="radio" label="紧急程度">
+              <template #input>
+                <van-radio-group v-model="form.degreeurgency" direction="horizontal">
+                  <van-radio name="特急">特急</van-radio>
+                  <van-radio name="一般">一般</van-radio>
+                  <van-radio name="长期">长期</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field readonly clickable name="picker" :value="form.field" label="所属领域" placeholder="点击选择" @click="fieldpic = true" />
+            <van-popup v-model="fieldpic" position="bottom">
+              <van-picker show-toolbar :columns="fieldList" @confirm="fieldSubmit" @cancel="fieldpic = false" value-key="name" />
+            </van-popup>
+            <van-field readonly clickable name="picker" :value="form.cooperation" label="合作方式" placeholder="点击选择" @click="cooperationpic = true" />
+            <van-popup v-model="cooperationpic" position="bottom">
+              <van-picker show-toolbar :columns="cooperationList" @confirm="cooperationSubmit" @cancel="cooperationpic = false" value-key="name" />
+            </van-popup>
+            <van-field v-model="form.budget" name="投资预算" label="投资预算" placeholder="投资预算" />
+            <van-field v-model="form.requirementdesc" rows="1" autosize label="技术说明" type="textarea" placeholder="技术说明" />
+            <van-field v-model="form.expect" rows="1" autosize label="预期目标" type="textarea" placeholder="预期目标" />
+            <van-field v-model="form.present" rows="1" autosize label="合作要求" type="textarea" placeholder="合作要求" />
+            <van-field name="expertimage" label="产品图片(6)">
+              <template #input
+                ><upload
+                  :limit="6"
+                  :data="form.image"
+                  type="image"
+                  :url="`/files/imgpath/upload`"
+                  @upload="uploadSuccess"
+                  :uploadBtn="true"
+                  @delete="uploadDelete"
+                ></upload>
+              </template>
+            </van-field>
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </span>
+        <span v-else-if="type == '1'">
+          <van-form>
+            <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
+            <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
+            <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+            <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" />
+            <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" />
+            <van-field v-model="form.name" name="成果名称" label="成果名称" placeholder="成果名称" />
+            <van-field readonly clickable name="picker" :value="form.field" label="所属领域" placeholder="点击选择" @click="fieldpic = true" />
+            <van-popup v-model="fieldpic" position="bottom">
+              <van-picker show-toolbar :columns="fieldList" @confirm="fieldSubmit" @cancel="fieldpic = false" value-key="name" />
+            </van-popup>
+            <van-field readonly clickable name="picker" :value="form.cooperation" label="合作方式" placeholder="点击选择" @click="cooperationpic = true" />
+            <van-popup v-model="cooperationpic" position="bottom">
+              <van-picker show-toolbar :columns="cooperationList" @confirm="cooperationSubmit" @cancel="cooperationpic = false" value-key="name" />
+            </van-popup>
+            <van-field readonly clickable name="picker" :value="form.achievestatus" label="成果状态" placeholder="点击选择" @click="achievestatuspic = true" />
+            <van-popup v-model="achievestatuspic" position="bottom">
+              <van-picker show-toolbar :columns="achievestatusList" @confirm="achievestatusOnsubmit" @cancel="achievestatuspic = false" value-key="name" />
+            </van-popup>
+            <van-field v-model="form.achieveown" name="成果权属" label="成果权属" placeholder="成果权属" />
+            <van-field name="radio" label="成果来源">
+              <template #input>
+                <van-radio-group v-model="form.achievesource" direction="horizontal">
+                  <van-radio name="国家项目">国家项目</van-radio>
+                  <van-radio name="省级项目">省级项目</van-radio>
+                  <van-radio name="市级项目">市级项目</van-radio>
+                  <van-radio name="市级项目">市级项目</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field v-model="form.intentionprice" name="意向价格" label="意向价格" placeholder="意向价格" />
+            <van-field name="patent" label="专利信息">
+              <template #input>
+                <el-button type="primary" size="mini" @click="addPatent">添加</el-button>
+                <el-button type="primary" size="mini" @click="viewPatent">查看</el-button>
+              </template>
+            </van-field>
+            <van-field v-model="form.achievebrief" rows="1" autosize label="成果简介" type="textarea" placeholder="成果简介" />
+            <van-field v-model="form.features" rows="1" autosize label="技术特点" type="textarea" placeholder="技术特点" />
+            <van-field v-model="form.team" rows="1" autosize label="技术团队" type="textarea" placeholder="技术团队" />
+            <van-field v-model="form.expectations" rows="1" autosize label="商业预期" type="textarea" placeholder="商业预期" />
+            <van-field v-model="form.condition" rows="1" autosize label="合作要求" type="textarea" placeholder="合作要求" />
+            <van-field name="expertimage" label="产品图片(6)">
+              <template #input
+                ><upload
+                  :limit="6"
+                  :data="form.image"
+                  type="image"
+                  :url="`/files/imgpath/upload`"
+                  @upload="uploadSuccess"
+                  :uploadBtn="true"
+                  @delete="uploadDelete"
+                ></upload>
+              </template>
+            </van-field>
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </span>
+        <span v-else-if="type == '2'">
+          <van-form>
+            <van-field v-model="form.company" name="企业名称" label="企业名称" placeholder="企业名称" readonly />
+            <van-field v-model="form.phone" name="联系电话" label="联系电话" placeholder="联系电话" readonly />
+            <van-field v-model="form.email" name="电子邮箱" label="电子邮箱" placeholder="电子邮箱" readonly />
+            <van-field v-model="form.contacts" name="联系人" label="联系人" placeholder="联系人" />
+            <van-field v-model="form.qqwx" name="QQ/微信" label="QQ/微信" placeholder="QQ/微信" />
+            <van-field v-model="form.name" name="信息名称" label="信息名称" placeholder="信息名称" />
+            <van-field name="radio" label="信息属性">
+              <template #input>
+                <van-radio-group v-model="form.messattribute" direction="horizontal">
+                  <van-radio name="提供方">提供方</van-radio>
+                  <van-radio name="需求方">需求方</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field name="radio" label="需求程度">
+              <template #input>
+                <van-radio-group v-model="form.demand" direction="horizontal">
+                  <van-radio name="特急">特急</van-radio>
+                  <van-radio name="一般">一般</van-radio>
+                  <van-radio name="长期">长期</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field v-model="form.informationdesc" rows="1" autosize label="信息描述" type="textarea" placeholder="信息描述" />
+            <van-field v-model="form.coreelements" rows="1" autosize label="核心要素" type="textarea" placeholder="核心要素" />
+            <van-field v-model="form.priceinfo" rows="1" autosize label="价格信息" type="textarea" placeholder="价格信息" />
+            <van-field v-model="form.businessexpect" rows="1" autosize label="商业预期" type="textarea" placeholder="商业预期" />
+            <div style="margin: 16px;">
+              <van-button round block type="info" @click="onSubmit">
+                提交
+              </van-button>
+            </div>
+          </van-form>
+        </span>
+      </el-col>
+    </el-row>
+    <van-dialog v-model="show" title="添加专利信息" :showConfirmButton="false" :closeOnClickOverlay="true">
+      <van-form>
+        <van-field v-model="patentform.patentinfo" name="名称" label="名称" placeholder="名称" />
+        <van-field name="radio" label="专利状态">
+          <template #input>
+            <van-radio-group v-model="patentform.patentstatus" direction="horizontal">
+              <van-radio name="已申请">已申请</van-radio>
+              <van-radio name="已授权">已授权</van-radio>
+            </van-radio-group>
+          </template>
+        </van-field>
+        <div style="margin: 16px;">
+          <van-button round block type="info" @click="patentSubmit">
+            提交
+          </van-button>
+        </div>
+      </van-form>
+    </van-dialog>
+    <van-dialog v-model="patentshow" title="查看专利信息" :showConfirmButton="false" :closeOnClickOverlay="true">
+      <div class="patentList" v-for="(item, index) in patentList" :key="index">
+        <p class="textOver">{{ item.patentinfo }}</p>
+        <p>专利状态:{{ item.patentstatus }}</p>
+        <p>
+          <el-button type="primary" size="mini" @click="delPatent(index, item)">刪除</el-button>
+        </p>
+      </div>
+    </van-dialog>
+  </div>
+</template>
+
+<script>
+import upload from '@/components/upload.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'producInfo',
+  props: {
+    type: { type: String, default: '0' },
+    form: { type: Object },
+    fieldList: { type: Array },
+    cooperationList: { type: Array },
+    achievestatusList: { type: Array },
+  },
+  components: {
+    upload,
+  },
+  data: function() {
+    return {
+      fieldpic: false,
+      cooperationpic: false,
+      achievestatuspic: false,
+      // 专利信息
+      show: false,
+      patentform: {},
+      patentshow: false,
+      patentList: [],
+    };
+  },
+  created() {},
+  methods: {
+    // 所屬領域
+    fieldSubmit(value) {
+      this.$set(this.form, `field`, value.name);
+      this.fieldpic = false;
+    },
+    // 合作方式
+    cooperationSubmit(value) {
+      this.$set(this.form, `cooperation`, value.name);
+      this.cooperationpic = false;
+    },
+    // 成果状态
+    achievestatusOnsubmit(value) {
+      this.$set(this.form, `achievestatus`, value.name);
+      this.achievestatuspic = false;
+    },
+    // 图片上传
+    uploadSuccess({ type, data }) {
+      let arr = _.get(this.form, type);
+      if (_.isArray(arr)) {
+        let datas = { name: data.name, url: data.uri };
+        this.form[type].push({ name: data.name, url: data.uri });
+      } else {
+        let newArr = [{ name: data.name, url: data.uri }];
+        this.$set(this.form, `${type}`, newArr);
+      }
+    },
+    // 删除图片
+    uploadDelete(index) {
+      this.form.image.splice(index, 1);
+    },
+    // 添加专利信息
+    addPatent() {
+      this.show = true;
+    },
+    // 提交专利信息
+    patentSubmit() {
+      this.patentList.push(this.patentform);
+      this.show = false;
+    },
+    // 查看专利信息
+    viewPatent() {
+      this.patentshow = true;
+    },
+    // 删除专利信息
+    delPatent(index, val) {
+      this.patentList.splice(index, 1);
+      this.$notify({
+        message: '删除成功',
+        type: 'success',
+      });
+      this.patentshow = false;
+    },
+    onSubmit() {
+      this.form.patent = this.patentList;
+      this.$emit('onSubmit', { data: this.form });
+    },
+    // 查询专利信息
+    searchpatent() {
+      let data = this.form;
+      if (data.patent) {
+        // console.log(data.patent);
+        this.$set(this, `patentList`, data.patent);
+      }
+    },
+  },
+  watch: {
+    form: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        this.searchpatent();
+      },
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.patentList {
+  padding: 0 10px;
+  border-bottom: 1px dashed #ccc;
+  p {
+    font-size: 16px;
+    color: #666;
+    padding: 0 0 5px 0;
+  }
+  p:nth-child(1) {
+    font-size: 18px;
+    color: #000;
+    font-weight: bold;
+  }
+  p:nth-child(3) {
+    text-align: center;
+  }
+}
+</style>

+ 91 - 0
src/viewTwo/userCenter/myProduct/parts/productList.vue

@@ -0,0 +1,91 @@
+<template>
+  <div id="productList">
+    <el-row>
+      <el-col :span="24" class="productList">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">{{ item.name }}</p>
+          <p>
+            <span class="textOver">所属领域:{{ item.field }}</span>
+            <span class="textOver">合作方式:{{ item.cooperation }}</span>
+          </p>
+          <p>
+            <span class="textOver">产品类型:{{ item.type == '0' ? '技术' : item.type == '1' ? '产品' : '服务' }}</span>
+            <span class="textOver"
+              >状态:{{ item.status == '0' ? '待审核' : item.status == '1' ? '审核通过' : item.status == '2' ? '审核未通过' : '草稿' }}</span
+            >
+          </p>
+          <p>
+            <el-button type="primary" size="mini" v-if="item.status == '3'" @click="editbtn(item)">编辑</el-button>
+            <el-button type="success" size="mini" v-if="item.status == '3'" @click="checkbtn(item)">发布</el-button>
+            <el-button type="danger" size="mini" @click="deletebtn(item)">删除</el-button>
+          </p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'productList',
+  props: {
+    list: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    // 编辑
+    editbtn(data) {
+      this.$emit('editbtn', data);
+    },
+    // 发布
+    checkbtn(data) {
+      this.$emit('checkbtn', data);
+    },
+    // 删除
+    deletebtn(data) {
+      this.$emit('deletebtn', data);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.productList {
+  padding: 0 10px;
+  .list {
+    padding: 10px 0;
+    border-bottom: 1px dashed #ccc;
+    p {
+      font-size: 16px;
+      padding: 0 0 5px 0;
+      color: #666;
+      span {
+        display: inline-block;
+        width: 50%;
+      }
+    }
+    p:nth-child(1) {
+      font-size: 18px;
+      color: #000;
+      font-weight: bold;
+    }
+    p:nth-child(4) {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 176 - 0
src/viewTwo/userCenter/parts/message.vue

@@ -0,0 +1,176 @@
+<template>
+  <div id="message">
+    <el-row>
+      <el-col :span="24">
+        <span v-if="form.role == '5'">
+          <van-form>
+            <van-field v-model="form.name" name="name" label="用户名" placeholder="请输入用户名" />
+            <van-field v-model="form.phone" name="phone" label="手机号" placeholder="请输入手机号" />
+            <van-field name="radio" label="用户类别">
+              <template #input>
+                <van-radio-group v-model="form.role" direction="horizontal">
+                  <van-radio name="5">机构</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field v-model="form.code" name="code" label="所属机构" placeholder="请输入所属机构" readonly />
+            <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请输入电子邮箱"> </van-field>
+            <van-field v-model="form.addr" name="addr" label="联系地址" placeholder="请输入联系地址"> </van-field>
+            <van-field v-model="form.office_phone" name="office_phone" label="办公电话" placeholder="请输入办公电话"> </van-field>
+            <van-field v-model="form.profession" name="profession" label="所属行业" placeholder="请输入所属行业"> </van-field>
+            <van-field v-model="form.companytype" name="companytype" label="注册类型" placeholder="请输入注册类型"> </van-field>
+            <van-field
+              readonly
+              clickable
+              name="datetimePicker"
+              :value="form.companydate"
+              label="注册时间"
+              placeholder="点击选择时间"
+              @click="showPicker = true"
+            />
+            <van-popup v-model="showPicker" position="bottom">
+              <van-datetime-picker type="date" @confirm="onConfirm" @cancel="showPicker = false" />
+            </van-popup>
+            <van-field v-model="form.institution_code" name="institution_code" label="信用代码" placeholder="请输入信用代码" readonly> </van-field>
+            <van-field v-model="form.companycapital" name="companycapital" label="注册资金" placeholder="请输入注册资金"> </van-field>
+            <van-field v-model="form.companyperson" name="companyperson" label="企业法人" placeholder="请输入企业法人"> </van-field>
+            <van-field v-model="form.sndqyzsr" name="sndqyzsr" label="总收入" placeholder="请输入总收入"> </van-field>
+            <van-field v-model="form.sndyffy" name="sndyffy" label="研发费用" placeholder="请输入研发费用"> </van-field>
+            <van-field v-model="form.companytotal" name="companytotal" label="总人数" placeholder="请输入总人数"> </van-field>
+            <van-field v-model="form.companybrief" maxlength="300" rows="1" show-word-limit label="企业简介" type="textarea" placeholder="请输入企业简介" />
+            <van-field v-model="form.mainproduct" maxlength="300" rows="1" show-word-limit label="主要产品" type="textarea" placeholder="请输入主要产品" />
+            <van-field v-model="form.qualifications" maxlength="300" rows="1" show-word-limit label="资质/荣誉" type="textarea" placeholder="请输入资质/荣誉" />
+            <div style="margin: 16px;text-align:center;">
+              <el-button type="primary" size="medium" round @click="onSubmit">信息保存</el-button>
+            </div>
+          </van-form>
+        </span>
+        <span v-else>
+          <van-form>
+            <van-field v-model="form.name" name="name" label="用户名" placeholder="请输入用户名" />
+            <van-field v-model="form.phone" name="phone" label="手机号" placeholder="请输入手机号" />
+            <van-field name="radio" label="用户类别">
+              <template #input>
+                <van-radio-group v-model="form.role" direction="horizontal">
+                  <van-radio name="4">个人</van-radio>
+                  <van-radio name="6">专家</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field v-model="form.code" name="code" label="所属机构" placeholder="请输入机构代码" readonly> </van-field>
+            <span v-if="form.role == '4'">
+              <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请输入电子邮箱"> </van-field>
+              <van-field v-model="form.addr" name="addr" label="联系地址" placeholder="请输入联系地址"> </van-field>
+              <van-field v-model="form.office_phone" name="office_phone" label="办公电话" placeholder="请输入办公电话"> </van-field>
+              <van-field v-model="form.profession" name="profession" label="所属行业" placeholder="请输入所属行业"> </van-field>
+            </span>
+            <span v-else-if="form.role == '6'">
+              <van-field v-model="form.company" name="company" label="工作单位" placeholder="请输入工作单位"> </van-field>
+              <van-field v-model="form.school" name="school" label="毕业院校" placeholder="请输入毕业院校"> </van-field>
+              <van-field v-model="form.education" name="education" label="最高学历" placeholder="请输入最高学历"> </van-field>
+              <van-field
+                readonly
+                clickable
+                name="datetimePicker"
+                :value="form.birthDate"
+                label="出生日期"
+                placeholder="点击选择时间"
+                @click="birthDatepic = true"
+              />
+              <van-popup v-model="birthDatepic" position="bottom">
+                <van-datetime-picker type="date" @confirm="birthDateOnsubmit" @cancel="birthDatepic = false" />
+              </van-popup>
+              <van-field v-model="form.qqwx" name="qqwx" label="QQ/微信" placeholder="请输入QQ/微信"> </van-field>
+              <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请输入电子邮箱"> </van-field>
+              <van-field v-model="form.zwzc" name="zwzc" label="职务职称" placeholder="请输入职务职称"> </van-field>
+              <van-field v-model="form.expertise" name="expertise" label="擅长领域" placeholder="请输入擅长领域"> </van-field>
+              <van-field name="expertimage" label="头像上传">
+                <template #input
+                  ><upload :limit="1" :data="form.expertimage" type="expertimage" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
+                </template>
+              </van-field>
+              <van-field v-model="form.workexperience" maxlength="300" rows="1" show-word-limit label="工作经历" type="textarea" placeholder="请输入工作经历" />
+              <van-field v-model="form.scientific" maxlength="300" rows="1" show-word-limit label="科研综述" type="textarea" placeholder="请输入科研综述" />
+              <van-field
+                v-model="form.undertakingproject"
+                maxlength="300"
+                rows="2"
+                show-word-limit
+                label="承担项目"
+                type="textarea"
+                placeholder="请输入承担项目"
+              />
+              <van-field v-model="form.scienceaward" maxlength="300" rows="2" show-word-limit label="科技奖励" type="textarea" placeholder="请输入科技奖励" />
+              <van-field v-model="form.social" maxlength="300" rows="2" show-word-limit label="社会任职" type="textarea" placeholder="请输入社会任职" />
+            </span>
+            <div style="margin: 16px;text-align:center;">
+              <el-button type="primary" size="medium" round @click="onSubmit">信息保存</el-button>
+              <el-button type="primary" size="medium" round v-if="user.role == '4'" @click="expertBtn">升级用户</el-button>
+            </div>
+          </van-form>
+        </span>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+var moment = require('moment');
+import upload from '@/components/upload.vue';
+export default {
+  name: 'message',
+  props: {
+    form: { type: Object },
+  },
+  components: {
+    upload,
+  },
+  data: function() {
+    return {
+      // 注册时间
+      showPicker: false,
+      // 出生日期
+      birthDatepic: false,
+    };
+  },
+  created() {},
+  methods: {
+    // 信息保存
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.form });
+    },
+    // 升级用户
+    expertBtn() {
+      this.$emit('expertBtn', { data: this.form });
+    },
+    // 注册时间
+    onConfirm(time) {
+      let date = moment(time).format('YYYY-MM-DD');
+      if (date) this.$set(this.form, `companydate`, date);
+      this.showPicker = false;
+    },
+    // 出生日期
+    birthDateOnsubmit(time) {
+      let date = moment(time).format('YYYY-MM-DD');
+      if (date) this.$set(this.form, `birthDate`, date);
+      this.birthDatepic = false;
+    },
+    // 头像
+    uploadSuccess({ type, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 123 - 0
src/viewTwo/userCenter/user/index.vue

@@ -0,0 +1,123 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <message :form="form" @onSubmit="onSubmit" @expertBtn="expertBtn"></message>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import message from '../parts/message.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: login } = createNamespacedHelpers('login');
+const { mapActions: market } = createNamespacedHelpers('marketuser');
+const { mapActions: expertsuser } = createNamespacedHelpers('exportuser');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    message, //个人信息维护
+  },
+  data: () => ({
+    // 头部标题
+    title: '',
+    // meta为true
+    isleftarrow: '',
+    // 返回
+    navShow: true,
+    form: {},
+  }),
+  async created() {
+    await this.search();
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  methods: {
+    ...login({ logout: 'logout' }),
+    ...market(['fetch', 'update']),
+    ...expertsuser({ expertsuserFetch: 'fetch', expertsuserUpdate: 'update', expertsuserUpgrade: 'upgrade' }),
+    // 查询详情
+    async search() {
+      if (this.user.role == '4' || this.user.role == '5') {
+        let res = await this.fetch(this.user.userid);
+        if (res.errcode === 0) {
+          this.$set(this, `form`, res.data);
+        }
+      } else if (this.user.role == '6') {
+        let res = await this.expertsuserFetch(this.user.userid);
+        if (res.errcode === 0) {
+          this.$set(this, `form`, res.data);
+        }
+      }
+    },
+    // 修改信息
+    async onSubmit({ data }) {
+      if (data.role == '4' || data.role == '5') {
+        let res = await this.update(data);
+        this.$notify({
+          message: '修改信息成功',
+          type: 'success',
+        });
+        this.search();
+      } else if (data.role == '6') {
+        let res = await this.expertsuserUpdate(data);
+        this.$notify({
+          message: '修改信息成功',
+          type: 'success',
+        });
+        this.search();
+      }
+    },
+    // 升级用户
+    async expertBtn({ data }) {
+      data.status = '0';
+      data.uid = this.user.uid;
+      let res = await this.expertsuserUpgrade(data);
+      if (this.$checkRes(res)) {
+        this.$notify({
+          message: '用戶升級成功,等待管理员审核',
+          type: 'success',
+        });
+        this.logout();
+        this.$router.push({ path: '/twoLogin' });
+      }
+    },
+    // 返回
+    onClickLeft() {
+      this.$router.push({ path: '/viewTwo/account/index' });
+    },
+  },
+  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;
+  position: relative;
+  z-index: 999;
+}
+.main {
+  min-height: 570px;
+}
+</style>