guhongwei 4 vuotta sitten
vanhempi
commit
bc6924bb55

+ 91 - 79
package-lock.json

@@ -1161,6 +1161,11 @@
       "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=",
       "dev": true
     },
+    "@stomp/stompjs": {
+      "version": "5.4.4",
+      "resolved": "https://registry.npmjs.org/@stomp/stompjs/-/stompjs-5.4.4.tgz",
+      "integrity": "sha512-RIzQ7MLRSJLUpTHcje1ZclnHH982amJSKC9bDxGO0wyu5OF9ROuuiLf7TxKxo1zUu7lGEYNedg9SEi87uMWDqg=="
+    },
     "@types/anymatch": {
       "version": "1.3.1",
       "resolved": "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz",
@@ -1698,16 +1703,6 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
         "cacache": {
           "version": "13.0.1",
           "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz",
@@ -1734,53 +1729,6 @@
             "unique-filename": "^1.1.1"
           }
         },
-        "chalk": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
@@ -1797,16 +1745,6 @@
             "minipass": "^3.1.1"
           }
         },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
         "terser-webpack-plugin": {
           "version": "2.3.8",
           "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1610194262897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz",
@@ -1823,18 +1761,6 @@
             "terser": "^4.6.12",
             "webpack-sources": "^1.4.3"
           }
-        },
-        "vue-loader-v16": {
-          "version": "npm:vue-loader@16.1.2",
-          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
-          "integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chalk": "^4.1.0",
-            "hash-sum": "^2.0.0",
-            "loader-utils": "^2.0.0"
-          }
         }
       }
     },
@@ -11343,6 +11269,87 @@
         }
       }
     },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.1.2",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
+      "integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
     "vue-meta": {
       "version": "2.4.0",
       "resolved": "https://registry.npm.taobao.org/vue-meta/download/vue-meta-2.4.0.tgz",
@@ -11402,6 +11409,11 @@
       "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.6.2.tgz",
       "integrity": "sha1-I2vAhqhww655lG8QfxbeWdWJXnE="
     },
