guhongwei 4 年 前
コミット
519ab6b07a

+ 76 - 70
src/router/index.js

@@ -159,7 +159,27 @@ const fwjg = [
     meta: { title: '高企申报-申报确认' },
     component: () => import('../views/adminCenter/declare/check.vue'),
   },
+  // 服务机构-研发补贴,奖励兑现
+  {
+    path: '/adminCenter/reward',
+    name: 'admin_reward_index',
+    meta: { title: '政策服务' },
+    component: () => import('../views/adminCenter/reward/index.vue'),
+  },
+  {
+    path: '/adminCenter/reward/detail',
+    name: 'admin_reward_detail',
+    meta: { title: '政策服务-审核管理' },
+    component: () => import('../views/adminCenter/reward/detail.vue'),
+  },
+  {
+    path: '/adminCenter/reward/result',
+    name: 'admin_reward_result',
+    meta: { title: '政策服务-审核结果查看' },
+    component: () => import('../views/adminCenter/reward/result.vue'),
+  },
   // 服务机构-兑付管理
+  // 创新券
   {
     path: '/adminCenter/cashing/coupons',
     name: 'admin_cashing_coupons',
@@ -178,38 +198,25 @@ const fwjg = [
     meta: { title: '创新券兑付-审核结果查看' },
     component: () => import('../views/adminCenter/cashing/coupons/result.vue'),
   },
-  // 服务机构-订单
-  // {
-  //   path: '/adminCenter/order/list',
-  //   name: 'admin_order_list',
-  //   meta: { title: '服务订单' },
-  //   component: () => import('../views/adminCenter/order/list.vue'),
-  // },
-  // {
-  //   path: '/adminCenter/order/update',
-  //   name: 'admin_order_update',
-  //   meta: { title: '修改服务订单' },
-  //   component: () => import('../views/adminCenter/order/update.vue'),
-  // },
-  // 服务机构-高企申报
-  // {
-  //   path: '/adminCenter/ticket',
-  //   name: 'admin_ticket',
-  //   meta: { title: '高企申报' },
-  //   component: () => import('../views/adminCenter/ticket/index.vue'),
-  // },
-  // {
-  //   path: '/adminCenter/ticket/detail',
-  //   name: 'admin_ticket_detail',
-  //   meta: { title: '高企申报-信息管理' },
-  //   component: () => import('../views/adminCenter/ticket/detail.vue'),
-  // },
-  // {
-  //   path: '/adminCenter/ticket/toGrant',
-  //   name: 'admin_ticket_toGrant',
-  //   meta: { title: '高企申报认定' },
-  //   component: () => import('../views/adminCenter/ticket/toGrant.vue'),
-  // },
+  // 研发补贴,奖励兑现
+  {
+    path: '/adminCenter/cashing/reward',
+    name: 'admin_cashing_reward',
+    meta: { title: '政策服务兑付' },
+    component: () => import('../views/adminCenter/cashing/reward/index.vue'),
+  },
+  {
+    path: '/adminCenter/cashing/reward/detail',
+    name: 'admin_cashing_reward_detail',
+    meta: { title: '政策服务兑付-审核管理' },
+    component: () => import('../views/adminCenter/cashing/reward/detail.vue'),
+  },
+  {
+    path: '/adminCenter/cashing/reward/result',
+    name: 'admin_cashing_reward_result',
+    meta: { title: '政策服务兑付-审核结果查看' },
+    component: () => import('../views/adminCenter/cashing/reward/result.vue'),
+  },
 ];
 // 企业
 const qy = [
@@ -277,6 +284,31 @@ const qy = [
     meta: { title: '高企申报-审核结果' },
     component: () => import('../views/adminCenter/company/declare/info.vue'),
   },
+  // 企业-研发补贴,奖励兑现
+  {
+    path: '/adminCenter/company/reward',
+    name: 'company_reward_index',
+    meta: { title: '政策服务' },
+    component: () => import('../views/adminCenter/company/reward/index.vue'),
+  },
+  {
+    path: '/adminCenter/company/reward/detail',
+    name: 'company_reward_detail',
+    meta: { title: '政策服务-信息管理' },
+    component: () => import('../views/adminCenter/company/reward/detail.vue'),
+  },
+  {
+    path: '/adminCenter/company/reward/result',
+    name: 'company_reward_result',
+    meta: { title: '政策服务-审核结果' },
+    component: () => import('../views/adminCenter/company/reward/result.vue'),
+  },
+  {
+    path: '/adminCenter/company/reward/order',
+    name: 'company_reward_order',
+    meta: { title: '政策服务-我要兑付' },
+    component: () => import('../views/adminCenter/company/reward/order.vue'),
+  },
   // 企业-兑付管理
   {
     path: '/adminCenter/company/cashing/coupons',
@@ -302,44 +334,18 @@ const qy = [
     meta: { title: '创新券兑付-审核结果' },
     component: () => import('../views/adminCenter/company/cashing/coupons/couponsResult_info.vue'),
   },
-  // // 企业-创新券申领
-  // {
-  //   path: '/adminCenter/company/coupons',
-  //   name: 'company_coupons_index',
-  //   meta: { title: '创新券申领' },
-  //   component: () => import('../views/adminCenter/company/coupons/index.vue'),
-  // },
-  // {
-  //   path: '/adminCenter/company/coupons/detail',
-  //   name: 'company_coupons_detail',
-  //   meta: { title: '创新券申领-信息管理' },
-  //   component: () => import('../views/adminCenter/company/coupons/detail.vue'),
-  // },
-  // {
-  //   path: '/adminCenter/company/policyApply/index',
-  //   name: 'company_policyApply_index',
-  //   meta: { title: '创新券申领-审核结果' },
-  //   component: () => import('../views/adminCenter/company/policy_apply/index.vue'),
-  // },
-  // {
-  //   path: '/adminCenter/company/policyApply/info',
-  //   name: 'company_policyApply_info',
-  //   meta: { title: '创新券申领-审核信息结果' },
-  //   component: () => import('../views/adminCenter/company/policy_apply/apply_info.vue'),
-  // },
-  // // 企业-服务订单
-  // {
-  //   path: '/adminCenter/company/policyApply/order',
-  //   name: 'company_policyApply_order',
-  //   meta: { title: '服务订单' },
-  //   component: () => import('../views/adminCenter/company/policy_apply/order_apply.vue'),
-  // },
-  // {
-  //   path: '/adminCenter/company/policyApply/orderIndex',
-  //   name: 'company_policyApply_orderIndex',
-  //   meta: { title: '服务订单-审核结果' },
-  //   component: () => import('../views/adminCenter/company/policy_apply/order_index.vue'),
-  // },
+  {
+    path: '/adminCenter/company/cashing/rewardResult',
+    name: 'company_cashing_rewardResult',
+    meta: { title: '政策服务兑付' },
+    component: () => import('../views/adminCenter/company/cashing/coupons/rewardResult.vue'),
+  },
+  {
+    path: '/adminCenter/company/cashing/rewardResult_info',
+    name: 'company_cashing_rewardResult_info',
+    meta: { title: '政策服务兑付-审核结果' },
+    component: () => import('../views/adminCenter/company/cashing/coupons/rewardResult_info.vue'),
+  },
 ];
 // 机构
 const jg = [

+ 4 - 0
src/store/index.js

@@ -21,6 +21,8 @@ import couponsApply from './live/couponsApply';
 import declare from './live/declare';
 import declareOrder from './live/declareOrder';
 import cashing from './live/cashing';
+import reward from './live/reward';
+import rewardOrder from './live/rewardOrder';
 
 Vue.use(Vuex);
 
@@ -48,5 +50,7 @@ export default new Vuex.Store({
     declare,
     declareOrder,
     cashing,
+    reward,
+    rewardOrder,
   },
 });

+ 43 - 0
src/store/live/reward.js

@@ -0,0 +1,43 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  reward: `/api/live/v0/cysci/reward`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.reward}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.reward}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.reward}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.reward}/update/${id}`, data);
+    return res;
+  },
+
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.reward}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 43 - 0
src/store/live/rewardOrder.js

@@ -0,0 +1,43 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  rewardOrder: `/api/live/v0/cysci/rewardOrder`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.rewardOrder}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.rewardOrder}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.rewardOrder}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.rewardOrder}/update/${id}`, data);
+    return res;
+  },
+
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.rewardOrder}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 1 - 1
src/views/adminCenter/cashing/coupons/index.vue

