guhongwei 3 年 前
コミット
4db2d541eb

+ 49 - 0
java代码/ruoyi-ui/src/components/free/achieve-view.vue

@@ -0,0 +1,49 @@
+<template>
+  <div id="achieve-view">
+    <el-row>
+      <el-col :span="24" class="formMain">
+        <el-col :span="24" class="two">
+          <el-form ref="form" label-width="100px">
+            <el-form-item label="申请年度" prop="apply_year">
+              <el-input :value="info.apply_year" :readonly="true" placeholder="请输入申请年度" />
+            </el-form-item>
+            <excel-view ref="excelView" :data="info.excel" :read="true" />
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import excelView from '@/components/free/excel-view.vue'
+import { mapState, createNamespacedHelpers } from 'vuex'
+export default {
+  name: 'AchieveView',
+  components: { excelView },
+  props: {
+    info: { type: Object, default: () => {} } // 数据id,查询要看的申请
+  },
+  data: function() {
+    return {}
+  },
+  created() {},
+  methods: {}
+}
+</script>
+
+<style lang="scss" scoped>
+.formMain {
+  .one {
+    margin: 0 0 10px 0;
+  }
+  .two {
+    border: 1px solid #ccc;
+    padding: 10px;
+    .btn {
+      text-align: center;
+      margin: 10px 0 0 0;
+    }
+  }
+}
+</style>

+ 4 - 1
java代码/ruoyi-ui/src/components/free/excel-view.vue

