Эх сурвалжийг харах

Merge branch 'feature/log' into develop

cc12458 1 жил өмнө
parent
commit
a52bd85f0f

+ 86 - 79
package-lock.json

@@ -1702,63 +1702,6 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
         "ssri": {
           "version": "8.0.1",
           "resolved": "https://registry.npmmirror.com/ssri/download/ssri-8.0.1.tgz",
@@ -1767,28 +1710,6 @@
           "requires": {
             "minipass": "^3.1.1"
           }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "vue-loader-v16": {
-          "version": "npm:vue-loader@16.8.3",
-          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
-          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chalk": "^4.1.0",
-            "hash-sum": "^2.0.0",
-            "loader-utils": "^2.0.0"
-          }
         }
       }
     },
@@ -4104,6 +4025,11 @@
         "assert-plus": "^1.0.0"
       }
     },
+    "dayjs": {
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+    },
     "de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/de-indent/download/de-indent-1.0.2.tgz",
@@ -11112,6 +11038,87 @@
         }
       }
     },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.8.3",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
     "vue-print-nb": {
       "version": "1.7.4",
       "resolved": "https://registry.npmmirror.com/vue-print-nb/download/vue-print-nb-1.7.4.tgz",

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
   "dependencies": {
     "axios": "^0.21.1",
     "core-js": "^3.6.5",
+    "dayjs": "^1.11.13",
     "echarts": "^4.8.0",
     "element-ui": "^2.15.14",
     "vue": "^2.6.11",

+ 29 - 1
src/api/system.js

@@ -1,4 +1,5 @@
-import request from '@/utils/request.js'
+import request from '@/utils/request.js';
+import dayjs from 'dayjs';
 
 
 // 添加医共体
@@ -430,4 +431,31 @@ export function editInsurance(data) {
         method: 'post',
         data
     })
+}
+
+export function getLogFile() {
+    return request({
+        url: '/system/version/recordList',
+        method: 'post',
+    }).then(res => res.Data.map(item => {
+        const time = dayjs((item.showTime || item.updateTime || item.createTime || ''));
+        return {
+            id: item.id,
+            content: item.content,
+            title: time.format('YYYY/MM/DD HH:mm:ss'),
+            time: time.valueOf()
+        };
+    }).sort((a, b) => b.time - a.time));
+}
+
+export function setLogFile(data) {
+    return request({
+        url: '/system/version/saveOrUpdate',
+        method: 'post',
+        data: {
+            id: data.id === -1 ? null : data.id,
+            showTime: data.time.replace(' ', 'T'),
+            content: data.content,
+        }
+    })
 }

+ 90 - 4
src/views/system/Help.vue

@@ -33,12 +33,54 @@
       <el-button size="mini" type="danger" @click="logOut">退出登录</el-button>
       <!-- <div class="sure flex-center bg-red" @click="logOut()">退出登录</div> -->
     </div>
+    <div style="margin: 12px 0;">
+      <div>
+        <span>版本更新记录:</span>
+        <el-button v-if="logEditable" type="primary" size="small" icon="el-icon-plus" circle
+                   @click="start();"
+        ></el-button>
+      </div>
+      <div style="margin-top: 16px;max-width: 800px;">
+        <el-timeline v-loading="logLoading">
+          <template v-for="item in log">
+            <el-timeline-item v-if="item.id === logEdit" :key="item.id" icon="el-icon-edit">
+              <el-date-picker v-model="logModel.time" placeholder="版本更新时间" size="small"
+                              type="datetime" value-format="yyyy-MM-dd HH:mm:ss" :clearable="false"
+                              :disabled="logSaving"
+              ></el-date-picker>
+              <el-card style="margin-top: 12px;">
+                <el-input v-model="logModel.content" placeholder="版本更新内容"
+                          type="textarea" :autosize="{ minRows: 2}"
+                          :disabled="logSaving"
+                ></el-input>
+                <div style="margin-top: 12px; text-align: right;">
+                  <el-button size="small" :disabled="logSaving" @click="logEdit = false;logModel.content=''">取消
+                  </el-button>
+                  <el-button type="primary" size="small" :disabled="logSaving"
+                             @click="setLogFile();logModel.content=''">保存
+                  </el-button>
+                </div>
+              </el-card>
+            </el-timeline-item>
+            <el-timeline-item v-else type="info" placement="top" :timestamp="item.title">
+              <el-card style="position: relative">
+                <div style="white-space: pre;line-height: 1.75">{{ item.content }}</div>
+                <el-button v-if="logEditable" style="position: absolute; right: 6px;bottom: 6px;"
+                           type="primary" icon="el-icon-edit" circle size="mini"
+                           @click="start(item)"></el-button>
+              </el-card>
+            </el-timeline-item>
+          </template>
+        </el-timeline>
+      </div>
+    </div>
   </div>
 </template>
 <script>
-import { changePas } from "@/api/system.js";
-import { load } from "mime";
-import { mapState, mapGetters, mapActions, mapMutations } from "vuex";
+import dayjs from 'dayjs';
+import {changePas, getLogFile, setLogFile} from '@/api/system.js';
+import {mapGetters, mapMutations} from 'vuex';
+
 export default {
   data() {
     return {
@@ -46,10 +88,54 @@ export default {
       pas: "",
       newPas: "",
       newPas1: "",
-      downloadUrl: process.env.VUE_APP_DOWNLOAD
+      downloadUrl: process.env.VUE_APP_DOWNLOAD,
+
+      log: [],
+      logModel: {
+        time: '',
+        content: '',
+      },
+      logEdit: false,
+      logEditable: false,
+      logLoading: false,
+      logSaving: false,
     };
   },
+  computed: {
+    ...mapGetters(['getPermissions']),
+  },
+  created() {
+    this.getLogFile();
+    setTimeout(() => {
+      this.logEditable = this.getPermissions.includes('5-9-edit');
+    }, 500);
+  },
   methods: {
+    async setLogFile() {
+      this.logSaving = true;
+      try {
+        await setLogFile(this.logModel);
+        this.$message.success(`保存成功`);
+        if (this.log[0].id === -1) { this.log.shift();}
+        this.logEdit = '';
+        await this.getLogFile();
+      } catch (error) { }
+      this.logSaving = false;
+    },
+    async getLogFile() {
+      try {
+        this.logLoading = true;
+        this.log = await getLogFile();
+      } catch (error) {}
+      this.logLoading = false;
+    },
+    start(data) {
+      if (this.log.length && this.log[0].id === -1) {this.log.shift();}
+      const {id = -1, content = '', time = Date.now()} = data || {};
+      this.logModel = {id, content, time: dayjs(time).format('YYYY-MM-DD HH:mm:ss')};
+      this.logEdit = this.logModel.id;
+      if (id === -1) this.log.unshift(this.logModel);
+    },
     // 退出登录
     logOut() {
       this.setActive("0");