Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

houlf 3 gadi atpakaļ
vecāks
revīzija
a241b5101f

+ 1 - 0
package.json

@@ -22,6 +22,7 @@
     "jquery-ui": "^1.12.1",
     "js-audio-recorder": "^1.0.7",
     "jsplumb": "^2.15.5",
+    "luckyexcel": "^1.0.1",
     "moment": "^2.29.1",
     "qs": "^6.9.1",
     "tinymce": "^5.7.1",

+ 7 - 0
public/index.html

@@ -8,6 +8,13 @@
   <link rel="icon" href="<%= BASE_URL %>favicon.ico">
   <title>业务服务工作台</title>
   <script src="static/js/crypoto-js.js"></script>
+  
+  <script src="/static/js/luckysheet/plugins/js/plugin.js"></script>
+  <script src="/static/js/luckysheet/luckysheet.umd.js"></script>
+  <link rel='stylesheet' href='/static/js/luckysheet/plugins/css/pluginsCss.css' />
+  <link rel='stylesheet' href='/static/js/luckysheet/plugins/plugins.css' />
+  <link rel='stylesheet' href='/static/js/luckysheet/css/luckysheet.css' />
+  <link rel='stylesheet' href='/static/js/luckysheet/assets/iconfont/iconfont.css' />
 </head>
 
 <body>

+ 5 - 0
src/assets/simple.scss

@@ -1,4 +1,9 @@
 // simple
