guhongwei 4 سال پیش
والد
کامیت
e9be1486f0

+ 5 - 0
src/router/index.js

@@ -82,6 +82,11 @@ export default new Router({
           component: () => import('../views/product/index.vue'),
           meta: { title: '审核管理' },
         },
+        {
+          path: '/product/detail',
+          component: () => import('../views/product/detail.vue'),
+          meta: { title: '信息审核管理' },
+        },
         // 展会管理
         {
           path: '/live',

+ 8 - 1
src/store/index.js

@@ -12,9 +12,13 @@ import personal from '@common/src/store/personal';
 import organization from '@common/src/store/organization';
 // 专家
 import expert from '@common/src/store/expert';
+// 产品
+import product from '@common/src/store/product';
 // 展会
 import dock from '@common/src/store/dock';
-
+// 字典表
+import category from '@common/src/store/category';
+import code from '@common/src/store/code';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
@@ -27,6 +31,9 @@ export default new Vuex.Store({
     personal,
     organization,
     expert,
+    product,
     dock,
+    category,
+    code,
   },
 });

+ 95 - 0
src/views/product/detail.vue

@@ -0,0 +1,95 @@
+<template>
+  <div id="detail">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="top">
+          <el-button type="primary" size="mini" @click="back">返回</el-button>
+        </el-col>
+        <el-col :span="24" class="info">
+          <el-tabs v-model="type" type="card">
+            <el-tab-pane label="科技需求" name="0">
+              <oneDetail :form="form" @onSubmit="onSubmit"></oneDetail>
+            </el-tab-pane>
+            <el-tab-pane label="技术成果" name="1">
+              <twoDetail :form="form" @onSubmit="onSubmit"></twoDetail>
+            </el-tab-pane>
+            <el-tab-pane label="商务服务" name="2">
+              <thrDetail :form="form" @onSubmit="onSubmit"></thrDetail>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import oneDetail from './parts/oneDetail.vue';
+import twoDetail from './parts/twoDetail.vue';
+import thrDetail from './parts/thrDetail.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('product');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'detail',
+  props: {},
+  components: { oneDetail, twoDetail, thrDetail },
+  data: function() {
+    return {
+      form: {},
+    };
+  },
+  async created() {
+    if (this.id) {
+      await this.search();
+    }
+  },
+  methods: {
+    ...product(['fetch', 'update']),
+    // 查询详情
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    // 提交审核
+    async onSubmit({ data }) {
+      let res = await this.update(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '信息修改成功',
+          type: 'success',
+        });
+        this.back();
+      }
+    },
+    // 返回
+    back() {
+      this.form = {};
+      this.$router.push({ path: '/product' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type || '0';
+    },
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .top {
+    text-align: right;
+    margin: 0 0 10px 0;
+  }
+}
+</style>

+ 91 - 5
src/views/product/index.vue

@@ -2,26 +2,112 @@
   <div id="index">
     <el-row>
       <el-col :span="24">
-        <p>index</p>
+        <el-tabs v-model="active" type="card">
+          <el-tab-pane label="待审核" name="first">
+            <data-table :opera="opera" :fields="fields" :data="oneList" :total="oneTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+          </el-tab-pane>
+          <el-tab-pane label="审核通过" name="second">
+            <data-table :opera="opera" :fields="fields" :data="twoList" :total="twoTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+          </el-tab-pane>
+          <el-tab-pane label="审核失败" name="third">
+            <data-table :opera="opera" :fields="fields" :data="thrList" :total="thrTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+          </el-tab-pane>
+        </el-tabs>
       </el-col>
     </el-row>
   </div>
 </template>
 
 <script>
+import dataTable from '@common/src/components/frame/filter-page-table.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('product');
 export default {
   metaInfo() {
     return { title: this.$route.meta.title };
   },
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    dataTable,
+  },
   data: function() {
-    return {};
+    return {
+      active: 'first',
+      opera: [
+        {
+          label: '审核&查看',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          method: 'delete',
+        },
+      ],
+      // 科技需求
+      fields: [
+        { label: '名称', prop: 'name', showTip: true },
+        {
+          label: '信息类型',
+          prop: 'type',
+          format: item => {
+            return item === '0' ? '科技需求' : item === '1' ? '技术成果' : '商务服务';
+          },
+        },
+        { label: '联系电话', prop: 'phone' },
+        { label: '时间', prop: 'create_time', showTip: true },
+        {
+          label: '状态',
+          prop: 'status',
+          format: item => {
+            return item === '0' ? '草稿' : item === '1' ? '审核中' : item === '2' ? '审核通过' : '审核失败';
+          },
+        },
+      ],
+      oneList: [],
+      oneTotal: 0,
+      twoList: [],
+      twoTotal: 0,
+      thrList: [],
+      thrTotal: 0,
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...product(['query', 'delete']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, limit, status: '1', ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `oneList`, res.data);
+        this.$set(this, `oneTotal`, res.total);
+      }
+      res = await this.query({ skip, limit, status: '2', ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `twoList`, res.data);
+        this.$set(this, `twoTotal`, res.total);
+      }
+      res = await this.query({ skip, limit, status: '3', ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `thrList`, res.data);
+        this.$set(this, `thrTotal`, res.total);
+      }
+    },
+    toEdit({ data }) {
+      this.$router.push({ path: '/product/detail', query: { id: data.id, type: data.type } });
+    },
+    async toDelete({ data }) {
+      let res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '信息删除成功',
+          type: 'success',
+        });
+        this.search();
+      }
+    },
   },
