wxy 4 years ago
parent
commit
e1b44f911f

+ 137 - 0
src/components/uploadraw.vue

@@ -0,0 +1,137 @@
+<template>
+  <div id="upload">
+    <el-upload
+      v-if="url"
+      ref="upload"
+      :action="url"
+      :list-type="listType"
+      :file-list="fileList"
+      :limit="limit"
+      :on-exceed="outLimit"
+      :on-preview="handlePictureCardPreview"
+      :before-remove="handleRemove"
+      :on-success="onSuccess"
+      :before-upload="beforeUpload"
+      :show-file-list="showList"
+      accept=".3gpp,.ac3,.au,.mp2,.mp3,.mp4,.mpeg,.mpg,.wmv,.avi,.flv"
+    >
+      <el-button size="small" type="primary" v-if="isBtn">点击上传</el-button>
+      <template v-else-if="uploadBtn">
+        <el-button type="danger">选择文件</el-button>
+      </template>
+      <template v-else>
+        <el-button type="primary" size="mini">选择文件</el-button>
+      </template>
+      <template #tip v-if="tip">
+        {{ tip }}
+      </template>
+    </el-upload>
+    <el-dialog :visible.sync="dialogVisible">
+      <img width="100%" :src="dialogImageUrl" alt="" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+export default {
+  name: 'upload',
+  props: {
+    url: { type: null },
+    limit: { type: Number },
+    data: { type: null },
+    type: { type: String },
+    isBtn: { type: Boolean, default: false },
+    uploadBtn: { type: Boolean, default: false },
+    showList: { type: Boolean, default: true },
+    tip: { type: String, default: undefined },
+    listType: { type: String, default: 'picture-card' },
+  },
+  components: {},
+  data: () => ({
+    dialogVisible: false,
+    dialogImageUrl: '',
+    fileList: [],
+  }),
+  created() {
+    if (this.data) {
+      this.defalutProcess(this.data);
+    }
+  },
+  watch: {
+    data: {
+      handler(val) {
+        this.defalutProcess(val);
+      },
+    },
+  },
+  computed: {},
+  methods: {
+    handlePictureCardPreview(file) {
+      this.dialogImageUrl = file.url;
+      this.dialogVisible = false;
+    },
+    handleRemove(file, fileList) {
+      this.$set(this, `fileList`, []);
+      // let index = fileList.findIndex(f => _.isEqual(f, file));
+      // this.$emit('delete', index);
+      // return false;
+    },
+    outLimit() {
+      this.$message.error(`只允许上传${this.limit}个文件`);
+    },
+    onSuccess(response, file, fileList) {
+      //将文件整理好传回父组件
+      this.$emit('upload', { type: this.type, data: { ...response, name: file.name } });
+    },
+    beforeUpload(file) {
+      if (
+        file.type == 'video/mp4' ||
+        file.type == 'video/3gpp' ||
+        file.type == 'video/ac3' ||
+        file.type == 'video/au' ||
+        file.type == 'video/mp2' ||
+        file.type == 'video/mp3' ||
+        file.type == 'video/mpeg' ||
+        file.type == 'video/mpg' ||
+        file.type == 'video/wmv' ||
+        file.type == 'video/avi' ||
+        file.type == 'video/flv'
+      ) {
+        return true;
+      } else {
+        this.$message.error('非影音格式文件/不是可演示文件,不允许上传!');
+        this.$set(this, `fileList`, []);
+      }
+      const sizeLimit = file.size / 1024 / 1024 < 1;
+      if (sizeLimit) return true;
+      else {
+        this.$message.error('文件超出10M!');
+        return false;
+      }
+    },
+    defalutProcess(val) {
+      if (_.isArray(val)) {
+        let newArr = val.map(item => {
+          let object = {};
+          object.name = item.name;
+          object.url = item.url;
+          return object;
+        });
+        this.$set(this, `fileList`, newArr);
+      } else if (_.isObject(val)) {
+        let object = {};
+        if (_.get(val, `url`)) {
+          object.name = val.name;
+          object.url = val.url;
+          this.$set(this, `fileList`, [object]);
+        }
+      } else if (typeof val === 'string') {
+        this.$set(this, `fileList`, [{ name: '附件', url: val }]);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 7 - 0
src/router/index.js

@@ -71,6 +71,13 @@ const routes = [
     meta: { title: '我的发布', isleftarrow: true },
     component: () => import('../views/userCenter/myProduct/index.vue'),
   },
+  //发布产品
+  {
+    path: '/userCenter/myProduct/fabu',
+    name: 'myProduct_index',
+    meta: { title: '信息发布', isleftarrow: true },
+    component: () => import('../views/userCenter/myProduct/fabu.vue'),
+  },
   // 用户-事项管理
   {
     path: '/userCenter/matter/index',

+ 2 - 0
src/store/index.js

@@ -10,6 +10,7 @@ import exportuser from './market/exportuser';
 import login from './user/login';
 // 个人中心
 import marketuser from './market/user';
+import markettype from './market/markettype';
 // 公共
 import * as ustate from '@/store/common/state';
 import * as umutations from '@/store/common/mutations';
@@ -33,5 +34,6 @@ export default new Vuex.Store({
     login,
     // 个人中心
     marketuser,
+    markettype,
   },
 });

+ 44 - 0
src/store/market/markettype.js

@@ -0,0 +1,44 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  codeitemInfo: `/api/setting/codeitem`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit = 10, ...info } = {}) {
+    const res = await this.$axios.$get(api.codeitemInfo, {
+      skip,
+      limit,
+      ...info,
+    });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.codeitemInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.codeitemInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...info } = {}) {
+    const res = await this.$axios.$post(`${api.codeitemInfo}/${id}`, {
+      ...info,
+    });
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.codeitemInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 529 - 0
src/views/userCenter/myProduct/fabu.vue

@@ -0,0 +1,529 @@
+<template>
+  <div id="fabu">
+    <el-row>
+      <el-col :span="24" class="fabu">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="info">
+          <van-tabs v-model="activeName">
+            <van-tab title="科技需求" name="a">
+              <van-form ref="form" :model="form" :rules="rules">
+                <el-col :span="24">
+                  <van-field v-model="form.company" name="company" label="企业名称" placeholder="请输入企业名称" readonly />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.phone" name="phone" label="联系电话" placeholder="请输入联系电话" readonly />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请输入电子邮箱" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.contacts" name="contacts" label="联系人" placeholder="请输入联系人" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.qqwx" name="qqwx" label="QQ/微信" placeholder="请输入QQ/微信" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.name" name="name" label="需求名称" placeholder="请输入需求名称" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    readonly
+                    clickable
+                    name="picker"
+                    :value="form.degreeurgency"
+                    label="需求紧急程度"
+                    placeholder="点击选择需求紧急程度"
+                    @click="showPicker = true"
+                  />
+                  <van-popup v-model="showPicker" position="bottom">
+                    <van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
+                  </van-popup>
+                </el-col>
+                <el-col :span="24">
+                  <van-field readonly clickable name="picker" :value="form.field" label="所属领域" placeholder="点击选择所属领域" @click="showPicker = true" />
+                  <van-popup v-model="showPicker" position="bottom">
+                    <van-picker show-toolbar :columns="columns1" @confirm="onConfirm1" @cancel="showPicker = false" />
+                  </van-popup>
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.budget" name="budget" label="投资预算" placeholder="请输入投资预算" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    readonly
+                    clickable
+                    name="picker"
+                    :value="form.cooperation"
+                    label="合作方式"
+                    placeholder="点击选择合作方式"
+                    @click="showPicker = true"
+                  />
+                  <van-popup v-model="showPicker" position="bottom">
+                    <van-picker show-toolbar :columns="columns2" @confirm="onConfirm2" @cancel="showPicker = false" />
+                  </van-popup>
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.requirementdesc"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="技术说明"
+                    type="textarea"
+                    placeholder="请输入技术难题/需求说明"
+                  />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.expect" maxlength="300" rows="1" show-word-limit label="预期目标" type="textarea" placeholder="请输入预期目标" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.present" maxlength="300" rows="1" show-word-limit label="需求现状" type="textarea" placeholder="请输入需求现状" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.condition"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="合作条件及要求"
+                    type="textarea"
+                    placeholder="请输入合作条件及要求"
+                  />
+                </el-col>
+
+                <el-col :span="24" class="langInfoImage">
+                  <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>
+                </el-col>
+              </van-form>
+            </van-tab>
+            <van-tab title="科技成果" name="b">
+              <van-form ref="form" :model="form" :rules="rules">
+                <el-col :span="24">
+                  <van-field v-model="form.company" name="company" label="企业名称" placeholder="请输入企业名称" readonly />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.phone" name="phone" label="联系电话" placeholder="请输入联系电话" readonly />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请输入电子邮箱" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.contacts" name="contacts" label="联系人" placeholder="请输入联系人" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.qqwx" name="qqwx" label="QQ/微信" placeholder="请输入QQ/微信" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.name" name="name" label="成果名称" placeholder="请输入成果名称" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field readonly clickable name="picker" :value="form.field" label="所属领域" placeholder="点击选择所属领域" @click="showPicker = true" />
+                  <van-popup v-model="showPicker" position="bottom">
+                    <van-picker show-toolbar :columns="columns1" @confirm="onConfirm1" @cancel="showPicker = false" />
+                  </van-popup>
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    readonly
+                    clickable
+                    name="picker"
+                    :value="form.cooperation"
+                    label="合作方式"
+                    placeholder="点击选择合作方式"
+                    @click="showPicker = true"
+                  />
+                  <van-popup v-model="showPicker" position="bottom">
+                    <van-picker show-toolbar :columns="columns2" @confirm="onConfirm2" @cancel="showPicker = false" />
+                  </van-popup>
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    readonly
+                    clickable
+                    name="picker"
+                    :value="form.achievestatus"
+                    label="成果状态"
+                    placeholder="点击选择成果状态"
+                    @click="showPicker = true"
+                  />
+                  <van-popup v-model="showPicker" position="bottom">
+                    <van-picker show-toolbar :columns="columns3" @confirm="onConfirm3" @cancel="showPicker = false" />
+                  </van-popup>
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.achieveown" name="achieveown" label="成果权属" placeholder="请输入成果权属" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    readonly
+                    clickable
+                    name="picker"
+                    :value="form.achievesource"
+                    label="成果来源"
+                    placeholder="点击选择成果来源"
+                    @click="showPicker = true"
+                  />
+                  <van-popup v-model="showPicker" position="bottom">
+                    <van-picker show-toolbar :columns="columns4" @confirm="onConfirm4" @cancel="showPicker = false" />
+                  </van-popup>
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.intentionprice" name="intentionprice" label="意向价格" placeholder="请输入意向价格" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.patentinfo" name="intentionprice" label="专利信息" placeholder="请输入专利信息" />
+                </el-col>
+                <el-col :span="24" class="langInfoImage">
+                  <van-field name="expertimage" label="项目路演">
+                    <template #input
+                      ><uploadraw
+                        :limit="1"
+                        :data="form.roadshow"
+                        type="roadshow"
+                        listType=""
+                        :url="'/files/roadshow/upload'"
+                        @upload="uploadroadshow"
+                        @delete="uploaddelroadshow"
+                      ></uploadraw>
+                    </template>
+                  </van-field>
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.achievebrief"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="成果简介"
+                    type="textarea"
+                    placeholder="请输入成果简介"
+                  />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.features" maxlength="300" rows="1" show-word-limit label="技术特点" type="textarea" placeholder="请输入技术特点" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.team" maxlength="300" rows="1" show-word-limit label="技术团队" type="textarea" placeholder="请输入技术团队" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.expectations"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="商业预期"
+                    type="textarea"
+                    placeholder="请输入商业预期"
+                  />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.condition"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="合作条件及要求"
+                    type="textarea"
+                    placeholder="请输入合作条件及要求"
+                  />
+                </el-col>
+                <el-col :span="24" class="langInfoImage">
+                  <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>
+                </el-col>
+              </van-form>
+            </van-tab>
+            <van-tab title="商务服务" name="c">
+              <van-form ref="form" :model="form" :rules="rules">
+                <el-col :span="24">
+                  <van-field v-model="form.company" name="company" label="企业名称" placeholder="请输入企业名称" readonly />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.phone" name="phone" label="联系电话" placeholder="请输入联系电话" readonly />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请输入电子邮箱" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.contacts" name="contacts" label="联系人" placeholder="请输入联系人" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.qqwx" name="qqwx" label="QQ/微信" placeholder="请输入QQ/微信" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.name" name="name" label="信息名称" placeholder="请输入信息名称" />
+                </el-col>
+                <el-col :span="24">
+                  <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>
+                </el-col>
+                <el-col :span="24">
+                  <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>
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.informationdesc"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="信息描述"
+                    type="textarea"
+                    placeholder="请输入信息描述"
+                  />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.coreelements"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="核心要素"
+                    type="textarea"
+                    placeholder="请输入核心要素"
+                  />
+                </el-col>
+                <el-col :span="24">
+                  <van-field v-model="form.priceinfo" maxlength="300" rows="1" show-word-limit label="价格信息" type="textarea" placeholder="请输入价格信息" />
+                </el-col>
+                <el-col :span="24">
+                  <van-field
+                    v-model="form.businessexpect"
+                    maxlength="300"
+                    rows="1"
+                    show-word-limit
+                    label="商务预期"
+                    type="textarea"
+                    placeholder="请输入商务预期"
+                  />
+                </el-col>
+              </van-form>
+            </van-tab>
+          </van-tabs>
+          <el-col :span="24" class="btn1">
+            <el-button @click="draftBtn('form')">保存草稿</el-button>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+import NavBar from '@/layout/common/topInfo.vue';
+var moment = require('moment');
+import upload from '@/components/upload.vue';
+import uploadraw from '@/components/uploadraw.vue';
+// const { mapActions: markettype } = createNamespacedHelpers('markettype');
+const { mapActions: mapMarketproduct } = createNamespacedHelpers('product');
+const { mapActions: market } = createNamespacedHelpers('marketuser');
+const { mapActions: expertsuser } = createNamespacedHelpers('exportuser');
+
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'fabu',
+  props: {},
+  components: {
+    NavBar,
+    upload,
+    uploadraw,
+  },
+  data: function() {
+    return {
+      form: {},
+      // 企业信息&专家信息
+      companyInfo: {},
+      addpatentform: {},
+      addpatent: [],
+      activeName: 'a',
+      // 头部标题
+      title: '',
+      // meta为true
+      isleftarrow: '',
+      // 返回
+      navShow: true,
+      //需求紧急程度
+      columns: ['特急', '一般', '储备'],
+      showPicker: false,
+      //所属领域
+      columns1: ['电子信息技术', '生物与新医药技术', '航空航天技术', '新材料技术', '高技术服务业', '新能源及节能技术', '资源与环境技术', '先进制造与自动化'],
+      //合作方式
+      columns2: ['合作开发', '技术转让', '技术入股', '其他方式'],
+      //成果状态
+      columns3: ['原理样机', '实验室阶段', '小试产品', '中试技术', '产业化(成熟)技术'],
+      //成果来源
+      columns4: ['国家项目', '省级项目', '市级项目', '自选项目'],
+      rules: {
+        name: [{ required: true, message: '请输入需求名称', trigger: 'blur' }],
+        contacts: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
+        qqwx: [{ required: false, message: '请输入QQ/微信', trigger: 'blur' }],
+      },
+    };
+  },
+  created() {
+    // this.searchtype();
+  },
+  methods: {
+    // ...markettype({ markettypeList: 'query' }),
+    ...mapMarketproduct({ productFetch: 'fetch', productCreate: 'create', productUpdate: 'update' }),
+    ...market(['fetch', 'update']),
+    ...expertsuser({ expertsuserFetch: 'fetch', expertsuserUpdate: 'update', expertsuserUpgrade: 'upgrade' }),
+    //需求紧急程度
+    onConfirm(value) {
+      if (value) {
+        this.$set(this.form, `degreeurgency`, value);
+      }
+      this.showPicker = false;
+    },
+    //所属领域
+    onConfirm1(value) {
+      if (value) {
+        this.$set(this.form, `field`, value);
+      }
+      this.showPicker = false;
+    },
+    //合作方式
+    onConfirm2(value) {
+      if (value) {
+        this.$set(this.form, `cooperation`, value);
+      }
+      this.showPicker = false;
+    },
+    //成果状态
+    onConfirm3(value) {
+      if (value) {
+        this.$set(this.form, `achievestatus`, value);
+      }
+      this.showPicker = false;
+    },
+    //成果来源
+    onConfirm4(value) {
+      if (value) {
+        this.$set(this.form, `achievesource`, value);
+      }
+      this.showPicker = 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);
+    },
+    uploadroadshow({ type, filetype, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+    uploaddelroadshow(index) {},
+    // 草稿
+    async draftBtn({ data }) {
+      if (data.id) {
+        let res = await this.productUpdate(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '草稿修改成功',
+            type: 'success',
+          });
+          window.location.reload();
+        } else {
+          this.$message.error('草稿保存失败');
+        }
+      } else {
+        data.patent = this.addpatent;
+        data.userid = this.user.uid;
+        let res = await this.productCreate(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '草稿创建成功',
+            type: 'success',
+          });
+          window.location.reload();
+        } else {
+          this.$message.error('草稿创建失败');
+        }
+      }
+    },
+  },
+  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;
+}
+/deep/.van-tab {
+  text-align: center;
+}
+/deep/.van-tabs--line .van-tabs__wrap {
+  height: 70px;
+  margin: 0 0 10px 0;
+}
+/deep/.van-tab--active {
+  color: red;
+}
+.van-icon {
+  font-size: 20px;
+}
+.btn1 {
+  text-align: center;
+  margin: 15px 0;
+}
+</style>

