guhongwei 3 年之前
父節點
當前提交
8adbdfa7c6

+ 2 - 0
src/views/adminCenter/adminCate/dataInfo.vue

@@ -62,6 +62,8 @@ export default {
         // 基本信息
         basic: {
           achieve_type: [],
+          achieve_form: [],
+          achieve_influence: [],
         },
         // 信息简介
         brief: {},

+ 23 - 10
src/views/adminCenter/adminCate/detail.vue

@@ -19,14 +19,14 @@
             </el-steps>
           </el-col>
           <el-col :span="24" class="form">
-            <one :form="form" @next="next('2')" v-if="active == '1'"></one>
-            <two :form="form" @up="up('1')" @next="next('3')" v-else-if="active == '2'"></two>
-            <thr :form="form" @up="up('2')" @next="next('4')" v-else-if="active == '3'"></thr>
-            <four :form="form" @up="up('3')" @next="next('5')" v-else-if="active == '4'"></four>
-            <five :form="form" @up="up('4')" @next="next('6')" v-else-if="active == '5'"></five>
-            <six :form="form" @up="up('5')" @next="next('7')" v-else-if="active == '6'"></six>
-            <seven :form="form" @up="up('6')" @next="next('8')" v-else-if="active == '7'"></seven>
-            <eight :form="form" @up="up('7')" @onSubmit="onSubmit" v-else-if="active == '8'"></eight>
+            <one :form="form" @next="next('2')" @teSubmit="teSubmit" v-if="active == '1'"></one>
+            <two :form="form" @up="up('1')" @next="next('3')" @teSubmit="teSubmit" v-else-if="active == '2'"></two>
+            <thr :form="form" @up="up('2')" @next="next('4')" @teSubmit="teSubmit" v-else-if="active == '3'"></thr>
+            <four :form="form" @up="up('3')" @next="next('5')" @teSubmit="teSubmit" v-else-if="active == '4'"></four>
+            <five :form="form" @up="up('4')" @next="next('6')" @teSubmit="teSubmit" v-else-if="active == '5'"></five>
+            <six :form="form" @up="up('5')" @next="next('7')" @teSubmit="teSubmit" v-else-if="active == '6'"></six>
+            <seven :form="form" @up="up('6')" @next="next('8')" @teSubmit="teSubmit" v-else-if="active == '7'"></seven>
+            <eight :form="form" @up="up('7')" @onSubmit="onSubmit" @teSubmit="teSubmit" v-else-if="active == '8'"></eight>
           </el-col>
         </el-col>
       </el-col>
@@ -61,7 +61,9 @@ export default {
         // 参加人员
         research: [],
         // 会审照片
-        file: {},
+        file: {
+          page5: '',
+        },
       },
     };
   },
