wuhongyu 5 년 전
부모
커밋
7b48e02429
6개의 변경된 파일271개의 추가작업 그리고 35개의 파일을 삭제
  1. 78 0
      src/layout/demand/detail.vue
  2. 58 32
      src/layout/demand/fabuList.vue
  3. 8 0
      src/router/index.js
  4. 5 1
      src/views/communication/parts/demand.vue
  5. 21 2
      src/views/demand/demand.vue
  6. 101 0
      src/views/demand/index.vue

+ 78 - 0
src/layout/demand/detail.vue

@@ -0,0 +1,78 @@
+<template>
+  <div id="fabuList">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="one">
+          <span></span>
+          <span>需求发布</span>
+        </el-col>
+        <el-col :span="24">
+          <el-col :span="24" class="title"> 需求技术名称: {{ form.name }} </el-col>
+          <el-col :span="24" class="title"> 所属领域: {{ form.field }} </el-col>
+          <el-col :span="24" class="title"> 拟投入预算(万): {{ form.budget }} </el-col>
+
+          <el-col :span="24" class="title"> 需求截止日期: {{ form.enddate }} </el-col>
+
+          <el-col :span="24" class="title"> 难题或瓶颈问题: {{ form.problem }} </el-col>
+
+          <el-col :span="24" class="title"> 企业解决技术需求已具备的条件: {{ form.condition }} </el-col>
+
+          <el-col :span="24" class="title"> 合作方式: {{ form.type }} </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'fabuList',
+  props: { form: null },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  width: 100%;
+  min-height: 600px;
+  background: #fff;
+  padding: 0 20px;
+  .one {
+    height: 35px;
+    margin: 20px 0;
+    border-bottom: 1px dashed #ccc;
+    span:first-child {
+      display: inline-block;
+      width: 4px;
+      height: 20px;
+      background: #005293;
+      margin: 0 10px -3px 0;
+    }
+    span:nth-child(2) {
+      font-size: 20px;
+      color: #005293;
+      font-weight: bold;
+    }
+  }
+}
+
+.title {
+  padding: 15px 10px 15px 10px;
+}
+</style>

+ 58 - 32
src/layout/demand/fabuList.vue

@@ -7,47 +7,66 @@
           <span>需求发布</span>
         </el-col>
         <el-col :span="24">
-          <el-form ref="form" :model="form" label-width="80px">
-            <el-form-item label="需求技术名称">
-              <el-input v-model="form.name"></el-input>
+          <el-form ref="form" :model="form" label-width="120px" :rules="rules">
+            <el-form-item label="需求技术名称" prop="name">
+              <el-input :disabled="disabled" v-model="form.name" placeholder="请输入需求技术名称"></el-input>
             </el-form-item>
-
-            <el-form-item label="所属领域">
-              <el-radio-group v-model="form.resource">
-                <el-radio label="工业"></el-radio>
-                <el-radio label="农业"></el-radio>
-                <el-radio label="社会发展"></el-radio>
-                <el-radio label="医药健康"></el-radio>
+            <el-form-item label="所属领域" prop="field">
+              <el-radio-group :disabled="disabled" v-model="form.field">
+                <el-radio label="工业">工业</el-radio>
+                <el-radio label="农业">农业</el-radio>
+                <el-radio label="社会发展">社会发展</el-radio>
+                <el-radio label="医疗健康">医疗健康</el-radio>
               </el-radio-group>
             </el-form-item>
-            <el-form-item label="拟投入预算(万)">
-              <el-input v-model="form.name"></el-input>
+            <el-form-item label="拟投入预算(万)">
+              <el-input :disabled="disabled" v-model="form.budget" placeholder="请输入拟投入预算(万)"></el-input>
             </el-form-item>
-
-            <el-form-item label="需求截止日期">
-              <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
+            <el-form-item label="需求截止日期" prop="enddate">
+              <el-date-picker :disabled="disabled" v-model="form.enddate" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" placeholder="请选择日期">
+              </el-date-picker>
             </el-form-item>
-
             <el-form-item label="难题或瓶颈问题">
-              <el-input type="textarea" v-model="form.desc"></el-input>
+              <el-input
+                :disabled="disabled"
+                v-model="form.problem"
+                type="textarea"
+                placeholder="阐述在生产经营、项目建设、科研活动、产业化方向中遇到的技术难题或瓶颈问题及需达到的技术指标"
+              ></el-input>
             </el-form-item>
-
             <el-form-item label="企业解决技术需求已具备的条件">
-              <el-input type="textarea" v-model="form.desc"></el-input>
+              <el-input
+                :disabled="disabled"
+                v-model="form.condition"
+                type="textarea"
+                placeholder="企业承接成果、技术所具备的技术人员、设备、资金等基础条件及其他配套条件"
+              ></el-input>
             </el-form-item>