+ 74 - 8
src/views/userCenter/myProduct/index.vue

@@ -7,18 +7,18 @@
         </el-col>
         <el-col :span="24" class="main">
           <el-col :span="24" class="two">
-            <van-button type="primary" @click="$router.push({ path: '/userCenter/myProduct/detail' })">发布产品</van-button>
+            <el-button type="primary" size="mini" @click="add()">发布产品</el-button>
           </el-col>
           <el-col :span="24" class="one">
             <van-tabs v-model="active">
               <van-tab title="待发布">
-                <productList :list="nextList" @detailBtn="detailBtn"></productList>
+                <productList :list="nextList" @del="del" @release="release" @detailBtn="detailBtn"></productList>
               </van-tab>
               <van-tab title="审核中">
-                <productList :list="nowList" @detailBtn="detailBtn"></productList>
+                <productList :list="nowList" @del="del" @detailBtn="detailBtn"></productList>
               </van-tab>
               <van-tab title="已发布">
-                <productList :list="pastList" @detailBtn="detailBtn"></productList>
+                <productList :list="pastList" @del="del" @detailBtn="detailBtn"></productList>
               </van-tab>
             </van-tabs>
           </el-col>
@@ -68,13 +68,79 @@ export default {
       pastList: [],
     };
   },
-  created() {
-    this.search();
+  async created() {
+    await this.search();
   },
   methods: {
-    ...product({ productList: 'query', columnInfo: 'fetch', marketcerate: 'create', productdeltet: 'delete', upup: 'update' }),
+    ...product({ productQuery: 'query', columnInfo: 'fetch', marketcerate: 'create', productdeltet: 'delete', upup: 'update' }),
     async search() {
-      console.log(this.user.id);
+      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, `nextList`, newDate);
+      }
+      //审核中
+      res = await this.productQuery({ userid, status: 0 });
+      if (this.$checkRes(res)) {
+        this.$set(this, `nowList`, res.data);
+      }
+      //已发布
+      res = await this.productQuery({ userid, status: 1 });
+      if (this.$checkRes(res)) {
+        this.$set(this, `pastList`, res.data);
+      }
+    },
+    //点击发布
+    add() {
+      this.$router.push({ path: './fabu' });
+    },
+    // 发布,编辑
+    detailBtn(data) {
+      if (data.status == '0' || data.status == '1') {
+        this.$router.push({ path: './fabu', query: { id: data.id } });
+      } else {
+        console.log(data);
+      }
+    },
+    //删除
+    async del(data) {
+      // console.log(data);
+      if (data.id) {
+        const res = await this.productdeltet(data.id);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '刪除成功',
+            type: 'success',
+          });
+          this.search();
+        } else {
+          this.$message({
+            message: res.errmsg,
+            type: 'error',
+          });
+        }
+      }
+    },
+    //发布按钮
+    async release(data) {
+      data.status = '0';
+      let res = await this.upup(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '信息发布成功',
+          type: 'success',
+        });
+        this.search();
+      } else {
+        this.$message({
+          message: res.errmsg,
+          type: 'error',
+        });
+      }
     },
   },
   computed: {

+ 93 - 5
src/views/userCenter/myProduct/parts/productList.vue

@@ -1,8 +1,50 @@
 <template>
   <div id="productList">
     <el-row>
-      <el-col :span="24">
-        <p>productList</p>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <el-col :span="24" class="name">{{ item.name }}</el-col>
+          <el-col :span="8" class="img">
+            <span v-if="item.image.length > 0">
+              <el-col :span="24" v-for="(acm, index) in item.image" :key="index">
+                <template v-if="index === 0">
+                  <van-image
+                    style="width:100%;height: 115px;
+    margin-top: 9px;"
+                    :src="acm.url"
+                  ></van-image>
+                </template>
+              </el-col>
+            </span>
+            <span v-else>
+              <el-col
+                :span="24"
+                style="width: 100%;height: 115px;text-align: center;line-height: 100px;font-size: 20px; border: 1px solid #ccc; margin-top: 9px;"
+              >
+                <span>暂无图片</span>
+              </el-col>
+            </span>
+          </el-col>
+          <el-col :span="16" class="info">
+            <p>类型:{{ item.type === '0' ? '技术' : item.type === '1' ? '产品' : item.type === '2' ? '服务' : 'underdind' }}</p>
+            <span v-if="item.type === '0' || item.type === '1'">
+              <p>所属领域:{{ item.field }}</p>
+              <p>合作方式:{{ item.cooperation }}</p>
+            </span>
+            <span v-else>
+              <p>信息属性:{{ item.messattribute }}</p>
+              <p>需求程度:{{ item.demand }}</p>
+            </span>
+            <p>状态:{{ item.status === '2' ? '审核拒绝' : item.status === '3' ? '草稿' : '未识别' }}</p>
+            <el-col :span="24" class="btn">
+              <el-button type="primary" size="mini" @click="del(item)">删除</el-button>
+              <span v-if="item.status === '2' || item.status === '3'" class="btn1">
+                <el-button type="info" size="mini" @click="detailBtn(item)">编辑</el-button>
+                <el-button type="success" size="mini" @click="release(item)">发布</el-button>
+              </span>
+            </el-col>
+          </el-col>
+        </el-col>
       </el-col>
     </el-row>
   </div>
@@ -15,17 +57,63 @@ export default {
     return { title: this.$route.meta.title };
   },
   name: 'productList',
-  props: {},
+  props: {
+    list: { type: Array },
+  },
   components: {},
   data: function() {
     return {};
   },
   created() {},
-  methods: {},
+  methods: {
+    //编辑,发布产品
+    detailBtn(data) {
+      this.$emit('detailBtn', data);
+    },
+    //删除
+    del(data) {
+      this.$emit('del', data);
+    },
+    //发布按钮
+    release(data) {
+      this.$emit('release', data);
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.main {
+  padding: 0 10px;
+  .list {
+    padding: 10px 0px;
+    border-bottom: 1px dashed #ccc;
+    .name {
+      font-weight: bolder;
+      font-size: 18px;
+      margin-bottom: 5px;
+    }
+    .info {
+      padding-left: 10px;
+      p:nth-child(1) {
+        margin-top: 1px;
+      }
+      span:nth-child(2) p {
+        margin-top: 8px;
+      }
+      .btn {
+        margin-top: 5px;
+        .btn1 {
+          margin-left: 10px;
+        }
+      }
+    }
+  }
+}
+p {
+  margin-top: 8px;
+}
+</style>