-  created() {},
-  methods: {},
   computed: {
     ...mapState(['user']),
   },

+ 325 - 0
src/views/product/parts/oneDetail.vue

@@ -0,0 +1,325 @@
+<template>
+  <div id="oneDetail">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-form ref="form" :model="form" :rules="{}" label-width="140px">
+          <el-col :span="24" class="form">
+            <el-col :span="24">
+              <el-form-item prop="company">
+                <el-col :span="21" slot="label">
+                  企业名称
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.company" placeholder="请输入企业名称" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="phone">
+                <el-col :span="21" slot="label">
+                  联系电话
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.phone" placeholder="请输入联系电话" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="email">
+                <el-col :span="21" slot="label">
+                  电子邮箱
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.email" placeholder="请输入电子邮箱" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="contacts">
+                <el-col :span="21" slot="label">
+                  联系人
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.contacts" placeholder="请输入联系人"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="qqwx">
+                <el-col :span="21" slot="label">
+                  QQ/微信
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.qqwx" placeholder="请输入QQ/微信"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="name">
+                <el-col :span="21" slot="label">
+                  需求名称
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.name" placeholder="请输入需求名称"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" class="langSelect">
+              <el-form-item prop="degreeurgency">
+                <el-col :span="21" slot="label">
+                  需求紧急程度
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.degreeurgency" placeholder="请选择需求紧急程度" clearable>
+                    <el-option label="特急" value="特急"></el-option>
+                    <el-option label="一般" value="一般"></el-option>
+                    <el-option label="长期" value="长期"></el-option>
+                  </el-select>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" class="langSelect">
+              <el-form-item prop="field">
+                <el-col :span="21" slot="label">
+                  所属领域
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.field" filterable clearable>
+                    <el-option v-for="(item, index) in fieldList" :key="index" :value="item.name" :label="item.name"></el-option>
+                  </el-select>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="budget">
+                <el-col :span="21" slot="label">
+                  投资预算
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.budget" placeholder="请输入投资预算"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" class="langSelect">
+              <el-form-item prop="cooperation">
+                <el-col :span="21" slot="label">
+                  合作方式
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.cooperation" filterable clearable>
+                    <el-option v-for="(item, index) in cooperationList" :key="index" :value="item.name" :label="item.name"></el-option>
+                  </el-select>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="requirementdesc">
+                <el-col :span="21" slot="label">
+                  技术说明
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.requirementdesc"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入技术说明"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="expect">
+                <el-col :span="21" slot="label">
+                  预期目标
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.expect"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入预期目标"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="present">
+                <el-col :span="21" slot="label">
+                  需求现状
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.present"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入需求现状"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="condition">
+                <el-col :span="21" slot="label">
+                  合作条件及要求
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.condition"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入合作条件及要求"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfoImage">
+              <el-form-item prop="image">
+                <el-col :span="21" slot="label">
+                  产品图片(6)
+                </el-col>
+                <el-col :span="24">
+                  <uploadArray
+                    :limit="6"
+                    :data="form.image"
+                    :uploadBtn="true"
+                    type="image"
+                    :url="`/files/image/upload`"
+                    @upload="uploadSuccess"
+                    @delete="uploadDelete"
+                  ></uploadArray>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="status">
+                <el-col :span="21" slot="label">
+                  信息状态
+                </el-col>
+                <el-col :span="24">
+                  <el-radio-group v-model="form.status" style="width:97%">
+                    <el-radio label="1" disabled>待审核</el-radio>
+                    <el-radio label="2">审核通过</el-radio>
+                    <el-radio label="3">审核拒绝</el-radio>
+                  </el-radio-group>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="btn">
+              <el-button type="primary" size="mini" @click="onSubmit">提交审核</el-button>
+            </el-col>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import uploadArray from '@common/src/components/upload/uploadArray.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: code } = createNamespacedHelpers('code');
+export default {
+  name: 'oneDetail',
+  props: {
+    form: { type: Object },
+  },
+  components: { uploadArray },
+  data: function() {
+    return {
+      rules: {},
+      fieldList: [],
+      cooperationList: [],
+    };
+  },
+  async created() {
+    await this.searchType();
+  },
+  methods: {
+    ...code({ codeQuery: 'query' }),
+    // 查询字典表
+    async searchType() {
+      // 所属领域;
+      let res = await this.codeQuery({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+      // 合作方式;
+      res = await this.codeQuery({ category: '03' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `cooperationList`, res.data);
+      }
+    },
+    // 图片
+    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']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  .form {
+    /deep/.el-form-item {
+      margin-bottom: 0px;
+    }
+    /deep/.el-form-item__label {
+      border: 1px solid #dcdfe6;
+      line-height: 40px;
+    }
+    /deep/.el-input__inner {
+      border-radius: 0;
+      height: 42px;
+      line-height: 42px;
+    }
+    /deep/.el-radio-group {
+      border: 1px solid #ccc;
+      padding: 12px 20px;
+      width: 268px;
+    }
+    /deep/.langInfo .el-form-item__label {
+      padding: 37px 0;
+    }
+    /deep/.langInfo .el-textarea__inner {
+      height: 117px !important;
+    }
+    /deep/.langSelect .el-select {
+      width: 100%;
+    }
+    /deep/.langInfoImage .el-form-item__label {
+      padding: 53px 0;
+    }
+    .btn {
+      text-align: center;
+      padding: 10px 0;
+    }
+  }
+}
+</style>

+ 252 - 0
src/views/product/parts/thrDetail.vue

@@ -0,0 +1,252 @@
+<template>
+  <div id="thrDetail">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-form ref="form" :model="form" :rules="{}" label-width="140px">
+          <el-col :span="24" class="form">
+            <el-col :span="24">
+              <el-form-item prop="company">
+                <el-col :span="21" slot="label">
+                  企业名称
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.company" placeholder="请输入企业名称" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="phone">
+                <el-col :span="21" slot="label">
+                  联系电话
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.phone" placeholder="请输入联系电话" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="email">
+                <el-col :span="21" slot="label">
+                  电子邮箱
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.email" placeholder="请输入电子邮箱" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="contacts">
+                <el-col :span="21" slot="label">
+                  联系人
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.contacts" placeholder="请输入联系人"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="qqwx">
+                <el-col :span="21" slot="label">
+                  QQ/微信
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.qqwx" placeholder="请输入QQ/微信"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="name">
+                <el-col :span="21" slot="label">
+                  信息名称
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.name" placeholder="请输入信息名称"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="messattribute">
+                <el-col :span="21" slot="label">
+                  信息属性
+                </el-col>
+                <el-col :span="24">
+                  <el-radio-group v-model="form.messattribute">
+                    <el-radio label="提供方"></el-radio>
+                    <el-radio label="需求方"></el-radio>
+                  </el-radio-group>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="demand">
+                <el-col :span="21" slot="label">
+                  需求程度
+                </el-col>
+                <el-col :span="24">
+                  <el-radio-group v-model="form.demand">
+                    <el-radio label="特急"></el-radio>
+                    <el-radio label="一般"></el-radio>
+                    <el-radio label="长期"></el-radio>
+                  </el-radio-group>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="informationdesc">
+                <el-col :span="21" slot="label">
+                  信息描述
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.informationdesc"
+                    type="textarea"
+                    maxlength="300"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入信息描述"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="coreelements">
+                <el-col :span="21" slot="label">
+                  核心要素
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.coreelements"
+                    type="textarea"
+                    maxlength="200"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入核心要素"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="priceinfo">
+                <el-col :span="21" slot="label">
+                  价格信息
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.priceinfo"
+                    type="textarea"
+                    maxlength="100"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入价格信息"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="businessexpect">
+                <el-col :span="21" slot="label">
+                  商务预期
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.expect"
+                    type="textarea"
+                    maxlength="200"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入商务预期"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="status">
+                <el-col :span="21" slot="label">
+                  信息状态
+                </el-col>
+                <el-col :span="24">
+                  <el-radio-group v-model="form.status" style="width:97%">
+                    <el-radio label="1" disabled>待审核</el-radio>
+                    <el-radio label="2">审核通过</el-radio>
+                    <el-radio label="3">审核拒绝</el-radio>
+                  </el-radio-group>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="btn">
+              <el-button type="primary" size="mini" @click="onSubmit">提交审核</el-button>
+            </el-col>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'thrDetail',
+  props: { form: { type: Object } },
+  components: {},
+  data: function() {
+    return {
+      rules: {},
+    };
+  },
+  created() {},
+  methods: {
+    // 提交保存
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.form });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  .form {
+    /deep/.el-form-item {
+      margin-bottom: 0px;
+    }
+    /deep/.el-form-item__label {
+      border: 1px solid #dcdfe6;
+      line-height: 40px;
+    }
+    /deep/.el-input__inner {
+      border-radius: 0;
+      height: 42px;
+      line-height: 42px;
+    }
+    /deep/.el-radio-group {
+      border: 1px solid #ccc;
+      padding: 12px 20px;
+      width: 93.8%;
+    }
+    /deep/.langInfo .el-form-item__label {
+      padding: 37px 0;
+    }
+    /deep/.langInfo .el-textarea__inner {
+      height: 117px !important;
+    }
+    /deep/.langSelect .el-select {
+      width: 100%;
+    }
+    /deep/.langInfoImage .el-form-item__label {
+      padding: 53px 0;
+    }
+    .btn {
+      text-align: center;
+      padding: 10px 0;
+    }
+  }
+}
+</style>