@@ -83,7 +85,7 @@ export default {
     },
     // 提交
     async onSubmit({ data }) {
-      console.log(data);
+      data.status = '6';
       let res = await this.update(data);
       if (this.$checkRes(res)) {
         this.$message({
@@ -93,6 +95,17 @@ export default {
         this.back();
       }
     },
+    // 临时保存
+    async teSubmit({ data }) {
+      let res = await this.update(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '信息临时保存成功',
+          type: 'success',
+        });
+        this.back();
+      }
+    },
     // 上一步
     up(type) {
       this.active = parseInt(type);

+ 211 - 187
src/views/adminCenter/adminCate/index.vue

@@ -1,187 +1,211 @@
-<template>
-  <div id="index">
-    <el-row>
-      <el-col :span="24" class="main">
-        <el-col :span="24" class="down">
-          <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @file="toFile" @load="toLoad" @cert="toCert">
-            <template #custom="{item,row}">
-              <template v-if="item.prop === 'basic.achieve_num'">
-                <el-link size="mini" type="primary" @click="toApply(row)">{{ getProps(row, item.prop) }}</el-link>
-              </template>
-            </template>
-          </data-table>
-        </el-col>
-      </el-col>
-    </el-row>
-    <el-dialog title="发放证书" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
-      <el-form>
-        <el-form-item label="成果名称">{{ getProp('basic.achieve_name') }}</el-form-item>
-        <el-timeline>
-          <el-timeline-item
-            v-for="(i, index) in line"
-            :key="`line${index}`"
-            :icon="i.status <= 0 ? 'el-icon-close ' : 'el-icon-check'"
-            :type="i.status <= 0 ? 'danger ' : 'success'"
-            size="large"
-            :timestamp="i.status <= 0 ? '' : i.create_time"
-          >
-            {{ i.step }}
-            <el-collapse v-if="i.status <= 0">
-              <el-collapse-item title="点击展开" name="1">
-                <el-table :data="i.list">
-                  <el-table-column align="center" label="时间" prop="create_time" show-overflow-tooltip></el-table-column>
-                  <el-table-column align="center" label="建议" prop="desc" show-overflow-tooltip></el-table-column>
-                </el-table>
-              </el-collapse-item>
-            </el-collapse>
-          </el-timeline-item>
-        </el-timeline>
-        <el-form-item label="是否缴费">
-          <el-checkbox v-model="cost" :label="true">已缴费</el-checkbox>
-        </el-form-item>
-        <el-form-item label="">
-          <el-button type="primary" :disabled="!cost" @click="haveCert">发放证书</el-button>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
-    <el-dialog title="成果详情" center width="80%" :close-on-click-modal="false" :visible.sync="applyDialog" destroy-on-close @closed="applyClose">
-      <detail :form="apply"></detail>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-const _ = require('lodash');
-import detail from '../parts/detail.vue';
-import dataTable from '@common/src/components/frame/filter-page-table.vue';
-import { mapState, createNamespacedHelpers } from 'vuex';
-const { mapActions: achieveApply } = createNamespacedHelpers('achieveApply');
-const { mapActions: verifyRecord } = createNamespacedHelpers('verifyRecord');
-export default {
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-  name: 'index',
-  props: {},
-  components: {
-    dataTable,
-    detail,
-  },
-  data: function() {
-    return {
-      opera: [
-        {
-          label: '资料归档',
-          method: 'file',
-        },
-        {
-          label: '资料预览',
-          method: 'load',
-        },
-        {
-          label: '发放证书',
-          method: 'cert',
-        },
-      ],
-      fields: [
-        { label: '成果编号', prop: 'basic.achieve_num', filter: 'input', showTip: true, custom: true },
-        { label: '成果名称', prop: 'basic.achieve_name', showTip: true },
-        { label: '成果类别', prop: 'basic.achieve_type', showTip: true },
-      ],
-      list: [],
-      total: 0,
-      dialog: false,
-      info: {},
-      test: true,
-      cost: false,
-      line: [],
-      applyDialog: false,
-      apply: {},
-    };
-  },
-  async created() {
-    await this.search();
-  },
-  methods: {
-    ...achieveApply(['query']),
-    ...verifyRecord({ create: 'create', getRecord: 'query' }),
-    // 查询列表
-    async search({ skip = 0, limit = 10, ...info } = {}) {
-      const res = await this.query({ skip, limit, ...info, status: '5' });
-      if (this.$checkRes(res)) {
-        this.$set(this, 'list', res.data);
-        this.$set(this, `total`, res.total);
-      }
-    },
-    async toCert({ data }) {
-      this.$set(this, `info`, data);
-      const records = await this.getRecord({ apply_id: data._id });
-      const order = [-1, 1, -2, 2, -3, 3, 4, -5, 5, 6]; //时间轴的顺序,如果有修改,请注意这里的逗号,少写了只会让顺序出错,不会报错,被识别成减法了(实际体验的结果)
-      if (this.$checkRes(records)) {
-        let data = _.get(records, 'data', []);
-        data = _.groupBy(data, 'status');
-        const arr = [];
-        for (const n of order) {
-          const obj = _.get(data, n);
-          if (obj) {
-            const head = _.head(obj);
-            if (!head) continue;
-            const aobj = { step: _.get(head, 'step'), create_time: _.get(head, 'create_time'), list: obj, status: _.get(head, 'status') };
-            arr.push(aobj);
-          }
-        }
-        this.$set(this, `line`, arr);
-      }
-      this.dialog = true;
-    },
-    getProp(prop) {
-      return _.get(this.info, prop, '');
-    },
-    async haveCert() {
-      const data = _.cloneDeep(this.info);
-      // 发证书
-      let dup = { status: '6' };
-      dup.apply_id = _.get(data, '_id');
-      dup.verify = _.get(this.user, 'name');
-      dup.verify_phone = _.get(this.user, 'phone');
-      dup.verify_id = _.get(this.user, '_id');
-      dup.step = '发证书';
-      const res = await this.create(dup);
-      if (this.$checkRes(res, '已确定发放证书', res.errmsg || '确定发放失败')) {
-        this.handleClose();
-        this.search();
-      }
-    },
-    handleClose() {
-      this.info = {};
-      this.line = [];
-      this.dialog = false;
-    },
-    // 资料归档
-    toFile({ data }) {
-      this.$router.push({ path: '/adminCate/detail', query: { id: data.id } });
-    },
-    // 资料预览
-    toLoad({ data }) {
-      this.$router.push({ path: '/adminCate/dataInfo', query: { id: data.id, type: '5' } });
-    },
-    async toApply(data) {
-      this.$set(this, 'apply', data);
-      this.applyDialog = true;
-    },
-    getProps(data, prop) {
-      return _.get(data, prop);
-    },
-    applyClose() {
-      this.applyDialog = false;
-      this.apply = {};
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-  },
-  watch: {},
-};
-</script>
-
-<style lang="less" scoped></style>
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="down">
+          <el-tabs v-model="activeName" type="card">
+            <el-tab-pane label="资料归档" name="first">
+              <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @file="toFile" @load="toLoad" @cert="toCert">
+                <template #custom="{item,row}">
+                  <template v-if="item.prop === 'basic.achieve_num'">
+                    <el-link size="mini" type="primary" @click="toApply(row)">{{ getProps(row, item.prop) }}</el-link>
+                  </template>
+                </template>
+              </data-table>
+            </el-tab-pane>
+            <el-tab-pane label="证书发放" name="second">
+              <data-table :fields="fields" :opera="opera" :data="certList" :total="certTotal" @query="search" @file="toFile" @load="toLoad" @cert="toCert">
+                <template #custom="{item,row}">
+                  <template v-if="item.prop === 'basic.achieve_num'">
+                    <el-link size="mini" type="primary" @click="toApply(row)">{{ getProps(row, item.prop) }}</el-link>
+                  </template>
+                </template>
+              </data-table>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog title="发放证书" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
+      <el-form>
+        <el-form-item label="成果名称">{{ getProp('basic.achieve_name') }}</el-form-item>
+        <el-timeline>
+          <el-timeline-item
+            v-for="(i, index) in line"
+            :key="`line${index}`"
+            :icon="i.status <= 0 ? 'el-icon-close ' : 'el-icon-check'"
+            :type="i.status <= 0 ? 'danger ' : 'success'"
+            size="large"
+            :timestamp="i.status <= 0 ? '' : i.create_time"
+          >
+            {{ i.step }}
+            <el-collapse v-if="i.status <= 0">
+              <el-collapse-item title="点击展开" name="1">
+                <el-table :data="i.list">
+                  <el-table-column align="center" label="时间" prop="create_time" show-overflow-tooltip></el-table-column>
+                  <el-table-column align="center" label="建议" prop="desc" show-overflow-tooltip></el-table-column>
+                </el-table>
+              </el-collapse-item>
+            </el-collapse>
+          </el-timeline-item>
+        </el-timeline>
+        <el-form-item label="是否缴费">
+          <el-checkbox v-model="cost" :label="true">已缴费</el-checkbox>
+        </el-form-item>
+        <el-form-item label="">
+          <el-button type="primary" :disabled="!cost" @click="haveCert">发放证书</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+    <el-dialog title="成果详情" center width="80%" :close-on-click-modal="false" :visible.sync="applyDialog" destroy-on-close @closed="applyClose">
+      <detail :form="apply"></detail>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+import detail from '../parts/detail.vue';
+import dataTable from '@common/src/components/frame/filter-page-table.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: achieveApply } = createNamespacedHelpers('achieveApply');
+const { mapActions: verifyRecord } = createNamespacedHelpers('verifyRecord');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    dataTable,
+    detail,
+  },
+  data: function() {
+    return {
+      activeName: 'first',
+      opera: [
+        {
+          label: '资料归档',
+          method: 'file',
+          display: i => i.status === '5',
+        },
+        {
+          label: '资料预览',
+          method: 'load',
+        },
+        {
+          label: '发放证书',
+          method: 'cert',
+          display: i => i.status === '6',
+        },
+      ],
+      fields: [
+        { label: '成果编号', prop: 'basic.achieve_num', filter: 'input', showTip: true, custom: true },
+        { label: '成果名称', prop: 'basic.achieve_name', showTip: true },
+        { label: '成果类别', prop: 'basic.achieve_type', showTip: true },
+      ],
+      list: [],
+      total: 0,
+      dialog: false,
+      info: {},
+      test: true,
+      cost: false,
+      line: [],
+      applyDialog: false,
+      apply: {},
+      // 证书发放
+      certList: [],
+      certTotal: 0,
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...achieveApply(['query']),
+    ...verifyRecord({ create: 'create', getRecord: 'query' }),
+    // 查询列表
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, limit, ...info, status: '5' });
+      if (this.$checkRes(res)) {
+        this.$set(this, 'list', res.data);
+        this.$set(this, `total`, res.total);
+      }
+      res = await this.query({ skip, limit, ...info, status: '6' });
+      if (this.$checkRes(res)) {
+        this.$set(this, 'certList', res.data);
+        this.$set(this, `certTotal`, res.total);
+      }
+    },
+    async toCert({ data }) {
+      this.$set(this, `info`, data);
+      const records = await this.getRecord({ apply_id: data._id });
+      const order = [-1, 1, -2, 2, -3, 3, 4, -5, 5, 6]; //时间轴的顺序,如果有修改,请注意这里的逗号,少写了只会让顺序出错,不会报错,被识别成减法了(实际体验的结果)
+      if (this.$checkRes(records)) {
+        let data = _.get(records, 'data', []);
+        data = _.groupBy(data, 'status');
+        const arr = [];
+        for (const n of order) {
+          const obj = _.get(data, n);
+          if (obj) {
+            const head = _.head(obj);
+            if (!head) continue;
+            const aobj = { step: _.get(head, 'step'), create_time: _.get(head, 'create_time'), list: obj, status: _.get(head, 'status') };
+            arr.push(aobj);
+          }
+        }
+        this.$set(this, `line`, arr);
+      }
+      this.dialog = true;
+    },
+    getProp(prop) {
+      return _.get(this.info, prop, '');
+    },
+    async haveCert() {
+      const data = _.cloneDeep(this.info);
+      // 发证书
+      let dup = { status: '7' };
+      dup.apply_id = _.get(data, '_id');
+      dup.verify = _.get(this.user, 'name');
+      dup.verify_phone = _.get(this.user, 'phone');
+      dup.verify_id = _.get(this.user, '_id');
+      dup.step = '发证书';
+      const res = await this.create(dup);
+      if (this.$checkRes(res, '已确定发放证书', res.errmsg || '确定发放失败')) {
+        this.handleClose();
+        this.search();
+      }
+    },
+    handleClose() {
+      this.info = {};
+      this.line = [];
+      this.dialog = false;
+    },
+    // 资料归档
+    toFile({ data }) {
+      this.$router.push({ path: '/adminCate/detail', query: { id: data.id } });
+    },
+    // 资料预览
+    toLoad({ data }) {
+      this.$router.push({ path: '/adminCate/dataInfo', query: { id: data.id, type: '5' } });
+    },
+    async toApply(data) {
+      this.$set(this, 'apply', data);
+      this.applyDialog = true;
+    },
+    getProps(data, prop) {
+      return _.get(data, prop);
+    },
+    applyClose() {
+      this.applyDialog = false;
+      this.apply = {};
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped></style>

+ 3 - 3
src/views/adminCenter/adminCate/infoParts/five.vue

@@ -8,10 +8,10 @@
           </el-col>
           <el-col :span="24" class="info">
             <el-table :data="form.research" border style="width: 100%" :highlight-current-row="false">
-              <el-table-column prop="research_name" label="姓名" align="center"> </el-table-column>
+              <el-table-column prop="name" label="姓名" align="center"> </el-table-column>
               <el-table-column prop="gender" label="性别" align="center"> </el-table-column>
-              <el-table-column prop="research_company" label="工作单位" align="center"> </el-table-column>
-              <el-table-column prop="position" label="技术职称" align="center"> </el-table-column>
+              <el-table-column prop="company" label="工作单位" align="center"> </el-table-column>
+              <el-table-column prop="zc" label="技术职称" align="center"> </el-table-column>
             </el-table>
           </el-col>
         </el-col>

+ 9 - 13
src/views/adminCenter/adminCate/infoParts/two.vue

@@ -429,9 +429,9 @@
                     </el-checkbox-group>
                   </el-col>
                   <el-col :span="24" class="right1">
-                    <el-radio-group v-model="form.basic.achieve_form">
-                      <el-radio v-for="(i, index) in achieve_formList" :key="index" :label="i.name">{{ i.name }}</el-radio>
-                    </el-radio-group>
+                    <el-checkbox-group v-model="form.basic.achieve_form">
+                      <el-checkbox v-for="(i, index) in achieve_formList" :key="index" :label="i.name" :name="i.name"></el-checkbox>
+                    </el-checkbox-group>
                   </el-col>
                 </el-col>
               </el-col>
@@ -530,14 +530,9 @@
                   成果的影响及作用
                 </el-col>
                 <el-col :span="20" class="right">
-                  <el-radio-group v-model="form.basic.achieve_influence">
-                    <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 label="其他">其他</el-radio>
-                  </el-radio-group>
+                  <el-checkbox-group v-model="form.basic.achieve_influence">
+                    <el-checkbox v-for="(i, index) in achieve_influenceList" :key="index" :label="i.name" name="type"></el-checkbox>
+                  </el-checkbox-group>
                 </el-col>
               </el-col>
             </el-col>
@@ -549,7 +544,7 @@
 </template>
 
 <script>
-const { achievetype, achieveform, applynature, objective, stage } = require('@common/src/store/achieve/achieveType');
+const { achievetype, achieveform, applynature, achieveinfluence, objective, stage } = require('@common/src/store/achieve/achieveType');
 import htmlToPdf from '@/unit/htmlToPdf.js';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
@@ -563,6 +558,7 @@ export default {
       apply_natureList: applynature,
       achieve_typeList: achievetype,
       achieve_formList: achieveform,
+      achieve_influenceList: achieveinfluence,
     };
   },
   created() {},
@@ -792,7 +788,7 @@ export default {
               font-size: 12px;
               font-weight: bold;
               color: #000;
-              height: 49px;
+              height: 43px;
               border-bottom: 1px solid #000;
             }
             .right1:last-child {

+ 26 - 2
src/views/adminCenter/adminCate/parts/eight.vue

@@ -7,11 +7,20 @@
             七.评价专家组名单
           </el-col>
           <el-col :span="24" class="info">
-            <el-image :src="form.file.nameList"></el-image>
+            <!-- <el-image :src="form.file.nameList"></el-image> -->
+            <upload
+              :limit="1"
+              :data="form.file.nameList"
+              type="nameList"
+              :url="'/files/achieve/apply_file/upload'"
+              @upload="uploadSuccess"
+              @delete="uploadDelete"
+            ></upload>
           </el-col>
         </el-col>
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="up">上一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
           <el-button type="primary" size="mini" @click="onSubmit">保存</el-button>
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
@@ -21,6 +30,7 @@
 </template>
 
 <script>
+import upload from '@common/src/components/frame/upload.vue';
 import htmlToPdf from '@/unit/htmlToPdf.js';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
@@ -28,7 +38,9 @@ export default {
   props: {
     form: { type: Object },
   },
-  components: {},
+  components: {
+    upload,
+  },
   data: function() {
     return {
       img_url: require('@a/logo.png'),
@@ -44,9 +56,21 @@ export default {
     onSubmit() {
       this.$emit('onSubmit', { data: this.form });
     },
+    // 临时
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
+    },
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },
+    // 图片上传
+    uploadSuccess({ type, data }) {
+      this.$set(this.form.file, `${type}`, data.uri);
+    },
+    // 删除图片
+    uploadDelete(data) {
+      this.$set(this.form.file, `${data.type}`, null);
+    },
   },
   computed: {
     ...mapState(['user']),

+ 126 - 1
src/views/adminCenter/adminCate/parts/five.vue

@@ -7,6 +7,9 @@
             四.成果参加人员
           </el-col>
           <el-col :span="24" class="info">
+            <el-col :span="24" class="btn">
+              <el-button type="primary" size="mini" @click="dialog = true">补充成果参加人员</el-button>
+            </el-col>
             <el-table :data="form.research" border style="width: 100%" :highlight-current-row="false">
               <el-table-column prop="name" label="姓名" align="center"> </el-table-column>
               <el-table-column prop="gender" label="性别" align="center"> </el-table-column>
@@ -22,10 +25,76 @@
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="up">上一步</el-button>
           <el-button type="primary" size="mini" @click="next">下一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
       </el-col>
     </el-row>
+    <el-dialog class="dialog" title="研发人员信息管理" width="50%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
+      <el-form :model="researchForm" :rules="rules" ref="researchForm" label-width="130px">
+        <el-form-item label="姓名" prop="name">
+          <el-input v-model="researchForm.name" placeholder="请输入姓名"></el-input>
+        </el-form-item>
+        <el-form-item label="性别" prop="gender">
+          <el-radio-group v-model="researchForm.gender">
+            <el-radio label="男"></el-radio>
+            <el-radio label="女"></el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="年龄" prop="age">
+          <el-input v-model="researchForm.age" placeholder="请输入年龄"></el-input>
+        </el-form-item>
+        <el-form-item label="出生日期" prop="birth">
+          <el-date-picker v-model="researchForm.birth" type="date" placeholder="选择日期时间" format="yyyy-MM-dd" value-format="yyyy-MM-dd"> </el-date-picker>
+        </el-form-item>
+        <el-form-item label="技术职称" prop="zc">
+          <el-input v-model="researchForm.zc" placeholder="请输入技术职称"></el-input>
+        </el-form-item>
+        <el-form-item label="学历" prop="education">
+          <el-input v-model="researchForm.education" placeholder="请输入学历"></el-input>
+        </el-form-item>
+        <el-form-item label="学位" prop="degree">
+          <el-input v-model="researchForm.degree" placeholder="请输入学位"></el-input>
+        </el-form-item>
+        <el-form-item label="现从事专业" prop="major">
+          <el-input v-model="researchForm.major" placeholder="请输入现从事专业"></el-input>
+        </el-form-item>
+        <el-form-item label="是否留学归国" prop="abroad">
+          <el-radio-group v-model="researchForm.abroad">
+            <el-radio label="是"></el-radio>
+            <el-radio label="否"></el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="工作单位" prop="company">
+          <el-input v-model="researchForm.company" placeholder="请输入工作单位"></el-input>
+        </el-form-item>
+        <el-form-item label="在项目中承担的主要工作" prop="work">
+          <el-input
+            v-model="researchForm.work"
+            type="textarea"
+            maxlength="200"
+            show-word-limit
+            :autosize="{ minRows: 4, maxRows: 5 }"
+            placeholder="请输入在项目中承担的主要工作"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="对成果创造性贡献" prop="devote">
+          <el-input
+            v-model="researchForm.devote"
+            type="textarea"
+            maxlength="200"
+            show-word-limit
+            :autosize="{ minRows: 4, maxRows: 5 }"
+            placeholder="请输入对成果创造性贡献"
+          ></el-input>
+        </el-form-item>
+        <div class="btn">
+          <p>请谨慎填写成果参加人员信息,一旦提交不允许修改!</p>
+          <el-button type="primary" size="mini" @click="handleClose">取消</el-button>
+          <el-button type="primary" size="mini" @click="onSubmit('researchForm')">保存</el-button>
+        </div>
+      </el-form>
+    </el-dialog>
   </div>
 </template>
 
@@ -39,7 +108,24 @@ export default {
   },
   components: {},
   data: function() {
-    return {};
+    return {
+      dialog: false,
+      researchForm: {},
+      rules: {
+        name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
+        gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
+        age: [{ required: false, message: '请输入年龄', trigger: 'blur' }],
+        birth: [{ required: false, message: '请选择出生年月', trigger: 'change' }],
+        zc: [{ required: true, message: '请输入技术职称', trigger: 'blur' }],
+        education: [{ required: true, message: '请输入学历', trigger: 'blur' }],
+        degree: [{ required: false, message: '请输入学位', trigger: 'blur' }],
+        major: [{ required: false, message: '请输入现从事专业', trigger: 'blur' }],
+        abroad: [{ required: false, message: '请选择', trigger: 'change' }],
+        company: [{ required: true, message: '请输入工作单位', trigger: 'blur' }],
+        work: [{ required: false, message: '请输入在项目中承担的主要工作', trigger: 'blur' }],
+        devote: [{ required: false, message: '请输入对成果创造性贡献', trigger: 'blur' }],
+      },
+    };
   },
   created() {},
   methods: {
@@ -51,9 +137,31 @@ export default {
     next() {
       this.$emit('next');
     },
+    // 临时
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
+    },
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },
+    // 关闭补充成果参加人员
+    handleClose() {
+      this.researchForm = {};
+      this.dialog = false;
+    },
+    onSubmit(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          let data = _.cloneDeep(this.form.research);
+          data.push(this.researchForm);
+          this.$set(this.form, `research`, data);
+          this.handleClose();
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
   },
   computed: {
     ...mapState(['user']),
@@ -109,6 +217,10 @@ export default {
       /deep/.el-table__header {
         border-bottom: 1px solid #000;
       }
+      .btn {
+        text-align: left;
+        padding: 10px 0;
+      }
     }
   }
   .down {
@@ -116,4 +228,17 @@ export default {
     margin: 15px 0 0 0;
   }
 }
+.dialog {
+  .btn {
+    text-align: center;
+  }
+  p {
+    margin: 0 0 10px 0;
+    color: #ff0000;
+    font-weight: bold;
+  }
+}
+/deep/.el-dialog__body {
+  padding: 15px 15px 15px 0;
+}
 </style>

+ 5 - 0
src/views/adminCenter/adminCate/parts/four.vue

@@ -13,6 +13,7 @@
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="up">上一步</el-button>
           <el-button type="primary" size="mini" @click="next">下一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
       </el-col>
@@ -42,6 +43,10 @@ export default {
     next() {
       this.$emit('next');
     },
+    // 临时
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
+    },
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },

+ 17 - 12
src/views/adminCenter/adminCate/parts/one.vue

@@ -40,10 +40,19 @@
             </el-col>
           </el-col>
           <el-col :span="24" class="four">
-            <span>申请评价日期:</span>
-            <span>{{ getDate('yyyy') }}年</span>
-            <span>{{ getDate('MM') }}月</span>
-            <span>{{ getDate('DD') }}日</span>
+            <el-col :span="5" class="left">
+              申请评价日期:
+            </el-col>
+            <el-col :span="19" class="right">
+              <el-date-picker
+                v-model="form.basic.achieve_date"
+                type="datetime"
+                placeholder="请选择开始时间"
+                format="yyyy-MM-dd HH:mm:ss"
+                value-format="yyyy-MM-dd HH:mm:ss"
+              >
+              </el-date-picker>
+            </el-col>
           </el-col>
           <el-col :span="24" class="five">
             <p>吉林省发明协会</p>
@@ -52,6 +61,8 @@
         </el-col>
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="next">下一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
+
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
       </el-col>
@@ -81,14 +92,8 @@ export default {
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },
-    getDate(date) {
-      if (date == 'yyyy') {
-        return moment().format('YYYY');
-      } else if (date == 'MM') {
-        return moment().format('MM');
-      } else if (date == 'DD') {
-        return moment().format('DD');
-      }
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
     },
   },
   computed: {

+ 26 - 2
src/views/adminCenter/adminCate/parts/seven.vue

@@ -7,12 +7,21 @@
             六.评价意见
           </el-col>
           <el-col :span="24" class="info">
-            <el-image :src="form.file.page6"></el-image>
+            <!-- <el-image :src="form.file.page6"></el-image> -->
+            <upload
+              :limit="1"
+              :data="form.file.page6"
+              type="page6"
+              :url="'/files/achieve/apply_file/upload'"
+              @upload="uploadSuccess"
+              @delete="uploadDelete"
+            ></upload>
           </el-col>
         </el-col>
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="up">上一步</el-button>
           <el-button type="primary" size="mini" @click="next">下一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
       </el-col>
@@ -21,6 +30,7 @@
 </template>
 
 <script>
+import upload from '@common/src/components/frame/upload.vue';
 import htmlToPdf from '@/unit/htmlToPdf.js';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
@@ -28,7 +38,9 @@ export default {
   props: {
     form: { type: Object },
   },
-  components: {},
+  components: {
+    upload,
+  },
   data: function() {
     return {};
   },
@@ -42,9 +54,21 @@ export default {
     next() {
       this.$emit('next');
     },
+    // 临时
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
+    },
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },
+    // 图片上传
+    uploadSuccess({ type, data }) {
+      this.$set(this.form.file, `${type}`, data.uri);
+    },
+    // 删除图片
+    uploadDelete(data) {
+      this.$set(this.form.file, `${data.type}`, null);
+    },
   },
   computed: {
     ...mapState(['user']),

+ 26 - 2
src/views/adminCenter/adminCate/parts/six.vue

@@ -7,12 +7,21 @@
             五.现场测试(监测,测产)意见
           </el-col>
           <el-col :span="24" class="info">
-            <el-image :src="form.file.page5"></el-image>
+            <!-- <el-image :src="form.file.page5"></el-image> -->
+            <upload
+              :limit="1"
+              :data="form.file.page5"
+              type="page5"
+              :url="'/files/achieve/apply_file/upload'"
+              @upload="uploadSuccess"
+              @delete="uploadDelete"
+            ></upload>
           </el-col>
         </el-col>
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="up">上一步</el-button>
           <el-button type="primary" size="mini" @click="next">下一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
       </el-col>
@@ -21,6 +30,7 @@
 </template>
 
 <script>
+import upload from '@common/src/components/frame/upload.vue';
 import htmlToPdf from '@/unit/htmlToPdf.js';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
@@ -28,7 +38,9 @@ export default {
   props: {
     form: { type: Object },
   },
-  components: {},
+  components: {
+    upload,
+  },
   data: function() {
     return {};
   },
@@ -42,9 +54,21 @@ export default {
     next() {
       this.$emit('next');
     },
+    // 临时
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
+    },
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },
+    // 图片上传
+    uploadSuccess({ type, data }) {
+      this.$set(this.form.file, `${type}`, data.uri);
+    },
+    // 删除图片
+    uploadDelete(data) {
+      this.$set(this.form.file, `${data.type}`, null);
+    },
   },
   computed: {
     ...mapState(['user']),

+ 5 - 0
src/views/adminCenter/adminCate/parts/thr.vue

@@ -13,6 +13,7 @@
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="up">上一步</el-button>
           <el-button type="primary" size="mini" @click="next">下一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
       </el-col>
@@ -42,6 +43,10 @@ export default {
     next() {
       this.$emit('next');
     },
+    // 临时
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
+    },
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },

+ 15 - 6
src/views/adminCenter/adminCate/parts/two.vue

@@ -432,9 +432,9 @@
                     </el-checkbox-group>
                   </el-col>
                   <el-col :span="24" class="right1">
-                    <el-radio-group v-model="form.basic.achieve_form">
-                      <el-radio v-for="(i, index) in achieve_formList" :key="index" :label="i.name">{{ i.name }}</el-radio>
-                    </el-radio-group>
+                    <el-checkbox-group v-model="form.basic.achieve_form">
+                      <el-checkbox v-for="(i, index) in achieve_formList" :key="index" :label="i.name" name="type"></el-checkbox>
+                    </el-checkbox-group>
                   </el-col>
                 </el-col>
               </el-col>
@@ -533,14 +533,17 @@
                   成果的影响及作用
                 </el-col>
                 <el-col :span="20" class="right">
-                  <el-radio-group v-model="form.basic.achieve_influence">
+                  <el-checkbox-group v-model="form.basic.achieve_influence">
+                    <el-checkbox v-for="(i, index) in achieve_influenceList" :key="index" :label="i.name" name="type"></el-checkbox>
+                  </el-checkbox-group>
+                  <!-- <el-radio-group v-model="form.basic.achieve_influence">
                     <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 label="其他">其他</el-radio>
-                  </el-radio-group>
+                  </el-radio-group> -->
                 </el-col>
               </el-col>
             </el-col>
@@ -549,6 +552,7 @@
         <el-col :span="24" class="down">
           <el-button type="primary" size="mini" @click="up">上一步</el-button>
           <el-button type="primary" size="mini" @click="next">下一步</el-button>
+          <el-button type="success" size="mini" @click="teSubmit">临时保存</el-button>
           <!-- <el-button type="primary" size="mini" @click="handleDown">下载</el-button> -->
         </el-col>
       </el-col>
@@ -557,7 +561,7 @@
 </template>
 
 <script>
-const { achievetype, achieveform, applynature, objective, stage } = require('@common/src/store/achieve/achieveType');
+const { achievetype, achieveform, applynature, achieveinfluence, objective, stage } = require('@common/src/store/achieve/achieveType');
 import htmlToPdf from '@/unit/htmlToPdf.js';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
@@ -571,6 +575,7 @@ export default {
       apply_natureList: applynature,
       achieve_typeList: achievetype,
       achieve_formList: achieveform,
+      achieve_influenceList: achieveinfluence,
     };
   },
   created() {},
@@ -583,6 +588,10 @@ export default {
     next() {
       this.$emit('next');
     },
+    // 临时
+    teSubmit() {
+      this.$emit('teSubmit', { data: this.form });
+    },
     handleDown() {
       htmlToPdf.downloadPDF(document.querySelector('#demo'), '测试');
     },

+ 1 - 1
src/views/adminCenter/adminHaveCert/index.vue

@@ -67,7 +67,7 @@ export default {
     ...verifyRecord(['create']),
     // 查询列表
     async search({ skip = 0, limit = 10, ...info } = {}) {
-      const res = await this.query({ skip, limit, ...info, status: '6' });
+      const res = await this.query({ skip, limit, ...info, status: '7' });
       if (this.$checkRes(res)) {
         this.$set(this, 'list', res.data);
         this.$set(this, `total`, res.total);

+ 19 - 8
src/views/userCenter/common/update.vue

@@ -186,15 +186,26 @@ export default {
     async timeBtn({ arr, type }) {
       if (type == '3') this.$set(this.form, `research`, arr);
       let data = this.form;
-      data.user_id = this.user.id;
       data.status = '10';
-      let res = await this.create(data);
-      if (this.$checkRes(res)) {
-        this.$message({
-          message: '临时保存申报成功',
-          type: 'success',
-        });
-        this.back();
+      if (data.id) {
+        let res = await this.update(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '修改信息完成,等待审核',
+            type: 'success',
+          });
+          this.back();
+        }
+      } else {
+        data.user_id = this.user.id;
+        let res = await this.create(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '临时保存申报成功',
+            type: 'success',
+          });
+          this.back();
+        }
       }
     },
     async onSubmit() {

+ 2 - 2
src/views/userCenter/common/updateParts/basic.vue

@@ -25,8 +25,8 @@
             </el-date-picker>
           </el-form-item>
           <el-form-item label="成果形式" prop="achieve_form">
-            <el-select v-model="basicForm.achieve_form" clearable filterable allow-create placeholder="请选择">
-              <el-option v-for="(i, index) in achieveformList" :key="index" :label="i.name" :value="i.name"></el-option>
+            <el-select v-model="basicForm.achieve_form" multiple clearable filterable placeholder="请选择">
+              <el-option v-for="item in achieveformList" :key="item.name" :label="item.name" :value="item.name"> </el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="申请人" prop="apply_personal">

+ 20 - 8
src/views/userCenter/userCert/index.vue

@@ -3,11 +3,14 @@
     <el-row>
       <el-col :span="24" class="main">
         <el-tabs v-model="active" type="card" @tab-click="changeTabs">
-          <el-tab-pane label="待发证书" name="first">
+          <el-tab-pane label="资料归档" name="first">
             <data-table :fields="fields" :opera="opera" :data="fisrtList" :total="firstTotal" @query="search" @view="toView"></data-table>
           </el-tab-pane>
-          <el-tab-pane label="已发证书" name="second">
-            <data-table :fields="fields" :opera="opera" :data="secondList" :total="secondTotal" @query="search" @view="toView" @cert="toCert"></data-table>
+          <el-tab-pane label="待发证书" name="second">
+            <data-table :fields="fields" :opera="opera" :data="secondList" :total="secondTotal" @query="search" @view="toView"></data-table>
+          </el-tab-pane>
+          <el-tab-pane label="已发证书" name="third">
+            <data-table :fields="fields" :opera="opera" :data="thirdList" :total="thirdTotal" @query="search" @view="toView" @cert="toCert"></data-table>
           </el-tab-pane>
         </el-tabs>
       </el-col>
@@ -36,7 +39,7 @@ export default {
         {
           label: '证书查看',
           method: 'cert',
-          display: i => i.status === '6',
+          display: i => i.status === '7',
         },
       ],
       fields: [
@@ -47,16 +50,19 @@ export default {
           label: '状态',
           prop: 'status',
           format: item => {
-            return item === '5' ? '待发证书' : item === '6' ? '已发证书' : '未识别';
+            return item === '5' ? '资料归档' : item === '6' ? '待发证书' : item == '7' ? '已发证书' : '未识别';
           },
         },
       ],
-      // 待评分
+      // 资料归档
       fisrtList: [],
       firstTotal: 0,
-      // 审核未通过
+      // 待发证书
       secondList: [],
       secondTotal: 0,
+      // 已发证书
+      thirdList: [],
+      thirdTotal: 0,
     };
   },
   async created() {
@@ -73,12 +79,18 @@ export default {
           this.$set(this, 'fisrtList', res.data);
           this.$set(this, `firstTotal`, res.total);
         }
-      } else {
+      } else if (this.active == 'second') {
         const res = await this.query({ skip, limit, status: 6, user_id: this.user.id, ...info });
         if (this.$checkRes(res)) {
           this.$set(this, 'secondList', res.data);
           this.$set(this, `secondTotal`, res.total);
         }
+      } else {
+        const res = await this.query({ skip, limit, status: 7, user_id: this.user.id, ...info });
+        if (this.$checkRes(res)) {
+          this.$set(this, 'thirdList', res.data);
+          this.$set(this, `thirdTotal`, res.total);
+        }
       }
     },
     // 选择tabs

+ 2 - 2
src/views/userDeclare/parts/basic.vue

@@ -25,8 +25,8 @@
             </el-date-picker>
           </el-form-item>
           <el-form-item label="成果形式" prop="achieve_form">
-            <el-select v-model="basicForm.achieve_form" clearable filterable allow-create placeholder="请选择">
-              <el-option v-for="(i, index) in achieveformList" :key="index" :label="i.name" :value="i.name"></el-option>
+            <el-select v-model="basicForm.achieve_form" multiple clearable filterable placeholder="请选择">
+              <el-option v-for="item in achieveformList" :key="item.name" :label="item.name" :value="item.name"> </el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="申请人" prop="apply_personal">