@@ -33,7 +33,10 @@ export default {
   },
   },
   props: {
   props: {
     data: { type: Object, required: true },
     data: { type: Object, required: true },
-    view: { type: Object },
+    view: { type: Object, default: () => ({
+      height: () => document.documentElement.clientHeight - 250,
+      width: () => 800
+    }) },
     read: { type: Boolean, default: false }
     read: { type: Boolean, default: false }
   },
   },
   data: function() {
   data: function() {

+ 44 - 0
java代码/ruoyi-ui/src/store/duplicate.js

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

+ 17 - 13
java代码/ruoyi-ui/src/store/index.js

@@ -1,17 +1,20 @@
-import Vue from "vue";
-import Vuex from "vuex";
-import app from "./modules/app";
-import user from "./modules/user";
-import tagsView from "./modules/tagsView";
-import permission from "./modules/permission";
-import settings from "./modules/settings";
-import getters from "./getters";
-import role_relation from "./role_relation";
-import merits_user from "./merits_user";
-import template from "./template";
-import merits_apply from "./merits_apply";
+import Vue from 'vue'
+import Vuex from 'vuex'
+import app from './modules/app'
+import user from './modules/user'
+import tagsView from './modules/tagsView'
+import permission from './modules/permission'
+import settings from './modules/settings'
+import getters from './getters'
+import role_relation from './role_relation'
+import merits_user from './merits_user'
+import template from './template'
+import merits_apply from './merits_apply'
+import duplicate from './duplicate',
 import updateapply from "./updateapply";
 import updateapply from "./updateapply";
-Vue.use(Vuex);
+
+
+Vue.use(Vuex)
 
 
 const store = new Vuex.Store({
 const store = new Vuex.Store({
   modules: {
   modules: {
@@ -24,6 +27,7 @@ const store = new Vuex.Store({
     merits_user,
     merits_user,
     template,
     template,
     merits_apply,
     merits_apply,
+    duplicate,
     updateapply,
     updateapply,
   },
   },
   getters,
   getters,

+ 99 - 83
java代码/ruoyi-ui/src/views/merits/check/index.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
   <div id="list-frame">
   <div id="list-frame">
-    <el-row>
+    <el-row v-if="view==='list'">
       <el-col :span="24" class="main">
       <el-col :span="24" class="main">
         <el-col :span="24" class="one">
         <el-col :span="24" class="one">
           <data-table
           <data-table
@@ -16,16 +16,28 @@
               <template v-if="item.prop === 'status'">
               <template v-if="item.prop === 'status'">
                 <el-option
                 <el-option
                   v-for="(i, index) in statusList"
                   v-for="(i, index) in statusList"
+                  :key="index"
                   :label="i.label"
                   :label="i.label"
                   :value="i.value"
                   :value="i.value"
-                  :key="index"
-                ></el-option>
+                />
               </template>
               </template>
             </template>
             </template>
           </data-table>
           </data-table>
         </el-col>
         </el-col>
       </el-col>
       </el-col>
     </el-row>
     </el-row>
+    <el-row v-else>
+      <el-col :span="24">
+        <el-row>
+          <el-col :span="24">
+            <el-button type="primary" plain icon="el-icon-back" size="mini" @click="toBack">返回</el-button>
+          </el-col>
+          <el-col :span="24">
+            <achieve-view :info="viewData" />
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
     <el-dialog
     <el-dialog
       :title="dialog.title"
       :title="dialog.title"
       :visible.sync="dialog.show"
       :visible.sync="dialog.show"
@@ -36,10 +48,10 @@
     >
     >
       <div class="info">
       <div class="info">
         <el-col :span="24" class="info_1">
         <el-col :span="24" class="info_1">
-          <el-form :model="form" :rules="rules" ref="form" label-width="100px">
+          <el-form ref="form" :model="form" :rules="rules" label-width="100px">
             <el-col :span="12">
             <el-col :span="12">
               <el-form-item label="用户名称" prop="user_name">
               <el-form-item label="用户名称" prop="user_name">
-                <el-input v-model="form.user_name" disabled></el-input>
+                <el-input v-model="form.user_name" disabled />
               </el-form-item>
               </el-form-item>
             </el-col>
             </el-col>
             <el-col :span="12">
             <el-col :span="12">
@@ -52,17 +64,11 @@
             </el-col>
             </el-col>
             <el-col :span="24">
             <el-col :span="24">
               <el-form-item label="审核意见" prop="desc">
               <el-form-item label="审核意见" prop="desc">
-                <el-input
-                  v-model="form.desc"
-                  type="textarea"
-                  placeholder="请输入审核意见"
-                ></el-input>
+                <el-input v-model="form.desc" type="textarea" placeholder="请输入审核意见" />
               </el-form-item>
               </el-form-item>
             </el-col>
             </el-col>
             <el-col :span="24" class="btn">
             <el-col :span="24" class="btn">
-              <el-button type="primary" size="mini" @click="onSubmit('form')"
-                >保存</el-button
-              >
+              <el-button type="primary" size="mini" @click="onSubmit('form')">保存</el-button>
             </el-col>
             </el-col>
           </el-form>
           </el-form>
         </el-col>
         </el-col>
@@ -72,139 +78,149 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import dataTable from "@/components/free/filter-page-table.vue";
-import { mapState, mapGetters, createNamespacedHelpers } from "vuex";
-const { mapActions: merits_apply } = createNamespacedHelpers("merits_apply");
-const moment = require("moment");
+import achieveView from '@/components/free/achieve-view.vue'
+import dataTable from '@/components/free/filter-page-table.vue'
+import { mapState, mapGetters, createNamespacedHelpers } from 'vuex'
+const { mapActions: merits_apply } = createNamespacedHelpers('merits_apply')
+const moment = require('moment')
+const _ = require('lodash')
 export default {
 export default {
-  name: "list-frame",
+  name: 'ListFrame',
+  components: { dataTable, achieveView },
   props: {},
   props: {},
-  components: { dataTable },
-  data: function () {
+  data: function() {
     return {
     return {
+      view: 'list',
       list: [],
       list: [],
       total: 0,
       total: 0,
       fields: [
       fields: [
-        { label: "用户名称", prop: "user_name", filter: true },
-        { label: "申请年度", prop: "apply_year" },
+        { label: '用户名称', prop: 'user_name', filter: true },
+        { label: '申请年度', prop: 'apply_year' },
         {
         {
-          label: "申报状态",
-          prop: "status",
+          label: '申报状态',
+          prop: 'status',
           format: (i) =>
           format: (i) =>
-            i == "0"
-              ? "草稿"
-              : i == "1"
-              ? "待审中"
-              : i == "2"
-              ? "审核通过"
-              : i == "3"
-              ? "审核拒绝"
-              : "",
-          filter: "select",
-        },
+            i == '0'
+              ? '草稿'
+              : i == '1'
+                ? '待审中'
+                : i == '2'
+                  ? '审核通过'
+                  : i == '3'
+                    ? '审核拒绝'
+                    : '',
+          filter: 'select'
+        }
       ],
       ],
       opera: [
       opera: [
         {
         {
-          label: "查看",
-          method: "toView",
+          label: '查看',
+          method: 'toView'
         },
         },
         {
         {
-          label: "绩效审核",
-          method: "toCheck",
-          display: (i) => i.status == "1",
-        },
+          label: '绩效审核',
+          method: 'toCheck',
+          display: (i) => i.status == '1'
+        }
       ],
       ],
       // 绩效审核
       // 绩效审核
-      dialog: { title: "绩效审核", show: false },
+      dialog: { title: '绩效审核', show: false },
       form: {},
       form: {},
       info: {},
       info: {},
       rules: {
       rules: {
-        desc: [{ required: true, message: "请输入审核意见", trigger: "blur" }],
+        desc: [{ required: true, message: '请输入审核意见', trigger: 'blur' }],
         status: [
         status: [
-          { required: true, message: "请选择审核状态", trigger: "change" },
-        ],
+          { required: true, message: '请选择审核状态', trigger: 'change' }
+        ]
       },
       },
       // 审核状态
       // 审核状态
       statusList: [
       statusList: [
-        { label: "待审中", value: "1" },
-        { label: "审核通过", value: "2" },
-        { label: "审核拒绝", value: "3" },
+        { label: '待审中', value: '1' },
+        { label: '审核通过', value: '2' },
+        { label: '审核拒绝', value: '3' }
       ],
       ],
-    };
+      // 查看
+      viewData: {}
+    }
   },
   },
   async created() {
   async created() {
-    await this.search();
+    await this.search()
   },
   },
   methods: {
   methods: {
-    ...merits_apply(["query", "update"]),
+    ...merits_apply(['query', 'update']),
     async search({ skip = 0, limit = 10, ...info } = {}) {
     async search({ skip = 0, limit = 10, ...info } = {}) {
-      info.superior_id = this.user_id;
-      let res = await this.query({ skip, limit, ...info });
+      info.superior_id = this.user_id
+      const res = await this.query({ skip, limit, ...info })
       if (this.$checkRes(res)) {
       if (this.$checkRes(res)) {
-        this.$set(this, `list`, res.data);
-        this.$set(this, `total`, res.total);
+        this.$set(this, `list`, res.data)
+        this.$set(this, `total`, res.total)
       }
       }
     },
     },
 
 
     // 查看信息
     // 查看信息
     toView({ data }) {
     toView({ data }) {
-      console.log(data);
+      this.$set(this, `viewData`, _.cloneDeep(data))
+      this.view = 'detail'
     },
     },
     // 绩效审核
     // 绩效审核
     toCheck({ data }) {
     toCheck({ data }) {
-      this.$set(this, `info`, data);
-      this.$set(this, `form`, { user_name: data.user_name });
-      this.dialog = { title: "绩效审核", show: true };
+      this.$set(this, `info`, data)
+      this.$set(this, `form`, { user_name: data.user_name })
+      this.dialog = { title: '绩效审核', show: true }
     },
     },
     // 保存
     // 保存
     async onSubmit(formName) {
     async onSubmit(formName) {
-      this.$refs[formName].validate(async (valid) => {
+      this.$refs[formName].validate(async(valid) => {
         if (valid) {
         if (valid) {
-          let arr = { id: this.info._id, status: this.form.status };
-          let data = {
+          const arr = { id: this.info._id, status: this.form.status }
+          const data = {
             examine_user: this.name,
             examine_user: this.name,
-            examine_date: moment().format("YYYY-MM-DD HH:mm:ss"),
+            examine_date: moment().format('YYYY-MM-DD HH:mm:ss'),
             desc: this.form.desc,
             desc: this.form.desc,
-            status: this.form.status,
-          };
-          let record = [...this.info.record, data];
-          arr.record = record;
-          let res = await this.update(arr);
+            status: this.form.status
+          }
+          const record = [...this.info.record, data]
+          arr.record = record
+          const res = await this.update(arr)
           if (res.code === 200) {
           if (res.code === 200) {
-            this.$message({ type: `success`, message: res.msg });
-            this.toClose();
+            this.$message({ type: `success`, message: res.msg })
+            this.toClose()
           } else {
           } else {
             this.$message({
             this.$message({
               type: `error`,
               type: `error`,
-              message: res.msg || res.errmsg + ":" + res.details,
-            });
+              message: res.msg || res.errmsg + ':' + res.details
+            })
           }
           }
         } else {
         } else {
-          console.log("error submit!!");
-          return false;
+          console.log('error submit!!')
+          return false
         }
         }
-      });
+      })
     },
     },
     // 关闭
     // 关闭
     toClose() {
     toClose() {
-      this.search();
-      this.dialog = { title: "绩效审核", show: false };
+      this.search()
+      this.dialog = { title: '绩效审核', show: false }
     },
     },
+    toBack() {
+      this.view = 'list'
+      this.viewData = {}
+    }
   },
   },
   computed: {
   computed: {
-    ...mapGetters(["user_id", "name"]),
+    ...mapGetters(['user_id', 'name'])
   },
   },
   metaInfo() {
   metaInfo() {
-    return { title: this.$route.meta.title };
+    return { title: this.$route.meta.title }
   },
   },
   watch: {
   watch: {
     test: {
     test: {
       deep: true,
       deep: true,
       immediate: true,
       immediate: true,
-      handler(val) {},
-    },
-  },
-};
+      handler(val) { }
+    }
+  }
+}
 </script>
 </script>
 
 
 <style lang="less" scoped>
 <style lang="less" scoped>

+ 1 - 1
java代码/ruoyi-ui/src/views/merits/template/parts/list.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
   <div id="list">
   <div id="list">
-    <el-row>
+    <el-row  class="main">
       <el-col :span="24">
       <el-col :span="24">
         <data-table
         <data-table
           :fields="fields"
           :fields="fields"

+ 83 - 0
java代码/ruoyi-ui/src/views/merits/view/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <div id="list" class="main">
+    <el-row v-if="view==='list'">
+      <el-col :span="24">
+        <data-table
+          :fields="fields"
+          :opera="opera"
+          :total="total"
+          :data="list"
+          @query="search"
+          @toView="toView"
+        />
+      </el-col>
+    </el-row>
+    <el-row v-else>
+      <el-col :span="24">
+        <el-row>
+          <el-col :span="24">
+            <el-button type="primary" plain icon="el-icon-back" size="mini" @click="toBack">返回</el-button>
+          </el-col>
+          <el-col :span="24">
+            <achieve-view :info="viewData" />
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import achieveView from '@/components/free/achieve-view.vue'
+import dataTable from '@/components/free/filter-page-table.vue'
+const _ = require('lodash')
+import { createNamespacedHelpers } from 'vuex'
+const { mapActions } = createNamespacedHelpers('duplicate')
+export default {
+  name: 'List',
+  components: { dataTable, achieveView },
+  props: {},
+  data: function() {
+    return {
+      view: 'list',
+      list: [],
+      total: 0,
+      fields: [
+        { label: '申请人', prop: 'user_name', filter: true },
+        { label: '申请年度', prop: 'apply_year' }
+      ],
+      opera: [
+        { label: '查看', method: 'toView' }
+      ],
+      viewData: {}
+    }
+  },
+  created() {
+    this.search()
+  },
+  methods: {
+    ...mapActions(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info })
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data)
+        this.$set(this, `total`, res.total)
+      }
+    },
+    async toView({ data }) {
+      this.$set(this, `viewData`, _.cloneDeep(data))
+      this.view = 'detail'
+    },
+    async toBack() {
+      this.view = 'list'
+      this.viewData = {}
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.main {
+  padding: 25px 30px 30px;
+}
+</style>