Просмотр исходного кода

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-eom into dev

yusheng 1 год назад
Родитель
Сommit
c7e29efbd2

+ 23 - 0
src/components/jimureport/api.js

@@ -0,0 +1,23 @@
+import request from '@/utils/request';
+
+export async function getServiceurl () {
+  const res = await request.get('sys/jimureport/getServiceurl');
+  if (res.data.code == 0 && res.data.data) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+export async function getPrintMap () {
+  const res = await request.get('sys/jimureport/getPrintMap');
+  if (res.data.code == 0 && res.data.data) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+export async function getJmPrintViewUrl (code) {
+  const res = await request.get('sys/jimureport/getJmPrintViewUrl/'+code);
+  if (res.data.code == 0 && res.data.data) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 23 - 0
src/components/jimureport/browse.vue

@@ -0,0 +1,23 @@
+<template>
+  <iframe
+    :src="url"
+    width="100%"
+    style="height: calc(100vh - 100px)"
+    frameborder="0"
+    allowfullscreen="true"
+  ></iframe>
+</template>
+
+<script>
+  export default {
+    props: {
+      url: ''
+    },
+    data() {
+      return {};
+    },
+
+    methods: {}
+  };
+</script>
+<style scoped lang="scss"></style>

+ 52 - 0
src/components/jimureport/browseModal.vue

@@ -0,0 +1,52 @@
+<template>
+  <div>
+    <ele-modal
+      :visible.sync="showEditFlag"
+      :close-on-click-modal="false"
+      custom-class="ele-dialog-form"
+      append-to-body
+      :fullscreen="true"
+    >
+      <browse :url="fileUrl"></browse
+    ></ele-modal>
+    <el-link type="primary" @click="open">{{ text }}</el-link>
+  </div>
+</template>
+
+<script>
+  import { getToken } from '@/utils/token-util';
+  import { getJmPrintViewUrl } from './api.js';
+  import browse from './browse.vue';
+
+  export default {
+    components: {
+      browse
+    },
+    props: {
+      text: {
+        default: '打印预览'
+      },
+      businessId: {
+        default: ''
+      },
+      businessCode: {
+        default: ''
+      }
+    },
+    data() {
+      return {
+        fileUrl: '',
+        showEditFlag: false
+      };
+    },
+
+    methods: {
+      async open() {
+        this.showEditFlag = true;
+        let url = await getJmPrintViewUrl(this.businessCode);
+        this.fileUrl = `${url}?token=${getToken()}&id=${this.businessId}`;
+      }
+    }
+  };
+</script>
+<style scoped lang="scss"></style>

+ 26 - 5
src/mixins/tableColumnsMixin.js

@@ -70,7 +70,9 @@ export default {
       const keysA = new Set(sList.map((item) => item[key]));
       const keysB = new Set(dList.map((item) => item[key]));
       // 本地 比 缓存服务端 多的对象(新增)
-      const added = dList.filter((item) => !keysA.has(item[key]));
+      const added = dList.filter((item) => {
+        return !keysA.has(item[key]) && (item.prop || item.label === '操作');
+      });
       // 本地 比 缓存服务端 少的对象(删除)
       const removed = sList.filter((item) => !keysB.has(item[key]));
       const removedPropSet = new Set(removed.map((item) => item[key]));
@@ -82,9 +84,6 @@ export default {
           item.id = item.prop;
         } else if (item.columnKey) {
           item.id = item.columnKey;
-        } else {
-          item.prop = item.label;
-          item.id = item.label;
         }
         item.checked = true;
       });
@@ -92,8 +91,30 @@ export default {
       if (added.length > 0 || removed.length > 0) {
         updateType = 1;
       }
+
+      // 更新项:key 存在但内容变化
+      const dMap = new Map(dList.map((item) => [item[key], item]));
+      const updated = keptA.map((sItem) => {
+        const dItem = dMap.get(sItem[key]);
+        if (dItem && dItem.prop && sItem.prop !== dItem.prop) {
+          updateType = 1;
+          // 记录旧值和新值
+          const oldValue = sItem.prop;
+          const newValue = dItem.prop;
+          // 遍历所有属性,动态替换匹配旧值的字段
+          const updatedItem = { ...sItem };
+          Object.keys(updatedItem).forEach((k) => {
+            if (updatedItem[k] === oldValue) {
+              updatedItem[k] = newValue;
+            }
+          });
+          return updatedItem;
+        }
+        return sItem;
+      });
+
       // 合并保留的对象和新增的对象
-      return { nlist: [...keptA, ...added], type: updateType };
+      return { nlist: [...updated, ...added], type: updateType };
     },
 
     // 提交columns配置

+ 4 - 0
src/store/modules/user.js

@@ -20,6 +20,10 @@ const formatRouter = (list) => {
         authorities.push(p);
         p.hide = true;
       }
+      //报表菜单 source = 2 为报表时 extend 为报表id
+      if (p.source === 2 && p.extend) {
+        p.path = p.path + '/' + p.extend;
+      }
       //  else {
       if (p.children?.length) {
         p.children = fn(p.children);

+ 44 - 0
src/views/reportForms/sourceLink/index.vue

@@ -0,0 +1,44 @@
+<template>
+    <div class="ele-body">
+        <jimureportBrowse :url="fileUrl"></jimureportBrowse>
+    </div>
+  </template>
+  
+  <script>
+  import jimureportBrowse from '@/components/jimureport/browse.vue';
+  import { getServiceurl } from '@/components/jimureport/api.js';
+  import { getToken } from '@/utils/token-util';
+  export default {
+    components: {
+        jimureportBrowse
+    },
+  
+    data() {
+      return {
+        fileUrl: ''
+      };
+    },
+    computed: {},
+    watch: {
+      '$route'(to, from) {
+        if (to.path) {
+          this.getJmPrintBrowse();  // 重新加载数据
+        }
+      }
+    },
+    created() {
+        this.getJmPrintBrowse()
+    },
+    methods: {
+       async getJmPrintBrowse(){
+        let id = this.$route.path.split('/').pop()
+        let url = await getServiceurl();
+        this.fileUrl = `${url}/jmreport/view/${id}?token=${getToken()}`;
+       }
+    }
+  };
+  </script>
+  <style lang="scss" scoped>
+
+  </style>
+