Explorar el Código

文件查阅功能开发,过期事务催办功能开发

lidie hace 1 año
padre
commit
9c29c2e62b

+ 95 - 90
src/business/platform/cat/type/tree.vue

@@ -1,24 +1,24 @@
 <template>
-  <van-popup
-    v-model="visible"
-    closeable
-    position="left"
-    :style="{ height: '100%', width: '80%' }"
-    @opened="loadTreeData"
-    @close="handleClose"
-  >
-    <van-nav-bar :title="title" fixed />
-    <div class="ibps-fixed-navbar ibps-fixed-top">
-      <van-loading v-if="loading" vertical>加载中...</van-loading>
-      <ibps-tree
-        v-else
-        :tree-data="treeData"
-        :props="props"
-        last-class
-        @node-click="handleNodeClick"
-      />
-    </div>
-  </van-popup>
+    <van-popup
+        v-model="visible"
+        closeable
+        position="left"
+        :style="{ height: '100%', width: '80%' }"
+        @opened="loadTreeData"
+        @close="handleClose"
+    >
+        <van-nav-bar :title="title" fixed />
+        <div class="ibps-fixed-navbar ibps-fixed-top">
+            <van-loading v-if="loading" vertical>加载中...</van-loading>
+            <ibps-tree
+                v-else
+                :tree-data="treeData"
+                :props="props"
+                last-class
+                @node-click="handleNodeClick"
+            />
+        </div>
+    </van-popup>
 </template>
 
 <script>
