guhongwei 3 vuotta sitten
vanhempi
commit
3b06c861e6

+ 5 - 0
src/router/index.js

@@ -108,6 +108,11 @@ const twoweb = [
     meta: { title: '调查问卷' },
     component: () => import('../views/twoweb/service/question/detail.vue'),
   },
+  {
+    path: '/twoweb/service/made/detail',
+    meta: { title: '订制问卷' },
+    component: () => import('../views/twoweb/service/made/detail.vue'),
+  },
   {
     path: '/twoweb/service/product',
     name: 'twoweb_service_product_index',

+ 247 - 0
src/views/twoweb/service/made/detail.vue

@@ -0,0 +1,247 @@
+<template>
+  <div id="detail">
+    <el-row>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <el-col :span="24" class="info">
+            <el-form :model="form" :rules="rules" ref="form">
+              <el-col :span="24" class="one">
+                <el-col :span="24" class="title">
+                  {{ data.title }}
+                </el-col>
+                <el-col :span="24" class="brief">
+                  {{ data.brief }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="two">
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>答卷企业</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <one :form="form" :rules="rules"></one>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>企业基本信息</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <two :form="form" :rules="rules"></two>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>企业创新团队</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <thr :form="form" :rules="rules"></thr>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>企业知识产权</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <add-thr :form="form" :rules="rules"></add-thr>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>企业新品开发</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <four :form="form" :rules="rules"></four>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>企业研发投入(近三年平均)</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <five :form="form" :rules="rules"></five>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>企业研发成效(近三年平均)</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <six v-model="form" :rules="rules"></six>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="common">
+                  <el-col :span="24" class="txt">
+                    <span>对外技术合作</span>
+                  </el-col>
+                  <el-col :span="24" class="info">
+                    <seven v-model="form" :rules="rules"></seven>
+                  </el-col>
+                </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>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const fields = require('./fields');
+import one from './parts-models/one.vue';
+import two from './parts-models/two.vue';
+import thr from './parts-models/thr.vue';
+import addThr from './parts-models/add-three.vue';
+import four from './parts-models/four.vue';
+import five from './parts-models/five.vue';
+import six from './parts-models/six.vue';
+import seven from './parts-models/seven.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: answer } = createNamespacedHelpers('answer');
+const { mapActions: questionnaire } = createNamespacedHelpers('questionnaire');
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    one,
+    two,
+    thr,
+    addThr,
+    four,
+    five,
+    six,
+    seven,
+  },
+  data: function() {
+    return {
+      data: {},
+      form: {},
+      rules: {
+        create_user: [{ required: true, message: '请选择是否注册为平台用户', trigger: 'blur' }],
+        company: [{ required: true, message: '请输入企业名称', trigger: 'blur' }],
+        contacts: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
+        phone: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
+      },
+      imgUrl: require('@a/img_url.png'),
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...answer(['create']),
+    ...questionnaire(['fetch']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `data`, res.data);
+      }
+    },
+    async onSubmit() {
+      let data = this.form;
+      const { company, contacts, phone, create_user, ...others } = data;
+      const obj = { company, contacts, phone, questionnaire_id: this.id, create_user };
+      const fields = this.setFields();
+      const arr = [];
+      const keys = Object.keys(others);
+      for (const key of keys) {
+        const label = fields[key];
+        const answer = others[key];
+        arr.push({ label, answer });
+      }
+      obj.answer = arr;
+      const res = await this.create(obj);
+      if (this.$checkRes(res, '答卷成功', res.errmsg || '答卷失败')) {
+      }
+    },
+    setFields() {
+      const fkeys = Object.keys(fields);
+      let object = [];
+      for (const key of fkeys) {
+        const narr = fields[key];
+        for (const obj of narr) {
+          if (!obj.children) {
+            object[obj.model] = obj.label;
+          } else {
+            for (const child of obj.children) {
+              object[child.model] = child.label;
+            }
+          }
+        }
+      }
+      return object;
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  padding: 10px 0;
+  .info {
+    .one {
+      border-bottom: 1px dashed #ccc;
+      padding: 0 20px;
+      margin: 0 0 22px 0;
+      .title {
+        font-size: 30px;
+        font-weight: bold;
+        margin: 20px 0;
+        text-align: center;
+      }
+      .brief {
+        font-size: 16px;
+        padding: 0 0 20px 0;
+      }
+    }
+    .two {
+      .common {
+        position: relative;
+        border: 1px solid #41719c;
+        margin: 0 0 35px 0;
+        min-height: 150px;
+        .txt {
+          position: absolute;
+          top: -22px;
+          text-align: center;
+          span {
+            height: 40px;
+            line-height: 40px;
+            display: inline-block;
+            padding: 0 35px;
+            background: #fff;
+            font-weight: bold;
+            font-size: 18px;
+          }
+        }
+        .info {
+          padding: 20px 10px 10px 10px;
+        }
+      }
+      .btn {
+        text-align: center;
+      }
+    }
+  }
+}
+</style>

+ 169 - 0
src/views/twoweb/service/made/fields.js

@@ -0,0 +1,169 @@
+export const two = [
+  { label: '成立时间', model: 'create_date', list: 'time', type: 'select' },
+  { label: '企业人数', model: 'number', list: 'number', type: 'select' },
+  {
+    label: '企业类型',
+    model: 'company_type',
+    list: 'companyType',
+    type: 'select',
+  },
+  { label: '发展阶段', model: 'parts', list: 'parts', type: 'select' },
+  { label: '所属行业', model: 'profession', list: 'profession', type: 'select' },
+  { label: '行业排名', model: 'order', list: 'order', type: 'select' },
+];
+
+export const three = [
+  {
+    label: '企业负责人',
+    model: 'responder',
+    type: 'object',
+    children: [
+      { label: '与公司关系', model: 'relation', list: 'chargeRelation', type: 'select' },
+      { label: '年龄', model: 'age', list: 'age', type: 'select' },
+      { label: '学历', model: 'edu', list: 'edu', type: 'select' },
+      { label: '职称', model: 'teckRank', list: 'teckRank', type: 'select' },
+      { label: '专业', model: 'major', list: 'major', type: 'select' },
+      { label: '专业契合度', model: 'agreePer', list: 'agreePer', type: 'select' },
+    ],
+  },
+  {
+    label: '技术负责人',
+    model: 'group',
+    type: 'array',
+    children: [
+      { label: '负责人', model: 'charge', list: 'gCharge', type: 'select' },
+      { label: '年龄', model: 'gage', list: 'age', type: 'select' },
+      { label: '学历', model: 'gedu', list: 'edu', type: 'select' },
+      { label: '职称', model: 'gteckRank', list: 'teckRank', type: 'select' },
+      { label: '专业', model: 'gmajor', list: 'major', type: 'select' },
+      { label: '专业契合度', model: 'gagreePer', list: 'agreePer', type: 'select' },
+    ],
+  },
+  {
+    label: '技术顾问团',
+    model: 'gw_group',
+    type: 'object',
+    children: [
+      { label: '负责人', model: 'gnum', list: 'gwNum', type: 'select' },
+      { label: '年龄', model: 'gwage', list: 'age', type: 'select' },
+      { label: '学历', model: 'gwedu', list: 'edu', type: 'select' },
+      { label: '职称', model: 'gwteckRank', list: 'teckRank', type: 'select' },
+      { label: '专业', model: 'gwmajor', list: 'major', type: 'select' },
+      { label: '专业契合度', model: 'gwagreePer', list: 'agreePer', type: 'select' },
+    ],
+  },
+];
+
+export const addThree = [
+  {
+    label: '授权知识产权',
+    model: 'now',
+    type: 'object',
+    children: [
+      { label: 'PCT申请数', model: 'pctNum', list: 'zscqNum', type: 'select' },
+      { label: '发明专利', model: 'fmzl', list: 'effect', type: 'select' },
+      { label: '实用新型', model: 'syxx', list: 'effect', type: 'select' },
+      { label: '外观设计', model: 'wgsj', list: 'effect', type: 'select' },
+      { label: '注册商标', model: 'zcsb', list: 'effect', type: 'select' },
+      { label: '集成电路', model: 'jcdl', list: 'effect', type: 'select' },
+      { label: '专有技术', model: 'zyjs', list: 'effect', type: 'select' },
+      { label: '软件著作权', model: 'rjzzq', list: 'effect', type: 'select' },
+      { label: '文字,美术作品版权', model: 'zpbq', list: 'effect', type: 'select' },
+      { label: '其他', model: 'qt', list: 'effect', type: 'select' },
+    ],
+  },
+
+  { label: '已实施知识产权数', model: 'useZscq', list: 'zscqNum', type: 'select' },
+  { label: '上年度专利许可与转让收入', model: 'in', list: 'zlIn', type: 'select' },
+  { label: '企业内部管理', model: 'qynbgl', list: 'qynbgl', type: 'select' },
+  { label: '知识产权纠纷(可多选)', model: 'zscqjf', list: 'zscqjf', type: 'checkbox' },
+  { label: '发展阻碍-内因(可多选)', model: 'zscqfzzany', list: 'zscqfzzany', type: 'checkbox' },
+  { label: '发展阻碍-外因(可多选)', model: 'zscqfzzawy', list: 'zscqfzzawy', type: 'checkbox' },
+];
+
+export const four = [
+  { label: '上年度新产品销售额', model: 'sell', list: 'productIn', type: 'select' },
+  {
+    label: '新品开发来源(可多选)',
+    model: 'dev_source',
+    type: 'checkbox',
+    list: 'source',
+  },
+  {
+    label: '新品发展战略(可多选)',
+    model: 'dev_route',
+    type: 'checkbox',
+    list: 'route',
+  },
+
+  { label: '新品开发周期', model: 'ePeriod', list: 'ePeriod', type: 'select' },
+  { label: '新品研发速度', model: 'eSpeed', list: 'eSpeed', type: 'select' },
+  { label: '新品开发成功率', model: 'rate', list: 'rate', type: 'select' },
+  { label: '新品市场替代性', model: 'eReplaceable', list: 'eReplaceable', type: 'select' },
+  { label: '新品创新市场引领', model: 'eQuality', list: 'eQuality', type: 'select' },
+  { label: '新品利润/新品销售额', model: 'ePer', list: 'ePer', type: 'select' },
+];
+
+export const five = [
+  { label: '年均技改投入', model: 'yearCost', list: 'cost1', type: 'select' },
+  { label: '外部支出', model: 'yearOutCost', list: 'cost1', type: 'select' },
+  { label: '政府补贴经费', model: 'yearZfCost', list: 'cost1', type: 'select' },
+  { label: '加计扣除额', model: 'yearMinCost', list: 'cost2', type: 'select', labelWidth: '160px' },
+  { label: '研发人员年工资占比', model: 'costPer', list: 'costPer', type: 'select' },
+  { label: '研发/知识产权培训费', model: 'yearTrainCost', list: 'cost3', type: 'select', labelWidth: '160px' },
+];
+
+export const six = [
+  { label: '自主申报知识产权数', model: 'selfZscq', list: 'effect', type: 'select', labelWidth: '160px' },
+  { label: '购买(获得许可)知识产权数', model: 'buyZscq', list: 'effect', type: 'select', labelWidth: '180px' },
+  { label: '企业自立科技项目数', model: 'comProject', list: 'effect', type: 'select', labelWidth: '160px' },
+  { label: '自主开发新产品数', model: 'selfProject', list: 'effect', type: 'select', labelWidth: '160px' },
+  { label: '市级以上科技项目数', model: 'SjProject', list: 'effect', type: 'select', labelWidth: '170px' },
+  { label: '市级以上科技奖励数', model: 'SjAward', list: 'effect', type: 'select', labelWidth: '170px' },
+  { label: '与高校院所合作数', model: 'SchoolProject', list: 'effect', type: 'select', labelWidth: '160px' },
+  { label: '与产业链关联企业合作数', model: 'chainProject', list: 'effect', type: 'select', labelWidth: '180px' },
+];
+
+export const seven = [
+  {
+    label: '对外技术合作方式(可多选)',
+    model: 'out_way',
+    type: 'checkbox',
+    list: 'way',
+  },
+  {
+    label: '对外技术合作缘由(可多选)',
+    model: 'out_reason',
+    type: 'checkbox',
+    list: 'reason',
+  },
+  {
+    label: '对外技术合作内容(可多选)',
+    model: 'out_content',
+    type: 'checkbox',
+    list: 'content',
+  },
+  {
+    label: '对外技术需求(可多选)',
+    model: 'out_require',
+    type: 'checkbox',
+    list: 'require',
+  },
+  {
+    label: '对外技术使用方式(可多选)',
+    model: 'out_use',
+    type: 'checkbox',
+    list: 'use',
+  },
+  {
+    label: '技术实用度',
+    model: 'out_applied',
+    type: 'object',
+    children: [
+      { label: '直接应用', model: 'aDirect', list: 'aDirect', type: 'select', labelWidth: '160px' },
+      { label: '需进一步开发才能应用', model: 'aNext', list: 'aNext', type: 'select', labelWidth: '180px' },
+      { label: '纯基础研发', model: 'aBase', list: 'aBase', type: 'select', labelWidth: '160px' },
+      { label: '尚不能应用', model: 'aCant', list: 'aCant', type: 'select', labelWidth: '160px' },
+    ],
+  },
+];

+ 137 - 0
src/views/twoweb/service/made/parts-models/add-three.vue

@@ -0,0 +1,137 @@
+<template>
+  <div id="add-three">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="180px">
+          <template v-for="(i, index) in question">
+            <template v-if="i.type === 'select'">
+              <el-col :span="12" :key="`select${index}`">
+                <el-form-item :prop="`${index}`" :label="`${i.label}`">
+                  <el-select v-model="form[i.model]" placeholder="">
+                    <el-option v-for="(item, index) in getList(i.list)" :key="index" :value="item" :label="item"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </template>
+            <template v-else-if="i.type === 'checkbox'">
+              <el-col :span="12" :key="`checkbox${index}`">
+                <el-form-item :prop="`${index}`" :label="`${i.label}`">
+                  <el-select v-model="form[i.model]" multiple placeholder="">
+                    <el-option v-for="(item, index) in getList(i.list)" :key="index" :value="item" :label="item"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </template>
+            <template v-else-if="i.type === 'object'">
+              <!-- <el-col :span="24" :key="`object-addThree${index}`" style="text-align: center;padding-bottom:15px">{{ i.label }}</el-col>
+              <el-row class="object" :key="`object-children${index}`">
+                <el-col :span="12" v-for="(f, cindex) in i.children" :key="`children${cindex}`">
+                  <el-form-item :prop="`${index}-${cindex}`" :label="`${f.label}`">
+                    <el-select v-model="form[f.model]" multiple placeholder="">
+                      <el-option v-for="(item, index) in getList(i.list)" :key="index" :value="item" :label="item"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row> -->
+              <el-row type="flex" :key="`object-addThree${index}`" align="middle" class="object">
+                <el-col :span="3" class="olabel">{{ i.label }}</el-col>
+                <el-col :span="21" class="oselect">
+                  <el-col :span="5" v-for="(f, cindex) in i.children" :key="`children${cindex}`" class="child">
+                    <el-col :span="24" class="child_label">{{ f.label }}</el-col>
+                    <el-col :span="24" class="child_select">
+                      <el-select v-model="form[f.model]" multiple placeholder="">
+                        <el-option v-for="(item, iindex) in getList(f.list)" :key="iindex" :value="item" :label="item"></el-option>
+                      </el-select>
+                    </el-col>
+                    <!-- <el-form-item :prop="`${index}-${cindex}`" :label="`${f.label}`">
+                      <el-select v-model="form[f.model]" multiple placeholder="">
+                        <el-option v-for="(item, index) in getList(i.list)" :key="index" :value="item" :label="item"></el-option>
+                      </el-select>
+                    </el-form-item> -->
+                  </el-col>
+                </el-col>
+              </el-row>
+            </template>
+          </template>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { addThree } from '../fields.js';
+import * as select from '../select.js';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'addThree',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  components: {},
+  data: function() {
+    return {
+      question: addThree,
+    };
+  },
+  created() {},
+  methods: {
+    // 获取列表
+    getList(type) {
+      return select[type];
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+@borderColor: #ccc;
+.label {
+  font-size: 14px;
+  color: #606266;
+  margin: 0 7px 0 0;
+  padding: 5px 0;
+}
+.select {
+  width: 90.8%;
+  .chiList {
+    width: 13.2%;
+    margin: 0 10px 0 0;
+    .chi_label {
+      text-align: center;
+      font-size: 14px;
+      color: #606266;
+      padding: 5px 0;
+    }
+  }
+  .chiList:last-child {
+    margin: 0;
+  }
+}
+.object {
+  border-bottom: 1px #ccc solid;
+  margin: 0 0 10px 0;
+  padding: 0 0 10px 0;
+  .olabel {
+    font-size: 14px;
+    color: #666;
+  }
+  .child {
+    width: 18.9%;
+    margin: 0 10px 0 0;
+    .child_label {
+      text-align: center;
+      font-size: 14px;
+      color: #666;
+      padding: 10px 0;
+    }
+  }
+  .child:nth-child(5n) {
+    margin: 0;
+  }
+}
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 69 - 0
src/views/twoweb/service/made/parts-models/five.vue

@@ -0,0 +1,69 @@
+<template>
+  <div id="one">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="180px">
+          <el-row>
+            <template v-for="(f, fi) in fields">
+              <el-col v-if="f.type === 'select'" :span="12" :key="`five-${f.model}-${fi}`">
+                <el-form-item :label="f.label">
+                  <el-select v-model="form[f.model]" filterable placeholder="">
+                    <el-option v-for="(c, ci) in getList(f.list)" :key="`five-${f.model}-${fi}-c-${ci}`" :label="c" :value="c"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </template>
+          </el-row>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { five } = require('../fields');
+const selectArray = require('../select');
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'one',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  model: {
+    prop: 'form',
+    event: 'change',
+  },
+  components: {},
+  data: function() {
+    return {
+      fields: five,
+    };
+  },
+  created() {},
+  methods: {
+    getList(mod) {
+      return selectArray[mod];
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 71 - 0
src/views/twoweb/service/made/parts-models/four.vue

@@ -0,0 +1,71 @@
+<template>
+  <div id="four">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="180px">
+          <el-col :span="12" v-for="(i, index) in question" :key="`four${index}`">
+            <el-form-item v-if="i.type === 'select'" :prop="`${index}`" :key="`select${index}`" :label="`${i.label}`">
+              <el-select v-model="form[i.model]" placeholder="">
+                <el-option v-for="(item, index) in getList(i.list)" :key="index" :value="item" :label="item"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item v-else-if="i.type === 'checkbox'" :prop="`${index}`" :key="`checkbox${index}`" :label="`${i.label}`">
+              <el-select v-model="form[i.model]" multiple placeholder="">
+                <el-option v-for="(item, index) in getList(i.list)" :key="index" :value="item" :label="item"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { four } from '../fields.js';
+import * as select from '../select.js';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'four',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  model: {
+    prop: 'form',
+    event: 'change',
+  },
+  components: {},
+  data: function() {
+    return {
+      question: four,
+    };
+  },
+  created() {},
+  methods: {
+    // 获取列表
+    getList(type) {
+      return select[type];
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 73 - 0
src/views/twoweb/service/made/parts-models/one.vue

@@ -0,0 +1,73 @@
+<template>
+  <div id="one">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="80px">
+          <el-col :span="24">
+            <el-form-item label-width="150px" label="是否注册为平台用户" prop="create_user">
+              <el-radio-group v-model="form.create_user">
+                <el-radio :label="true">是</el-radio>
+                <el-radio :label="false">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="企业名称" prop="company">
+              <el-input v-model="form.company"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系人" prop="contacts">
+              <el-input v-model="form.contacts"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系电话" prop="phone">
+              <el-input v-model="form.phone" maxlength="11"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'one',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  model: {
+    prop: 'form',
+    event: 'change',
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 117 - 0
src/views/twoweb/service/made/parts-models/seven.vue

@@ -0,0 +1,117 @@
+<template>
+  <div id="one">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="180px">
+          <el-row>
+            <template v-for="(f, fi) in fields">
+              <el-col v-if="f.type === 'checkbox'" :span="12" :key="`seven-${f.model}-${fi}`">
+                <el-form-item :label="f.label">
+                  <el-select v-model="form[f.model]" filterable multiple placeholder="">
+                    <el-option v-for="(c, ci) in getList(f.list)" :key="`seven-${f.model}-${fi}-c-${ci}`" :label="c" :value="c"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col v-else :span="24" class="sevenList" :key="`seven-${f.model}-${fi}`">
+                <el-col :span="5" class="label">
+                  {{ f.label }}
+                </el-col>
+                <el-col :span="19" class="select">
+                  <el-col :span="6" class="chiList" v-for="(child, cIndex) in f.children" :key="`seven-${fi}-child-${cIndex}`" style="text-align:center">
+                    <el-col :span="24" class="chi_label">{{ child.label }}</el-col>
+                    <el-col :span="24" class="chi_select">
+                      <el-select v-model="form[child.model]" placeholder="">
+                        <el-option
+                          v-for="(c, ci) in getList(child.list)"
+                          :key="`seven-${f.model}-${fi}-children-${child.model}-c-${ci}`"
+                          :label="c"
+                          :value="c"
+                        ></el-option>
+                      </el-select>
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </template>
+          </el-row>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { seven } = require('../fields');
+const selectArray = require('../select');
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'one',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  model: {
+    prop: 'form',
+    event: 'change',
+  },
+  components: {},
+  data: function() {
+    return {
+      fields: seven,
+    };
+  },
+  created() {},
+  methods: {
+    getList(mod) {
+      return selectArray[mod];
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .sevenList {
+    .label {
+      font-size: 14px;
+      color: #606266;
+      margin: 0 7px 0 0;
+      padding: 5px 10px;
+      width: 19.4%;
+      text-align: right;
+    }
+    .select {
+      width: 79.8%;
+      .chiList {
+        width: 23.9%;
+        margin: 0 10px 0 0;
+        .chi_label {
+          text-align: center;
+          font-size: 14px;
+          color: #606266;
+          padding: 5px 0;
+        }
+      }
+      .chiList:last-child {
+        margin: 0;
+      }
+    }
+  }
+}
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 69 - 0
src/views/twoweb/service/made/parts-models/six.vue

@@ -0,0 +1,69 @@
+<template>
+  <div id="one">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="180px">
+          <el-row>
+            <template v-for="(f, fi) in fields">
+              <el-col v-if="f.type === 'select'" :span="12" :key="`six-${f.model}-${fi}`">
+                <el-form-item :label="f.label">
+                  <el-select v-model="form[f.model]" filterable placeholder="">
+                    <el-option v-for="(c, ci) in getList(f.list)" :key="`six-${f.model}-${fi}-c-${ci}`" :label="c" :value="c"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </template>
+          </el-row>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { six } = require('../fields');
+const selectArray = require('../select');
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'one',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  model: {
+    prop: 'form',
+    event: 'change',
+  },
+  components: {},
+  data: function() {
+    return {
+      fields: six,
+    };
+  },
+  created() {},
+  methods: {
+    getList(mod) {
+      return selectArray[mod];
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 136 - 0
src/views/twoweb/service/made/parts-models/thr.vue

@@ -0,0 +1,136 @@
+<template>
+  <div id="thr">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="90px">
+          <el-col :span="24" class="thrList" v-for="(i, index) in question" :key="`thr${index}`">
+            <el-col :span="2" class="label">
+              {{ i.label }}
+            </el-col>
+            <el-col :span="21" class="select">
+              <el-col :span="4" class="chiList" v-for="(f, index) in i.children" :key="`children${index}`">
+                <el-col :span="24" class="chi_label">
+                  {{ f.label }}
+                </el-col>
+                <el-col :span="24" class="chi_select">
+                  <el-select v-model="form[f.model]" :disabled="disabled[f.model]" @change="toChange" placeholder="">
+                    <el-option v-for="(item, index) in getList(f.list)" :key="index" :value="item" :label="item"></el-option>
+                  </el-select>
+                </el-col>
+              </el-col>
+            </el-col>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+import { three } from '../fields.js';
+import * as select from '../select.js';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'thr',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  model: {
+    prop: 'form',
+    event: 'change',
+  },
+  components: {},
+  data: function() {
+    return {
+      disabled: {},
+      question: three,
+    };
+  },
+  created() {},
+  methods: {
+    // 获取列表
+    getList(type) {
+      return select[type];
+    },
+    // 修改disabled
+    toChange() {
+      const d1 = _.get(this.form, 'charge');
+      const d2 = _.get(this.form, 'gnum');
+      let obj = {};
+      if (d1 === '无技术团队') {
+        const r = three.find(f => f.model === 'group');
+        if (r) {
+          const { children } = r;
+          const keys = _.drop(children, 1).map(i => i.model);
+          for (const key of keys) {
+            obj[key] = true;
+          }
+        }
+      }
+      if (d2 === '无顾问团队') {
+        const r = three.find(f => f.model === 'gw_group');
+        if (r) {
+          const { children } = r;
+          const keys = _.drop(children, 1).map(i => i.model);
+          for (const key of keys) {
+            obj[key] = true;
+          }
+        }
+      }
+      this.$set(this, `disabled`, obj);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .thrList {
+    padding: 10px 0;
+    border-bottom: 1px solid #ccc;
+    .label {
+      font-size: 14px;
+      color: #606266;
+      margin: 0 7px 0 0;
+      padding: 5px 0;
+    }
+    .select {
+      width: 90.8%;
+      .chiList {
+        width: 15.6%;
+        margin: 0 10px 0 0;
+        .chi_label {
+          text-align: center;
+          font-size: 14px;
+          color: #606266;
+          padding: 5px 0;
+        }
+      }
+      .chiList:last-child {
+        margin: 0;
+      }
+    }
+  }
+  .thrList:last-child {
+    border-bottom: none;
+  }
+}
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 68 - 0
src/views/twoweb/service/made/parts-models/two.vue

@@ -0,0 +1,68 @@
+<template>
+  <div id="two">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="80px">
+          <template v-for="(i, index) in question">
+            <el-col :span="8" :key="`two${index}`">
+              <el-form-item v-if="i.type === 'select'" :prop="`${index}`" :key="`two${index}`" :label="`${i.label}`">
+                <el-select v-model="form[i.model]" placeholder="">
+                  <el-option v-for="(item, index) in getList(i.list)" :key="index" :value="item" :label="item"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </template>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { two } from '../fields.js';
+import * as select from '../select.js';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'two',
+  props: {
+    form: { type: Object },
+    rules: { type: Object },
+  },
+  model: {
+    prop: 'form',
+    event: 'change',
+  },
+  components: {},
+  data: function() {
+    return {
+      question: two,
+    };
+  },
+  created() {},
+  methods: {
+    // 获取列表
+    getList(type) {
+      return select[type];
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.el-input__inner {
+  border: 1px solid #333;
+}
+</style>

+ 118 - 0
src/views/twoweb/service/made/select.js

@@ -0,0 +1,118 @@
+const companyType = ['国有/国有控股企业', '民营/私人控股企业', '外商独资/合资企业', '上市公司', '家族企业', '高新技术企业'];
+const time = ['3年以内', '3—5年', '5—10年', '10年以上'];
+const profession = [
+  '农、林、牧、渔业',
+  '采矿业',
+  '制造业',
+  '电力、热力、燃气及水生产和供应业',
+  '建筑业',
+  '批发和零售业',
+  '交通运输、仓储和邮政业',
+  '住宿和餐饮业',
+  '信息传输、软件和信息技术服务业',
+  '金融业',
+  '房地产业',
+  '租赁和商务服务业',
+  '科学研究和技术服务业',
+  '水利、环境和公共设施管理业',
+  '居民服务、修理和其他服务业',
+  '教育',
+  '卫生和社会工作',
+  '文化、体育和娱乐业',
+  '公共管理、社会保障和社会组织',
+  '国际组织',
+  '其他',
+];
+const number = ['50人以内', '50—200人', '200—1000人', '1000人以上'];
+const parts = ['投入阶段', '成长阶段', '稳定发展阶段', '举步维艰阶段', '入不敷出阶段'];
+const order = ['前10%', '前30%', '50%左右', '后30%', '后10%', '独占/特许经营'];
+const zscqNum = ['0件', '1-3件', '3—5件', '5—10件', '10件以上'];
+const zlIn = ['300万以内', '300万—2000万', '2000万—5000万', '5000万—2亿', '2亿以上'];
+const productIn = ['1000万以内', '1000万—5000万', '5000万—2亿', '2亿以上'];
+const chargeRelation = ['合伙人', '创始人', '职业经理人', '家族企业'];
+const age = ['30岁以下', '31—35', '36—40', '41—45', '46—50', '51—55', '56—60', '60以上'];
+const edu = ['大专以下', '大专', '本科', '硕士', '博士'];
+const teckRank = ['中级以下', '中级', '副高级', '正高级', '杰青/长江学者/院士'];
+const major = ['理学', '工学', '医学', '农学'];
+const agreePer = ['90%以上', '80—90%', '60—79%', '30—59%', '30%以下'];
+const gCharge = ['有研发副总', '无研发副总,有技术总监', '无研发副总、无技术总监,有技术负责人', '无技术团队'];
+const gwNum = ['无顾问团队', '3人以下', '3—7人', '7人以上'];
+const cost1 = ['50万以下', '50—300万', '300—1000万', '1000万以上'];
+const cost2 = ['50万以下', '50—200万', '200—500万', '500万以上'];
+const cost3 = ['50万以下', '50—200万', '200万以上'];
+const costPer = ['5%以内', '5—10%', '11—30%', '31—50%', '50%以上'];
+const effect = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '10个以上'];
+const source = [
+  '产品核心技术(工艺)突破',
+  '产品专利技术更新',
+  '企业领导人的创造力',
+  '产品用户市场的需求反馈',
+  '同类产品的竞争所致',
+  '技术合作方的技术突破',
+  '一直引领行业发展',
+];
+const route = ['重视产品核心技术开发', '设计企业科技项目(技改)', '自主申报知识产权', '紧随产品市场技术需求', '购置(租用)技术研发设备'];
+const eSpeed = ['开发时间远远早于预定时间', '开发速度远远高于行业标准', '开发速度远远快于预期', '开发时间远远低于标准的产品开发时间'];
+const eQuality = ['在行业内非常具有新颖性', '为行业内新品开发提供了新创意', '开发的新产品具有创造性', '有能力来为其他的产品生成创意'];
+const eReplaceable = ['完全替代', '基本替代', '市场共存', '还需进一步研制', '市场预研'];
+const ePeriod = ['一个月内', '一个季度内', '半年内', '一年内', '二年', '三年', '三年以上'];
+const rate = ['100%', '90%', '80%', '70%', '60%', '50%', '50%以下'];
+const ePer = ['10%以内', '11—20%', '21—30%', '31—50%', '50%以上'];
+const way = ['技术开发', '委托开发', '技术合作', '技术咨询', '技术培训', '技术服务'];
+const reason = ['熟人接洽', '长期合作', '技术征集揭榜', '师生情怀', '政府对接', '线上对接', '中介机构对接', '专场对接'];
+const content = ['共同申报知识产权', '共同承担科技项目', '共建实验室', '共建技术中心', '互为教育实践基地', '共享科研设备'];
+const require = ['紧跟市场,赶超同类产品', '产品性能提高', '产品产能提高', '节能降耗', '满足特殊条件要求,实际不需要', '生产企业,无技术开发能力'];
+const use = ['无知识产权条款', '双方共用', '专利(技术)授权独占', '专利(技术)许可', '专利(技术)购买', '合作建立专利池(长期合作)'];
+const aDirect = ['10%以下', '11—30%', '31—50%', '51—80%', '80%以上'];
+const aNext = ['10%以下', '11—30%', '31—50%', '51—80%', '80%以上'];
+const aBase = ['理论研究', '技术预研', '技术储备', '工业性实验前成果'];
+const aCant = ['缺乏资金支持', '缺乏技术配套', '缺乏生产条件', '缺乏技术团队'];
+const qynbgl = ['有知识产权专职部门', '其它部门兼职管理', '委托外部机构托管', '无专职人员,但有兼职人员', '无专职兼职人员'];
+const zscqjf = ['无此类情况', '有此类情况,被质疑侵权', '有此类情况,被侵权', '有专职知识产权律师', '出口产品涉嫌侵权被海关查扣', '国外展会遭遇知识产权纠纷'];
+const zscqfzzany = ['知识产权投入太高', '知识产权激励制度不完善', '自主创新意识不强', '企业研发人员不足'];
+const zscqfzzawy = ['技术市场不健全', '政府支持力度不高', '缺乏鼓励自主创新的社会氛围', '企业间竞争不充分', '产学研合作太难', '政府对知识产权保护不力'];
+export {
+  companyType,
+  time,
+  profession,
+  number,
+  parts,
+  order,
+  zscqNum,
+  zlIn,
+  productIn,
+  chargeRelation,
+  age,
+  edu,
+  teckRank,
+  major,
+  agreePer,
+  gCharge,
+  gwNum,
+  cost1,
+  cost2,
+  cost3,
+  costPer,
+  effect,
+  source,
+  route,
+  eSpeed,
+  eQuality,
+  eReplaceable,
+  ePeriod,
+  rate,
+  ePer,
+  way,
+  reason,
+  content,
+  require,
+  use,
+  aDirect,
+  aNext,
+  aBase,
+  aCant,
+  qynbgl,
+  zscqjf,
+  zscqfzzany,
+  zscqfzzawy,
+};

+ 1 - 1
src/views/twoweb/service/question/index.vue

@@ -71,7 +71,7 @@ export default {
     // 答卷
     btn(data) {
       if (data.column == '定制问卷') {
-        this.$router.push({ path: '/twoweb/service/project', query: { id: data.id } });
+        this.$router.push({ path: '/twoweb/service/made/detail', query: { id: data.id } });
       } else {
         this.$router.push({ path: '/twoweb/service/question/detail', query: { id: data.id } });
       }