+ 460 - 0
src/views/product/parts/twoDetail.vue

@@ -0,0 +1,460 @@
+<template>
+  <div id="twoDetail">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-form ref="form" :model="form" :rules="{}" label-width="140px">
+          <el-col :span="24" class="form">
+            <el-col :span="24">
+              <el-form-item prop="company">
+                <el-col :span="21" slot="label">
+                  企业名称
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.company" placeholder="请输入企业名称" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="phone">
+                <el-col :span="21" slot="label">
+                  联系电话
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.phone" placeholder="请输入联系电话" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="email">
+                <el-col :span="21" slot="label">
+                  电子邮箱
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.email" placeholder="请输入电子邮箱" disabled></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="contacts">
+                <el-col :span="21" slot="label">
+                  联系人
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.contacts" placeholder="请输入联系人"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="qqwx">
+                <el-col :span="21" slot="label">
+                  QQ/微信
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.qqwx" placeholder="请输入QQ/微信"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="name">
+                <el-col :span="21" slot="label">
+                  成果名称
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.name" placeholder="请输入成果名称"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" class="langSelect">
+              <el-form-item prop="field">
+                <el-col :span="21" slot="label">
+                  所属领域
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.field" filterable clearable>
+                    <el-option v-for="(item, index) in fieldList" :key="index" :value="item.name" :label="item.name"></el-option>
+                  </el-select>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" class="langSelect">
+              <el-form-item prop="cooperation">
+                <el-col :span="21" slot="label">
+                  合作方式
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.cooperation" filterable clearable>
+                    <el-option v-for="(item, index) in cooperationList" :key="index" :value="item.name" :label="item.name"></el-option>
+                  </el-select>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" class="langSelect">
+              <el-form-item prop="achievestatus">
+                <el-col :span="21" slot="label">
+                  成果状态
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.achievestatus" filterable>
+                    <el-option v-for="(item, index) in achievestatusList" :key="index" :value="item.name" :label="item.name"></el-option>
+                  </el-select>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="achieveown">
+                <el-col :span="21" slot="label">
+                  成果权属
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.achieveown" placeholder="请输入成果权属"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" class="langSelect">
+              <el-form-item prop="achievesource">
+                <el-col :span="21" slot="label">
+                  成果来源
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.achievesource" placeholder="请选择成果来源">
+                    <el-option label="国家项目" value="国家项目"></el-option>
+                    <el-option label="省级项目" value="省级项目"></el-option>
+                    <el-option label="市级项目" value="市级项目"></el-option>
+                    <el-option label="自选项目" value="自选项目"></el-option>
+                  </el-select>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="intentionprice">
+                <el-col :span="21" slot="label">
+                  意向价格
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.intentionprice" placeholder="请输入意向价格"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="patentinfo">
+                <el-col :span="21" slot="label">
+                  专利信息
+                </el-col>
+                <el-col :span="24" style="border:1px solid #ccc;padding:4px 10px;">
+                  <el-button type="primary" size="mini" @click="viewpatent()">查看信息</el-button>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="roadshow">
+              <el-form-item prop="roadshow">
+                <el-col :span="21" slot="label">
+                  项目路演
+                </el-col>
+                <el-col :span="24" style="padding:0 10px">
+                  <upload
+                    :limit="1"
+                    :data="form.roadshow"
+                    listType=""
+                    type="roadshow"
+                    :url="'/files/roadshow/upload'"
+                    @upload="roadshowSuccess"
+                    @delete="roadshowDelete"
+                  ></upload>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="achievebrief">
+                <el-col :span="21" slot="label">
+                  成果简介
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.achievebrief"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入成果简介"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="features">
+                <el-col :span="21" slot="label">
+                  技术特点
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.features"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入技术特点"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="team">
+                <el-col :span="21" slot="label">
+                  技术团队
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.team"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入技术团队"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="expectations">
+                <el-col :span="21" slot="label">
+                  商业预期
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.expect"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入商业预期"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="condition">
+                <el-col :span="21" slot="label">
+                  合作条件及要求
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.condition"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 4, maxRows: 5 }"
+                    placeholder="请输入合作条件及要求"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfoImage">
+              <el-form-item prop="image">
+                <el-col :span="21" slot="label">
+                  产品图片(6)
+                </el-col>
+                <el-col :span="24">
+                  <uploadArray
+                    :limit="6"
+                    :data="form.image"
+                    :uploadBtn="true"
+                    type="image"
+                    :url="`/files/image/upload`"
+                    @upload="uploadSuccess"
+                    @delete="uploadDelete"
+                  ></uploadArray>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="status">
+                <el-col :span="21" slot="label">
+                  信息状态
+                </el-col>
+                <el-col :span="24">
+                  <el-radio-group v-model="form.status" style="width:97%">
+                    <el-radio label="1" disabled>待审核</el-radio>
+                    <el-radio label="2">审核通过</el-radio>
+                    <el-radio label="3">审核拒绝</el-radio>
+                  </el-radio-group>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="btn">
+              <el-button type="primary" size="mini" @click="onSubmit">提交审核</el-button>
+            </el-col>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+    <el-dialog title="查看专利信息" :visible.sync="viewpatentdialog" width="40%" :before-close="patentdialogclose">
+      <el-table :data="patent" style="width: 100%" border>
+        <el-table-column prop="patentinfo" label="专利信息" align="center"> </el-table-column>
+        <el-table-column prop="patentstatus" label="专利状态" align="center"> </el-table-column>
+        <el-table-column label="操作" align="center">
+          <template v-slot="scoped">
+            <el-button type="text" @click="delAttend(scoped.$index, scoped.row)" size="small">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import upload from '@common/src/components/frame/upload.vue';
+import uploadArray from '@common/src/components/upload/uploadArray.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: code } = createNamespacedHelpers('code');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'twoDetail',
+  props: { form: { type: Object } },
+  components: { upload, uploadArray },
+  data: function() {
+    return {
+      rules: {},
+      fieldList: [],
+      cooperationList: [],
+      achievestatusList: [],
+      // 专利信息
+      addpatentform: {},
+      patent: [],
+      viewpatentdialog: false,
+    };
+  },
+  async created() {
+    await this.searchType();
+  },
+  methods: {
+    ...code({ codeQuery: 'query' }),
+    // 查询字典表
+    async searchType() {
+      // 所属领域;
+      let res = await this.codeQuery({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+      // 合作方式;
+      res = await this.codeQuery({ category: '03' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `cooperationList`, res.data);
+      }
+      // 成果状态
+      res = await this.codeQuery({ category: '02' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `achievestatusList`, res.data);
+      }
+    },
+    // 图片
+    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);
+    },
+    // 项目路演文件上传
+    roadshowSuccess({ type, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+    // 项目路演文件删除
+    roadshowDelete(data) {
+      this.$set(this.form, `${data.type}`, null);
+    },
+    // 查看专利信息
+    viewpatent() {
+      this.viewpatentdialog = true;
+    },
+    // 删除
+    delAttend(index, val) {
+      this.patent.splice(index, 1);
+      this.$message({
+        message: '删除专利信息成功',
+        type: 'success',
+      });
+      this.patentdialogclose();
+    },
+    // 取消
+    patentdialogclose() {
+      this.addpatentform = {};
+      this.addpatentdialog = false;
+      this.viewpatentdialog = false;
+    },
+    // 提交保存
+    onSubmit() {
+      this.form.patent = this.patent;
+      this.$emit('onSubmit', { data: this.form });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {
+    form: {
+      handler() {
+        if (this.form.patent) this.$set(this, `patent`, this.form.patent);
+      },
+      immediate: true,
+      deep: true,
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  .form {
+    /deep/.el-form-item {
+      margin-bottom: 0px;
+    }
+    /deep/.el-form-item__label {
+      border: 1px solid #dcdfe6;
+      line-height: 40px;
+    }
+    /deep/.el-input__inner {
+      border-radius: 0;
+      height: 42px;
+      line-height: 42px;
+    }
+    /deep/.el-radio-group {
+      border: 1px solid #ccc;
+      padding: 12px 20px;
+      width: 268px;
+    }
+    /deep/.langInfo .el-form-item__label {
+      padding: 37px 0;
+    }
+    /deep/.langInfo .el-textarea__inner {
+      height: 117px !important;
+    }
+    /deep/.langSelect .el-select {
+      width: 100%;
+    }
+    /deep/.langInfoImage .el-form-item__label {
+      padding: 53px 0;
+    }
+    .btn {
+      text-align: center;
+      padding: 10px 0;
+    }
+  }
+}
+.roadshow {
+  height: 90px;
+  border: 1px solid #ccc;
+  /deep/.el-form-item__label {
+    height: 90px;
+    line-height: 90px;
+  }
+}
+</style>