+.el {
+    &-dialog.is-fullscreen {
+        border-radius: 0;
+    }
+}
 .simple {
     &-container {
         overflow: auto;

+ 33 - 3
src/pages/main/performance/analysis.vue

@@ -2,7 +2,7 @@
  * @Author       : yuanrunwei
  * @Date         : 2021-12-03 15:18:11
  * @LastEditors  : yuanrunwei
- * @LastEditTime : 2021-12-03 19:57:11
+ * @LastEditTime : 2021-12-04 18:23:59
  * @FilePath     : \spfm-market-front\src\pages\main\performance\analysis.vue
 -->
 <template>
@@ -37,6 +37,36 @@ export default {
                     score: "1",
                     leader: "邱钰",
                 },
+                {
+                    index: 2,
+                    subject: "政企能力攻坚工程",
+                    origin: "八大工程",
+                    content:
+                        "1、推进项目支撑能力升级,优化智慧中台运营能\n2、推进风险防控质量升级,打造风险防控体系\n3、推进集团价值能力提升,打造业务运营监控体系\n",
+                    mark: "1、推进项目支撑能力升级:\n1.1、4月完成资金管理、响应交付功能上线;\n1.2、6月完成政企沙盘、行业库、标杆项目库功能上线;\n1.3、12月完成商机管理、角色管理、欠费管理、ESOP迁移、六项重点产品甩单支撑能力建设、ICT项目支撑能力升级。",
+                    score: "1",
+                    leader: "邱钰",
+                },
+                {
+                    index: 3,
+                    subject: "政企能力攻坚工程",
+                    origin: "八大工程",
+                    content:
+                        "1、推进项目支撑能力升级,优化智慧中台运营能\n2、推进风险防控质量升级,打造风险防控体系\n3、推进集团价值能力提升,打造业务运营监控体系\n",
+                    mark: "1、推进项目支撑能力升级:\n1.1、4月完成资金管理、响应交付功能上线;\n1.2、6月完成政企沙盘、行业库、标杆项目库功能上线;\n1.3、12月完成商机管理、角色管理、欠费管理、ESOP迁移、六项重点产品甩单支撑能力建设、ICT项目支撑能力升级。",
+                    score: "1",
+                    leader: "邱钰",
+                },
+                {
+                    index: 4,
+                    subject: "政企能力攻坚工程",
+                    origin: "八大工程",
+                    content:
+                        "1、推进项目支撑能力升级,优化智慧中台运营能\n2、推进风险防控质量升级,打造风险防控体系\n3、推进集团价值能力提升,打造业务运营监控体系\n",
+                    mark: "1、推进项目支撑能力升级:\n1.1、4月完成资金管理、响应交付功能上线;\n1.2、6月完成政企沙盘、行业库、标杆项目库功能上线;\n1.3、12月完成商机管理、角色管理、欠费管理、ESOP迁移、六项重点产品甩单支撑能力建设、ICT项目支撑能力升级。",
+                    score: "1",
+                    leader: "邱钰",
+                }
             ],
             table_loading: false,
             table_config: [
@@ -57,14 +87,14 @@ export default {
                     label: "主要内容",
                     props: "content",
                     width: 300,
-                    type: "edit",
+                    type: "textarea",
                     align: "left",
                 },
                 {
                     label: "完成标志及计分方法(需体现出完成时间)",
                     props: "mark",
                     width: 500,
-                    type: "edit",
+                    type: "textarea",
                     align: "left",
                 },
                 {

+ 53 - 45
src/pages/main/performance/components/dialog.vue

@@ -1,56 +1,64 @@
 <template>
-    <el-dialog
-        :title="title"
-        :visible.sync="visible"
-        :key="reload"
-        :before-close="handleCancel"
-        :width="width"
-    >
-        <!-- 表格主体部分 -->
-        <slot></slot>
-        <!-- 表格底部 -->
-        <div slot="footer">
-            <el-button @click="handleCancel" size="small">取消</el-button>
-            <el-button @click="handleConfirm" type="primary" size="small"
-                >确定</el-button
-            >
-        </div>
-    </el-dialog>
+  <el-dialog
+    :title="title"
+    :visible.sync="visible"
+    :fullscreen="fullscreen"
+    :key="reload"
+    :before-close="handleCancel"
+    :modal-append-to-body="false"
+    :width="width"
+  >
+    <!-- 表格主体部分 -->
+    <slot></slot>
+    <!-- 表格底部 -->
+    <div slot="footer">
+      <slot name="footer">
+        <el-button @click="handleCancel" size="small">取消</el-button>
+        <el-button @click="handleConfirm" type="primary" size="small"
+          >确定</el-button
+        >
+      </slot>
+    </div>
+  </el-dialog>
 </template>
 
 <script>
 export default {
-    props: {
-        visible: {
-            type: Boolean,
-            default: false,
-        },
-        title: {
-            type: String,
-            default: "",
-        },
-        reload: {
-            type: Number,
-            default: 0,
-        },
-        width: {
-            type: String,
-            default: "500px",
-        },
+  props: {
+    visible: {
+      type: Boolean,
+      default: false,
     },
-    mounted() {
-        console.log("我被初始化了");
+    title: {
+      type: String,
+      default: "",
     },
-    methods: {
-        //   确定的回调
-        handleConfirm() {
-            this.$emit("confirm", false);
-        },
-        //   取消的回调
-        handleCancel() {
-            this.$emit("cancel", false);
-        },
+    reload: {
+      type: Number,
+      default: 0,
     },
+    width: {
+      type: String,
+      default: "500px",
+    },
+    fullscreen: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  mounted() {
+    console.log("我被初始化了");
+  },
+  methods: {
+    //   确定的回调
+    handleConfirm() {
+      this.$emit("confirm", false);
+    },
+    //   取消的回调
+    handleCancel() {
+      this.$emit("cancel", false);
+    },
+  },
 };
 </script>
 

+ 3 - 3
src/pages/main/performance/components/form.vue

@@ -2,7 +2,7 @@
  * @Author       : yuanrunwei
  * @Date         : 2021-11-01 18:03:02
  * @LastEditors  : yuanrunwei
- * @LastEditTime : 2021-12-03 20:27:50
+ * @LastEditTime : 2021-12-04 17:53:54
  * @FilePath     : \spfm-market-front\src\pages\main\performance\components\form.vue
 -->
 <template>
@@ -29,7 +29,7 @@
                             ></el-option>
                         </el-select>
                     </template>
-                    <template v-else-if="['date','month'].includes(type)">
+                    <template v-else-if="['date', 'month'].includes(type)">
                         <el-date-picker
                             v-model="object[props]"
                             :type="type"
@@ -53,7 +53,7 @@
                     >
                 </el-form-item>
             </el-col>
-            <el-col class="flex-justify-align-end" :span="6">
+            <el-col class="flex-justify-align-end" :span="24">
                 <el-button
                     v-for="({ label, props }, index) in handle"
                     :key="index"

+ 94 - 0
src/pages/main/performance/components/sheet.vue

@@ -0,0 +1,94 @@
+<!--
+ * @Author       : yuanrunwei
+ * @Date         : 2021-12-04 14:23:58
+ * @LastEditors  : yuanrunwei
+ * @LastEditTime : 2021-12-04 17:04:04
+ * @FilePath     : \spfm-market-front\src\pages\main\performance\components\sheet.vue
+-->
+
+<template>
+    <div class="sheet-container">
+        <div class="flex-justify-align-end margin-bottom-20">
+            <el-upload
+                class="margin-right-10"
+                action
+                :on-change="handleChange"
+                :show-file-list="false"
+            >
+                <el-button type="primary">上传</el-button>
+            </el-upload>
+            <el-button type="primary">保存</el-button>
+            <el-button type="primary">导出</el-button>
+            <el-button type="primary">返回</el-button>
+            <el-button type="primary">全屏显示</el-button>
+        </div>
+        <div id="luckysheet" class="sheet-container-block"></div>
+    </div>
+</template>
+
+<script>
+import XLSX from "xlsx";
+import luckyexcel from "luckyexcel";
+export default {
+    data() {
+        return {};
+    },
+    methods: {
+        handleInit() {
+            const options = {
+                container: "luckysheet",
+                title: "请上传模板",
+            };
+            window.luckysheet.create(options);
+        },
+        handleCreate(file) {
+            luckyexcel.transformExcelToLucky(file, (export_json) => {
+                const options = {
+                    container: "luckysheet",
+                    data: export_json.sheets,
+                    title: export_json.info.name,
+                    userInfo: export_json.info.name.creator,
+                };
+                window.luckysheet.create(options);
+            });
+        },
+        async handleChange(response) {
+            this.handleCreate(response.raw);
+            let binary = await this.handleFile(response.raw);
+            let workbook = XLSX.read(binary, {
+                type: "binary",
+                cellDates: true,
+            });
+            let sheet = workbook.Sheets[workbook.SheetNames[0]];
+            const data = XLSX.utils.sheet_to_json(sheet);
+            this.handleCreate(data);
+        },
+        handleFile(file) {
+            return new Promise((resolve) => {
+                let reader = new FileReader();
+                reader.readAsBinaryString(file);
+                reader.onload = (event) => {
+                    resolve(event.target.result);
+                };
+            });
+        },
+    },
+    mounted() {
+        this.handleInit();
+    },
+};
+</script>
+
+<style lang="scss" scope>
+.sheet-container {
+    position: fixed;
+    width: calc(100% - 40px);
+    height: 100%;
+    &-block {
+        overflow: hidden;
+        position: absolute;
+        width: 100%;
+        height: 75%;
+    }
+}
+</style>

+ 75 - 17
src/pages/main/performance/components/table.vue

@@ -2,7 +2,7 @@
  * @Author       : yuanrunwei
  * @Date         : 2021-11-01 18:02:58
  * @LastEditors  : yuanrunwei
- * @LastEditTime : 2021-12-03 21:22:43
+ * @LastEditTime : 2021-12-04 18:28:33
  * @FilePath     : \spfm-market-front\src\pages\main\performance\components\table.vue
 -->
 <template>
@@ -25,7 +25,7 @@
                         autosize
                         type="textarea"
                     />
-                    <pre v-else>{{ scope.row[props] }}</pre>
+
                     <el-button
                         size="mini"
                         class="margin-top-10"
@@ -34,6 +34,9 @@
                         {{ !scope.row[`${props}_${type}`] ? "编辑" : "完成" }}
                     </el-button>
                 </div>
+                <div v-else-if="type === 'textarea'">
+                    <pre>{{ scope.row[props] }}</pre>
+                </div>
                 <div v-else>{{ scope.row[props] }}</div>
             </template>
             <template v-if="children">
@@ -46,7 +49,46 @@
                     :align="align || 'center'"
                 >
                     <template #default="scope">
-                        <div>{{ scope.row[props] }}</div>
+                        <div v-if="type === 'edit'">
+                            <el-input
+                                v-if="scope.row[`${props}_${type}`]"
+                                v-model="scope.row[props]"
+                                autosize
+                                type="textarea"
+                            />
+                            <pre v-else>{{ scope.row[props] }}</pre>
+                            <el-button
+                                size="mini"
+                                class="margin-top-10"
+                                @click="handleEdit({ scope, type, props })"
+                            >
+                                {{
+                                    !scope.row[`${props}_${type}`]
+                                        ? "编辑"
+                                        : "完成"
+                                }}
+                            </el-button>
+                        </div>
+                        <div v-else-if="type === 'textarea'">
+                            <pre>{{ scope.row[props] }}</pre>
+                        </div>
+                        <div v-else>{{ scope.row[props] }}</div>
+                    </template>
+                    <template v-if="children">
+                        <el-table-column
+                            v-for="(
+                                { props, label, width, align }, index
+                            ) in children"
+                            :key="index"
+                            :prop="props"
+                            :width="width"
+                            :label="label"
+                            :align="align || 'center'"
+                        >
+                            <template #default="scope">
+                                <div>{{ scope.row[props] }}</div>
+                            </template>
+                        </el-table-column>
                     </template>
                 </el-table-column>
             </template>
@@ -58,29 +100,33 @@
         >
             <template slot-scope="scope">
                 <span
-                    v-for="({ label, props, popconfirm }, index) in handleRow"
+                    v-for="(
+                        { label, props, popconfirm, visible }, index
+                    ) in handleRow"
                     :key="index"
                     class="padding-right-5"
                 >
-                    <el-popconfirm
-                        v-if="popconfirm"
-                        :title="`确定要${label}吗?`"
-                    >
+                    <span v-if="handleFormat(visible, scope.row)">
+                        <el-popconfirm
+                            v-if="popconfirm"
+                            :title="`确定要${label}吗?`"
+                        >
+                            <el-button
+                                slot="reference"
+                                @click="handleClick(props, scope.row)"
+                                type="text"
+                                size="small"
+                                >{{ label }}</el-button
+                            >
+                        </el-popconfirm>
                         <el-button
-                            slot="reference"
+                            v-else
                             @click="handleClick(props, scope.row)"
                             type="text"
                             size="small"
                             >{{ label }}</el-button
                         >
-                    </el-popconfirm>
-                    <el-button
-                        v-else
-                        @click="handleClick(props, scope.row)"
-                        type="text"
-                        size="small"
-                        >{{ label }}</el-button
-                    >
+                    </span>
                 </span>
             </template>
         </el-table-column>
@@ -121,6 +167,18 @@ export default {
         },
     },
     methods: {
+        handleFormat(params, data) {
+            let visible = true;
+            if (params) {
+                visible = false;
+                Object.keys(params).forEach((element) => {
+                    if (params[element].includes(data[element])) {
+                        visible = true;
+                    }
+                });
+            }
+            return visible;
+        },
         handleClick(props, row) {
             this.$emit(props, row);
         },

+ 204 - 116
src/pages/main/performance/department.vue

@@ -1,54 +1,119 @@
 <template>
-  <div class="simple-container">
-    <simple-form :form="table_form" @search="handleSearch">
-      <!-- :handle="table_handle"
+  <div>
+    <div class="simple-container">
+      <simple-form :form="table_form" @search="handleSearch">
+        <!-- :handle="table_handle"
       @add="handleRulesVisible"
       @class="handleDrawer('class')"
       @download="handleDownload" -->
-    </simple-form>
-    <simple-table
-      :list="table_list"
-      :config="table_config"
-      :loading="table_loading"
-      :handle-row="table_handle_row"
-      @check="handleCheck"
-      @edit="handleEdit"
-    ></simple-table>
-    <simple-pagination
-      :page="page"
-      :total="total"
-      @change="handleChange"
-    ></simple-pagination>
+      </simple-form>
+      <simple-table
+        :list="table_list"
+        :config="table_config"
+        :loading="table_loading"
+        :handle-row="table_handle_row"
+        @check="handleCheck"
+        @edit="handleEdit"
+      ></simple-table>
+      <simple-pagination
+        :page="page"
+        :total="total"
+        @change="handleChange"
+      ></simple-pagination>
+    </div>
     <simple-dialog
-      :title="title"
+      fullscreen
+      title="部门绩效"
       :visible="visible"
+      
       :reload="reload"
-      :width="width"
+      width="1200px"
+      @cancel="handleCancel('visible')"
+    >
+      <template>
+        <!-- 按钮部分 -->
+        <div class="flex-justify-between padding-right-20 padding-left-20">
+          <div>
+            <el-button type="primary">转派</el-button>
+            <el-button type="primary" @click="handleApprove">审批</el-button>
+            <el-button type="primary" @click="handleTrack">流程跟踪</el-button>
+            <el-button type="primary">导出</el-button>
+          </div>
+          <div>
+            <el-button @click="handleCancel('visible')" type="primary"
+              >返回</el-button
+            >
+          </div>
+        </div>
+        <!-- 主体部分 -->
+        <analysis />
+      </template>
+      <template v-slot:footer><div></div></template>
+    </simple-dialog>
+    <simple-dialog
+      title="审批"
+      :visible="approve_visible"
+      :reload="reload"
+      width="500px"
+      props="approve_visible"
+      @cancel="handleCancel('approve_visible')"
+    >
+      <el-form :model="approveForm" :rules="approverules" ref="approveForm"
+        ><el-form-item label="审批意见" prop="comments" label-width="80px"
+          ><el-input
+            type="textarea"
+            v-model="approveForm.comments"
+            autosize /></el-form-item
+      ></el-form>
+      <template v-slot:footer
+        ><div>
+          <div v-if="type === '1'">
+            <el-button @click="handleCancel('approve_visible')">结束</el-button>
+            <el-button @click="handleTurn(type)" type="primary"
+              >转副总审批</el-button
+            >
+          </div>
+          <div v-else-if="type === '2'">
+            <el-button @click="handleCancel('approve_visible')">结束</el-button>
+            <el-button @click="handleCancel('approve_visible')">打回</el-button>
+            <el-button @click="handleTurn(type)" type="primary"
+              >转总经理审批</el-button
+            >
+          </div>
+          <div v-else>
+            <el-button @click="handleCancel('approve_visible')">打回</el-button>
+            <el-button @click="handleTurn(type)" type="primary">同意</el-button>
+          </div>
+        </div>
+      </template>
+    </simple-dialog>
+    <simple-dialog
+      title="流程跟踪"
+      :visible="track_visible"
+      :reload="reload"
+      width="600px"
+      props="track_visible"
       @confirm="handleConfirm"
-      @cancel="handleCancel"
+      @cancel="handleCancel('track_visible')"
     >
-      <el-form ref="form" :model="form" label-width="80px">
-        <el-form-item label="可编辑列"
-          ><el-input v-model="form.editrows"
-        /></el-form-item>
-        <el-form-item label="权限规则">
-          <el-select v-model="form.rule">
-            <el-option
-              v-for="item in ruleoptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            ></el-option> </el-select
-        ></el-form-item>
-        <el-form-item label="负责人">
-          <el-cascader-panel
-            v-model="form.charge"
-            :options="chargeoptions"
-            clearable
-            @change="handleCascader"
-          ></el-cascader-panel
-        ></el-form-item>
-      </el-form>
+      <el-table :data="trackList" border>
+        <el-table-column
+          prop="link"
+          label="流程环节"
+          align="center"
+          width="180"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="creatperson"
+          label="处理人"
+          align="center"
+          width="180"
+        >
+        </el-table-column>
+        <el-table-column prop="explain" label="审批说明" align="center">
+        </el-table-column>
+      </el-table>
     </simple-dialog>
   </div>
 </template>
@@ -58,84 +123,44 @@ import simpleForm from "./components/form.vue";
 import simpleTable from "./components/table.vue";
 import simplePagination from "./components/pagination.vue";
 import simpleDialog from "./components/dialog.vue";
+import analysis from "./analysis.vue";
 export default {
   components: {
     simpleForm,
     simpleTable,
     simplePagination,
     simpleDialog,
+    analysis,
   },
   data() {
     return {
       page: 1,
       total: 5,
       //   dialog 参数
-      title: "权限设置",
       visible: false,
+      approve_visible: false,
+      track_visible: false,
       reload: 0,
-      width: "800px",
-      form: {},
-      ruleoptions: [
-        {
-          value: "按行号",
-          label: "按行号",
-        },
-        {
-          value: "按科室分配",
-          label: "按科室分配",
-        },
-        {
-          value: "按负责人分配",
-          label: "按负责人分配",
-        },
-        {
-          value: "所有人员",
-          label: "",
-        },
-      ],
-      chargeoptions: [
+      // 判断类型
+      type: "2",
+      approverules: {
+        comments: [
+          {
+            required: true,
+            message: "请输入审批意见",
+            trigger: "blur",
+          },
+        ],
+      },
+      // 审批意见
+      approveForm: { comments: "" },
+      trackList: [
         {
-          label: "科室名称1",
-          value: "科室名称1",
-          children: [
-            {
-              label: "负责人",
-              value: "负责人",
-              children: [{ label: "尹强", value: "尹强" }],
-            },
-          ],
+          link: "发起工单",
+          creatperson: "XXX  2021-06-08",
+          explain: "",
         },
       ],
-    //   //   弹出层具体的内容
-    //   dialog_content: [
-    //     {
-    //       props: "editrows",
-    //       type: "input",
-    //     },
-    //     {
-    //       label: "权限规则",
-    //       props: "rule",
-    //       type: "select",
-    //     },
-    //     {
-    //       label: "负责人",
-    //       props: "charge",
-    //       type: "cascader",
-    //       options: [
-    //         {
-    //           label: "科室名称1",
-    //           value: "科室名称1",
-    //           children: [
-    //             {
-    //               label: "负责人",
-    //               value: "负责人",
-    //               children: [{ label: "尹强", value: "尹强" }],
-    //             },
-    //           ],
-    //         },
-    //       ],
-    //     },
-    //   ],
       //   顶部form
       table_form: [
         {
@@ -229,6 +254,51 @@ export default {
           preCata6: "周钰",
           preCata7: "已完成",
         },
+          {
+          preCata1: "KPI",
+          preCata2: "信息技术中心2021年度部门KPI绩效计划",
+          preCata3: "XXXXXXXXX",
+          preCata4: "XXXXXXXXX",
+          preCata5: "2021.02.01",
+          preCata6: "周钰",
+          preCata7: "待处理",
+        },
+        {
+          preCata1: "GS",
+          preCata2: "信息技术中心2021年度部门GS绩效计划",
+          preCata3: "XXXXXXXXX",
+          preCata4: "XXXXXXXXX",
+          preCata5: "2021.02.01",
+          preCata6: "周钰",
+          preCata7: "待汇总",
+        },
+        {
+          preCata1: "KPI",
+          preCata2: "信息技术中心2021年度部门KPI绩效计划",
+          preCata3: "XXXXXXXXX",
+          preCata4: "XXXXXXXXX",
+          preCata5: "2021.02.01",
+          preCata6: "周钰",
+          preCata7: "待审批",
+        },
+        {
+          preCata1: "GS",
+          preCata2: "信息技术中心2021年度部门GS绩效计划",
+          preCata3: "XXXXXXXXX",
+          preCata4: "XXXXXXXXX",
+          preCata5: "2021.02.01",
+          preCata6: "周钰",
+          preCata7: "待处理",
+        },
+        {
+          preCata1: "KPI",
+          preCata2: "信息技术中心2021年度部门KPI绩效计划",
+          preCata3: "XXXXXXXXX",
+          preCata4: "XXXXXXXXX",
+          preCata5: "2021.02.01",
+          preCata6: "周钰",
+          preCata7: "已完成",
+        },
       ],
       table_loading: false,
       //   表格里的操作按钮
@@ -285,7 +355,7 @@ export default {
       this.page = page;
       this.handleInit();
     },
-    // 搜索时间
+    // 搜索事件
     handleSearch(data) {
       console.log(data);
     },
@@ -294,23 +364,41 @@ export default {
       console.log(row, "row");
       this.visible = true;
     },
-    // 级联选择
-    handleCascader(data) {
-      console.log(data, "data");
+    handleCheck(row) {
+       console.log(row, "row");
+      this.visible = true;
     },
-    handleCheck() {},
     handleDelete() {},
+    // dialog事件
+    //权限管理事件
+    handleApprove() {
+      this.approve_visible = true;
+    },
+    handleTrack() {
+      this.track_visible = true;
+    },
+    handleTurn(type) {
+      this.handleCancel('approve_visible')
+      console.log(type);
+    },
     handleConfirm(visible) {
-      this.reload++;
-      this.params = {};
-      this.visible = visible;
-      console.log(this.params, "handleConFirm");
+      console.log(visible);
+      this.track_visible = visible;
     },
+    // 关闭方法
     handleCancel(data) {
-      this.reload++;
-      this.params = {};
-      this.visible = data;
-      console.log(data, "handleCancel");
+      switch (data) {
+        case "visible": {
+          this.visible = false;
+        }
+        case "approve_visible": {
+          this.approveForm.comments = ''
+          this.approve_visible = false;
+        }
+        case "track_visible": {
+          this.track_visible = false;
+        }
+      }
     },
   },
 };

+ 20 - 3
src/pages/main/performance/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="performance-container flex-justify-start">
+    <div v-if="routes.length" class="performance-container flex-justify-start">
         <div>
             <el-tabs tab-position="left" v-model="name">
                 <el-tab-pane
@@ -14,7 +14,11 @@
             <div class="font-size-30 padding-bottom-20 padding-left-20">
                 {{ handleLabel(name) }}
             </div>
-            <div :is="`${name}`"></div>
+            <div
+                v-if="!loading"
+                class="performance-container-viewport-component"
+                :is="`${name}`"
+            ></div>
         </div>
     </div>
 </template>
@@ -32,6 +36,7 @@ export default {
     },
     data() {
         return {
+            loading: true,
             name: "department",
             routes: [
                 {
@@ -61,13 +66,25 @@ export default {
             return array[0].label;
         },
     },
+    mounted() {
+        this.$nextTick(() => {
+            this.loading = false;
+        });
+    },
 };
 </script>
 <style lang="scss" scoped>
 .performance-container {
-    padding: 20px;
+    background: #ffffff;
+    padding-top: 20px;
+    margin: 15px;
+    overflow: auto;
+    width: calc(100% - 30px);
+    max-width: calc(100% - 30px);
     height: 100%;
+    overflow-x: hidden;
     &-viewport {
+        width: 100%;
         overflow: auto;
     }
 }

+ 13 - 6
src/pages/main/performance/issue.vue

@@ -21,12 +21,19 @@
         </div>
         <simple-dialog
             title="查看"
-            width="1200px"
+            fullscreen
             @cancel="handleVisible"
             @confirm="handleVisible"
             :visible="template_visible"
-        >
+        ><div class="flex-justify-between padding-right-20 padding-left-20">
+            <div class="color-ffffff">1</div>
+            <div>
+                <el-button type="primary">导出</el-button>
+                <el-button @click="handleVisible" type="primary">返回</el-button>
+            </div>
+        </div>
             <analysis />
+             <template v-slot:footer><div></div></template>
         </simple-dialog>
     </div>
 </template>
@@ -81,10 +88,10 @@ export default {
                     label: "查看",
                     props: "detail",
                 },
-                {
-                    label: "修改",
-                    props: "edit",
-                },
+                // {
+                //     label: "修改",
+                //     props: "edit",
+                // },
                 {
                     label: "撤回",
                     props: "delete",

+ 74 - 35
src/pages/main/performance/mould.vue

@@ -5,7 +5,7 @@
         :form="table_form"
         :handle="table_handle"
         @search="handleSearch"
-        @add="handleAdd"
+        @add="handleVisible('add')"
       ></simple-form>
       <simple-table
         :list="table_list"
@@ -23,12 +23,24 @@
     </div>
     <simple-dialog
       title="查看模板"
-      width="1200px"
+      fullscreen
       @cancel="handleVisible('template')"
       @confirm="handleVisible('template')"
       :visible="template_visible"
     >
+      <div class="flex-justify-between padding-right-20 padding-left-20">
+        <div>
+          <el-button type="primary" @click="handleVisible('power')">权限设置</el-button
+          ><el-button type="primary">导出</el-button>
+        </div>
+        <div>
+          <el-button @click="handleVisible('template')" type="primary"
+            >返回</el-button
+          >
+        </div>
+      </div>
       <analysis />
+      <template v-slot:footer><div></div></template>
     </simple-dialog>
     <simple-dialog
       title="下发"
@@ -60,14 +72,46 @@
       </el-form>
     </simple-dialog>
     <simple-dialog
-      :title="title"
-      :visible="visible"
+      fullscreen
+      title="新增模板"
+      :visible="add_visible"
+      :reload="reload"
+      width="1200px"
+      @confirm="handleVisible('add')"
+      @cancel="handleVisible('add')"
+    >
+      <el-form inline :model="form" label-width="100px">
+        <el-form-item label="绩效类型">
+          <el-select v-model="form.type">
+            <el-option label="部门绩效" value="部门绩效"></el-option
+            ><el-option
+              label="员工绩效"
+              value="员工绩效"
+            ></el-option> </el-select
+        ></el-form-item>
+        <el-form-item label="绩效分类">
+          <el-select v-model="form.class">
+            <el-option label="GS" value="GS"></el-option
+            ><el-option label="KPI" value="KPI"></el-option> </el-select
+        ></el-form-item>
+        <el-form-item label="">
+          <el-button type="primary" @click="handleVisible('power')"
+            >权限设置</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <simple-sheet />
+      <template v-slot:footer><div></div></template>
+    </simple-dialog>
+    <simple-dialog
+      title="权限设置"
+      :visible="power_visible"
       :reload="reload"
-      :width="width"
-      @confirm="handleConfirm"
-      @cancel="handleCancel"
+      width="700px"
+      @confirm="handleVisible('power')"
+      @cancel="handleVisible('power')"
     >
-      <el-form :model="form" label-width="80px">
+      <el-form :model="form" label-width="100px">
         <el-form-item label="可编辑列"
           ><el-input v-model="form.editrows"
         /></el-form-item>
@@ -81,12 +125,13 @@
             ></el-option> </el-select
         ></el-form-item>
         <el-form-item label="负责人">
-          <el-cascader-panel
-            v-model="form.charge"
-            :options="chargeoptions"
-            clearable
-            @change="handleCascader"
-          ></el-cascader-panel
+          <div>
+            <el-cascader-panel
+              v-model="form.charge"
+              :options="charge_options"
+              clearable
+              @change="handleCascader"
+            ></el-cascader-panel></div
         ></el-form-item>
       </el-form>
     </simple-dialog>
@@ -96,6 +141,7 @@
 <script>
 import analysis from "./analysis.vue";
 import simpleForm from "./components/form.vue";
+import simpleSheet from "./components/sheet.vue";
 import simpleTable from "./components/table.vue";
 import simpleDialog from "./components/dialog.vue";
 import simplePagination from "./components/pagination.vue";
@@ -105,6 +151,7 @@ export default {
     simpleTable,
     simpleDialog,
     simpleForm,
+    simpleSheet,
     simplePagination,
   },
   data() {
@@ -113,12 +160,7 @@ export default {
       rows: 10,
       total: 0,
       form: {},
-      //   dialog
-      title: "权限设置",
-      visible: false,
       reload: 0,
-      width: "700px",
-      form: {},
       ruleoptions: [
         {
           value: "按行号",
@@ -137,7 +179,7 @@ export default {
           label: "",
         },
       ],
-      chargeoptions: [
+      charge_options: [
         {
           label: "科室名称1",
           value: "科室名称1",
@@ -150,6 +192,8 @@ export default {
           ],
         },
       ],
+      add_visible: false,
+      power_visible: false,
       template_visible: false,
       issue_visible: false,
       table_loading: false,
@@ -236,19 +280,26 @@ export default {
       this.handleReset();
       this.handleInit();
     },
-    handleAdd() {
-      this.visible = true;
-    },
+    handleAdd() {},
     // 级联选择
     handleCascader(data) {
       console.log(data, "data");
     },
+    handlePower(){
+
+    },
     handleChange(page) {
       this.page = page;
       this.handleInit();
     },
     handleVisible(props) {
       switch (props) {
+        case "add":
+          this.add_visible = !this.add_visible;
+          break;
+        case "power":
+          this.power_visible = !this.power_visible;
+          break;
         case "template":
           this.template_visible = !this.template_visible;
           break;
@@ -259,18 +310,6 @@ export default {
     handleReset() {
       this.page = 1;
     },
-    handleConfirm(visible) {
-      this.reload++;
-      this.params = {};
-      this.visible = visible;
-      console.log(this.params, "handleConFirm");
-    },
-    handleCancel(data) {
-      this.reload++;
-      this.params = {};
-      this.visible = data;
-      console.log(data, "handleCancel");
-    },
   },
   mounted() {
     this.handleInit();

+ 7 - 0
src/pages/main/performance/reply.vue

@@ -3,6 +3,7 @@
         <div class="simple-container">
             <simple-form
                 :form="table_form"
+                :handle="table_handle"
                 @search="handleSearch"
             ></simple-form>
             <simple-table
@@ -75,6 +76,12 @@ export default {
                 },
             ],
             table_list: [],
+            table_handle: [
+                {
+                    label: "导出",
+                    props: "download",
+                },
+            ],
             table_handle_row: [],
             table_config: [
                 {

+ 6 - 0
src/router/index.js

@@ -16,6 +16,12 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/infotech/index.vue'], resolve)
         },
         {
+            meta: { name:  '绩效', keepAlive: false },
+            path: '/performance',
+            name: 'performance',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/performance/index.vue'], resolve)
+        },
+        {
             meta: { name:  '宣传稿件下发', keepAlive: false,type: 1 },
             path: '/infotechgj',
             name: 'infotechgj',