+    "wangeditor": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/wangeditor/-/wangeditor-3.1.1.tgz",
+      "integrity": "sha1-+9PB1JdpI8nt67hbKdMLNVEq0Dk="
+    },
     "watchpack": {
       "version": "1.7.5",
       "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.5.tgz?cache=0&sync_timestamp=1607687503110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz",

+ 2 - 1
package.json

@@ -22,7 +22,8 @@
     "vue-awesome-swiper": "^4.1.1",
     "vue-meta": "^2.4.0",
     "vue-router": "^3.2.0",
-    "vuex": "^3.4.0"
+    "vuex": "^3.4.0",
+    "wangeditor": "^3.1.1"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "~4.5.0",

+ 19 - 43
src/components/list/list-model/model-5.vue

@@ -1,17 +1,13 @@
 <template>
   <div id="model-5">
-    <el-col :span="24" class="infoLeftList" v-for="(item, index) in list" :key="index">
-      <el-col :span="4" class="date">
-        <span>{{ item.p1 || '暂无' }}</span>
+    <el-col :span="24" class="infoLeftList" v-for="(item, index) in list" :key="index" @click.native="clickDetail(item.id)">
+      <el-col :span="20" class="title textOver">
+        {{ item.p1 }}
       </el-col>
-      <el-col :span="20" class="info" @click.native="clickDetail(item.id)">
-        <el-col :span="24" class="title textOver">
-          {{ item.p2 }}
-        </el-col>
-        <el-col :span="24" class="brief">
-          {{ item.p3 || '暂无' }}
-        </el-col>
+      <el-col :span="4" class="date">
+        {{ item.p2 || '暂无' }}
       </el-col>
+      <el-col :span="24" class="orgin"> 信息来源:{{ item.p3 || '暂无' }} </el-col>
     </el-col>
   </div>
 </template>
@@ -51,37 +47,19 @@ export default {
 
 <style lang="less" scoped>
 .infoLeftList {
-  width: 97%;
-  padding: 9px 0;
-  border-bottom: 1px dashed #ccc;
+  border-bottom: 1px dashed #000;
+  padding: 11px 0;
+  .title {
+    font-size: 18px;
+    font-weight: bold;
+  }
   .date {
-    text-align: center;
-    margin: 6px 0 0 0;
-    span {
-      background-color: #22529a;
-      color: #fff;
-      font-size: 18px;
-      border-radius: 5px;
-      padding: 3px 7px;
-    }
+    text-align: right;
+    font-size: 18px;
   }
-  .info {
-    .title {
-      font-size: 18px;
-      font-weight: bold;
-      padding: 5px 0 0 0;
-    }
-    .brief {
-      font-size: 14px;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      -webkit-line-clamp: 2;
-      word-break: break-all;
-      display: -webkit-box;
-      -webkit-box-orient: vertical;
-      padding: 5px 0 0 0;
-      height: 43px;
-    }
+  .orgin {
+    font-size: 18px;
+    margin: 10px 0 0 0;
   }
 }
 .infoLeftList:last-child {
@@ -89,10 +67,8 @@ export default {
 }
 .infoLeftList:hover {
   cursor: pointer;
-  .info {
-    .title {
-      color: #409eff;
-    }
+  .title {
+    color: #409eff;
   }
 }
 </style>

+ 5 - 0
src/store/index.js

@@ -32,6 +32,9 @@ import interview from '@common/src/store/interview';
 // 技术新闻
 import column from '@common/src/store/column';
 import news from '@common/src/store/news';
+// 调研调查
+import question from '@common/src/store/question';
+import projectsolic from '@common/src/store/projectsolic';
 // 建言献策,网上调查
 import survey from '@common/src/store/survey';
 // 统计
@@ -65,6 +68,8 @@ export default new Vuex.Store({
     interview,
     column,
     news,
+    question,
+    projectsolic,
     category,
     code,
     place,

+ 0 - 1
src/views/dynamic/parts/achieveCom.vue

@@ -44,7 +44,6 @@ export default {
       let res = await this.query('patent');
       if (this.$checkRes(res)) {
         let viewData = res.data.map(i => i.name);
-        console.log(viewData);
         this.myChart = echarts.init(document.getElementById('patentData'));
         const option = {
           title: {},

+ 15 - 8
src/views/techolchat/index.vue

@@ -5,7 +5,7 @@
         <div class="w_1200">
           <el-col :span="24" class="one">
             <el-col :span="12" class="left">
-              <question :questionList="wjdcList"></question>
+              <question :questionList="questionList"></question>
             </el-col>
             <el-col :span="12" class="right">
               <work :workList="hyyjList"></work>
@@ -56,6 +56,7 @@ import jbyx from './gzcy/jbyx.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: column } = createNamespacedHelpers('column');
 const { mapActions: news } = createNamespacedHelpers('news');
+const { mapActions: mapQuestion } = createNamespacedHelpers('question');
 export default {
   metaInfo() {
     return { title: this.$route.meta.title };
@@ -105,8 +106,8 @@ export default {
       jbyxdialog: false,
       // 栏目列表
       columnList: [],
-      // 调查问卷
-      wjdcList: [],
+      // 调研调
+      questionList: [],
       // 行业研究
       hyyjList: [],
     };
@@ -118,12 +119,18 @@ export default {
   methods: {
     ...column({ columnQuery: 'query' }),
     ...news(['query']),
+    ...mapQuestion({ questionQuery: 'query' }),
     async search({ skip = 0, limit = 5, ...info } = {}) {
-      for (const val of this.columnList) {
-        let res = await this.query({ skip, limit, column_id: val.id, ...info });
-        if (this.$checkRes(res)) {
-          if (this[`${val.site}List`]) this.$set(this, `${val.site}List`, res.data);
-        }
+      // 行业研究
+      let column = this.columnList.find(i => i.site == 'hyyj');
+      let res = await this.query({ skip, limit, column_id: column.id, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `${column.site}List`, res.data);
+      }
+      // 调研调查
+      res = await this.questionQuery({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `questionList`, res.data);
       }
     },
     async searchOther() {

+ 19 - 41
src/views/techolchat/index/question.vue

@@ -6,22 +6,14 @@
           <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
         </el-col>
         <el-col :span="24" class="down">
-          <el-col
-            :span="24"
-            class="expertList"
-            v-for="(item, index) in questionList"
-            :key="index"
-            @click.native="$router.push({ path: './list', query: { index: 0, id: item._id } })"
-          >
-            <el-col :span="4" class="date">
-              <span>{{ item.publish_time || '暂无' }}</span>
-            </el-col>
+          <el-col :span="24" class="list" v-for="(item, index) in questionList" :key="index" @click.native="detailBtn(item)">
             <el-col :span="20" class="title textOver">
               {{ item.title }}
             </el-col>
-            <el-col :span="24" class="brief">
-              {{ item.titlejj || '暂无' }}
+            <el-col :span="4" class="date">
+              {{ item.create_date || '暂无' }}
             </el-col>
+            <el-col :span="24" class="orgin"> 信息来源:{{ item.origin || '暂无' }} </el-col>
           </el-col>
         </el-col>
       </el-col>
@@ -46,7 +38,7 @@ export default {
   data: function() {
     return {
       topInfo: {
-        title: '调查问卷',
+        title: '调研调查',
         engTitle: 'question',
       },
     };
@@ -57,6 +49,10 @@ export default {
     moreBtn() {
       this.$router.push({ path: '/techolchat/list', query: { index: 0 } });
     },
+    // 详情
+    detailBtn(data) {
+      this.$router.push({ path: './list', query: { index: 0, id: data._id } });
+    },
   },
   computed: {
     ...mapState(['user']),
@@ -73,41 +69,23 @@ export default {
   .down {
     height: 450px;
     position: relative;
-    .expertList {
+    .list {
       border-bottom: 1px dashed #000;
-      padding: 10px 0;
-      .date {
-        text-align: center;
-        span {
-          background: #044b79;
-          padding: 2px 5px 4px 5px;
-          font-size: 14px;
-          border-radius: 5px;
-          font-weight: bold;
-          color: #fff;
-        }
-      }
+      padding: 11px 0;
       .title {
         font-size: 16px;
         font-weight: bold;
-        padding: 0 0 0 5px;
       }
-      .brief {
-        font-size: 14px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        -webkit-line-clamp: 2;
-        word-break: break-all;
-        display: -webkit-box;
-        -webkit-box-orient: vertical;
-        padding: 5px 0 0 0;
-        height: 43px;
+      .date {
+        text-align: right;
+        font-size: 16px;
+      }
+      .orgin {
+        font-size: 16px;
+        margin: 10px 0 0 0;
       }
     }
-    .expertList:last-child {
-      border-bottom: none;
-    }
-    .expertList:hover {
+    .list:hover {
       cursor: pointer;
       .title {
         color: #409eff;

+ 1 - 1
src/views/techolchat/list.vue

@@ -40,7 +40,7 @@ export default {
     return {
       component: '',
       menuList: [
-        { name: '调查问卷', component: 'question', options: { useTab: false, useSearch: false, listModel: 5 } },
+        { name: '调研调查', component: 'question', options: { useTab: false, useSearch: false, listModel: 5 } },
         { name: '行业研究', component: 'work', options: { useTab: false, useSearch: false, listModel: 6 } },
         { name: '科技服务', options: { useTab: false, useSearch: false, listModel: 2 } },
         { name: '会展服务', component: 'serve', options: { useTab: false, useSearch: false, listModel: 2 }, indent: 1 },

+ 43 - 78
src/views/techolchat/list/detail-model/model-1.vue

@@ -7,46 +7,61 @@
     </el-row>
     <el-row>
       <el-col :span="24" class="main">
-        <div class="detailtop">
-          <span>{{ data.title }}</span>
-        </div>
-        <div class="detailtopleft">
-          <span>时间:{{ data.publish_time }}&nbsp;&nbsp;&nbsp;&nbsp;来源:{{ data.origin }}</span>
-        </div>
-
-        <div class="detailimage" v-if="data.picture">
-          <img :src="data.picture" class="detailimg" />
-        </div>
-        <div class="detailvideo" v-if="data.filepath">
-          <video :src="data.filepath" controls="controls">
-            您的浏览器不支持 video 标签。
-          </video>
-        </div>
-        <div class="detailcontext">
-          <p v-html="data.content"></p>
-        </div>
-        <!-- <div class="development">
-          <p>功能开发中</p>
-          <p>功能实现流程:<span>问诊记录展示</span>-<span>在线咨询</span>-<span>专家在线问诊</span></p>
-        </div> -->
+        <el-col :span="24" class="title">
+          2022年度吉林省科技发展计划高新技术领域项目建议书
+        </el-col>
+        <el-col :span="24">
+          <el-tabs v-model="active" type="card">
+            <el-tab-pane label="通知正文" name="first">
+              <questionInfo :info="data"></questionInfo>
+            </el-tab-pane>
+            <el-tab-pane label="信息填报" name="second">
+              <projectForm :form="form" @onSubmit="onSubmit"></projectForm>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
       </el-col>
     </el-row>
   </div>
 </template>
 
 <script>
+import questionInfo from './parts/questionInfo.vue';
+import projectForm from './parts/projectForm.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: projectsolic } = createNamespacedHelpers('projectsolic');
 export default {
   name: 'model-1',
   props: {
     data: { type: Object, default: () => {} },
   },
-  components: {},
+  components: {
+    questionInfo,
+    projectForm,
+  },
   data: function() {
-    return {};
+    return {
+      active: 'first',
+      form: {},
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    ...projectsolic(['create']),
+    async onSubmit({ data }) {
+      data.question_id = this.data._id;
+      // data.user_id = this.user.userid;
+      let res = await this.create(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '数据添加成功',
+          type: 'success',
+        });
+        this.form = {};
+        this.active = 'first';
+      }
+    },
+  },
   computed: {
     ...mapState(['user', 'menuParams']),
     pageTitle() {
@@ -61,60 +76,10 @@ export default {
 
 <style lang="less" scoped>
 .main {
-  .detailtop {
-    padding: 20px 0px;
-    font-size: 18px;
-    line-height: 40px;
-    font-weight: normal;
-    text-align: left;
-    margin: 0;
+  .title {
+    font-size: 25px;
+    margin: 40px 0;
     text-align: center;
-    color: #005293;
-  }
-  .detailtopleft {
-    text-align: center;
-    padding: 0 0 10px 0;
-    border-bottom: 1px solid #ccc;
-    font-size: 16px;
-    color: #666666;
-  }
-  .detailimage {
-    text-align: center;
-    padding: 20px 0 0 0;
-  }
-  .detailimg {
-    width: 500px;
-    height: 300px;
-  }
-  .detailvideo {
-    text-align: center;
-    padding: 10px 0;
-    video {
-      width: 100%;
-      height: 460px;
-    }
-  }
-  .detailcontext {
-    padding: 20px 0;
-    min-height: 370px;
-  }
-  .development {
-    height: 50px;
-    border: 1px dashed red;
-    padding: 0 30px;
-    p:first-child {
-      text-align: center;
-      font-size: 18px;
-      color: red;
-      font-weight: bold;
-    }
-    p:last-child {
-      text-align: center;
-      height: 25px;
-      line-height: 25px;
-      font-size: 16px;
-      font-weight: bold;
-    }
   }
 }
 </style>

+ 438 - 0
src/views/techolchat/list/detail-model/parts/projectForm.vue

@@ -0,0 +1,438 @@
+<template>
+  <div id="projectForm">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-form :model="form" :rules="rules" ref="form" label-width="125px">
+          <el-col :span="24" class="one">
+            <el-col :span="24" class="txt">
+              <span> 项目基本信息</span>
+            </el-col>
+            <el-col :span="24" class="info">
+              <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="pro_user">
+                  <el-col :span="21" slot="label">
+                    项目负责人:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.pro_user" placeholder="请输入项目负责人"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item prop="pro_phone">
+                  <el-col :span="21" slot="label">
+                    联系电话:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.pro_phone" placeholder="请输入联系电话"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="langSelect">
+                <el-form-item prop="techol_stage">
+                  <el-col :span="21" slot="label">
+                    技术阶段:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-select v-model="form.techol_stage" filterable>
+                      <el-option v-for="(item, index) in techolstageList" :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="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">
+                <el-form-item prop="scale">
+                  <el-col :span="21" slot="label">
+                    市场预估:
+                  </el-col>
+                  <el-col :span="24">
+                    <p>关键技术所支撑的产品市场规模<el-input v-model.number="form.scale" class="scale"></el-input>(亿元/年)</p>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="one">
+            <el-col :span="24" class="txt">
+              <span>项目建议单位</span>
+            </el-col>
+            <el-col :span="24" class="info">
+              <el-col :span="24">
+                <el-form-item prop="proposal_company">
+                  <el-col :span="21" slot="label">
+                    建议单位名称:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.proposal_company" placeholder="请输入建议单位名称"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item prop="proposal_user">
+                  <el-col :span="21" slot="label">
+                    联系人:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.proposal_user" placeholder="请输入联系人"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item prop="proposal_phone">
+                  <el-col :span="21" slot="label">
+                    联系电话:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.proposal_phone" placeholder="请输入联系电话"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="one">
+            <el-col :span="24" class="txt">
+              <span>主要合作单位</span>
+            </el-col>
+            <el-col :span="24" class="info">
+              <el-col :span="24">
+                <el-form-item prop="coopera_company">
+                  <el-col :span="21" slot="label">
+                    合作单位名称:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.coopera_company" placeholder="请输入合作单位名称"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item prop="coopera_user">
+                  <el-col :span="21" slot="label">
+                    联系人:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.coopera_user" placeholder="请输入联系人"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item prop="coopera_phone">
+                  <el-col :span="21" slot="label">
+                    联系电话:
+                  </el-col>
+                  <el-col :span="24">
+                    <el-input v-model="form.coopera_phone" placeholder="请输入联系电话"></el-input>
+                  </el-col>
+                </el-form-item>
+              </el-col>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="one">
+            <el-col :span="24" class="txt">
+              <span>项目内容简介</span>
+            </el-col>
+            <el-col :span="24" class="info">
+              <el-col :span="24" class="langInfo">
+                <el-col :span="24" class="title">
+                  <span><sup style="color:#ff0000">*</sup>立项背景</span>(含解决“卡脖子”技术问题及在行业中所处的地位和作用):</el-col
+                >
+                <el-col :span="24" class="textarea">
+                  <el-form-item prop="sign">
+                    <el-input
+                      v-model="form.sign"
+                      type="textarea"
+                      maxlength="500"
+                      show-word-limit
+                      :autosize="{ minRows: 5, maxRows: 5 }"
+                      placeholder="请输入立项背景(含解决“卡脖子”技术问题及在行业中所处的地位和作用)"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="langInfo">
+                <el-col :span="24" class="title">
+                  <span><sup style="color:#ff0000">*</sup>前期基础</span>(含知识产权状况):</el-col
+                >
+                <el-col :span="24" class="textarea">
+                  <el-form-item prop="work_basics">
+                    <el-input
+                      v-model="form.work_basics"
+                      type="textarea"
+                      maxlength="500"
+                      show-word-limit
+                      :autosize="{ minRows: 5, maxRows: 5 }"
+                      placeholder="请输入前期基础(含知识产权状况)"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="langInfo">
+                <el-col :span="24" class="title">
+                  <span><sup style="color:#ff0000">*</sup>研究内容</span>(含项目创新点):</el-col
+                >
+                <el-col :span="24" class="textarea">
+                  <el-form-item prop="content">
+                    <el-input
+                      v-model="form.content"
+                      type="textarea"
+                      maxlength="500"
+                      show-word-limit
+                      :autosize="{ minRows: 5, maxRows: 5 }"
+                      placeholder="请输入研究内容(含项目创新点)"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="langInfo">
+                <el-col :span="24" class="title">
+                  <span><sup style="color:#ff0000">*</sup>技术路线</span>(含拟解决关键技术):</el-col
+                >
+                <el-col :span="24" class="textarea">
+                  <el-form-item prop="route">
+                    <el-input
+                      v-model="form.route"
+                      type="textarea"
+                      maxlength="500"
+                      show-word-limit
+                      :autosize="{ minRows: 5, maxRows: 5 }"
+                      placeholder="请输入技术路线(含拟解决关键技术)"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="langInfo">
+                <el-col :span="24" class="title">
+                  <span><sup style="color:#ff0000">*</sup>核心指标</span>(要求可量化、可考核、可检测):</el-col
+                >
+                <el-col :span="24" class="textarea">
+                  <el-form-item prop="quota">
+                    <el-input
+                      v-model="form.quota"
+                      type="textarea"
+                      maxlength="500"
+                      show-word-limit
+                      :autosize="{ minRows: 5, maxRows: 5 }"
+                      placeholder="请输入核心指标(要求可量化、可考核、可检测)"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="langInfo">
+                <el-col :span="24" class="title">
+                  <span><sup style="color:#ff0000">*</sup>经济效益</span>(含市场分析和产业化预期):</el-col
+                >
+                <el-col :span="24" class="textarea">
+                  <el-form-item prop="influence">
+                    <el-input
+                      v-model="form.influence"
+                      type="textarea"
+                      maxlength="500"
+                      show-word-limit
+                      :autosize="{ minRows: 5, maxRows: 5 }"
+                      placeholder="请输入经济效益(含市场分析和产业化预期)"
+                    ></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-col>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="btn">
+            <el-button type="primary" size="mini" @click="onSreser('form')">保存</el-button>
+            <el-button type="success" size="mini" @click="onSubmit('form')">提交</el-button>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'projectForm',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function() {
+    return {
+      rules: {
+        name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
+        pro_user: [{ required: true, message: '请输入项目负责人', trigger: 'blur' }],
+        pro_phone: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
+        techol_stage: [{ required: true, message: '请输入技术阶段', trigger: 'change' }],
+        techol_level: [{ required: true, message: '请输入技术水平', trigger: 'change' }],
+        field: [{ required: true, message: '请输入领域分类', trigger: 'change' }],
+        scale: [{ required: true, message: '请输入市场预估', trigger: 'blur' }],
+        proposal_company: [{ required: true, message: '请输入建议单位名称', trigger: 'blur' }],
+        proposal_user: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
+        proposal_phone: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
+        sign: [{ required: true, message: '请输入立项背景(含解决“卡脖子”技术问题及在行业中所处的地位和作用)', trigger: 'blur' }],
+        work_basics: [{ required: true, message: '请输入前期基础(含知识产权状况)', trigger: 'blur' }],
+        content: [{ required: true, message: '请输入研究内容(含项目创新点)', trigger: 'blur' }],
+        route: [{ required: true, message: '请输入技术路线(含拟解决关键技术)', trigger: 'blur' }],
+        quota: [{ required: true, message: '请输入核心指标(要求可量化、可考核、可检测)', trigger: 'blur' }],
+        influence: [{ required: true, message: '请输入经济效益(含市场分析和产业化预期)', trigger: 'blur' }],
+        // coopera_company: [{ required: false, message: '请输入合作单位名称', trigger: 'blur' }],
+        // coopera_user: [{ required: false, message: '请输入联系人', trigger: 'blur' }],
+        // coopera_phone: [{ required: false, message: '请输入联系电话', trigger: 'blur' }],
+      },
+      // 领域分类
+      fieldList: [{ name: '新材料' }, { name: '先进制造' }, { name: '光电子' }, { name: '新一代信息技术' }, { name: '先进技术' }],
+      techolstageList: [{ name: '理论研究' }, { name: '小试' }, { name: '中试' }, { name: '规模化试制' }, { name: '其他' }],
+      // 项目技术水平
+      techollevelList: [{ name: '国际领先' }, { name: '国际先进' }, { name: '国内领先' }, { name: '国内先进' }],
+    };
+  },
+  created() {},
+  methods: {
+    onSreser(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          let data = this.form;
+          data.status = '0';
+          this.$alert(
+            '<strong><p>1:用户</p><p>当您进行项目征集时,系统会自动提取项目负责人和联系电话进行平台用户注册,您可用【联系电话】和【初始密码(111111)】进行登录。</p><p>2:保存按钮</p><p>保存按钮,是您填写的信息处于草稿状态,您可到个人中心查看并进行修改与提交。</p></strong>',
+            '信息提示',
+            {
+              dangerouslyUseHTMLString: true,
+              showConfirmButton: true,
+              showCancelButton: true,
+              confirmButtonText: '确定',
+              cancelButtonText: '取消',
+            }
+          )
+            .then(() => {
+              this.$emit('onSubmit', { data });
+            })
+            .catch(() => {});
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    onSubmit(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          let data = this.form;
+          data.status = '1';
+          this.$alert(
+            '<strong><p>1:用户</p><p>当您进行项目征集时,系统会自动提取项目负责人和联系电话进行平台用户注册,您可用【联系电话】和【初始密码(111111)】进行登录。</p><p>2:保存按钮</p><p>保存按钮,是您填写的信息处于草稿状态,您可到个人中心查看并进行修改与提交。</p></strong>',
+            '信息提示',
+            {
+              dangerouslyUseHTMLString: true,
+              showConfirmButton: true,
+              showCancelButton: true,
+              confirmButtonText: '确定',
+              cancelButtonText: '取消',
+            }
+          )
+            .then(() => {
+              this.$emit('onSubmit', { data });
+            })
+            .catch(() => {});
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  margin: 15px 0 0 0;
+  .one {
+    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;
+      /deep/.langSelect .el-select {
+        width: 100%;
+      }
+      .scale {
+        width: 18%;
+        margin: 0 5px;
+        /deep/.el-input__inner {
+          padding: 0 5px;
+        }
+      }
+      .langInfo {
+        margin: 0 0 10px 0;
+        .title {
+          font-size: 14px;
+          color: #606266;
+          padding: 10px 0;
+          span {
+            font-size: 18px;
+            font-weight: bold;
+          }
+        }
+        /deep/.el-form-item__content {
+          margin-left: 0px !important;
+        }
+      }
+    }
+  }
+  .btn {
+    text-align: center;
+    padding: 10px 0;
+  }
+}
+</style>

+ 88 - 0
src/views/techolchat/list/detail-model/parts/questionInfo.vue

@@ -0,0 +1,88 @@
+<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" v-if="info.img_path">
+          <el-image :src="info.img_path">
+            <div slot="error" class="image-slot">
+              <i class="el-icon-picture-outline"></i></div
+          ></el-image>
+        </el-col>
+        <el-col :span="24" class="content">
+          <p v-html="info.content"></p>
+        </el-col>
+        <el-col :span="24" class="link" v-if="info.file_path">
+          <el-link :href="info.file_path" :underline="false">附件:2022年度吉林省科技发展计划高新技术领域项目建议书编写提纲。</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;
+    color: #005293;
+  }
+  .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;
+    p {
+      font-size: 18px;
+    }
+  }
+  .link {
+    margin: 0 0 15px 0;
+    .el-link {
+      font-size: 16px;
+    }
+  }
+}
+</style>

+ 5 - 15
src/views/techolchat/list/question.vue

@@ -14,8 +14,7 @@
 <script>
 import listPage from '@c/list/list-page.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
-const { mapActions: column } = createNamespacedHelpers('column');
-const { mapActions: news } = createNamespacedHelpers('news');
+const { mapActions: mapQuestion } = createNamespacedHelpers('question');
 export default {
   name: 'question',
   props: ['listModel'],
@@ -34,15 +33,13 @@ export default {
     };
   },
   async created() {
-    await this.searchOther();
     await this.search();
   },
   methods: {
-    ...column({ columnQuery: 'query' }),
-    ...news(['query', 'fetch']),
+    ...mapQuestion(['query', 'fetch']),
     async search({ skip = 0, limit = 10, ...info } = {}) {
       // TODO: 查询
-      let res = await this.query({ skip, limit, column_id: this.column.id, ...info });
+      let res = await this.query({ skip, limit, ...info });
       if (this.$checkRes(res)) {
         this.$set(this, `list`, res.data);
         this.$set(this, `total`, res.total);
@@ -54,7 +51,8 @@ export default {
       const list = data.map(i => {
         const obj = { id: i.id || i._id };
         obj.p1 = _.get(i, 'title');
-        obj.p2 = _.get(i, 'publish_time');
+        obj.p2 = _.get(i, 'create_date');
+        obj.p3 = _.get(i, 'origin');
         return obj;
       });
       return list;
@@ -66,14 +64,6 @@ export default {
         this.$set(this, `detail`, res.data);
       }
     },
-    // 查询其他
-    async searchOther() {
-      let res = await this.columnQuery();
-      if (this.$checkRes(res)) {
-        let column = res.data.find(i => i.site == 'wjdc');
-        if (column) this.$set(this, `column`, column);
-      }
-    },
   },
   computed: {
     ...mapState(['user', 'menuParams']),

+ 3 - 3
vue.config.js

@@ -30,15 +30,15 @@ module.exports = {
         ws: false,
       },
       '/files': {
-        target: 'http://free.liaoningdoupo.com',
+        target: 'http://broadcast.waityou24.cn',
       },
       '/api': {
-        target: 'http://192.168.1.118', //http://broadcast.waityou24.cn
+        target: 'http://broadcast.waityou24.cn', //http://broadcast.waityou24.cn
         changeOrigin: true,
         ws: false,
       },
       '/site': {
-        target: 'http://192.168.1.118', //http://broadcast.waityou24.cn
+        target: 'http://broadcast.waityou24.cn', //http://broadcast.waityou24.cn
         changeOrigin: true,
         ws: false,
       },