@@ -27,81 +27,86 @@ import TreeUtils from '@/utils/tree'
 import IbpsTree from '@/components/ibps-tree/index.vue'
 
 export default {
-  components: {
-    IbpsTree
-  },
-  props: {
-    value: {
-      type: Boolean,
-      default: false
+    components: {
+        IbpsTree
     },
-    title: {
-      type: String,
-      default: '分类'
+    props: {
+        value: {
+            type: Boolean,
+            default: false
+        },
+        title: {
+            type: String,
+            default: '分类'
+        },
+        categoryKey: {
+            type: String
+        }
     },
-    categoryKey: {
-      type: String
-    }
-  },
-  data() {
-    return {
-      visible: false,
-      loading: false,
-      treeData: [],
-      props: {
-        children: 'children',
-        label: 'name'
-      }
-    }
-  },
-  watch: {
-    value(val, oldVal) {
-      if (val !== oldVal) {
-        this.visible = val
-      }
-    }
-  },
-  created() {
-    this.loadTreeData()
-  },
-
-  methods: {
-    loadTreeData() {
-      if (this.$utils.isNotEmpty(this.treeData)) {
-        this.loading = false
-        return
-      }
-      this.loading = true
-      findTreeData({ categoryKey: this.categoryKey })
-        .then(response => {
-          const data = response.data || []
-          const treeData = TreeUtils.transformToTreeFormat(data, {
-            idKey: 'id',
-            parentIdKey: 'parentId',
-            childrenKey: 'children'
-          })
-          const mid = []
-          treeData[0].children.forEach((it, i) => {
-            if (it.name != '待删除' && it.name != '其它') {
-              mid.push(it)
+    data() {
+        return {
+            visible: false,
+            loading: false,
+            treeData: [],
+            props: {
+                children: 'children',
+                label: 'name'
             }
-          })
-          treeData[0].children = mid
-          this.treeData = treeData
-          this.loading = false
-        })
-        .catch(() => {
-          this.loading = false
-        })
+        }
     },
-    handleClose() {
-      this.$emit('close', false)
+    watch: {
+        value(val, oldVal) {
+            if (val !== oldVal) {
+                this.visible = val
+            }
+        }
     },
-    handleNodeClick(item) {
-      this.handleClose()
-      const data = item.data
-      this.$emit('node-click', data.parentId === '-1' ? {} : data)
+    created() {
+        this.loadTreeData()
+    },
+
+    methods: {
+        loadTreeData() {
+            const { first = '', second = '' } = this.$store.getters.level || {}
+            if (this.$utils.isNotEmpty(this.treeData)) {
+                this.loading = false
+                return
+            }
+            this.loading = true
+            const params = { categoryKey: this.categoryKey }
+            if (this.categoryKey === 'FILE_TYPE') {
+                params.diDian = second || first
+            }
+            findTreeData(params)
+                .then(response => {
+                    const data = response.data || []
+                    const treeData = TreeUtils.transformToTreeFormat(data, {
+                        idKey: 'id',
+                        parentIdKey: 'parentId',
+                        childrenKey: 'children'
+                    })
+                    const mid = []
+                    treeData[0].children.forEach((it, i) => {
+                        if (it.name !== '待删除' && it.name !== '其它') {
+                            mid.push(it)
+                        }
+                    })
+                    treeData[0].children = mid
+                    this.treeData = treeData
+                    this.loading = false
+                })
+                .catch(() => {
+                    this.loading = false
+                })
+        },
+        handleClose() {
+            this.$emit('close', false)
+        },
+        handleNodeClick(item) {
+            this.handleClose()
+            const data = item.data
+            this.$emit('node-click', data.parentId === '-2' ? {} : data)
+        }
     }
-  }
 }
 </script>

+ 407 - 395
src/router/routes.js

@@ -1,428 +1,440 @@
 /* Layout */
-import Layout from "@/views/layout/layout";
-import LayoutInfo from "@/views/layout/layout-info";
-import LayoutDefault from "@/views/layout/layout-default";
+import Layout from '@/views/layout/layout'
+import LayoutInfo from '@/views/layout/layout-info'
+import LayoutDefault from '@/views/layout/layout-default'
 // import Main from '@/views/layout/app-main'
 
 // 由于懒加载页面太多的话会造成webpack热更新太慢,所以开发环境不使用懒加载,只有生产环境使用懒加载
-const _import = require("@/utils/util.import." + process.env.NODE_ENV);
+const _import = require('@/utils/util.import.' + process.env.NODE_ENV)
 
 /**
  * 在主框架内显示
  */
 const frameIn = [
-  {
-    path: "/",
-    redirect: { name: "dashboard" },
-    component: Layout,
-    children: [
-      // 首页
-      {
-        path: "dashboard",
-        name: "dashboard",
-        meta: {
-          title: "首页",
-          auth: true
-        },
-        component: _import("/system/dashboard")
-      },
-      // 刷新页面 必须保留
-      {
-        path: "refresh",
-        name: "refresh",
-        hidden: true,
-        component: _import("/system/function/refresh")
-      },
-      // 页面重定向 必须保留
-      {
-        path: "redirect/:route*",
-        name: "redirect",
-        hidden: true,
-        component: _import("/system/function/redirect")
-      }
-    ]
-  }
-];
+    {
+        path: '/',
+        redirect: { name: 'dashboard' },
+        component: Layout,
+        children: [
+            // 首页
+            {
+                path: 'dashboard',
+                name: 'dashboard',
+                meta: {
+                    title: '首页',
+                    auth: true
+                },
+                component: _import('/system/dashboard')
+            },
+            // 刷新页面 必须保留
+            {
+                path: 'refresh',
+                name: 'refresh',
+                hidden: true,
+                component: _import('/system/function/refresh')
+            },
+            // 页面重定向 必须保留
+            {
+                path: 'redirect/:route*',
+                name: 'redirect',
+                hidden: true,
+                component: _import('/system/function/redirect')
+            }
+        ]
+    }
+]
 
 /**
  * 在主框架之外显示
  */
 const frameOut = [
-  // 登录
-  {
-    path: "/login",
-    name: "login",
-    meta: {
-      title: "登录"
-    },
-    component: _import("/system/login")
-  },
-  {
-    path: "/fileView",
-    name: "fileView",
-    meta: {
-      title: "文件预览页"
+    // 登录
+    {
+        path: '/login',
+        name: 'login',
+        meta: {
+            title: '登录'
+        },
+        component: _import('/system/login')
     },
-    component: _import("/viewFile")
-  },
-  {
-    path: "/iframe",
-    name: "iframe",
-    meta: {
-      title: "iframe"
+    {
+        path: '/fileView',
+        name: 'fileView',
+        meta: {
+            title: '文件预览页'
+        },
+        component: _import('/viewFile')
     },
-    component: _import("/system/iframe")
-  }
-];
+    {
+        path: '/iframe',
+        name: 'iframe',
+        meta: {
+            title: 'iframe'
+        },
+        component: _import('/system/iframe')
+    }
+]
 
 /**
  * 错误页面
  */
 const errorPage = [
-  {
-    path: "/404",
-    name: "error404",
-    meta: {
-      title: "404-页面不存在"
-    },
-    hidden: true,
-    component: _import("/system/error/404")
-  },
-  {
-    path: "/401",
-    name: "error401",
-    meta: {
-      title: "401- 未授权"
-    },
-    hidden: true,
-    component: _import("/system/error/401")
-  },
-  {
-    path: "/403",
-    name: "error403",
-    meta: {
-      title: "403-权限不足"
-    },
-    hidden: true,
-    component: _import("/system/error/403")
-  }
-  // {
-  //   path: '/nomenu',
-  //   name: 'nomenu',
-  //   meta: {
-  //     title: '没有菜单资源'
-  //   },
-  //   hidden: true,
-  //   component: _import('/system/error/nomenu')
-  // }
-];
-
-// 自定义
-const frameCustom = [
-  {
-    path: "/next-menu",
-    redirect: "index",
-    component: LayoutInfo,
-    children: [
-      {
-        path: "index",
-        name: "next-menu",
-        meta: { title: "更多", icon: "dashboard" },
-        component: _import("/system/dashboard/next-menu")
-      }
-    ]
-  },
-  // {
-  //   path: '/message',
-  //   component: Layout,
-  //   redirect: 'index',
-  //   children: [
-  //     {
-  //       path: 'index',
-  //       name: 'message',
-  //       meta: { title: '消息', icon: 'message' },
-  //       component:_import('/message/index')
-  //     }, {
-  //       path: 'chat',
-  //       name: 'chat',
-  //       meta: { title: '聊天', icon: 'message' },
-  //       component:_import('/message/index')
-  //     }
-  //   ]
-  // },
-  {
-    path: "/notice",
-    component: Layout,
-    redirect: "index",
-    children: [
-      {
-        path: "index",
-        name: "notice",
-        meta: { title: "公告", icon: "notice" },
-        component: _import("/platform/notice/index")
-      }
-    ]
-  },
-  {
-    path: "/contacts",
-    component: Layout,
-    redirect: "index",
-    children: [
-      {
-        path: "index",
-        name: "contacts",
-        meta: { title: "通讯录", icon: "contacts" },
-        component: _import("/platform/contacts/index")
-      }
-    ]
-  },
-  {
-    path: "/message/inner/receive",
-    component: Layout,
-    redirect: "index",
-    children: [
-      {
-        path: "index",
-        name: "news",
-        meta: { title: "我的消息", icon: "news" },
-        component: _import("/platform/message/inner/receive")
-      }
-    ]
-  },
-  {
-    path: "/my",
-    component: Layout,
-    redirect: "index",
-    children: [
-      {
-        path: "index",
-        name: "my",
-        meta: { title: "我的", icon: "my" },
-        component: _import("/platform/my/index")
-      },
-      {
-        path: "userInfo",
-        name: "userInfo",
-        meta: {
-          title: "个人信息",
-          icon: "my",
-          isLeftBar: true,
-          isShowBar: false
-        },
-        component: _import("/platform/my/user-info")
-      },
-      {
-        path: "changePassword",
-        name: "changePassword",
+    {
+        path: '/404',
+        name: 'error404',
         meta: {
-          title: "修改密码",
-          icon: "my",
-          isLeftBar: true,
-          isShowBar: false
+            title: '404-页面不存在'
         },
-        component: _import("/platform/my/change-password")
-      },
-      // {
-      //   path: 'setting',
-      //   name: 'setting',
-      //   meta: { title: '设置', icon: 'my', isLeftBar: true, isShowBar: false },
-      //   component:_import('/platform/my/setting')
-      // },
-      {
-        path: "help",
-        name: "help",
+        hidden: true,
+        component: _import('/system/error/404')
+    },
+    {
+        path: '/401',
+        name: 'error401',
         meta: {
-          title: "帮助",
-          icon: "help",
-          isLeftBar: true,
-          isShowBar: false
+            title: '401- 未授权'
         },
-        component: _import("/platform/my/help")
-      },
-      {
-        path: "aboutUs",
-        name: "aboutUs",
+        hidden: true,
+        component: _import('/system/error/401')
+    },
+    {
+        path: '/403',
+        name: 'error403',
         meta: {
-          title: "关于我们",
-          icon: "my",
-          isLeftBar: true,
-          isShowBar: false
+            title: '403-权限不足'
         },
-        component: _import("/platform/my/about-us")
-      }
-    ]
-  },
-  {
-    path: "/bpmn",
-    redirect: "pending",
-    component: LayoutDefault,
-    children: [
-      {
-        path: "pending/index",
-        name: "pending",
-        meta: { title: "待办事宜" },
-        component: _import("/platform/bpmn/pending/index")
-      },
-      {
-        path: "pending-matter/index",
-        name: "pendingMatter",
-        meta: { title: "待办事宜" },
-        component: _import("/platform/bpmn/pending-matter/index")
-      },
+        hidden: true,
+        component: _import('/system/error/403')
+    }
+    // {
+    //   path: '/nomenu',
+    //   name: 'nomenu',
+    //   meta: {
+    //     title: '没有菜单资源'
+    //   },
+    //   hidden: true,
+    //   component: _import('/system/error/nomenu')
+    // }
+]
+
+// 自定义
+const frameCustom = [
+    {
+        path: '/next-menu',
+        redirect: 'index',
+        component: LayoutInfo,
+        children: [
+            {
+                path: 'index',
+                name: 'next-menu',
+                meta: { title: '更多', icon: 'dashboard' },
+                component: _import('/system/dashboard/next-menu')
+            }
+        ]
+    },
+    // {
+    //   path: '/message',
+    //   component: Layout,
+    //   redirect: 'index',
+    //   children: [
+    //     {
+    //       path: 'index',
+    //       name: 'message',
+    //       meta: { title: '消息', icon: 'message' },
+    //       component:_import('/message/index')
+    //     }, {
+    //       path: 'chat',
+    //       name: 'chat',
+    //       meta: { title: '聊天', icon: 'message' },
+    //       component:_import('/message/index')
+    //     }
+    //   ]
+    // },
+    {
+        path: '/notice',
+        component: Layout,
+        redirect: 'index',
+        children: [
+            {
+                path: 'index',
+                name: 'notice',
+                meta: { title: '公告', icon: 'notice' },
+                component: _import('/platform/notice/index')
+            }
+        ]
+    },
+    {
+        path: '/contacts',
+        component: Layout,
+        redirect: 'index',
+        children: [
+            {
+                path: 'index',
+                name: 'contacts',
+                meta: { title: '通讯录', icon: 'contacts' },
+                component: _import('/platform/contacts/index')
+            }
+        ]
+    },
+    {
+        path: '/message/inner/receive',
+        component: Layout,
+        redirect: 'index',
+        children: [
+            {
+                path: 'index',
+                name: 'news',
+                meta: { title: '我的消息', icon: 'news' },
+                component: _import('/platform/message/inner/receive')
+            }
+        ]
+    },
+    {
+        path: '/my',
+        component: Layout,
+        redirect: 'index',
+        children: [
+            {
+                path: 'index',
+                name: 'my',
+                meta: { title: '我的', icon: 'my' },
+                component: _import('/platform/my/index')
+            },
+            {
+                path: 'userInfo',
+                name: 'userInfo',
+                meta: {
+                    title: '个人信息',
+                    icon: 'my',
+                    isLeftBar: true,
+                    isShowBar: false
+                },
+                component: _import('/platform/my/user-info')
+            },
+            {
+                path: 'changePassword',
+                name: 'changePassword',
+                meta: {
+                    title: '修改密码',
+                    icon: 'my',
+                    isLeftBar: true,
+                    isShowBar: false
+                },
+                component: _import('/platform/my/change-password')
+            },
+            // {
+            //   path: 'setting',
+            //   name: 'setting',
+            //   meta: { title: '设置', icon: 'my', isLeftBar: true, isShowBar: false },
+            //   component:_import('/platform/my/setting')
+            // },
+            {
+                path: 'help',
+                name: 'help',
+                meta: {
+                    title: '帮助',
+                    icon: 'help',
+                    isLeftBar: true,
+                    isShowBar: false
+                },
+                component: _import('/platform/my/help')
+            },
+            {
+                path: 'aboutUs',
+                name: 'aboutUs',
+                meta: {
+                    title: '关于我们',
+                    icon: 'my',
+                    isLeftBar: true,
+                    isShowBar: false
+                },
+                component: _import('/platform/my/about-us')
+            }
+        ]
+    },
+    {
+        path: '/bpmn',
+        redirect: 'pending',
+        component: LayoutDefault,
+        children: [
+            {
+                path: 'pending/index',
+                name: 'pending',
+                meta: { title: '待办事宜' },
+                component: _import('/platform/bpmn/pending/index')
+            },
+            {
+                path: 'pending-matter/index',
+                name: 'pendingMatter',
+                meta: { title: '待办事宜' },
+                component: _import('/platform/bpmn/pending-matter/index')
+            },
 
-      {
-        path: "completed/index",
-        name: "completed",
-        meta: { title: "办结事宜" },
-        component: _import("/platform/bpmn/completed/index")
-      },
-      {
-        path: "handled/index",
-        name: "handled",
-        meta: { title: "已办事宜" },
-        component: _import("/platform/bpmn/handled/index")
-      },
-      {
-        path: "myRequest/index",
-        name: "myRequest",
-        meta: { title: "我的请求" },
-        component: _import("/platform/bpmn/my-request/index")
-      },
-      {
-        path: "newProcess/index",
-        name: "newProcess",
-        meta: { title: "新建流程" },
-        component: _import("/platform/bpmn/new-process/index")
-      },
-      {
-        path: "myDraft/index",
-        name: "myDraft",
-        meta: { title: "我的草稿" },
-        component: _import("/platform/bpmn/my-draft/index")
-      },
-      {
-        path: "myRevoke/index",
-        name: "myRevoke",
-        meta: { title: "可撤销事务" },
-        component: _import("/platform/bpmn/my-revoke/index")
-      },
-      {
-        path: "uploadAttachment/index",
-        name: "uploadAttachment",
-        meta: { title: "上传附件" },
-        component: _import("/platform/bpmn/upload-attachment/index")
-      },
-      {
-        path: "myCompleted/index",
-        name: "myCompleted",
-        meta: { title: "我结束的流程" },
-        component: _import("/platform/bpmn/my-completed/index")
-      },
+            {
+                path: 'completed/index',
+                name: 'completed',
+                meta: { title: '办结事宜' },
+                component: _import('/platform/bpmn/completed/index')
+            },
+            {
+                path: 'handled/index',
+                name: 'handled',
+                meta: { title: '已办事宜' },
+                component: _import('/platform/bpmn/handled/index')
+            },
+            {
+                path: 'myRequest/index',
+                name: 'myRequest',
+                meta: { title: '我的请求' },
+                component: _import('/platform/bpmn/my-request/index')
+            },
+            {
+                path: 'newProcess/index',
+                name: 'newProcess',
+                meta: { title: '新建流程' },
+                component: _import('/platform/bpmn/new-process/index')
+            },
+            {
+                path: 'myDraft/index',
+                name: 'myDraft',
+                meta: { title: '我的草稿' },
+                component: _import('/platform/bpmn/my-draft/index')
+            },
+            {
+                path: 'myRevoke/index',
+                name: 'myRevoke',
+                meta: { title: '可撤销事务' },
+                component: _import('/platform/bpmn/my-revoke/index')
+            },
+            {
+                path: 'uploadAttachment/index',
+                name: 'uploadAttachment',
+                meta: { title: '上传附件' },
+                component: _import('/platform/bpmn/upload-attachment/index')
+            },
+            {
+                path: 'myCompleted/index',
+                name: 'myCompleted',
+                meta: { title: '我结束的流程' },
+                component: _import('/platform/bpmn/my-completed/index')
+            },
 
-      {
-        path: "taskChange/index",
-        name: "taskChange",
-        meta: { title: "我的转办代理" },
-        component: _import("/platform/bpmn/task-change/index")
-      },
-      {
-        path: "taskChangeDetail",
-        name: "taskChangeDetail",
-        meta: { title: "详细信息" },
-        component: _import("/platform/bpmn/task-change/detail")
-      },
-      {
-        path: "myTest/index",
-        name: "myTest",
-        meta: { title: "我的考试" },
-        component: _import("/platform/bpmn/my-test/index")
-      },
-      {
-        path: "siginin/index",
-        name: "siginin",
-        meta: { title: "签到" },
-        component: _import("/platform/bpmn/siginin/index")
-      },
-      {
-        path: "report/oralReport",
-        name: "oralReport",
-        meta: { title: "口头报告查询" },
-        component: _import("/platform/bpmn/report/oralReport")
-      },
-      {
-        path: "report/delayReport",
-        name: "delayReport",
-        meta: { title: "延迟报告查询" },
-        component: _import("/platform/bpmn/report/delayReport")
-      },
-      {
-        path: "addiInspect/index",
-        name: "addiInspect",
-        meta: { title: "附加检验申请" },
-        component: _import("/platform/bpmn/addiInspect/index")
-      },
-      {
-        path: "communication/communicationList",
-        name: "communicationList",
-        meta: { title: "信息沟通" },
-        component: _import("/platform/bpmn/communication/communicationList")
-      },
-      {
-        path: "complaint/complaintList",
-        name: "complaintList",
-        meta: { title: "投诉列表" },
-        component: _import("/platform/bpmn/complaint/complaintList")
-      },
-      {
-        path: "satisfaction/satisfaction",
-        name: "satisfaction",
-        meta: { title: "满意度评价" },
-        component: _import("/platform/bpmn/satisfaction/satisfaction")
-      }
-    ]
-  },
-  {
-    path: "/message/inner/receive",
-    component: _import("/platform/message/inner/receive"),
-    name: "messageInnerReceive",
-    meta: { title: "我的消息" }
-  },
-  {
-    path: "/d/list/:id(\\w+)",
-    component: _import("/platform/data/template-list"),
-    name: "dataTemplateList",
-    meta: { title: "模版" }
-  },
-  // {
-  //   path: '/d/form',
-  //   component:_import('/platform/data/template-form'),
-  //   name: 'dataTemplateform',
-  //   meta: { title: '表单明细' }
-  // },
-  {
-    path: "/demo",
-    component: LayoutInfo,
-    redirect: "form",
-    children: [
-      {
-        path: "form",
-        name: "demoForm",
-        meta: { title: "表单Demo", icon: "table" },
-        component: _import("/demo/form")
-      }
-      //     {
-      //       path: 'toolbar',
-      //       name: 'demoToolbar',
-      //       meta: { title: '工具栏', icon: 'toolbar' },
-      //       component:_import('/demo/toolbar')
-      //     }
-    ]
-  },
-  { path: "*", redirect: "/404", hidden: true }
-];
+            {
+                path: 'taskChange/index',
+                name: 'taskChange',
+                meta: { title: '我的转办代理' },
+                component: _import('/platform/bpmn/task-change/index')
+            },
+            {
+                path: 'taskChangeDetail',
+                name: 'taskChangeDetail',
+                meta: { title: '详细信息' },
+                component: _import('/platform/bpmn/task-change/detail')
+            },
+            {
+                path: 'reminders/index',
+                name: 'reminders',
+                meta: { title: '催办事宜' },
+                component: _import('/platform/bpmn/reminders/index')
+            },
+            {
+                path: 'documents/documents',
+                name: 'documents',
+                meta: { title: '查阅文件' },
+                component: _import('/platform/bpmn/documents/documents')
+            },
+            {
+                path: 'myTest/index',
+                name: 'myTest',
+                meta: { title: '我的考试' },
+                component: _import('/platform/bpmn/my-test/index')
+            },
+            {
+                path: 'siginin/index',
+                name: 'siginin',
+                meta: { title: '签到' },
+                component: _import('/platform/bpmn/siginin/index')
+            },
+            {
+                path: 'report/oralReport',
+                name: 'oralReport',
+                meta: { title: '口头报告查询' },
+                component: _import('/platform/bpmn/report/oralReport')
+            },
+            {
+                path: 'report/delayReport',
+                name: 'delayReport',
+                meta: { title: '延迟报告查询' },
+                component: _import('/platform/bpmn/report/delayReport')
+            },
+            {
+                path: 'addiInspect/index',
+                name: 'addiInspect',
+                meta: { title: '附加检验申请' },
+                component: _import('/platform/bpmn/addiInspect/index')
+            },
+            {
+                path: 'communication/communicationList',
+                name: 'communicationList',
+                meta: { title: '信息沟通' },
+                component: _import('/platform/bpmn/communication/communicationList')
+            },
+            {
+                path: 'complaint/complaintList',
+                name: 'complaintList',
+                meta: { title: '投诉列表' },
+                component: _import('/platform/bpmn/complaint/complaintList')
+            },
+            {
+                path: 'satisfaction/satisfaction',
+                name: 'satisfaction',
+                meta: { title: '满意度评价' },
+                component: _import('/platform/bpmn/satisfaction/satisfaction')
+            }
+        ]
+    },
+    {
+        path: '/message/inner/receive',
+        component: _import('/platform/message/inner/receive'),
+        name: 'messageInnerReceive',
+        meta: { title: '我的消息' }
+    },
+    {
+        path: '/d/list/:id(\\w+)',
+        component: _import('/platform/data/template-list'),
+        name: 'dataTemplateList',
+        meta: { title: '模版' }
+    },
+    // {
+    //   path: '/d/form',
+    //   component:_import('/platform/data/template-form'),
+    //   name: 'dataTemplateform',
+    //   meta: { title: '表单明细' }
+    // },
+    {
+        path: '/demo',
+        component: LayoutInfo,
+        redirect: 'form',
+        children: [
+            {
+                path: 'form',
+                name: 'demoForm',
+                meta: { title: '表单Demo', icon: 'table' },
+                component: _import('/demo/form')
+            }
+            //     {
+            //       path: 'toolbar',
+            //       name: 'demoToolbar',
+            //       meta: { title: '工具栏', icon: 'toolbar' },
+            //       component:_import('/demo/toolbar')
+            //     }
+        ]
+    },
+    { path: '*', redirect: '/404', hidden: true }
+]
 
 // 导出需要显示菜单的
-export const frameInRoutes = frameIn;
+export const frameInRoutes = frameIn
 
 // 重新组织后导出
-export default [...frameIn, ...frameOut, ...errorPage, ...frameCustom];
+export default [...frameIn, ...frameOut, ...errorPage, ...frameCustom]

+ 51 - 48
src/store/getters.js

@@ -1,55 +1,58 @@
 export default {
-  // 用户相关
-  userId: state =>
-    state.ibps.user.info && state.ibps.user.info.user
-      ? state.ibps.user.info.user.id
-      : "", // 用户ID
-  userName: state =>
-    state.ibps.user.info && state.ibps.user.info.employee
-      ? state.ibps.user.info.employee.name
-      : "", // 姓名
-  status: state =>
-    state.ibps.user.info && state.ibps.user.info.employee
-      ? state.ibps.user.info.employee.status
-      : "", // 用户状态
-  isSuper: state =>
-    state.ibps.user.info && state.ibps.user.info.user
-      ? state.ibps.user.info.user.isSuper === "Y"
-      : false, // 是否超级管理员
-  account: state =>
-    state.ibps.user.info && state.ibps.user.info.user
-      ? state.ibps.user.info.user.account
-      : "", // 用户名
+    // 用户相关
+    userId: state =>
+        state.ibps.user.info && state.ibps.user.info.user
+            ? state.ibps.user.info.user.id
+            : '', // 用户ID
+    userName: state =>
+        state.ibps.user.info && state.ibps.user.info.employee
+            ? state.ibps.user.info.employee.name
+            : '', // 姓名
+    status: state =>
+        state.ibps.user.info && state.ibps.user.info.employee
+            ? state.ibps.user.info.employee.status
+            : '', // 用户状态
+    role: state => state.ibps.user.info ? state.ibps.user.info.role : [], // 用户信息
+    position: state => state.ibps.user.info && state.ibps.user.info.employee ? state.ibps.user.info.employee.positions : '', // 用户部门信息
+    mainPosition: state => state.ibps.user.info && state.ibps.user.info.employee ? state.ibps.user.info.mainPosition : {}, // 用户部门信息
+    isSuper: state =>
+        state.ibps.user.info && state.ibps.user.info.user
+            ? state.ibps.user.info.user.isSuper === 'Y'
+            : false, // 是否超级管理员
+    account: state =>
+        state.ibps.user.info && state.ibps.user.info.user
+            ? state.ibps.user.info.user.account
+            : '', // 用户名
 
-  regOpen: state => state.ibps.user.regOpen, // 注册状态
+    regOpen: state => state.ibps.user.regOpen, // 注册状态
 
-  userInfo: state => state.ibps.user.info, // 用户信息
+    userInfo: state => state.ibps.user.info, // 用户信息
 
-  hasDataChange: state => state.ibps.app.hasDataChange, // 是否有数据修改
+    hasDataChange: state => state.ibps.app.hasDataChange, // 是否有数据修改
 
-  // ============ 表单
-  form: state => state.ibps.form,
+    // ============ 表单
+    form: state => state.ibps.form,
 
-  single: state => state.ibps.api.single, // 单体应用
-  baseApi: state => state.ibps.api.base, // baseAPI地址
-  websocket: state => state.ibps.api.websocket, // websocket地址
+    single: state => state.ibps.api.single, // 单体应用
+    baseApi: state => state.ibps.api.base, // baseAPI地址
+    websocket: state => state.ibps.api.websocket, // websocket地址
 
-  // 获取所有用户信息
-  userList: state =>
-    state.ibps.param && state.ibps.param.userList
-      ? state.ibps.param.userList
-      : [],
-  // 获取所有部门信息
-  deptList: state =>
-    state.ibps.param && state.ibps.param.deptList
-      ? state.ibps.param.deptList
-      : [],
-  // 获取所有流程信息
-  flowList: state =>
-  state.ibps.param && state.ibps.param.flowList
-    ? state.ibps.param.flowList
-    : [],
-  // 获取用户最高层级
-  level: state =>
-    state.ibps.param && state.ibps.param.level ? state.ibps.param.level : []
-};
+    // 获取所有用户信息
+    userList: state =>
+        state.ibps.param && state.ibps.param.userList
+            ? state.ibps.param.userList
+            : [],
+    // 获取所有部门信息
+    deptList: state =>
+        state.ibps.param && state.ibps.param.deptList
+            ? state.ibps.param.deptList
+            : [],
+    // 获取所有流程信息
+    flowList: state =>
+        state.ibps.param && state.ibps.param.flowList
+            ? state.ibps.param.flowList
+            : [],
+    // 获取用户最高层级
+    level: state =>
+        state.ibps.param && state.ibps.param.level ? state.ibps.param.level : []
+}

+ 710 - 0
src/views/platform/bpmn/documents/documents.vue

@@ -0,0 +1,710 @@
+<template>
+    <div :class="{'ibps-fixed-toolbar':checkMode}">
+        <van-sticky>
+            <van-nav-bar
+                :title="generateTitle($route.name,$route.params.title||$route.meta.title)"
+                :left-text="$t('common.button.back')"
+                left-arrow
+                @click-left="$router.push({ name: 'dashboard' })"
+            />
+            <van-search v-model="subject" show-action placeholder="请输入搜索关键词" @search="onSearch">
+                <template #left>
+                    <van-icon
+                        name="bars"
+                        :class="{'ibps-active':$utils.isNotEmpty(typeId)}"
+                        class="ibps-pr-5"
+                        @click="clickType"
+                    />
+                </template>
+                <template #action>
+                    <!-- <van-icon name="filter-o" :class="{'ibps-active':stateActive}" @click="clickMoreSearch" /> -->
+                </template>
+            </van-search>
+        </van-sticky>
+        <!-- 内容展示区 -->
+        <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
+            <van-list v-model="loading" :finished="finished" :offset="5" @load="loadData">
+                <van-checkbox-group v-model="checkedIds">
+                    <van-cell v-for="(item,index) in listData" :key="item.id+index" :title="item.wen_jian_ming_che" @click="onClick(item,index)">
+                        <template slot="icon">
+                            <van-checkbox v-if="checkMode" ref="checkboxes" :name="item.id" class="ibps-mr-10" />
+                            <van-icon name="newspaper-o" size="2rem" color="#1E90FF" />
+                            <!-- <van-icon name="notes-o" size="1.5rem" color="#1E90FF" />  -->
+                        </template>
+                        <template #label>
+                            <van-row>
+                                <van-col span="8">文件编号/版本</van-col>
+                                <van-col span="16">{{ item.wen_jian_bian_hao==''?'/':item.wen_jian_bian_hao==null?'/':item.wen_jian_bian_hao==undefined?'/':item.wen_jian_bian_hao }}-{{ item.ban_ben_==''?'/':item.ban_ben_==null?'/':item.ban_ben_==undefined?'/':item.ban_ben_ }}</van-col>
+                            </van-row>
+                            <van-row>
+                                <van-col span="8">文件类型</van-col>
+                                <van-col span="16">{{ item.wen_jian_xi_lei_===''?'/':item.wen_jian_xi_lei_===null?'/':item.wen_jian_xi_lei_===undefined?'/':item.wen_jian_xi_lei_ }}</van-col>
+                            </van-row>
+                            <van-row>
+                                <van-col span="8">发布时间</van-col>
+                                <van-col span="16">{{ item.fa_fang_shi_jian_===''?'/':item.fa_fang_shi_jian_===null?'/':item.fa_fang_shi_jian_===undefined?'/':item.fa_fang_shi_jian_ }}</van-col>
+                            </van-row>
+                            <!-- <van-row> -->
+                            <!-- <van-col span="12">附件</van-col>
+                                <van-col span="12">{{ item.fu_jian_===''?'/':item.fu_jian_===null?'/':item.fu_jian_===undefined?'/':item.fu_jian_ }}</van-col> -->
+                            <!-- </van-row> -->
+                        </template>
+                        <!-- 插入内容 -->
+                        <!-- <span>{{ item.createTime|formatRelativeTime }}</span> -->
+                        <!-- <div style="margin-top: 90%;height: 100%;">
+                            <van-tag type="primary" size="medium" @click="onClick(item,index)">开始考试</van-tag>
+                        </div> -->
+                    </van-cell>
+                </van-checkbox-group>
+                <ibps-list-result-page :result-type="resultType" :error-type="errorType" :result-message="resultMessage" />
+            </van-list>
+        </van-pull-refresh>
+        <ibps-toolbar v-show="checkMode" :actions="mainActions" />
+        <!-- 点击搜索的右边显示 -->
+        <!-- <ibps-more-search
+            :show="moreSearchPopup"
+            :search-forms="searchForms"
+            @callback="onMoreSearch"
+            @close="show => moreSearchPopup = show"
+            @reset-form="resetForm"
+        /> -->
+        <!-- 点击搜索的左边显示 -->
+        <ibps-type-tree
+            ref="typeTree"
+            v-model="typeTreePopup"
+            title="文件分类"
+            category-key="FILE_TYPE"
+            @node-click="clickTypeNode"
+            @close="visible => typeTreePopup = visible"
+        />
+        <!-- 遮罩层,提示信息 -->
+        <van-divider v-if="footText">到底了~</van-divider>
+        <van-empty v-if="noData" description="暂无数据" />
+        <van-popup v-model="documentsSon" position="bottom" :style="{height:'100%',width:'100%'}">
+            <LookDocument :son-data="sonData" @son="son" />
+        </van-popup>
+    </div>
+</template>
+<script>
+import { mapState } from 'vuex'
+import curdPost from '@/utils/joinCURD.js'
+import ActionUtils from '@/utils/action'
+import i18n from '@/utils/i18n'
+import random from '@/mixins/random'
+import bpmnStatus from '@/mixins/bpmnStatus'
+import IbpsMoreSearch from '@/components/ibps-more-search'
+import IbpsTypeTree from '@/business/platform/cat/type/tree'
+import IbpsAvatar from '@/components/ibps-avatar'
+import IbpsToolbar from '@/components/ibps-toolbar'
+import IbpsListResultPage from '@/components/ibps-list-result-page'
+import IbpsBpmnFormrenderDialog from '@/business/platform/bpmn/form/dialog'
+import LookDocument from './lookDocument'
+import interIndex from './index'
+import { Notify } from 'vant'
+const _ = require('lodash')
+
+export default {
+    components: {
+        IbpsMoreSearch,
+        IbpsTypeTree,
+        IbpsAvatar,
+        IbpsToolbar,
+        IbpsListResultPage,
+        IbpsBpmnFormrenderDialog,
+        LookDocument
+    },
+    mixins: [random, bpmnStatus],
+    data() {
+        const { userId, userList = [], deptList, menus, userInfo, role } = this.$store.getters
+        const depArrs = []
+        var fileDownloadAuthority = false
+        for (var i of deptList) {
+            depArrs.push(`wj.bian_zhi_bu_men_ like '${i.positionId}'`)
+        }
+        const roleKey = ['xtgljs', 'syszr', 'dagly', 'xxgljs']
+        for (const i of roleKey) {
+            if (role.some(so => { return so.alias === i })) {
+                fileDownloadAuthority = true
+                break
+            }
+        }
+        return {
+            categoryKey: '',
+            documentsSon: false,
+            sonData: '',
+            userId: userId,
+            footText: false,
+            showPop: false,
+            noData: false,
+            showConfirmationBoxList: true,
+            countTotal: {},
+            examPopup: '',
+            ReachBottomShow: false,
+            moreSearchPopup: false,
+            searchForms: {
+                forms: [
+                    // { prop: 'Q^examName_^SL', label: '考试名称', fieldType: 'text' },
+                    //   { prop: 'Q^bankName^SL', label: '题库名称', fieldType: 'text' },
+                    { prop: 'examName', label: '考试名称', fieldType: 'text' },
+                    { prop: 'bankName', label: '题库名称', fieldType: 'text' },
+                    {
+                        prop: 'examType', label: '考试类型', fieldType: 'checker', cols: 2, valueKey: 'value', options: [
+                            { value: 'trainingExam', label: '培训考试' },
+                            { value: 'POCTtraining', label: 'POCT培训' },
+                            { value: 'selfAssessment', label: '自主考核' },
+                            { value: 'routine', label: '常规' }
+                        ]
+                    },
+                    { prop: ['startDateDL', 'startDateDG'], label: '开始时间', fieldType: 'dateRange', options: { datefmt: 'yyyy-MM-dd' }},
+                    { prop: ['limitDateDL', 'limitDateDG'], label: '限考时间', fieldType: 'dateRange', options: { datefmt: 'yyyy-MM-dd' }}
+                ]
+            },
+            // './views/platform/bpmn/communication/communicationList
+            mainActions: [{
+                'name': this.$t('common.button.remove'),
+                'type': 'danger',
+                'callback': this.onRemove
+            }],
+            stateActive: false,
+            subject: '',
+            moreSubject: '',
+            subjectTitle: '',
+            typeId: '',
+            moreParams: {},
+            listData: [],
+            listCopy: [],
+            pagination: {},
+            sorts: {},
+
+            loading: false,
+            finished: false,
+            refreshing: false,
+            resultType: 'init',
+            errorType: null,
+            resultMessage: null,
+
+            checkMode: false,
+            checkedIds: [],
+            proInstId: '',
+            defId: '',
+            formrenderVisible: false,
+            formrenderTitle: '',
+            typeTreePopup: false,
+            keyword: '',
+            name: '全部',
+            current: 0,
+            startTime: [],
+            endTime: [],
+            fileTypesDatas: {
+                comAuthority: [],
+                buMenAuthority: [],
+                authority: []
+            }, // 存放所点击列表的分类信息
+            searchWhere: {},
+            sqlWhere: {},
+            addDataCont: {},
+            oldorgId: '',
+            listConfig: {
+                // 工具栏
+                toolbars: [
+                    { key: 'search' },
+                    {
+                        key: 'colect',
+                        label: '收藏或取消收藏',
+                        type: 'success'
+                    }
+                ],
+                // 查询条件
+                searchForm: {
+                    forms: []
+                },
+                // 表格字段配置
+                columns: []
+            },
+            pageKey: '',
+            depArrs,
+            fileDownloadAuthority
+        }
+    },
+    computed: {
+        ...mapState('ibps/user', [
+            'info'
+        ]),
+        rightText() {
+            return this.checkMode ? this.$t('common.button.cancel') : this.$t('common.button.manage')
+        }
+        // selectedIds() {
+        //     console.log('this.checkedIds', this.checkedIds)
+        //     console.log('this.checkedIds', this.checkedIds.join(','))
+        //     return this.checkedIds.join(',')
+        // }
+    },
+
+    beforeRouteLeave(to, from, next) {
+        if (this.showPop === true) {
+        // this.showConfirmationBoxList = true
+            this.$refs.childPop.parentSubmit()
+            this.showPop = false
+            next(false)
+        } else {
+            next()
+        }
+    },
+    mounted() {
+        this.$nextTick(() => {
+            setTimeout(() => {
+                this.clickTypeNode(this.$refs.typeTree.treeData[0])
+                setTimeout(() => {
+                    this.onRefresh()
+                }, 500)
+            }, 200)
+        })
+    },
+    created() {
+        this.pageKey = this.$route.name
+        this.categoryKey = this.$route.name === 'documents' ? 'FLOW_TYPE' : 'FILE_TYPE'
+    },
+    methods: {
+        onClick(item, index) {
+            this.documentsSon = true
+            this.sonData = item
+        },
+        son() {
+            this.documentsSon = false
+        },
+        onClose() {
+            this.ReachBottomShow = false
+        },
+
+        updataSet(v) {
+            this.showPop = v
+        },
+        generateTitle(name, title) { // generateTitle by vue-i18n
+            return i18n.generateTitle(name, title)
+        },
+        toCheckMode() {
+            if (this.$utils.isEmpty(this.listData)) {
+                return
+            }
+            if (this.checkMode) {
+                // this.show = true
+                this.checkedIds = []
+            }
+            this.checkMode = !this.checkMode
+        },
+        clickType() {
+            this.typeTreePopup = true
+        },
+        onSearch() {
+            this.stateActive = false
+            ActionUtils.initListData(this)
+            this.current = 0
+            // this.listData = []
+            this.loadData()
+        },
+        clickMoreSearch() {
+            this.moreSearchPopup = true
+            this.stateActive = false
+        },
+
+        clickTypeNode(nodeData) {
+            var nodeId = nodeData.id
+            // console.log('nodeData', nodeData)
+            this.typeId = nodeData.id
+            this.onMoreSearch({})
+            this.addDataCont = { fenLei: nodeData.name, fenLeiId: nodeId }
+            const fileTypes = []
+            if (this.oldorgId === nodeId && (nodeData.name !== '文件分类')) {
+                return
+            }
+            // 判断是否存在下级菜单
+            const noHadNext = nodeData.children === undefined
+            if (noHadNext && this.pageKey === 'wjkzgl-ywyxjlsc') {
+                const chongfu = this.listConfig.toolbars.filter(el => {
+                    return el.key === 'add'
+                })
+                if (chongfu.length === 0 && this.depth !== 0) {
+                    this.listConfig.toolbars.splice(1, 0, { key: 'add' })
+                }
+            } else {
+                this.listConfig.toolbars = this.listConfig.toolbars.filter(el => {
+                    return el.key !== 'add'
+                })
+            }
+            this.fileTypesDatas = {
+                comAuthority: [],
+                buMenAuthority: [],
+                authority: [],
+                shiJiSql: [],
+                sheBeiSql: []
+            }
+            if (nodeData.children === undefined) {
+                const authorityName = JSON.parse(nodeData.authorityName)
+                fileTypes.push(nodeId)
+                if (authorityName.chaYue === '公用查阅') {
+                    this.fileTypesDatas.comAuthority.push(nodeId)
+                }
+                if (authorityName.chaYue === '部门查阅') {
+                    this.fileTypesDatas.buMenAuthority.push(nodeId)
+                }
+                if (authorityName.chaYue === '受限查阅') {
+                    this.fileTypesDatas.authority.push(nodeId)
+                }
+            } else {
+                const getTail = item => item.children && item.children.length > 0 ? item.children.map(m => getTail(m)) : [item]
+                const result = _.flattenDeep(nodeData.children.map(m => getTail(m)))
+                for (var i of result) {
+                    fileTypes.push(i.id)
+                    const authorityName = JSON.parse(i.authorityName)
+                    if (authorityName.chaYue === '公用查阅') {
+                        this.fileTypesDatas.comAuthority.push(i.id)
+                    }
+                    if (authorityName.chaYue === '部门查阅') {
+                        this.fileTypesDatas.buMenAuthority.push(i.id)
+                    }
+                    if (authorityName.chaYue === '受限查阅') {
+                        this.fileTypesDatas.authority.push(i.id)
+                    }
+                }
+            }
+            this.oldorgId = nodeId
+            this.sqlWhere = {
+                fileType: fileTypes.join(',')
+            }
+            this.getDatas()
+            // const fileTypes = []
+        },
+        getDatas() {
+            const { comAuthority, buMenAuthority, authority } = this.fileTypesDatas
+            const { fileType, sorts } = this.sqlWhere
+            this.listData = []
+            let wheres1 = '' // 共用
+            let wheres2 = '' // 部门
+            let wheres3 = '' // 受限
+            let start = ''
+            const positionsDatas = this.$store.getters.userInfo.positions
+            const needSelType = []
+            if (this.$store.getters.userInfo.positions === 0) {
+                this.$message({
+                    message: '该账户并没有所属部门,请先归属部门再来操作。',
+                    type: 'error'
+                })
+                return
+            }
+            for (var i in this.searchWhere) {
+                // console.log('i', i)
+                if (i === 'b') {
+                    start = this.searchWhere[i]
+                }
+                if (i === 'i') {
+                    wheres1 = wheres1 + ` and bian_zhi_shi_jian between '${start} 00:00:00' and '${this.searchWhere[i]} 23:59:59'`
+                    wheres2 = wheres2 + ` and bian_zhi_shi_jian between '${start} 00:00:00' and '${this.searchWhere[i]} 23:59:59'`
+                    wheres3 = wheres3 + ` and bian_zhi_shi_jian between '${start} 00:00:00' and '${this.searchWhere[i]} 23:59:59'`
+                }
+                if (i !== 'i' && i !== 'b') {
+                    const likeWhere = i === 'nian_du_' ? this.searchWhere[i].getFullYear() : this.searchWhere[i]
+                    wheres1 = wheres1 + ` and wj.${i} like '%${likeWhere}%'`
+                    wheres2 = wheres2 + ` and wj.${i} like '%${likeWhere}%'`
+                    wheres3 = wheres3 + ` and wj.${i} like '%${likeWhere}%'`
+                }
+            }
+            // 一样
+            if (fileType) {
+                if (this.pageKey === 'documents') {
+                    if (comAuthority.length !== 0) {
+                        wheres1 = wheres1 + ` and FIND_IN_SET (wj.xi_lei_id_,'${comAuthority}')`
+                    }
+                    if (buMenAuthority.length !== 0) {
+                        let orSql = ''
+                        // eslint-disable-next-line no-redeclare
+                        for (const i in positionsDatas) {
+                            if (i === '0') {
+                                orSql = `wj.quan_xian_xin_xi_ LIKE '%${positionsDatas[i].id}%'`
+                            } else {
+                                orSql = orSql + `or wj.quan_xian_xin_xi_ LIKE '%${positionsDatas[i].id}%'`
+                            }
+                        }
+                        wheres2 = wheres2 + ` and (${orSql}) and FIND_IN_SET (wj.xi_lei_id_,'${buMenAuthority}')`
+                    }
+                    if (authority.length !== 0) {
+                        wheres3 = wheres3 + ` and FIND_IN_SET (wj.xi_lei_id_,'${authority}')`
+                    }
+                } else {
+                    wheres1 = wheres1 + ` and FIND_IN_SET (wj.fen_lei_id_,'${fileType}')`
+                }
+            }
+            // 没走
+            if (sorts) {
+                if (JSON.stringify(sorts) !== '{}') {
+                    wheres1 = wheres1 + ` order by  ${sorts.sortBy}  ${sorts.order === 'ascending' ? 'asc' : 'desc'}`
+                    wheres2 = wheres2 + ` order by  ${sorts.sortBy}  ${sorts.order === 'ascending' ? 'asc' : 'desc'}`
+                }
+            }
+            const selectSql = `select  wj.id_ as id,cy.id_ as cy_id_,sc.id_ as sc_id_,concat(file.file_name_,'.',file.ext_,'(大小:',file.total_bytes_,')') as file_info_,
+            wj.wen_jian_xi_lei_,wj.wen_jian_bian_hao,wj.wen_jian_ming_che,wj.ban_ben_,wj.wen_jian_fu_jian_ AS fu_jian_,wj.fa_bu_shi_jian_ as fa_fang_shi_jian_,wj.shi_fou_guo_shen_ AS shi_fou_guo_shen_,	wj.bian_zhi_bu_men_ AS bian_zhi_bu_men_,
+			wj.bian_zhi_ren_ AS bian_zhi_ren_,
+			wj.bian_zhi_shi_jian AS bian_zhi_shi_jian,
+			wj.wen_jian_lei_xing AS wen_jian_lei_xing,
+			wj.quan_xian_lei_xin AS quan_xian_lei_xin,
+			wj.fa_bu_shi_jian_ AS fa_bu_shi_jian_,
+			wj.poct_shi_yong_ AS shi_yong_bu_men_,
+			"" AS cha_yue_jie_zhi_s  from`
+            const leftSql = `left join (select id_,parent_id_ from t_wjcyjl group by parent_id_) cy on cy.parent_id_ = wj.id_
+            left join (select id_,parent_id_ from t_wjscjl group by parent_id_) sc on sc.parent_id_ = wj.id_
+            left join ibps_file_attachment file on file.id_ = wj.wen_jian_fu_jian_`
+            // 内外部文件查阅时候查所有文件
+            const allSql = ``
+            // 共用文件
+            const comSql = `${selectSql} t_wjxxb wj ${leftSql} where wj.shi_fou_guo_shen_ ='有效' and (${this.depArrs.join(' or ')}) ${wheres1} `
+            // 部门权限文件
+            const buMenSql = `${selectSql}  t_wjxxb wj ${leftSql}
+            where wj.shi_fou_guo_shen_ in ('有效','使用') ${wheres2} `
+            // 受限文件:结合查阅授权模块的截止时间
+            const authoritySql = `select wj.id_ as id,cy.id_ as cy_id_,sc.id_ as sc_id_,concat(file.file_name_,'.',file.ext_,'(',file.total_bytes_,')') as file_info_,
+            wj.wen_jian_xi_lei_,wj.wen_jian_bian_hao,wj.wen_jian_ming_che,wj.ban_ben_,wj.wen_jian_fu_jian_ AS fu_jian_,wj.fa_bu_shi_jian_ as fa_fang_shi_jian_,wj.shi_fou_guo_shen_ AS shi_fou_guo_shen_,	wj.bian_zhi_bu_men_ AS bian_zhi_bu_men_,
+			wj.bian_zhi_ren_ AS bian_zhi_ren_,
+			wj.bian_zhi_shi_jian AS bian_zhi_shi_jian,
+			wj.wen_jian_lei_xing AS wen_jian_lei_xing,
+			wj.quan_xian_lei_xin AS quan_xian_lei_xin,
+			wj.fa_bu_shi_jian_ AS fa_bu_shi_jian_,
+			wj.poct_shi_yong_ AS shi_yong_bu_men_,
+			sq.cha_yue_jie_zhi_s  from
+        t_wjxxb wj 
+        left join (select *from t_skwjcysqsqzb order by create_time_ desc limit 1) sq on wj.id_=sq.wen_jian_id_ 
+        ${leftSql}
+        WHERE wj.shi_fou_guo_shen_ ='有效' and ((sq.cha_yue_jie_zhi_s >DATE_FORMAT(NOW(), '%Y-%m-%d')) OR (sq.cha_yue_jie_zhi_s =DATE_FORMAT(NOW(), '%Y-%m-%d')))
+        and wj.quan_xian_xin_xi_ like '%${this.userId}%'  ${wheres3} `
+            const sqlArr = [comSql, buMenSql, authoritySql]
+            let oldRecordSql = ''
+            const buMenWhere = []
+            if (this.pageKey !== 'documents') {
+                if (this.$store.getters.deptList.length !== 0) {
+                    // eslint-disable-next-line no-redeclare
+                    for (var i of this.$store.getters.deptList) {
+                        buMenWhere.push(`bian_zhi_bu_men_ like '%${i.positionId}%'`)
+                    }
+                    oldRecordSql = `select wj.*,en.name_ AS org_name,ee.name_ as ry_name FROM t_ywyxjlb wj 
+                    left join ibps_party_employee ee on wj.bian_zhi_ren_ = ee.id_ 
+                    LEFT JOIN ibps_party_entity en ON en.id_= bian_zhi_bu_men_ 
+                    where (${buMenWhere.join(' or ')}) ${wheres1}  order by bian_zhi_shi_jian desc`
+                } else {
+                    console.log('没有部门组织')
+                    return
+                }
+            }
+            // eslint-disable-next-line no-redeclare
+            for (var i in Object.keys(this.fileTypesDatas)) {
+                var key = Object.keys(this.fileTypesDatas)[i] // key
+                var value = this.fileTypesDatas[key] // value
+                if (value.length !== 0) {
+                    needSelType.push(`(${sqlArr[i]})`)
+                }
+            }
+            const fileSearchSql = needSelType.join('union all')
+            const sql = this.pageKey === 'documents' ? `select sq.* from (${fileSearchSql}) sq ORDER BY sq.wen_jian_bian_hao DESC,sq.wen_jian_ming_che DESC ` : oldRecordSql
+            curdPost('sql', sql).then(res => {
+                this.listCopy = []
+                this.current = 0
+                this.listCopy = res.variables.data
+                this.onRefresh()
+                this.loadData()
+                // const tableDatas = res.variables.data
+            // this.selectListData = JSON.parse(JSON.stringify(tableDatas))
+            // let filterDatas = []
+            // this.bianlistData.pageResult.totalCount = tableDatas.length
+            // this.bianlistData.pageResult.totalPages = Math.ceil(tableDatas.length / this.pagination.limit)
+            // this.bianlistData.pageResult.limit = this.pagination.limit
+            // this.bianlistData.pageResult.page = this.pagination.page
+            // if (this.pagination.limit > tableDatas.length) {
+            //     filterDatas = JSON.parse(JSON.stringify(tableDatas))
+            // } else {
+            //     for (let index = 0; index < 20; index++) {
+            //         filterDatas.push(tableDatas[index])
+            //     }
+            // }
+            // this.bianlistData.dataResult = filterDatas
+            // ActionUtils.handleListData(this, this.bianlistData)
+            }).catch(res => {
+                this.loading = false
+                this.listData = []
+            })
+        },
+        // 高级查询
+        onMoreSearch(params) {
+            if (this.$utils.isNotEmpty(this.typeId)) {
+                params['Q^type_id_^SL'] = this.typeId
+            }
+            this.moreParams = params
+            this.onSearch()
+            if (this.$utils.isNotEmpty(params)) {
+                this.stateActive = true
+            }
+        },
+        resetForm() {
+            this.typeId = ''
+        },
+        // 下拉刷新
+        onRefresh() {
+            this.footText = false
+            this.noData = false
+            this.refreshing = true
+            this.finished = false
+            this.loading = true
+            this.onSearch()
+        },
+        onRefreshPage() {
+            this.checkedIds = []
+            this.checkMode = false
+            this.onRefresh()
+        },
+        searchGao() {
+
+        },
+        /**
+       * 加载数据
+       */
+        loadData() {
+            this.loading = true
+            this.refreshing = false
+            if (this.current >= this.listCopy.length) {
+                this.listData = []
+                this.finished = true
+                this.noData = true
+                this.footText = false
+                return
+            }
+            // 查询搜索
+            const subject = this.subject
+            if (subject) {
+                const filteredList = this.listCopy.filter(item => {
+                    return item.wen_jian_ming_che.includes(subject)
+                })
+                if (filteredList.length <= 0) {
+                    this.footText = false
+                    this.loading = false
+                    this.noData = true
+                    return
+                }
+                // 计算本次加载的数据量
+                const endIndex = Math.min(this.current + 10, filteredList.length)
+                // 加载数据
+                const newData = filteredList.slice(this.current, endIndex)
+                this.listData.push(...newData)
+                this.current = endIndex
+                if (endIndex >= filteredList.length) {
+                    this.finished = true
+                    this.footText = true
+                    this.noData = false
+                }
+                this.loading = false
+                return
+            }
+            // 计算本次加载的数据量
+            const endIndex = Math.min(this.current + 10, this.listCopy.length)
+            // 加载数据
+            const newData = this.listCopy.slice(this.current, endIndex)
+            this.listData.push(...newData)
+            // 更新状态
+            this.current = endIndex
+
+            // 检查是否加载完毕
+            if (endIndex >= this.listCopy.length) {
+                this.finished = true
+                this.footText = true
+                this.noData = false
+            }
+
+            // 结束加载动画
+            this.loading = false
+
+            // this.listData = this.listCopy
+            // this.loading = true
+            // let page = 0
+            // if (this.current === 0) {
+            //     page = 0
+            // } else {
+            //     page = this.current * 10
+            // }
+            // if (this.listData || this.listData.length === 0) {
+            //     this.finished = true
+            //     this.noData = true
+            //     this.footText = false
+            // }
+
+            // this.$common.request('sql', sql1).then(res => {
+            //     if (this.current === 0 && res.variables.data.length === 0) {
+            //         this.finished = true
+            //         this.noData = true
+            //         this.footText = false
+            //     }
+
+            //     const data = res.variables.data
+            //     this.listData.push(...data)
+            //     this.refreshing = false
+            //     if (this.listData.length !== 0 && (this.listData.length) % 10 !== 0) {
+            //         this.footText = true
+            //         this.noData = false
+            //         this.finished = true
+            //         return
+            //     } else {
+            //         this.current++
+            //     }
+            //     this.loading = false
+            // }).catch(err => {
+            //     console.log(err)
+            // })
+        },
+
+        // 获取格式化参数
+        getSearcFormData() {
+            let params = {}
+            if (this.$utils.isNotEmpty(this.subject)) {
+                params['Q^subject_^SL'] = this.subject
+            }
+            if (this.$utils.isNotEmpty(this.moreParams)) {
+                params = Object.assign(params, this.moreParams)
+            }
+            return ActionUtils.formatParams(
+                params,
+                this.pagination,
+                this.sorts)
+        },
+
+        transformTime(timeStamp) {
+            const hours = Math.floor(parseInt(timeStamp) / 3600000)
+            const minutes = Math.floor((parseInt(timeStamp) % 3600000) / 60000)
+            return hours + '小时' + minutes + '分钟'
+        }
+    }
+}
+</script>
+<style scoped lang="scss">
+  .examRow {
+    padding: 2% 0;
+
+    .popupTitle {
+      text-align: center;
+      font-size: 14px;
+      color: #555;
+    }
+
+    .popupContent {
+      text-align: left;
+      font-size: 14px;
+      color: #777;
+    }
+  }
+
+  .examRowto {
+    margin: 10% 0;
+
+    .van-col {
+      text-align: center;
+
+      .van-button {
+        width: 80%;
+        font-size: 16px;
+      }
+    }
+  }
+</style>

+ 130 - 0
src/views/platform/bpmn/documents/lookDocument.vue

@@ -0,0 +1,130 @@
+<template>
+    <div>
+        <div style="width: 100%;padding: 3% 0; text-align: center;  color: #303030;border-bottom: 1px solid #ebe8e8;"><van-row style="margin:0">
+            <van-col span="4"><van-icon name="cross" size="20px" @click="onClose" /></van-col>
+            <van-col span="16" style="margin:1% auto 0;">文件查阅</van-col>
+        </van-row>
+        </div>
+        <div style="width:90%;margin:5% auto;">
+            <van-row>
+                <van-col span="8" class="prompt">编制部门:</van-col>
+                <van-col span="16" class="content"> {{ sonData.bian_zhi_bu_men_==''?'/':sonData.bian_zhi_bu_men_==null?'/':sonData.bian_zhi_bu_men_==undefined?'/':changeDep(sonData) }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">编制人:</van-col>
+                <van-col span="16" class="content"> {{ sonData.bian_zhi_ren_==''?'/':sonData.bian_zhi_ren_==null?'/':sonData.bian_zhi_ren_==undefined?'/':changUserName(sonData) }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">编制时间:</van-col>
+                <van-col span="16" class="content"> {{ sonData.bian_zhi_shi_jian==''?'/':sonData.bian_zhi_shi_jian==null?'/':sonData.bian_zhi_shi_jian==undefined?'/':sonData.bian_zhi_shi_jian }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">文件名称:</van-col>
+                <van-col span="16" class="content"> {{ sonData.wen_jian_ming_che==''?'/':sonData.wen_jian_ming_che==null?'/':sonData.wen_jian_ming_che==undefined?'/':sonData.wen_jian_ming_che }}</van-col>
+            </van-row>
+
+            <van-row>
+                <van-col span="8" class="prompt">文件编号:</van-col>
+                <van-col span="16" class="content"> {{ sonData.wen_jian_bian_hao==''?'/':sonData.wen_jian_bian_hao==null?'/':sonData.wen_jian_bian_hao==undefined?'/':sonData.wen_jian_bian_hao }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">版本号:</van-col>
+                <van-col span="16" class="content"> {{ sonData.ban_ben_==''?'/':sonData.ban_ben_==null?'/':sonData.ban_ben_==undefined?'/':sonData.ban_ben_ }}</van-col>
+                <!-- <van-col span="16" class="content"> {{ sonData.ban_ben_?'/':ban_ben_ }}</van-col> -->
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">文件状态:</van-col>
+                <van-col span="16" class="content"> {{ sonData.shi_fou_guo_shen_==''?'/':sonData.shi_fou_guo_shen_==null?'/':sonData.shi_fou_guo_shen_==undefined?'/':sonData.shi_fou_guo_shen_ }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">权限类型:</van-col>
+                <van-col span="16" class="content"> {{ sonData.quan_xian_lei_xin==''?'/':sonData.quan_xian_lei_xin==null?'/':sonData.quan_xian_lei_xin==undefined?'/':sonData.quan_xian_lei_xin }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">文件归档:</van-col>
+                <van-col span="16" class="content"> {{ sonData.wen_jian_xi_lei_==''?'/':sonData.wen_jian_xi_lei_==null?'/':sonData.wen_jian_xi_lei_==undefined?'/':sonData.wen_jian_xi_lei_ }}</van-col>
+            </van-row>
+
+            <van-row>
+                <van-col span="8" class="prompt">发布时间:</van-col>
+                <van-col span="16" class="content"> {{ sonData.fa_bu_shi_jian_==''?'/':sonData.fa_bu_shi_jian_==null?'/':sonData.fa_bu_shi_jian_==undefined?'/':sonData.fa_bu_shi_jian_ }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">使用部门:</van-col>
+                <van-col span="16" class="content"> {{ sonData.shi_yong_bu_men_==''?'/':sonData.shi_yong_bu_men_==null?'/':sonData.shi_yong_bu_men_==undefined?'/':sonData.shi_yong_bu_men_ }}</van-col>
+            </van-row>
+            <!-- <van-row> -->
+            <!-- <van-col span="8" class="prompt">文件附件:</van-col> -->
+            <!-- <van-col span="16" class="content"> {{ sonData.fu_jian_==''?'/':sonData.fu_jian_==null?'/':sonData.fu_jian_==undefined?'/':sonData.fu_jian_ }}</van-col> -->
+            <!-- <van-col span="24" class="content"> -->
+            <ibps-uploader
+                v-model="sonData.fu_jian_"
+                download
+                :have-padding="false"
+                label="附件:"
+                multiple
+                clearable
+                :readonly="true"
+                style="background-color: #fff;"
+            />
+            <!-- </van-col> -->
+            <!-- </van-row> -->
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    props: {
+        sonData: {
+            type: Object
+            // default: {}
+        }
+    },
+    data() {
+        const userList = this.$store.getters.userList
+        const deptList = this.$store.getters.deptList
+        return {
+            userList: userList,
+            deptList: deptList
+        }
+    },
+
+    methods: {
+        changUserName(data) {
+            const user = this.userList.find(item => item.userId === data.bian_zhi_ren_)
+            if (user) {
+                return user.userName
+            }
+        },
+        changeDep(data) {
+            const dep = this.deptList.find(item => item.positionId === data.bian_zhi_bu_men_)
+            if (dep) {
+                return dep.positionName
+            }
+        },
+        onClose() {
+            this.$emit('son', false)
+        }
+    }
+}
+</script>
+<style scoped lang="less">
+.van-row{
+  margin: 5% 0;
+  .prompt{
+    color: #666;
+  }
+  .content{
+    font-size: 14px;
+    color: #777;
+  }
+}
+/deep/ .van-field__label {
+  font-size: 16px; /* 修改字体大小 */
+  /* 其他布局相关的CSS属性 */
+}
+/deep/ .van-field{
+  padding: 0;
+}
+
+</style>

+ 545 - 0
src/views/platform/bpmn/reminders/index.vue

@@ -0,0 +1,545 @@
+<template>
+    <div :class="{'ibps-fixed-toolbar':checkMode}">
+        <van-sticky>
+            <van-nav-bar
+                :title="generateTitle($route.name,$route.params.title||$route.meta.title)"
+                :left-text="$t('common.button.back')"
+                :right-text="$utils.isNotEmpty(listData)?rightText:''"
+                left-arrow
+                @click-left="$router.push({ name: 'dashboard' })"
+                @click-right="toCheckMode()"
+            />
+            <van-search v-model="subject" show-action placeholder="请输入搜索关键词" @search="onSearch">
+                <!-- <template #left>
+          <van-icon name="bars" :class="{'ibps-active':$utils.isNotEmpty(typeId)}" class="ibps-pr-5"
+            @click="clickType" />
+        </template> -->
+                <template #action>
+                    <!-- <van-icon name="filter-o" :class="{'ibps-active':stateActive}" @click="clickMoreSearch" /> -->
+                </template>
+            </van-search>
+        </van-sticky>
+        <!-- 内容展示区 -->
+        <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
+            <van-list v-model="loading" :finished="finished" @load="loadData">
+                <van-checkbox-group v-model="checkedIds">
+                    <van-cell v-for="(item,index) in listData" :key="item.id+index" :title="item.shi_wu_ming_cheng" @click="onClick(item,index)">
+                        <template slot="icon">
+                            <van-checkbox v-if="checkMode" ref="checkboxes" :name="item.id_" class="ibps-mr-10" />
+                            <ibps-avatar
+                                v-else
+                                :icon="_randomIcon(4)"
+                                :text="item.name"
+                                :bg-color="_randomColor(1)"
+                                radius="4"
+                                icon-prefix="ibps-icon"
+                                class="ibps-mr-10"
+                                @click="overlayShow(item)"
+                            />
+                            <!-- <van-icon name="notes-o" size="1.5rem" color="#1E90FF" /> -->
+                        </template>
+                        <template #label>
+                            <van-row @click="overlayShow(item)">
+                                <van-col span="24">{{ item.shi_wu_shuo_ming_==''?'/':item.shi_wu_shuo_ming_==null?'/':item.shi_wu_shuo_ming_ }}</van-col>
+                            </van-row>
+                        </template>
+                        <!-- 插入内容 -->
+                        <span>{{ item.create_time_|formatRelativeTime }}</span>
+                        <div>
+                            <!-- 系统消息 -->
+                            <van-icon name="bell" size="1.3rem" color="#1E90FF" @click="sendSystemInfo(item)" />
+                        </div>
+                        <div>
+                            <!-- 短信催办 -->
+                            <van-icon name="comment-o" size="1.3rem" color="#1E90FF" @click="sendSmsInfo(item)" />
+                        </div>
+                    </van-cell>
+                </van-checkbox-group>
+                <ibps-list-result-page :result-type="resultType" :error-type="errorType" :result-message="resultMessage" />
+            </van-list>
+        </van-pull-refresh>
+        <ibps-toolbar v-show="checkMode" :actions="mainActions" />
+        <!-- 点击搜索的右边显示 -->
+        <ibps-more-search
+            :show="moreSearchPopup"
+            :search-forms="searchForms"
+            @callback="onMoreSearch"
+            @close="show => moreSearchPopup = show"
+            @reset-form="resetForm"
+        />
+        <van-divider v-if="footText">到底了~</van-divider>
+        <van-empty v-if="noData" description="暂无数据" />
+        <van-popup v-model="reminderSon" position="bottom" :style="{height:'100%',width:'100%'}">
+            <Reminder :son-data="sonData" @son="son" />
+        </van-popup>
+
+    </div>
+</template>
+<script>
+import { mapState } from 'vuex'
+import ActionUtils from '@/utils/action'
+import i18n from '@/utils/i18n'
+import random from '@/mixins/random'
+import bpmnStatus from '@/mixins/bpmnStatus'
+import IbpsMoreSearch from '@/components/ibps-more-search'
+import IbpsTypeTree from '@/business/platform/cat/type/tree'
+import IbpsAvatar from '@/components/ibps-avatar'
+import IbpsToolbar from '@/components/ibps-toolbar'
+import IbpsListResultPage from '@/components/ibps-list-result-page'
+import IbpsBpmnFormrenderDialog from '@/business/platform/bpmn/form/dialog'
+import Reminder from './reminder.vue'
+import { sendSmsList } from './sendSms'
+import { Notify } from 'vant'
+
+export default {
+    components: {
+        IbpsMoreSearch,
+        IbpsTypeTree,
+        IbpsAvatar,
+        IbpsToolbar,
+        IbpsListResultPage,
+        IbpsBpmnFormrenderDialog,
+        Reminder
+    },
+    mixins: [random, bpmnStatus],
+    data() {
+        const { userId, userList = [], deptList = [], menus, userInfo } = this.$store.getters
+        return {
+            reminderSon: false,
+            sonData: '',
+            userId: userId,
+            footText: false,
+            showPop: false,
+            noData: false,
+            showConfirmationBoxList: true,
+            countTotal: {},
+            examPopup: '',
+            ReachBottomShow: false,
+            moreSearchPopup: false,
+            searchForms: {
+                forms: [
+                    // { prop: 'Q^examName_^SL', label: '考试名称', fieldType: 'text' },
+                    //   { prop: 'Q^bankName^SL', label: '题库名称', fieldType: 'text' },
+                    { prop: 'examName', label: '考试名称', fieldType: 'text' },
+                    { prop: 'bankName', label: '题库名称', fieldType: 'text' },
+                    {
+                        prop: 'examType', label: '考试类型', fieldType: 'checker', cols: 2, valueKey: 'value', options: [
+                            { value: 'trainingExam', label: '培训考试' },
+                            { value: 'POCTtraining', label: 'POCT培训' },
+                            { value: 'selfAssessment', label: '自主考核' },
+                            { value: 'routine', label: '常规' }
+                        ]
+                    },
+                    { prop: ['startDateDL', 'startDateDG'], label: '开始时间', fieldType: 'dateRange', options: { datefmt: 'yyyy-MM-dd' }},
+                    { prop: ['limitDateDL', 'limitDateDG'], label: '限考时间', fieldType: 'dateRange', options: { datefmt: 'yyyy-MM-dd' }}
+                    // { prop: ['Q^startDate^DL^yyyy-MM-dd', 'Q^startDate^DG^yyyy-MM-dd'], label: '开始时间', fieldType: 'dateRange', options: { datefmt: 'yyyy-MM-dd' }},
+                    // { prop: ['Q^limitDate^DL^yyyy-MM-dd', 'Q^limitDate^DG^yyyy-MM-dd'], label: '限考时间', fieldType: 'dateRange', options: { datefmt: 'yyyy-MM-dd' }}
+                ]
+            },
+            mainActions: [{
+                'name': '信息催办',
+                'type': 'primary',
+                'callback': this.batchReminders
+            },
+            {
+                'name': '消息催办',
+                'type': 'default',
+                'callback': this.smsReminders
+            }],
+            stateActive: false,
+            subject: '',
+            moreSubject: '',
+            subjectTitle: '',
+            typeId: '',
+            moreParams: {},
+            listData: [],
+            pagination: {},
+            sorts: {},
+
+            loading: false,
+            finished: false,
+            refreshing: false,
+            resultType: 'init',
+            errorType: null,
+            resultMessage: null,
+
+            checkMode: false,
+            checkedIds: [],
+            proInstId: '',
+            defId: '',
+            formrenderVisible: false,
+            formrenderTitle: '',
+            typeTreePopup: false,
+            keyword: '',
+            name: '全部',
+            current: 0,
+            startTime: [],
+            endTime: []
+        }
+    },
+    computed: {
+        ...mapState('ibps/user', [
+            'info'
+        ]),
+        rightText() {
+            return this.checkMode ? this.$t('common.button.cancel') : this.$t('common.button.manage')
+        },
+        selectedIds() {
+            return this.checkedIds.join(',')
+        }
+    },
+
+    beforeRouteLeave(to, from, next) {
+        if (this.showPop === true) {
+        // this.showConfirmationBoxList = true
+            this.$refs.childPop.parentSubmit()
+            this.showPop = false
+            next(false)
+        } else {
+            next()
+        }
+    },
+
+    methods: {
+        sendFunction(listData) {
+            const sendNotice = (req, ups) => {
+                req.forEach((item, i) => {
+                    this.$common.sendMsg(item)
+                })
+                updateTimes(ups)
+            }
+            // 更新数据并重新渲染
+            const updateTimes = req => {
+                const params = {
+                    tableName: 't_gqswb',
+                    updList: req
+                }
+                this.$common.request('update', JSON.stringify(params)).then(() => {
+                    Notify({ type: 'success', message: '消息催办成功!' })
+                    this.onRefreshPage()
+                })
+                // this.$common.request('update', JSON.stringify(params)).then(() => {
+                // template.$message.success('消息催办成功')
+                // template.handleAction('search', position, [], [], 0, { button_type: 'search' })
+                // })
+            }
+            const msgContent = {
+                soon: '即将超时,请及时处理!',
+                overtime: '已超时,请及时处理!'
+            }
+            const msgTitle = {
+                soon: '计划事务即将到期提醒',
+                overtime: '事务超时提醒'
+            }
+            const noticeList = []
+            const upList = []
+            let flag = false
+            let msg = ''
+            const currentTime = new Date(new Date().getTime() + 28800000).toJSON().slice(0, 16).replace('T', ' ')
+            listData.forEach(item => {
+                const notice = {
+                    subject: msgTitle[item.guo_qi_zhuang_tai],
+                    content: `${item.shi_wu_ming_cheng}【${item.shi_wu_shuo_ming_}】${msgContent[item.guo_qi_zhuang_tai]}`,
+                    receiverId: item.chu_li_ren_id_,
+                    canreplay: '0'
+                }
+                const up = {
+                    where: {
+                        id_: item.id_
+                    },
+                    param: {
+                        ti_xing_ci_shu_: parseInt(item.ti_xing_ci_shu_) + 1,
+                        ti_xing_shi_jian_: currentTime
+                    }
+                }
+                noticeList.push(notice)
+                upList.push(up)
+                // 校验提醒时间 (间隔不足2小时不允许发送)
+                const D = new Date(item.ti_xing_shi_jian_).getTime()
+                const N = new Date(currentTime).getTime()
+                if (N - D < 7200000) {
+                    flag = true
+                    msg = `事务【${item.shi_wu_ming_cheng}】上次消息催办时间为${item.ti_xing_shi_jian_},距今不足两小时,请勿频繁催办!`
+                }
+            })
+            if (flag) {
+                Notify({ type: 'primary', message: msg })
+                return
+            }
+            // updateTimes(upList)
+            sendNotice(noticeList, upList)
+        },
+        overlayShow(item) {
+            this.reminderSon = true
+            this.sonData = item
+        },
+        son() {
+            this.reminderSon = false
+        },
+        onClick(item, index) {
+            if (this.checkMode) {
+                this.$refs.checkboxes[index].toggle()
+            }
+        },
+        // 信息批量催办
+        batchReminders() {
+            // console.log('进入催办函数', this.checkedIds)
+            if (this.checkedIds.length === 0) {
+                this.$notify({
+                    type: 'warning',
+                    message: this.$t('common.dialog.selectedRecords')
+                })
+                return
+            }
+            this.getSMSInfo(this.checkedIds).then(res => {
+                this.sendFunction(res)
+            })
+        },
+        // 消息批量催办
+        smsReminders() {
+            if (this.checkedIds.length === 0) {
+                this.$notify({
+                    type: 'warning',
+                    message: this.$t('common.dialog.selectedRecords')
+                })
+                return
+            }
+            this.getSMSInfo(this.checkedIds).then(res => {
+                res.forEach(item => {
+                    this.smsFunction(item)
+                })
+            })
+        },
+        // 查询所有详细信息
+        getSMSInfo(list) {
+            const sql = `select * from t_gqswb`
+            return new Promise((resolve, reject) => {
+                this.$common.request('sql', sql).then(res => {
+                    const listData = []
+                    res.variables.data.forEach(item => {
+                        if (list.includes(item.id_)) {
+                            listData.push(item)
+                        }
+                    })
+                    resolve(listData)// 将处理后的数据作为参数传递给resolve
+                }).catch(err => {
+                    reject(err)
+                })
+            })
+        },
+        // 单条数据催办
+        sendSystemInfo(item) {
+            this.sendFunction([item])
+        },
+        // 单条短信信息发布
+        sendSmsInfo(item) {
+            // console.log('发送短信消息', item)
+            this.smsFunction(item)
+            // sendSmsList().then(res=>{
+            //   console.log('发送短信成功', res);
+            // })
+        },
+        // 短信催办函数
+        smsFunction(item) {
+            if (item.chu_li_ren_dian_h) {
+                const obj = {
+                    sig: item.id_,
+                    list: [
+                        { chu_li_ren_: item.chu_li_ren_ming_, chu_li_ren_dian_h: item.chu_li_ren_dian_h, ren_wu_ming_cheng: item.shi_wu_ming_cheng }
+                    ]
+                }
+                // 获取当时时间
+                const currentTime = new Date(new Date().getTime() + 28800000).toJSON().slice(0, 16).replace('T', ' ')
+                const D = new Date(item.duan_xin_shi_jian).getTime()
+                const N = new Date(currentTime).getTime()
+                if (N - D < 7200000) {
+                    Notify({ type: 'primary', message: `事务【${item.shi_wu_ming_cheng}】上次信息催办时间为${item.duan_xin_shi_jian},距今不足两小时,请勿频繁催办!` })
+                    return
+                }
+                sendSmsList(obj).then((res) => {
+                    // console.log('短信催办成功', res)
+                    const up = {
+                        tableName: 't_gqswb',
+                        updList: [
+                            {
+                                where: {
+                                    id_: item.id_
+                                },
+                                param: {
+                                    duan_xin_ci_shu_: parseInt(item.duan_xin_ci_shu_) + 1,
+                                    duan_xin_shi_jian: this.getCurrentDateTime()
+                                }
+                            }]
+                    }
+                    this.$common.request('update', JSON.stringify(up)).then(() => {
+                        // 更改数据库信息成功
+                        console.log('更改数据库信息成功')
+                        Notify({ type: 'success', message: '短信催办成功!' })
+                        this.onRefreshPage()
+                    })
+                })
+            } else {
+                Notify({ type: 'danger', message: '还未上传手机号' })
+            }
+        },
+        getCurrentDateTime() {
+            const now = new Date()
+            const year = now.getFullYear()
+            const month = ('0' + (now.getMonth() + 1)).slice(-2) // 月份从0开始,所以加1,并补零
+            const day = ('0' + now.getDate()).slice(-2) // 补零
+            const hours = ('0' + now.getHours()).slice(-2) // 补零
+            const minutes = ('0' + now.getMinutes()).slice(-2) // 补零
+            const seconds = ('0' + now.getSeconds()).slice(-2) // 补零
+            return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
+        },
+        updataSet(v) {
+            this.showPop = v
+        },
+        generateTitle(name, title) { // generateTitle by vue-i18n
+            return i18n.generateTitle(name, title)
+        },
+        toCheckMode() {
+            if (this.$utils.isEmpty(this.listData)) {
+                return
+            }
+            if (this.checkMode) {
+                // this.show = true
+                this.checkedIds = []
+            }
+            this.checkMode = !this.checkMode
+        },
+        clickType() {
+            this.typeTreePopup = true
+        },
+        onSearch() {
+            this.stateActive = false
+            ActionUtils.initListData(this)
+            this.current = 0
+            this.listData = []
+            this.loadData()
+        },
+        clickMoreSearch() {
+            this.moreSearchPopup = true
+            this.stateActive = false
+        },
+        clickTypeNode(data) {
+            this.typeId = data.id
+            this.onMoreSearch({})
+        },
+        // 高级查询
+        onMoreSearch(params) {
+            if (this.$utils.isNotEmpty(this.typeId)) {
+                params['Q^type_id_^SL'] = this.typeId
+            }
+            this.moreParams = params
+            this.onSearch()
+            if (this.$utils.isNotEmpty(params)) {
+                this.stateActive = true
+            }
+        },
+        resetForm() {
+            this.typeId = ''
+        },
+        // 下拉刷新
+        onRefresh() {
+            this.footText = false
+            this.noData = false
+            this.refreshing = true
+            this.finished = false
+            this.loading = true
+            this.onSearch()
+        },
+        onRefreshPage() {
+            this.checkedIds = []
+            this.checkMode = false
+            this.onRefresh()
+        },
+        /**
+       * 加载数据
+       */
+        loadData() {
+            this.loading = true
+            let page = 0
+            if (this.current === 0) {
+                page = 0
+            } else {
+                page = this.current * 10
+            }
+            const key = this.subject
+            const sql = `select * from t_gqswb where t_gqswb.shi_wu_ming_cheng like'%` + key + `%'  ORDER BY t_gqswb.create_time_ DESC LIMIT ${page},10 `
+            this.$common.request('sql', sql).then(res => {
+                if (this.current === 0 && res.variables.data.length === 0) {
+                    this.finished = true
+                    this.noData = true
+                    this.footText = false
+                }
+
+                const data = res.variables.data
+                this.listData.push(...data)
+                this.refreshing = false
+                if (this.listData.length !== 0 && (this.listData.length) % 10 !== 0) {
+                    this.footText = true
+                    this.noData = false
+                    this.finished = true
+                    return
+                } else {
+                    this.current++
+                }
+                this.loading = false
+            }).catch(err => {
+                console.log(err)
+            })
+        },
+        // 获取格式化参数
+        getSearcFormData() {
+            let params = {}
+            if (this.$utils.isNotEmpty(this.subject)) {
+                params['Q^subject_^SL'] = this.subject
+            }
+            if (this.$utils.isNotEmpty(this.moreParams)) {
+                params = Object.assign(params, this.moreParams)
+            }
+            return ActionUtils.formatParams(
+                params,
+                this.pagination,
+                this.sorts)
+        },
+
+        transformTime(timeStamp) {
+            const hours = Math.floor(parseInt(timeStamp) / 3600000)
+            const minutes = Math.floor((parseInt(timeStamp) % 3600000) / 60000)
+            return hours + '小时' + minutes + '分钟'
+        }
+    }
+}
+</script>
+<style scoped lang="scss">
+  .examRow {
+    padding: 2% 0;
+
+    .popupTitle {
+      text-align: center;
+      font-size: 14px;
+      color: #555;
+    }
+
+    .popupContent {
+      text-align: left;
+      font-size: 14px;
+      color: #777;
+    }
+  }
+
+  .examRowto {
+    margin: 10% 0;
+
+    .van-col {
+      text-align: center;
+
+      .van-button {
+        width: 80%;
+        font-size: 16px;
+      }
+    }
+  }
+</style>

+ 110 - 0
src/views/platform/bpmn/reminders/reminder.vue

@@ -0,0 +1,110 @@
+<template>
+    <div>
+        <div style="width: 100%;padding: 3% 0; text-align: center;  color: #303030;border-bottom: 1px solid #ebe8e8;"><van-row style="margin:0">
+            <van-col span="4"><van-icon name="cross" size="20px" @click="onClose" /></van-col>
+            <van-col span="16" style="margin:1% auto 0;">事务催办</van-col>
+        </van-row>
+        </div>
+        <div style="width:90%;margin:5% auto;">
+            <van-row>
+                <van-col span="8" class="prompt">事务名称:</van-col>
+                <van-col span="16" class="content"> {{ sonData.shi_wu_ming_cheng==''?'/':sonData.shi_wu_ming_cheng==null?'/':sonData.shi_wu_ming_cheng==undefined?'/':sonData.shi_wu_ming_cheng }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">部门:</van-col>
+                <van-col span="16" class="content"> {{ sonData.bu_men_==''?'/':sonData.bu_men_==null?'/':sonData.bu_men_==undefined?'/':sonData.bu_men_ }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">事务类型:</van-col>
+                <van-col span="16" class="content"> {{ sonData.shi_wu_lei_xing_==''?'/':sonData.shi_wu_lei_xing_==null?'/':sonData.shi_wu_lei_xing_==undefined?'/':sonData.shi_wu_lei_xing_ }}</van-col>
+            </van-row>
+
+            <van-row>
+                <van-col span="8" class="prompt">过期时间:</van-col>
+                <van-col span="16" class="content"> {{ sonData.shi_wu_ming_cheng==''?'/':sonData.shi_wu_ming_cheng==null?'/':sonData.shi_wu_ming_cheng==undefined?'/':sonData.shi_wu_ming_cheng }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">事务状态:</van-col>
+                <van-col span="16" class="content"> {{ sonData.shi_wu_zhuang_tai==''?'/':sonData.shi_wu_zhuang_tai==null?'/':sonData.shi_wu_zhuang_tai==undefined?'/':sonData.shi_wu_zhuang_tai }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">处理人:</van-col>
+                <van-col span="16" class="content"> {{ sonData.chu_li_ren_ming_==''?'/':sonData.chu_li_ren_ming_==null?'/':sonData.chu_li_ren_ming_==undefined?'/':sonData.chu_li_ren_ming_ }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">事务说明:</van-col>
+                <van-col span="16" class="content"> {{ sonData.shi_wu_shuo_ming_==''?'/':sonData.shi_wu_shuo_ming_==null?'/':sonData.shi_wu_shuo_ming_==undefined?'/':sonData.shi_wu_shuo_ming_ }}</van-col>
+            </van-row>
+
+            <van-row>
+                <van-col span="8" class="prompt">处理人电话:</van-col>
+                <van-col span="16" class="content"> {{ sonData.chu_li_ren_dian_h==''?'/':sonData.chu_li_ren_dian_h==null?'/':sonData.chu_li_ren_dian_h==undefined?'/':sonData.chu_li_ren_dian_h }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">部门主管:</van-col>
+                <van-col span="16" class="content"> {{ sonData.zhu_guan_id_==''?'/':sonData.zhu_guan_id_==null?'/':sonData.zhu_guan_id_==undefined?'/':changUserName(sonData) }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">主管电话:</van-col>
+                <van-col span="16" class="content"> {{ sonData.zhu_guan_dian_hua==''?'/':sonData.zhu_guan_dian_hua==null?'/':sonData.zhu_guan_dian_hua==undefined?'/':sonData.zhu_guan_dian_hua }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">催办次数:</van-col>
+                <van-col span="16" class="content"> {{ sonData.ti_xing_ci_shu_==''?'/':sonData.ti_xing_ci_shu_==null?'/':sonData.ti_xing_ci_shu_==undefined?'/':sonData.ti_xing_ci_shu_ }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">上次催办时间:</van-col>
+                <van-col span="16" class="content"> {{ sonData.ti_xing_shi_jian_==''?'/':sonData.ti_xing_shi_jian_==null?'/':sonData.ti_xing_shi_jian_==undefined?'/':sonData.ti_xing_shi_jian_ }}</van-col>
+            </van-row>
+            <van-row>
+                <van-col span="8" class="prompt">过期状态:</van-col>
+                <van-col span="16" class="content"> {{ sonData.guo_qi_zhuang_tai==''?'/':sonData.guo_qi_zhuang_tai==null?'/':sonData.guo_qi_zhuang_tai==undefined?'/':sonData.guo_qi_zhuang_tai }}</van-col>
+            </van-row>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    props: {
+        sonData: {
+            type: Object,
+            default: {}
+        }
+    },
+    data() {
+        const userList = this.$store.getters.userList
+        return {
+            userList: userList
+        }
+    },
+    created() {
+
+        // 使用人id转换为用户名称
+
+    },
+    methods: {
+        changUserName(data) {
+            const user = this.userList.find(item => item.userId === data.zhu_guan_id_)
+            if (user) {
+                return user.userName
+            }
+        },
+        onClose() {
+            this.$emit('son', false)
+        }
+    }
+}
+</script>
+<style scoped lang="less">
+.van-row{
+  margin: 5% 0;
+  .prompt{
+    color: #666;
+  }
+  .content{
+    font-size: 14px;
+    color: #777;
+  }
+}
+
+</style>

+ 9 - 0
src/views/platform/bpmn/reminders/sendSms.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+import { BUSINESS_BASE_URL } from '@/api/baseUrl'
+export function sendSmsList(params) {
+    return request({
+        url: BUSINESS_BASE_URL() + '/sys/universal/sendmessages',
+        method: 'post',
+        data: params
+    })
+}