@@ -29,7 +29,7 @@ export default {
           display: (i) => i.status == '0',
         },
         {
-          label: '查看',
+          label: '查看结果',
           method: 'view',
           display: (i) => i.status == '1' || i.status == '-1',
         },

+ 255 - 0
src/views/adminCenter/cashing/reward/detail.vue

@@ -0,0 +1,255 @@
+<template>
+  <div id="detail">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-form :model="form" ref="form" label-width="100px">
+              <el-col :span="12" class="text">
+                <el-form-item label="订单号" prop="no">
+                  <el-input v-model="form.no" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="兑付类型" prop="type">
+                  <el-input v-model="form.type" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="使用单位" prop="company_name">
+                  <el-input v-model="form.company_name" placeholder="请输入使用单位" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="订单总金额" prop="money">
+                  <el-input v-model="form.money"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="应收金额" prop="total">
+                  <el-input v-model="form.total"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24" class="file">
+                <el-col :span="24" class="file_title"> 相关附件 </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">1.创新券服务合同</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.contract" :key="`contract-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">2.官方缴费证明</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.accept" :key="`accept-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">3.创新券服务合同</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.cost" :key="`cost-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">4.服务结果证明</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.result" :key="`result-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">5.其他能够证明服务真实发生的材料</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.result_else" :key="`result_else-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="1" class="left"> 审核状态</el-col>
+                <el-col :span="23" class="right">
+                  <el-radio-group v-model="form.status">
+                    <el-radio v-for="(i, index) in statusList" :key="`status-${index}`" :label="i.value">{{ i.label }}</el-radio>
+                  </el-radio-group>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="1" class="left"> 审核意见</el-col>
+                <el-col :span="23" class="right">
+                  <el-input v-model="form.desc" type="textarea" maxlength="300" :autosize="{ minRows: 4, maxRows: 6 }" show-word-limit></el-input>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="formBtn">
+                <el-button type="danger" size="mini" @click="back">取消保存</el-button>
+                <el-button type="primary" size="mini" @click="onSubmit('form')">确认订单</el-button>
+              </el-col>
+            </el-form>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const moment = require('moment');
+const { cashingresult } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: rewardOrder } = createNamespacedHelpers('rewardOrder');
+export default {
+  name: 'detail',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      imgList: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],
+      statusList: cashingresult,
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...rewardOrder(['fetch', 'update']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    // 确认订单
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          data.status = '1';
+          data.end_time = this.nowDate();
+          let newRecord = this.getRecord(data);
+          data.record = data.record.concat(newRecord);
+          let res = await this.update(data);
+          if (this.$checkRes(res)) {
+            this.$message({
+              message: '订单确认成功',
+              type: 'success',
+            });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 审核列表整合
+    getRecord(data) {
+      let arr = [{ status: data.status, desc: data.desc, desc_time: moment().format('YYYY-MM-DD HH:mm:ss') }];
+      return arr;
+    },
+    // 最后审核时间
+    nowDate() {
+      return moment().format('YYYY-MM-DD HH:mm:ss');
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/cashing/reward', query: { type: this.type } });
+    },
+    isImg(url) {
+      const arr = url.split('.');
+      const suffix = _.last(arr);
+      return this.imgList.includes(suffix);
+    },
+    toOpen(url) {
+      window.open(url);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .top {
+    text-align: right;
+    margin: 0 0 10px 0;
+  }
+  .down {
+    .text {
+      padding: 10px 0;
+      border-bottom: 1px dashed #333;
+      .left {
+        text-align: left;
+        color: #666;
+      }
+      .right {
+        padding: 0 10px;
+        img {
+          width: 200px;
+          height: 200px;
+          border: 1px solid #ccc;
+        }
+      }
+      .desc {
+        margin: 10px 0 0 0;
+      }
+    }
+    /deep/.el-form-item {
+      margin: 0;
+    }
+    .el-select {
+      width: 100%;
+    }
+    .formBtn {
+      text-align: center;
+      padding: 10px 0;
+    }
+    .file {
+      padding: 0 15px;
+      .file_title {
+        font-size: 16px;
+        font-weight: bold;
+        margin: 10px 0 0 0;
+      }
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 107 - 0
src/views/adminCenter/cashing/reward/index.vue

@@ -0,0 +1,107 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @edit="toEdit" @view="toView"> </data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { cashingresult } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: rewardOrder } = createNamespacedHelpers('rewardOrder');
+export default {
+  name: 'index',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      opera: [
+        {
+          label: '审核',
+          method: 'edit',
+          display: (i) => i.status == '0',
+        },
+        {
+          label: '查看结果',
+          method: 'view',
+          display: (i) => i.status == '1' || i.status == '-1',
+        },
+      ],
+      fields: [
+        { label: '订单号', prop: 'no', filter: 'input' },
+        { label: '兑付类型', prop: 'type' },
+        { label: '使用企业', prop: 'company_name' },
+        { label: '最后提交时间', prop: 'create_time' },
+        { label: '最后审核时间', prop: 'end_time' },
+        { label: '订单金额', prop: 'money' },
+        { label: '应收金额', prop: 'total' },
+        {
+          label: '兑付审核状态',
+          prop: 'status',
+          format: (i) => {
+            const r = cashingresult.find((f) => f.value === i);
+            if (r) return r.label;
+            else return '';
+          },
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {
+    ...rewardOrder(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      info.type = this.type;
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    // 审核
+    toEdit({ data }) {
+      this.$router.push({ path: '/adminCenter/cashing/reward/detail', query: { id: data._id, type: data.type } });
+    },
+    // 查看
+    toView({ data }) {
+      this.$router.push({ path: '/adminCenter/cashing/reward/result', query: { id: data._id, type: data.type } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    type: {
+      deep: true,
+      immediate: true,
+      handler(val) {
+        this.search();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 235 - 0
src/views/adminCenter/cashing/reward/result.vue

@@ -0,0 +1,235 @@
+<template>
+  <div id="result">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-form :model="form" ref="form" label-width="100px">
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 订单号</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.no || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 兑付类型</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.type || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 使用单位</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.company_name || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 最后提交时间</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.create_time || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 最后审核时间</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.end_time || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 订单金额</el-col>
+                <el-col :span="22" class="right"> {{ getMoney(form.money) }}元 </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 应收金额</el-col>
+                <el-col :span="22" class="right"> {{ getMoney(form.total) }}元 </el-col>
+              </el-col>
+              <el-col :span="24" class="file">
+                <el-col :span="24" class="file_title"> 相关附件 </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">1.创新券服务合同</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.contract" :key="`contract-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">2.官方缴费证明</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.accept" :key="`accept-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">3.创新券服务合同</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.cost" :key="`cost-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">4.服务结果证明</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.result" :key="`result-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="text">
+                  <el-col :span="24" class="left">5.其他能够证明服务真实发生的材料</el-col>
+                  <el-col :span="24" class="right">
+                    <el-col :span="4" v-for="(i, index) in form.result_else" :key="`result_else-${index}`">
+                      <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                      <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 审核状态:</el-col>
+                <el-col :span="22" class="right">
+                  {{ getStatus(form.status) }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="24" class="left"> 审核意见:</el-col>
+                <el-col :span="24" class="right desc">
+                  <el-timeline>
+                    <el-timeline-item v-for="(item, index) in form.record" :key="index" :timestamp="item.desc_time" placement="top" type="success">
+                      <el-card>
+                        <p>审核状态:{{ getStatus(item.status) || '暂无' }}</p>
+                        <p>审核意见:{{ item.desc || '暂无' }}</p>
+                      </el-card>
+                    </el-timeline-item>
+                  </el-timeline>
+                </el-col>
+              </el-col>
+            </el-form>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+const moment = require('moment');
+const { cashingresult } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: rewardOrder } = createNamespacedHelpers('rewardOrder');
+export default {
+  name: 'result',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      imgList: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...rewardOrder(['fetch']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    getStatus(i) {
+      const r = cashingresult.find((f) => f.value === i);
+      if (r) return r.label;
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/cashing/reward', query: { type: this.type } });
+    },
+    // 判断钱
+    getMoney(data) {
+      if (data == undefined) return '暂无';
+      else return data;
+    },
+    isImg(url) {
+      const arr = url.split('.');
+      const suffix = _.last(arr);
+      return this.imgList.includes(suffix);
+    },
+    toOpen(url) {
+      window.open(url);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .one {
+    .top {
+      text-align: right;
+      margin: 0 0 10px 0;
+    }
+    .down {
+      .text {
+        padding: 10px 0;
+        border-bottom: 1px dashed #333;
+        .left {
+          text-align: left;
+        }
+        .right {
+          img {
+            width: 200px;
+            height: 200px;
+            border: 1px solid #ccc;
+          }
+        }
+        .desc {
+          margin: 10px 0 0 0;
+        }
+      }
+      .file {
+        .file_title {
+          font-size: 16px;
+          font-weight: bold;
+          margin: 10px 0 0 0;
+        }
+      }
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 1 - 1
src/views/adminCenter/company/cashing/coupons/couponsResult_info.vue

@@ -182,7 +182,7 @@ export default {
     },
     // 判断钱
     getMoney(data) {
-      if (data == undefined) return '暂无';
+      if (data == undefined) return '未计算';
       else return data;
     },
     isImg(url) {

+ 97 - 0
src/views/adminCenter/company/cashing/coupons/rewardResult.vue

@@ -0,0 +1,97 @@
+<template>
+  <div id="rewardResult">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @view="toView"> </data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { cashingresult } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: rewardOrder } = createNamespacedHelpers('rewardOrder');
+export default {
+  name: 'rewardResult',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      opera: [
+        {
+          label: '查看结果',
+          method: 'view',
+          display: (i) => i.status == '1' || i.status == '-1',
+        },
+      ],
+      fields: [
+        { label: '订单号', prop: 'no', filter: 'input' },
+        { label: '兑付类型', prop: 'type' },
+        { label: '使用企业', prop: 'company_name' },
+        { label: '最后提交时间', prop: 'create_time' },
+        { label: '最后审核时间', prop: 'end_time' },
+        { label: '订单金额', prop: 'money' },
+        { label: '应收金额', prop: 'total' },
+        {
+          label: '兑付审核状态',
+          prop: 'status',
+          format: (i) => {
+            const r = cashingresult.find((f) => f.value === i);
+            if (r) return r.label;
+            else return '';
+          },
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {
+    ...rewardOrder(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      info.type = this.type;
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    toView({ data }) {
+      this.$router.push({ path: '/adminCenter/company/cashing/rewardResult_info', query: { id: data._id, type: data.type } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    type: {
+      deep: true,
+      immediate: true,
+      handler(val) {
+        this.search();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 294 - 0
src/views/adminCenter/company/cashing/coupons/rewardResult_info.vue

@@ -0,0 +1,294 @@
+<template>
+  <div id="couponsResult_info">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-col :span="12" class="common down_left">
+              <el-col :span="24" class="down_leftTix"> 兑付订单详情 </el-col>
+              <el-col :span="24" class="down_leftInfo">
+                <el-form :model="form" ref="form" label-width="100px">
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 订单号</el-col>
+                    <el-col :span="21" class="right">
+                      {{ form.no || '暂无' }}
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 兑付类型</el-col>
+                    <el-col :span="21" class="right">
+                      {{ form.type || '暂无' }}
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 使用企业</el-col>
+                    <el-col :span="21" class="right">
+                      {{ form.company_name || '暂无' }}
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 最后提交时间</el-col>
+                    <el-col :span="21" class="right">
+                      {{ form.create_time || '暂无' }}
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 最后审核时间</el-col>
+                    <el-col :span="21" class="right">
+                      {{ form.end_time || '暂无' }}
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 订单金额</el-col>
+                    <el-col :span="21" class="right"> {{ getMoney(form.money) }}元 </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 应收金额</el-col>
+                    <el-col :span="21" class="right"> {{ getMoney(form.total) }}元 </el-col>
+                  </el-col>
+                  <el-col :span="24" class="file">
+                    <el-col :span="24" class="file_title"> 相关附件 </el-col>
+                    <el-col :span="24" class="text">
+                      <el-col :span="24" class="left">1.创新券服务合同</el-col>
+                      <el-col :span="24" class="right">
+                        <el-col :span="4" v-for="(i, index) in form.contract" :key="`contract-${index}`">
+                          <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                          <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                    <el-col :span="24" class="text">
+                      <el-col :span="24" class="left">2.官方缴费证明</el-col>
+                      <el-col :span="24" class="right">
+                        <el-col :span="4" v-for="(i, index) in form.accept" :key="`accept-${index}`">
+                          <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                          <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                    <el-col :span="24" class="text">
+                      <el-col :span="24" class="left">3.创新券服务合同</el-col>
+                      <el-col :span="24" class="right">
+                        <el-col :span="4" v-for="(i, index) in form.cost" :key="`cost-${index}`">
+                          <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                          <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                    <el-col :span="24" class="text">
+                      <el-col :span="24" class="left">4.服务结果证明</el-col>
+                      <el-col :span="24" class="right">
+                        <el-col :span="4" v-for="(i, index) in form.result" :key="`result-${index}`">
+                          <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                          <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                    <el-col :span="24" class="text">
+                      <el-col :span="24" class="left">5.其他能够证明服务真实发生的材料</el-col>
+                      <el-col :span="24" class="right">
+                        <el-col :span="4" v-for="(i, index) in form.result_else" :key="`result_else-${index}`">
+                          <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                          <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                        </el-col>
+                      </el-col>
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="3" class="left"> 审核状态:</el-col>
+                    <el-col :span="21" class="right">
+                      {{ getStatus(form.status) }}
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="text">
+                    <el-col :span="24" class="left"> 审核意见:</el-col>
+                    <el-col :span="24" class="right desc">
+                      <el-timeline>
+                        <el-timeline-item v-for="(item, index) in form.record" :key="index" :timestamp="item.desc_time" placement="top" type="success">
+                          <el-card>
+                            <p>审核状态:{{ getStatus(item.status) || '暂无' }}</p>
+                            <p>审核意见:{{ item.desc || '暂无' }}</p>
+                          </el-card>
+                        </el-timeline-item>
+                      </el-timeline>
+                    </el-col>
+                  </el-col>
+                </el-form>
+              </el-col>
+            </el-col>
+            <el-col :span="12" class="common down_right">
+              <el-col :span="24" class="down_rightTix">
+                <span>凭证详细</span>
+                <el-button type="primary" size="mini" @click="download">下载凭证</el-button>
+              </el-col>
+              <el-col :span="24" class="down_rightInfo">
+                <div id="demo">凭证详细信息</div>
+              </el-col>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+const moment = require('moment');
+import htmlToPdf from '@/unit/htmlToPdf.js';
+const { cashingresult } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: rewardOrder } = createNamespacedHelpers('rewardOrder');
+export default {
+  name: 'couponsResult_info',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      imgList: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...rewardOrder(['fetch']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    getStatus(i) {
+      const r = cashingresult.find((f) => f.value === i);
+      if (r) return r.label;
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/company/cashing/rewardResult', query: { type: this.type } });
+    },
+    // 判断钱
+    getMoney(data) {
+      if (data == undefined) return '未计算';
+      else return data;
+    },
+    isImg(url) {
+      const arr = url.split('.');
+      const suffix = _.last(arr);
+      return this.imgList.includes(suffix);
+    },
+    toOpen(url) {
+      window.open(url);
+    },
+    //pdf下载
+    download() {
+      htmlToPdf.downloadPDF(document.querySelector('#demo'), '凭证');
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .one {
+    .top {
+      text-align: right;
+      margin: 0 0 10px 0;
+    }
+    .down {
+      .down_left {
+        .down_leftTix {
+          text-align: center;
+          font-size: 16px;
+          font-weight: bold;
+          border-bottom: 1px solid #409eff;
+          padding: 10px 0;
+        }
+        .text {
+          padding: 10px 0;
+          border-bottom: 1px dashed #333;
+          .left {
+            text-align: left;
+          }
+          .right {
+            img {
+              width: 200px;
+              height: 200px;
+              border: 1px solid #ccc;
+            }
+          }
+          .desc {
+            margin: 10px 0 0 0;
+          }
+        }
+      }
+      .down_right {
+        .down_rightTix {
+          text-align: center;
+          font-size: 16px;
+          font-weight: bold;
+          border-bottom: 1px solid #409eff;
+          padding: 10px 0;
+          margin: 0 0 10px 0;
+          .el-button {
+            margin: 0 0 0 5px;
+          }
+        }
+        .down_rightInfo {
+          #demo {
+            width: 100%;
+            height: 930px;
+            border: 1px solid #ff0000;
+          }
+        }
+      }
+      .common {
+        border: 1px solid #000;
+        padding: 10px;
+        border-radius: 5px;
+        width: 49.5%;
+        margin: 0 15px 0 0;
+      }
+      .common:nth-child(2) {
+        margin: 0;
+      }
+      .file {
+        .file_title {
+          font-size: 16px;
+          font-weight: bold;
+          margin: 10px 0 0 0;
+          // text-align: center;
+        }
+      }
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 170 - 0
src/views/adminCenter/company/reward/detail.vue

@@ -0,0 +1,170 @@
+<template>
+  <div id="detail">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-form :model="form" :rules="rules" ref="form" label-width="100px">
+              <el-col :span="12" class="text">
+                <el-form-item label="申领类型" prop="type">
+                  <el-input v-model="form.type" placeholder="" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="申请单位" prop="company">
+                  <el-input v-model="form.company" placeholder="" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="申请人" prop="apply_personal">
+                  <el-input v-model="form.apply_personal" placeholder=""></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="联系电话" prop="phone">
+                  <el-input v-model="form.phone" placeholder=""></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-form-item label="法人复印件" prop="qyfr">
+                  <e-upload url="/files/cysci/qyfr_file/upload" :limit="1" v-model="form.qyfr" type="text"></e-upload>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-form-item label="企业营业执照" prop="yyzz">
+                  <e-upload url="/files/cysci/yyzz_file/upload" :limit="1" v-model="form.yyzz" type="text"></e-upload>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-form-item label="企业利润表" prop="qylr">
+                  <e-upload url="/files/cysci/qylr_file/upload" :limit="1" v-model="form.qylr" type="text"></e-upload>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24" class="formBtn">
+                <el-button type="danger" size="mini" @click="back">取消申领</el-button>
+                <el-button type="primary" size="mini" @click="onSubmit('form')">提交资料</el-button>
+              </el-col>
+            </el-form>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: organization } = createNamespacedHelpers('organization');
+const { mapActions: reward } = createNamespacedHelpers('reward');
+export default {
+  name: 'detail',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      rules: {},
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...reward(['fetch', 'create']),
+    ...organization({ orgFetch: 'fetch' }),
+    async search() {
+      const res = await this.orgFetch(this.user.id);
+      if (this.$checkRes(res)) {
+        let data = {
+          user_id: res.data.id,
+          company: res.data.name,
+          apply_personal: res.data.companyperson,
+          phone: res.data.phone,
+          type: this.type,
+          qyfr: [],
+          yyzz: [],
+          qylr: [],
+        };
+        this.$set(this, `form`, data);
+      }
+    },
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          let res = await this.create(data);
+          if (this.$checkRes(res)) {
+            this.$message({
+              message: `${this.type}申领成功,请耐心等待结果`,
+              type: 'success',
+            });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/company/reward', query: { type: this.type } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .one {
+    .top {
+      text-align: right;
+      margin: 0 0 15px 0;
+    }
+    .down {
+      .text {
+        border-bottom: 1px dashed #333;
+      }
+      /deep/.el-form-item {
+        padding: 20px 10px;
+        margin: 0;
+      }
+      /deep/.el-input__inner {
+        border: 1px solid #333;
+      }
+      .formBtn {
+        text-align: center;
+        padding: 15px 0;
+      }
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 117 - 0
src/views/adminCenter/company/reward/index.vue

@@ -0,0 +1,117 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @view="toView" @pay="toPay">
+            <template #selfbtn>
+              <el-button type="primary" size="mini" @click="toAdd">添加</el-button>
+            </template>
+          </data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { rewardStatus } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: reward } = createNamespacedHelpers('reward');
+export default {
+  name: 'index',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      opera: [
+        {
+          label: '查看结果',
+          method: 'view',
+          display: (item) => {
+            return item.status == '1' || item.status == '-1';
+          },
+        },
+        {
+          label: '我要兑付',
+          method: 'pay',
+          display: (item) => {
+            return item.status == '1';
+          },
+        },
+      ],
+      fields: [
+        { label: '申领类型', prop: 'type' },
+        { label: '申领企业', prop: 'company', filter: 'input' },
+        { label: '申请人', prop: 'apply_personal', filter: 'input' },
+        { label: '联系电话', prop: 'phone', filter: 'input' },
+        {
+          label: '审核状态',
+          prop: 'status',
+          format: (i) => {
+            const r = rewardStatus.find((f) => f.value === i);
+            if (r) return r.label;
+            return '未知状态';
+          },
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {
+    ...reward(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      info.type = this.type;
+      info.user_id - this.user.id;
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    // 申领
+    toAdd() {
+      this.$router.push({ path: '/adminCenter/company/reward/detail', query: { type: this.type } });
+    },
+    // 查看结果
+    toView({ data }) {
+      this.$router.push({ path: '/adminCenter/company/reward/result', query: { id: data.id, type: data.type } });
+    },
+    // 我要兑付
+    toPay({ data }) {
+      this.$router.push({ path: '/adminCenter/company/reward/order', query: { id: data.id, type: data.type } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    type: {
+      deep: true,
+      immediate: true,
+      handler(val) {
+        this.search();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 205 - 0
src/views/adminCenter/company/reward/order.vue

@@ -0,0 +1,205 @@
+<template>
+  <div id="order">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-form :model="form" :rules="rules" ref="form" label-width="100px">
+              <el-col :span="12" class="text">
+                <el-form-item label="兑付类型" prop="type">
+                  <el-input v-model="form.type" placeholder="" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="使用单位" prop="company_name">
+                  <el-input v-model="form.company_name" placeholder="" disabled></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12" class="text">
+                <el-form-item label="订单金额" prop="money">
+                  <el-input v-model="form.money" placeholder=""></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24" class="file">
+                <el-col :span="24" class="file_title"> 相关附件 </el-col>
+                <el-col :span="24" class="file_info">
+                  <el-col :span="24" class="info_tit">1.创新券服务合同 </el-col>
+                  <el-col :span="24" class="info_upl">
+                    <e-upload url="/files/cysci/contract/upload" :limit="1" v-model="form.contract" type="text"></e-upload>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="file_info">
+                  <el-col :span="24" class="info_tit">2.官方受理通知书 </el-col>
+                  <el-col :span="24" class="info_upl">
+                    <e-upload url="/files/cysci/accept/upload" :limit="1" v-model="form.accept" type="text"></e-upload>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="file_info">
+                  <el-col :span="24" class="info_tit">3.官方缴费证明 </el-col>
+                  <el-col :span="24" class="info_upl">
+                    <e-upload url="/files/cysci/cost/upload" :limit="1" v-model="form.cost" type="text"></e-upload>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="file_info">
+                  <el-col :span="24" class="info_tit">4.服务结果证明 </el-col>
+                  <el-col :span="24" class="info_upl">
+                    <e-upload url="/files/cysci/result/upload" :limit="1" v-model="form.result" type="text"></e-upload>
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="file_info">
+                  <el-col :span="24" class="info_tit">5.其他能够证明服务真实发生的材料 </el-col>
+                  <el-col :span="24" class="info_upl">
+                    <e-upload url="/files/cysci/result_else/upload" :limit="1" v-model="form.result_else" type="text"></e-upload>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="formBtn">
+                <el-button type="danger" size="mini" @click="back">取消申领</el-button>
+                <el-button type="primary" size="mini" @click="onSubmit('form')">提交资料</el-button>
+              </el-col>
+            </el-form>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { mapActions: reward } = createNamespacedHelpers('reward');
+const { mapActions: rewardOrder } = createNamespacedHelpers('rewardOrder');
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'order',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      rules: {},
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...reward(['fetch']),
+    ...rewardOrder(['create']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        let data = {
+          type: res.data.type,
+          company_id: res.data.user_id,
+          company_name: res.data.company,
+          contract: [],
+          accept: [],
+          cost: [],
+          result: [],
+          result_else: [],
+        };
+        this.$set(this, `form`, data);
+      }
+    },
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          let res = await this.create(data);
+          if (this.$checkRes(res)) {
+            this.$message({
+              message: `${this.type}兑付申请成功,请耐心等待结果`,
+              type: 'success',
+            });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/company/reward', query: { type: this.type } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .one {
+    .top {
+      text-align: right;
+      margin: 0 0 15px 0;
+    }
+    .down {
+      .text {
+        border-bottom: 1px dashed #ccc;
+        padding: 10px 0;
+        margin: 0 0 10px 0;
+      }
+      /deep/.el-form-item {
+        margin: 0;
+      }
+      .el-select {
+        width: 100%;
+      }
+      .formBtn {
+        text-align: center;
+        padding: 15px 0;
+      }
+      .file {
+        .file_title {
+          font-size: 16px;
+          font-weight: bold;
+          padding: 0 16px;
+          margin: 0 0 10px 0;
+        }
+        .file_info {
+          border-bottom: 1px dashed #ccc;
+          margin: 0 0 10px 0;
+          padding: 0 0 15px 0;
+          .info_tit {
+            font-size: 14px;
+            color: #666;
+            padding: 0 30px;
+            margin: 0 0 10px 0;
+          }
+          .info_upl {
+            padding: 0 30px;
+          }
+        }
+      }
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 189 - 0
src/views/adminCenter/company/reward/result.vue

@@ -0,0 +1,189 @@
+<template>
+  <div id="result">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-form :model="form" ref="form" label-width="100px">
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 申领单位</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.company || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 申请人</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.apply_personal || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 联系电话</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.phone || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 法人复印件:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.qyfr" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 企业营业执照:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.yyzz" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 企业利润表:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.qylr" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 审核状态:</el-col>
+                <el-col :span="22" class="right">
+                  {{ getStatus(form.status) }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="24" class="left"> 审核意见:</el-col>
+                <el-col :span="24" class="right desc">
+                  <el-timeline>
+                    <el-timeline-item v-for="(item, index) in form.record" :key="index" :timestamp="item.desc_time" placement="top" type="success">
+                      <el-card>
+                        <p>审核状态:{{ getStatus(item.status) || '暂无' }}</p>
+                        <p>审核意见:{{ item.desc || '暂无' }}</p>
+                      </el-card>
+                    </el-timeline-item>
+                  </el-timeline>
+                </el-col>
+              </el-col>
+            </el-form>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+const moment = require('moment');
+const { rewardStatus } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: reward } = createNamespacedHelpers('reward');
+export default {
+  name: 'result',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      imgList: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...reward(['fetch']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    getStatus(i) {
+      const r = rewardStatus.find((f) => f.value === i);
+      if (r) return r.label;
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/company/reward', query: { type: this.type } });
+    },
+    isImg(url) {
+      const arr = url.split('.');
+      const suffix = _.last(arr);
+      return this.imgList.includes(suffix);
+    },
+    toOpen(url) {
+      window.open(url);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .one {
+    .top {
+      text-align: right;
+      margin: 0 0 10px 0;
+    }
+    .down {
+      .text {
+        padding: 10px 0;
+        border-bottom: 1px dashed #333;
+        .left {
+          text-align: left;
+        }
+        .right {
+          img {
+            width: 200px;
+            height: 200px;
+            border: 1px solid #ccc;
+          }
+        }
+        .desc {
+          margin: 10px 0 0 0;
+        }
+      }
+      .file {
+        .file_title {
+          font-size: 16px;
+          font-weight: bold;
+          margin: 10px 0 0 0;
+        }
+      }
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 213 - 0
src/views/adminCenter/reward/detail.vue

@@ -0,0 +1,213 @@
+<template>
+  <div id="apply_check">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-form :model="form" ref="form" label-width="100px">
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 申领类型</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.type }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 申请单位</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.company }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 申请人</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.apply_personal }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 联系电话</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.phone }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 法人复印件:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.qyfr" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 企业营业执照:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.yyzz" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 企业利润表:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.qylr" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 审核状态</el-col>
+                <el-col :span="22" class="right">
+                  <el-radio-group v-model="form.status">
+                    <el-radio v-for="(i, index) in statusList" :key="`status-${index}`" :label="i.value">{{ i.label }}</el-radio>
+                  </el-radio-group>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 审核意见</el-col>
+                <el-col :span="22" class="right">
+                  <el-input v-model="form.desc" type="textarea" maxlength="300" :autosize="{ minRows: 4, maxRows: 6 }" show-word-limit></el-input>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="formBtn">
+                <el-button type="danger" size="mini" @click="back">取消申领</el-button>
+                <el-button type="primary" size="mini" @click="onSubmit('form')">提交审核</el-button>
+              </el-col>
+            </el-form>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+const moment = require('moment');
+const { rewardStatus } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: reward } = createNamespacedHelpers('reward');
+export default {
+  name: 'apply_check',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {
+        coupons: {},
+      },
+      imgList: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],
+      statusList: rewardStatus,
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...reward(['fetch', 'update']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          let newRecord = this.getRecord(data);
+          data.record = data.record.concat(newRecord);
+          let res = await this.update(data);
+          if (this.$checkRes(res)) {
+            this.$message({
+              message: '创新券申领审核成功',
+              type: 'success',
+            });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 审核列表整合
+    getRecord(data) {
+      let arr = [{ status: data.status, desc: data.desc, desc_time: moment().format('YYYY-MM-DD HH:mm:ss') }];
+      return arr;
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/reward', query: { type: this.type } });
+    },
+    isImg(url) {
+      const arr = url.split('.');
+      const suffix = _.last(arr);
+      return this.imgList.includes(suffix);
+    },
+    toOpen(url) {
+      window.open(url);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .top {
+    text-align: right;
+    margin: 0 0 10px 0;
+  }
+  .down {
+    .text {
+      padding: 10px 0;
+      border-bottom: 1px dashed #333;
+      .left {
+        text-align: left;
+      }
+      .right {
+        img {
+          width: 200px;
+          height: 200px;
+          border: 1px solid #ccc;
+        }
+      }
+      .desc {
+        margin: 10px 0 0 0;
+      }
+    }
+    .formBtn {
+      text-align: center;
+      padding: 10px 0;
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 108 - 0
src/views/adminCenter/reward/index.vue

@@ -0,0 +1,108 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @view="toView" @check="toCheck"> </data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const { rewardStatus } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: reward } = createNamespacedHelpers('reward');
+export default {
+  name: 'index',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      opera: [
+        {
+          label: '查看结果',
+          method: 'view',
+          display: (item) => {
+            return item.status == '1' || item.status == '-1';
+          },
+        },
+        {
+          label: '审核',
+          method: 'check',
+          display: (item) => {
+            return item.status == '0';
+          },
+        },
+      ],
+      fields: [
+        { label: '申领类型', prop: 'type' },
+        { label: '申领企业', prop: 'company', filter: 'input' },
+        { label: '申请人', prop: 'apply_personal', filter: 'input' },
+        { label: '联系电话', prop: 'phone', filter: 'input' },
+        {
+          label: '审核状态',
+          prop: 'status',
+          format: (i) => {
+            const r = rewardStatus.find((f) => f.value === i);
+            if (r) return r.label;
+            return '未知状态';
+          },
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {
+    ...reward(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      info.type = this.type;
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    // 审核
+    toCheck({ data }) {
+      this.$router.push({ path: '/adminCenter/reward/detail', query: { id: data.id, type: data.type } });
+    },
+    // 查看结果
+    toView({ data }) {
+      this.$router.push({ path: '/adminCenter/reward/result', query: { id: data.id, type: data.type } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    type: {
+      deep: true,
+      immediate: true,
+      handler(val) {
+        this.search();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>

+ 189 - 0
src/views/adminCenter/reward/result.vue

@@ -0,0 +1,189 @@
+<template>
+  <div id="result">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="down">
+            <el-form :model="form" ref="form" label-width="100px">
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 申领单位</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.company || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 申请人</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.apply_personal || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 联系电话</el-col>
+                <el-col :span="22" class="right">
+                  {{ form.phone || '暂无' }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 法人复印件:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.qyfr" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 企业营业执照:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.yyzz" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 企业利润表:</el-col>
+                <el-col :span="20" class="right">
+                  <el-col :span="4" v-for="(i, index) in form.qylr" :key="`medium_material-${index}`">
+                    <img v-if="isImg(i.url)" :src="i.url" width="150px" height="150px" @click="toOpen(i.url)" />
+                    <el-link v-else type="primary" @click="toOpen(i.url)"> <i class="el-icon-view"></i> {{ i.name }} </el-link>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="2" class="left"> 审核状态:</el-col>
+                <el-col :span="22" class="right">
+                  {{ getStatus(form.status) }}
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="text">
+                <el-col :span="24" class="left"> 审核意见:</el-col>
+                <el-col :span="24" class="right desc">
+                  <el-timeline>
+                    <el-timeline-item v-for="(item, index) in form.record" :key="index" :timestamp="item.desc_time" placement="top" type="success">
+                      <el-card>
+                        <p>审核状态:{{ getStatus(item.status) || '暂无' }}</p>
+                        <p>审核意见:{{ item.desc || '暂无' }}</p>
+                      </el-card>
+                    </el-timeline-item>
+                  </el-timeline>
+                </el-col>
+              </el-col>
+            </el-form>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+const moment = require('moment');
+const { rewardStatus } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: reward } = createNamespacedHelpers('reward');
+export default {
+  name: 'result',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      imgList: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...reward(['fetch']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    getStatus(i) {
+      const r = rewardStatus.find((f) => f.value === i);
+      if (r) return r.label;
+    },
+    back() {
+      this.$router.push({ path: '/adminCenter/reward', query: { type: this.type } });
+    },
+    isImg(url) {
+      const arr = url.split('.');
+      const suffix = _.last(arr);
+      return this.imgList.includes(suffix);
+    },
+    toOpen(url) {
+      window.open(url);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    type() {
+      return this.$route.query.type;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  border-radius: 10px;
+  box-shadow: 0 0 5px #cccccc;
+  padding: 20px;
+  .one {
+    .top {
+      text-align: right;
+      margin: 0 0 10px 0;
+    }
+    .down {
+      .text {
+        padding: 10px 0;
+        border-bottom: 1px dashed #333;
+        .left {
+          text-align: left;
+        }
+        .right {
+          img {
+            width: 200px;
+            height: 200px;
+            border: 1px solid #ccc;
+          }
+        }
+        .desc {
+          margin: 10px 0 0 0;
+        }
+      }
+      .file {
+        .file_title {
+          font-size: 16px;
+          font-weight: bold;
+          margin: 10px 0 0 0;
+        }
+      }
+    }
+  }
+}
+.main:hover {
+  box-shadow: 0 0 5px #409eff;
+}
+</style>