guhongwei 4 years ago
parent
commit
0b77612198

+ 110 - 5
src/views/userCenter/projectInfo/index.vue

@@ -4,7 +4,35 @@
       <el-col :span="24" class="main">
         <el-col :span="24" class="leftTop"> <span>|</span> <span>项目征集管理</span> </el-col>
         <el-col :span="24" class="info">
-          列表
+          <span v-if="display == 'list'">
+            <el-col :span="24" class="list">
+              <el-tabs v-model="active" type="card">
+                <el-tab-pane label="未参加" name="first">
+                  <data-table :fields="fields" :opera="opera" :data="oneList" :total="oneTotal" @query="search" @view="toView"></data-table>
+                </el-tab-pane>
+                <el-tab-pane label="已参加" name="second">
+                  <data-table :fields="fields" :opera="twoopera" :data="twoList" :total="twoTotal" @query="search" @view="toView"></data-table>
+                </el-tab-pane>
+              </el-tabs>
+            </el-col>
+          </span>
+          <span v-else>
+            <el-col :span="24" class="detail">
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="mini" @click="back">返回列表</el-button>
+              </el-col>
+              <el-col :span="24" class="form">
+                <el-tabs v-model="formActive" type="card">
+                  <el-tab-pane label="调研调查信息" name="first">
+                    <questionInfo :info="info"></questionInfo>
+                  </el-tab-pane>
+                  <el-tab-pane label="项目征集信息" name="second">
+                    <projectForm :form="form" @resetBtn="back" @onSubmit="onSubmit"></projectForm>
+                  </el-tab-pane>
+                </el-tabs>
+              </el-col>
+            </el-col>
+          </span>
         </el-col>
       </el-col>
     </el-row>
@@ -12,6 +40,9 @@
 </template>
 
 <script>
+import dataTable from '@/components/data-table.vue';
+import questionInfo from './parts/questionInfo.vue';
+import projectForm from './parts/projectForm.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
   metaInfo() {
@@ -19,12 +50,80 @@ export default {
   },
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    dataTable,
+    questionInfo,
+    projectForm,
+  },
   data: function() {
-    return {};
+    return {
+      // 显示
+      display: 'list',
+      // 列表
+      active: 'first',
+      opera: [
+        {
+          label: '添加项目征集信息',
+          method: 'view',
+        },
+      ],
+      twoopera: [
+        {
+          label: '修改项目征集信息',
+          method: 'view',
+        },
+      ],
+      fields: [
+        { label: '信息标题', prop: 'title' },
+        { label: '信息来源', prop: 'origin' },
+        { label: '发布时间', prop: 'create_date' },
+      ],
+      // 未参加
+      oneList: [
+        {
+          title: '标题',
+          origin: '信息来源',
+          create_date: '创建时间',
+        },
+      ],
+      oneTotal: 0,
+      // 已参加
+      twoList: [
+        {
+          title: '标题',
+          origin: '信息来源',
+          create_date: '创建时间',
+        },
+      ],
+      twoTotal: 0,
+      // 添加,修改
+      formActive: 'first',
+      // 调研调查信息
+      info: {},
+      form: {},
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    async search() {
+      console.log();
+    },
+    // 添加,修改信息
+    toView({ data }) {
+      this.display = 'detail';
+    },
+    // 提交保存
+    onSubmit({ data }) {
+      console.log(data);
+    },
+    // 返回列表
+    back() {
+      this.display = 'list';
+      this.search();
+    },
   },
-  created() {},
-  methods: {},
   computed: {
     ...mapState(['user']),
   },
@@ -48,6 +147,12 @@ export default {
   }
   .info {
     padding: 0 40px 0 10px;
+    .detail {
+      .btn {
+        text-align: right;
+        margin: 0 0 10px 0;
+      }
+    }
   }
 }
 </style>

+ 334 - 0
src/views/userCenter/projectInfo/parts/projectForm.vue