-
-            <el-form-item label="合作方式">
-              <el-radio-group v-model="form.resource">
-                <el-radio label="技术转让"></el-radio>
-                <el-radio label="技术服务"></el-radio>
-                <el-radio label="技术许可"></el-radio>
-                <el-radio label="技术融资"></el-radio>
-                <el-radio label="其他"></el-radio>
+            <el-form-item label="合作方式" prop="type">
+              <el-radio-group :disabled="disabled" v-model="form.type">
+                <el-radio label="技术转让">技术转让</el-radio>
+                <el-radio label="技术服务">技术服务</el-radio>
+                <el-radio label="技术许可">技术许可</el-radio>
+                <el-radio label="技术融资">技术融资</el-radio>
+                <el-radio label="其他">其他</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="是否在网页显示" prop="is_display">
+              <el-radio-group :disabled="disabled" v-model="form.is_display">
+                <el-radio label="0">是</el-radio>
+                <el-radio label="1">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="状态" prop="status">
+              <el-radio-group :disabled="disabled" v-model="form.status">
+                <el-radio label="0">保存草稿</el-radio>
+                <el-radio label="1">提交审核</el-radio>
+                <el-radio label="2" v-if="user.type === '0' || user.type === '1'">审核通过</el-radio>
+                <el-radio label="3" v-if="user.type === '0' || user.type === '1'">审核拒绝</el-radio>
               </el-radio-group>
             </el-form-item>
-
             <el-form-item>
-              <el-button type="primary" @click="onSubmit">发布</el-button>
+              <el-button type="primary" @click="onSubmit()">需求发布</el-button>
             </el-form-item>
           </el-form>
         </el-col>
@@ -63,13 +82,20 @@ export default {
   props: { form: null },
   components: {},
   data: function() {
-    return {};
+    return {
+      disabled: false,
+      rules: {
+        name: [{ required: true, message: '请输入需求技术名称', trigger: 'blur' }],
+        field: [{ required: true, message: '请选择所属领域', trigger: 'blur' }],
+        is_display: [{ required: true, message: '请选择是否在网页显示', trigger: 'blur' }],
+        status: [{ required: true, message: '请选择状态', trigger: 'blur' }],
+        type: [{ required: true, message: '请选择合作方式', trigger: 'blur' }],
+      },
+    };
   },
   created() {},
   methods: {
     onSubmit() {
-      console.log('submit!');
-
       this.$emit('submit', this.form);
     },
   },

+ 8 - 0
src/router/index.js

@@ -70,6 +70,14 @@ const routes = [
     component: () => import('../views/demand/demand.vue'),
   },
 
+  //发布需求详情
+
+  {
+    path: '/demand/index',
+    meta: { title: '发布需求', subSite: true },
+    component: () => import('../views/demand/index.vue'),
+  },
+
   {
     path: '/achievement/index',
     meta: { title: '成果展示', subSite: true },

+ 5 - 1
src/views/communication/parts/demand.vue

@@ -6,7 +6,7 @@
         <span>需求发布</span>
       </el-col>
       <el-col :span="24" class="info">
-        <el-col :span="24" v-for="(item, index) in demandlist" :key="index" class="list">
+        <el-col :span="24" v-for="(item, index) in demandlist" :key="index" class="list" @click.native="xuqiu(item)">
           <span></span>
           <span class="textOver">{{ item.name }}</span>
           <span>{{ item.meta | getDate }}</span>
@@ -42,6 +42,10 @@ export default {
       const res = await this.query({ skip: 0, limit: 16, ...info });
       this.$set(this, `demandlist`, res.data);
     },
+
+    xuqiu(item) {
+      this.$router.push({ path: '/demand/index', query: { id: item.id } });
+    },
   },
   filters: {
     getDate(meta) {

+ 21 - 2
src/views/demand/demand.vue

@@ -32,8 +32,8 @@ import top from '@/layout/common/top.vue';
 import menus from '@/layout/common/menus.vue';
 import foot from '@/layout/common/foot.vue';
 import fabuList from '@/layout/demand/fabuList.vue';
-
 import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: demand } = createNamespacedHelpers('demand');
 export default {
   name: 'login',
   props: {},
@@ -50,7 +50,26 @@ export default {
   },
   created() {},
   methods: {
-    submit() {},
+    ...demand(['update', 'fetch', 'query', 'create', 'delete']),
+    async submit() {
+      let res = {};
+      let data = JSON.parse(JSON.stringify(this.form));
+      if (data.id) {
+        res = await this.update(data);
+      } else {
+        data.uid = this.user.uid;
+        res = await this.create(data);
+      }
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息创建成功',
+          type: 'success',
+        });
+        this.display = true;
+      } else {
+        this.$message.error('信息创建失败');
+      }
+    },
   },
   computed: {
     ...mapState(['user']),

+ 101 - 0
src/views/demand/index.vue

@@ -0,0 +1,101 @@
+<template>
+  <div id="login">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top></top>
+        </el-col>
+        <el-col :span="24" class="menu">
+          <div class="w_1200">
+            <menus></menus>
+          </div>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="info">
+              <detail :form="form"></detail>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24" class="foot">
+          <div class="w_1200">
+            <foot></foot>
+          </div>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/top.vue';
+import menus from '@/layout/common/menus.vue';
+import foot from '@/layout/common/foot.vue';
+import detail from '@/layout/demand/detail.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: demand } = createNamespacedHelpers('demand');
+export default {
+  name: 'login',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+    detail,
+  },
+  data: function() {
+    return {
+      form: {},
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...demand(['update', 'fetch', 'query', 'create', 'delete']),
+
+    async search() {
+      console.log(this.id);
+
+      let res = await this.fetch(this.id);
+      this.$set(this, `form`, res.data);
+    },
+  },
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.style {
+  .menu {
+    height: 70px;
+    margin: 0 0 10px 0;
+  }
+  .main {
+    min-height: 600px;
+    margin: 0 0 10px 0;
+  }
+  .info {
+    background-color: #fff;
+    min-height: 600px;
+  }
+  .foot {
+    height: 135px;
+  }
+}
+</style>