@@ -0,0 +1,334 @@
+<template>
+  <div id="projectForm">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form ref="form" :model="form" :rules="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="请输入建议单位"></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="phone">
+                <el-col :span="21" slot="label">
+                  联系电话
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.phone" placeholder="请输入联系电话"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="apply_code">
+                <el-col :span="21" slot="label">
+                  申请代码
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.apply_code" placeholder="请输入申请代码"></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>
+                    <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="techol_level">
+                <el-col :span="21" slot="label">
+                  项目技术水平
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.techol_level" filterable>
+                    <el-option v-for="(item, index) in techollevelList" :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="proposal">
+                <el-col :span="21" slot="label">
+                  建议类别
+                </el-col>
+                <el-col :span="24">
+                  <el-select v-model="form.proposal" filterable>
+                    <el-option v-for="(item, index) in proposalList" :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="scale">
+                <el-col :span="21" slot="label" style="font-size:13px">
+                  市场规模(亿元/年)
+                </el-col>
+                <el-col :span="24">
+                  <el-input v-model="form.scale" placeholder="请输入关键技术所支撑的产品市场规模"></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="project_back">
+                <el-col :span="21" slot="label">
+                  立项背景
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.project_back"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入立项背景"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="sign">
+                <el-col :span="21" slot="label">
+                  研究意义
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.sign"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入研究意义"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="work_basics">
+                <el-col :span="21" slot="label">
+                  现有工作基础
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.work_basics"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入现有工作基础"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="content">
+                <el-col :span="21" slot="label">
+                  研发内容
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.content"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入研发内容"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="crux_techol">
+                <el-col :span="21" slot="label">
+                  拟解决关键技术
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.crux_techol"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入拟解决关键技术"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="route">
+                <el-col :span="21" slot="label">
+                  技术路线
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.route"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入技术路线"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="quota">
+                <el-col :span="21" slot="label">
+                  主要考核指标
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.quota"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入主要考核指标"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="langInfo">
+              <el-form-item prop="influence">
+                <el-col :span="21" slot="label">
+                  对省行业/产业影响
+                </el-col>
+                <el-col :span="24">
+                  <el-input
+                    v-model="form.influence"
+                    type="textarea"
+                    maxlength="500"
+                    show-word-limit
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    placeholder="请输入对省行业/产业影响"
+                  ></el-input>
+                </el-col>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" class="btn">
+              <el-button type="danger" size="mini" @click="resetBtn">取消</el-button>
+              <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';
+const { mapActions: markettype } = createNamespacedHelpers('markettype');
+export default {
+  name: 'projectForm',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function() {
+    return {
+      rules: {},
+      // 所属领域
+      fieldList: [],
+      // 项目技术水平
+      techollevelList: [{ name: '国际领先' }, { name: '国际先进' }, { name: '国内领先' }, { name: '国内先进' }],
+      // 建议类别
+      proposalList: [],
+    };
+  },
+  async created() {
+    await this.searchOther();
+  },
+  methods: {
+    ...markettype(['query']),
+    async searchOther() {
+      // 所属领域;
+      let res = await this.query({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+      // 建议类别;
+      res = await this.query({ category: '07' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `proposalList`, res.data);
+      }
+    },
+    // 取消添加
+    resetBtn() {
+      this.$emit('resetBtn');
+    },
+    // 保存
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.form });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .form {
+    /deep/.el-form-item {
+      margin-bottom: 0px;
+    }
+    /deep/.el-form-item__label {
+      border: 1px solid #dcdfe6;
+    }
+    /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: 38px 0;
+    }
+    /deep/.langSelect .el-select {
+      width: 100%;
+    }
+  }
+}
+.btn {
+  text-align: center;
+  margin: 15px 0;
+}
+</style>

+ 81 - 0
src/views/userCenter/projectInfo/parts/questionInfo.vue

@@ -0,0 +1,81 @@
+<template>
+  <div id="questionInfo">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="title textOver">
+          {{ info.title }}
+        </el-col>
+        <el-col :span="24" class="other">
+          <span>发布时间:{{ info.create_date || '暂无' }}</span>
+          <span>信息来源:{{ info.origin || '暂无' }}</span>
+        </el-col>
+        <el-col :span="24" class="image">
+          <el-image :src="info.img_path"></el-image>
+        </el-col>
+        <el-col :span="24" class="content">
+          <p v-html="info.content"></p>
+        </el-col>
+        <el-col :span="24" class="link">
+          <el-link :href="info.file_path" :underline="false">附件下载</el-link>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'questionInfo',
+  props: {
+    info: { type: Object },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .title {
+    font-size: 25px;
+    padding: 15px 0;
+    text-align: center;
+  }
+  .other {
+    text-align: center;
+    font-size: 18px;
+    margin: 0 0 15px 0;
+    span {
+      padding: 0 10px;
+    }
+  }
+  .image {
+    text-align: center;
+    height: 300px;
+    margin: 0 0 15px 0;
+    .el-image {
+      width: 50%;
+      height: 300px;
+      overflow: hidden;
+    }
+  }
+  .content {
+    margin: 0 0 15px 0;
+  }
+  .link {
+    margin: 0 0 15px 0;
+    .el-link {
+      font-size: 16px;
+    }
+  }
+}
+</style>