Browse Source

我的事务

zhuangyunsheng 1 year ago
parent
commit
0d635e0050

+ 2 - 2
.env.development

@@ -11,8 +11,8 @@ VITE_BASE_URL = "/dev-api"
 VITE_BASE_MOCK_URL = "/mock-api"
 
 # boot服务端接口路径
-# VITE_BASE_SERVER_URL = "http://192.168.101.93:8000"
-VITE_BASE_SERVER_URL = "http://10.236.2.146:8080/dev-api" # 线上 
+VITE_BASE_SERVER_URL = "http://192.168.101.93:8000"
+# VITE_BASE_SERVER_URL = "http://10.236.2.146:8080/dev-api" # 线上 
 # VITE_BASE_SERVER_URL = "http://10.206.20.153:8000" # 青岛港-内网 dns: 10.201.192.1
 # VITE_BASE_SERVER_URL = "http://192.168.43.231:8000" # 热点
 # VITE_BASE_SERVER_URL = "http://192.168.1.133:8000" # 青岛港-7楼

+ 13 - 0
src/api/policy/todo.js

@@ -1,4 +1,6 @@
 import request from "@/utils/request";
+import { useUserStore } from "@/store/user";
+const { userInfo } = useUserStore(); // store 用户
 
 export default {
     get: function (params) {
@@ -7,5 +9,16 @@ export default {
             method: "get",
             params
         })
+    },
+
+    msg: function (params) {
+        return request({
+            url: "/qdport-zcgx/message/mesPage",
+            method: "get",
+            params: {
+                ...params,
+                createId: userInfo.id
+            }
+        })
     }
 }

+ 16 - 2
src/components/ReplyCard/index.vue

@@ -21,9 +21,9 @@
         </template>
         
         <div class="reply-card__footer">
-            <template v-if="total > replyCount">
+            <template v-if="total > params.size">
                 <el-divider></el-divider>
-                <el-button class="text-reverse" type="primary" icon="arrow-right" link>查看全部{{ replyTotal }}条留言</el-button>
+                <el-button class="text-reverse" type="primary" icon="arrow-right" link @click="showAllReply">查看全部{{ replyTotal }}条留言</el-button>
             </template>
             <template v-else><el-divider v-if="total">已加载全部留言</el-divider></template>
         </div>
@@ -43,6 +43,7 @@ export default {
         replyDetail
     },
     props: {
+        isDetail: { type: Boolean, default: false },
         refId: { type: String, default: "" },
         refType: { type: String, default: "policy_share" },
         replyCount: { type: Number, default: 2 },
@@ -88,6 +89,7 @@ export default {
                 if (res.code === 200) {
                     this.replyData = res.data.records;
                     this.total = res.data.total;
+                    this.$emit("replySuccess")
                 } else ElMessage.error(res.msg);
             }).catch(() => this.loading = false);
         },
@@ -116,6 +118,15 @@ export default {
         reply_detail(data) {
             this.dialog = true;
             nextTick(() => this.$refs.replyDetail.open(data));
+        },
+
+        showAllReply() {
+            if (this.isDetail) {
+               this.params.size = this.total;
+               this.reloadTree();
+            } else {
+                this.$emit("replyAll", this.total);
+            }
         }
     }
 }
@@ -134,6 +145,9 @@ export default {
 
 .reply-card {
   --el-card-border-color: var(--el-border-color-lighter);
+  max-width: 750px;
+  margin: auto;
+  border: none;
 
   :deep(.el-card__header) {
     display: flex;

+ 4 - 7
src/layout/components/Main/index.vue

@@ -3,13 +3,12 @@ import { useTabsBarStore } from "@/store/tabsbar";
 const cachedViews = useTabsBarStore().cachedViews;
 
 const props = defineProps({
-    hasTabs: { type: Boolean, default: true },
     hasPadding: { type: Boolean, default: false }
 });
 </script>
 
 <template>
-    <section :class="['tjm_main_content_container', !hasTabs && 'no-tabs-bar', hasPadding && 'content-has-padding']">
+    <section :class="['tjm_main_content_container', hasPadding && 'content-has-padding']">
         <router-view v-slot="{ Component, route }">
             <transition-group appear name="fade-transform" mode="out-in">
                 <keep-alive :include="cachedViews">
@@ -22,7 +21,9 @@ const props = defineProps({
 
 <style lang="scss" scoped>
 .tjm_main_content_container {
-  min-height: calc($base-main-height + 2 * $base-padding);
+  min-height: calc(
+    $base-main-height + $base-tabsbar-height + 2 * $base-padding
+  );
   background-color: inherit;
 }
 
@@ -30,8 +31,4 @@ const props = defineProps({
   min-height: $base-main-height;
   padding: $base-padding;
 }
-
-.no-tabs-bar {
-  min-height: calc($base-main-height + $base-tabsbar-height);
-}
 </style>

+ 1 - 1
src/layout/components/NavBar/components/Breadcrumb.vue

@@ -20,7 +20,7 @@ const levelList = ref([])
 function getBreadcrumb() {
     let matched = route.matched.filter(item => item.meta && item.meta.title);
     
-    if (!isDashboard(matched[0]) && route && route.name != "policyDetail") matched.unshift({ path: "/home/index", meta: { title: "首页" }, redirect: "/" });
+    if (!isDashboard(matched[0]) && route) matched.unshift({ path: "/home/index", meta: { title: "首页" }, redirect: "/" });
     if (route && route.path.trim() === "/publicDomain") matched[matched.length - 1].meta.title = route.query.zcType && route.query.zcType.trim() || route.name;
 
     levelList.value = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)

+ 6 - 5
src/layout/index.vue

@@ -1,16 +1,16 @@
 <template>
     <el-config-provider :locale="localeLang">
         <div class="tjm_wrapper">
-            <div class="tjm_warpper_container fixed" :class="!hasTabs && 'no-tabs-bar'">
+            <div class="tjm_warpper_container fixed" :class="!hasPadding && 'no-tabs-bar'">
                 <tjm-side-bar v-if="layoutStyle == 'vertical'" />
                 <div class="tjm_container" :class="{ 'is-collapse': collapse, 'is-layoutStyle': layoutStyle == 'horizontal' }">
                     <div class="header_container fixed-header" 
                         :class="{ 'is-collapse': collapse, 'is-layoutStyle': layoutStyle == 'horizontal' }">
                         <tjm-nav-bar />
-                        <tjm-tabs-bar v-if="hasTabs" />
+                        <tjm-tabs-bar v-if="hasPadding" />
                     </div>
                     <div class="content_container">
-                        <tjm-main :hasTabs="hasTabs" :hasPadding="hasPadding" />
+                        <tjm-main :hasPadding="hasPadding" />
                     </div>
                 </div>
             </div>
@@ -29,12 +29,10 @@ import TjmTabsBar from "./components/TabsBar/index.vue";
 import TjmMain from "./components/Main/index.vue";
 
 const route = useRoute();
-const hasTabs = computed(() => route.name != "policyDetail");
 const hasPadding = computed(() => route.name != "Index");
 
 const { collapse, layoutStyle } = storeToRefs(useSettingStore());
 layoutStyle.value = "vertical";
-collapse.value = true;
 
 const { messages, locale, t } = useI18n();
 const localeLang = ref(messages[getConfig("globalI18n")])
@@ -45,6 +43,9 @@ const changeLanguage = () => {
 }
 // 监听修改语言实现element
 watchEffect(changeLanguage)
+watchEffect(() => {
+   collapse.value = !hasPadding.value;
+})
 </script>
 
 <style lang="scss" scoped>

+ 2 - 2
src/micro/index.vue

@@ -36,9 +36,9 @@ function beforemount() {
 }
 function mounted() {
     console.log("渲染完成")
-    const url = decodeURIComponent(router.currentRoute.value.fullPath)
+    const path = decodeURIComponent(router.currentRoute.value.fullPath)
     //  microApp.setData("app1", { path: path})
-    microApp.router.push({ name: "my-app", path: url })
+    microApp.router.push({ name: "my-app", path })
     
     loading.value = false
 }

+ 1 - 3
src/permission.js

@@ -19,9 +19,7 @@ router.beforeEach((to, from, next) => {
                         redirect: "/notfound"
                     })
 
-                    if (to.path == "/publicDomain" && !to.query.zcType && !to.query.name) next({ path: "/notfound", replace: true }); // hack方法 确保addRoutes已完成
-                    else if (to.path == "/policyDetail" && !to.query.id) next({ path: "/notfound", replace: true }); // hack方法 确保addRoutes已完成
-                    else next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
+                    next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
                 })
             })
         } else {

+ 0 - 11
src/router/constantRoutes.js

@@ -56,17 +56,6 @@ export const staticRoutes = [
                     affix: true
                 },
                 children: []
-            }, {
-                path: "/policyDetail",
-                name: "policyDetail",
-                component: () => import("@/views/home/policyDetail.vue"),
-                alwaysShow: false,
-                hidden: true,
-                meta: {
-                    title: "政策分享详情",
-                    affix: false
-                },
-                children: []
             }, {
                 path: "/workflow/:page*",
                 name: "workflow",

+ 16 - 20
src/store/permission.js

@@ -41,8 +41,7 @@ export const usePermissionStore = defineStore(
 
 function filterAsyncRouter(asyncRouterMap, httpSave = true) {
     const blackList = ["/system/dataList",
-        "/progress", // 进度
-        "/policyShare/message" // 留言
+        "/progress" // 进度
     ]
     const hideList = ["/publicDomain",
         // "/workflow"
@@ -104,24 +103,21 @@ function filterAsyncRouter(asyncRouterMap, httpSave = true) {
                         icon: route.icon,
                         title: route.name
                     },
-                    children: [
-                        {
-                            // alwaysShow: false, //菜单不支持设置
-                            children: [],
-                            component: loadView(route.path),
-                            hidden: hideList.includes(route.path),
-                            meta: {
-                                icon: route.icon,
-                                link: "",
-                                cache: false,
-                                title: route.name
-                            },
-                            name: route.name,
-                            path: route.path,
-                            redirect: false
-                        }
-                    ]
-
+                    children: [{
+                        // alwaysShow: false, //菜单不支持设置
+                        children: [],
+                        component: loadView(route.path),
+                        hidden: hideList.includes(route.path),
+                        meta: {
+                            icon: route.icon,
+                            link: "",
+                            cache: false,
+                            title: route.name
+                        },
+                        name: route.name,
+                        path: route.path,
+                        redirect: false
+                    }]
                 }
                 if (route.path.startsWith("http") || route.path.startsWith("/tjmchild") || route.path.includes("queryParams")) {
                     if (httpSave) {

+ 2 - 2
src/views/caseShare/index.vue

@@ -48,7 +48,7 @@
             <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="(row, column) => !column.fixed && table_detail(row)">
                 <el-table-column type="index" label="序号" width="55"></el-table-column>
                 <template v-for="(item, index) in columns" :key="index">
-                    <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
+                    <el-table-column :label="item.label" :prop="item.props" :min-width="item.width || 180" show-overflow-tooltip>
                         <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
                     </el-table-column>
                 </template>
@@ -100,7 +100,7 @@ import { columns, statusDic } from "./main";
 import yhPagination from "@/components/Pagination/index.vue";
 import yhWorkflow from "@/components/Workflow/index.vue";
 import caseShareDetail from "./dialog.vue";
-import policyProcessDialog from "@/views/toDo/case.vue";
+import policyProcessDialog from "@/views/myBusiness/case.vue";
 
 export default {
     components: {

+ 108 - 27
src/views/home/index.vue

@@ -1,5 +1,10 @@
 <template>
-    <div class="home-container">
+    <div v-if="detail.show" class="home-policy-detail">
+        <el-page-header title="返回" icon="arrow-left" :content="detail.name" @back="detail.show = false"></el-page-header>
+        <policy-detail ref="policyDetail"></policy-detail>
+    </div>
+
+    <template v-else>
         <div style="background-image: url(/home-header.png)" class="home-header">
             <el-form @submit.prevent @keyup.enter="name && toDomain({ name })">
                 <el-form-item>
@@ -27,11 +32,14 @@
                         <el-tab-pane v-for="item in storageTypeDic" :key="item.value" :label="item.label" :name="item.value"></el-tab-pane>
                     </el-tabs>
                 </template>
-                
+
                 <ul v-loading="loading">
                     <li v-for="item in tableData" :key="item.id">
-                        <el-text truncated @click="table_detail(item)"><span>[{{ item.zcType }}]</span>{{ item.name }}</el-text>
-                        <!-- <el-text truncated @click="table_detail(item)"><span>[{{ item.zcType }}]</span>《{{ item.name }}》</el-text> -->
+                        <span class="circle-icon"></span>
+                        <el-text truncated @click="table_detail(item)">
+                            <span>[{{ item.zcType }}]</span>
+                            {{ item.name }}
+                        </el-text>
                         <span class="date">{{ columnFormat(item, "createTime") }}</span>
                     </li>
                 </ul>
@@ -48,15 +56,20 @@
                 </template>
             </div>
         </div>
-    </div>
+    </template>
 </template>
 
 <script>
 import Share from "@/api/policy/share";
 import { levelDic, typeDic } from "@/views/policyShare/main";
 import { columns, storageTypeDic } from "./main";
+import policyDetail from "./policyDetail.vue";
 
 export default {
+    components: {
+        policyDetail
+    },
+
     data() {
         return {
             columns, levelDic, typeDic, storageTypeDic,
@@ -65,12 +78,17 @@ export default {
             loading: false,
             params: {
                 page: 1,
-                size: 10,
+                size: 15,
                 status: "done",
                 zcLevel: levelDic[0],
                 inWhType: storageTypeDic[0].value
             },
-            tableData: []
+            tableData: [],
+
+            detail: {
+                show: false,
+                name: null
+            }
         }
     },
 
@@ -105,14 +123,38 @@ export default {
             this.$router.push({ path: "/publicDomain", query })
         },
 
-        table_detail({ id }) {
-            this.$router.push({ path: "/policyDetail", query: { id } });
+        table_detail(row) {
+            this.detail.show = true;
+            this.detail.name = row.name;
+            nextTick(() => this.$refs.policyDetail.setData(row));
         }
     }
 }
 </script>
 
 <style lang="scss" scoped>
+.home-policy-detail {
+  .el-page-header {
+    padding: 15px;
+    background: #fff;
+    box-shadow: var(--el-box-shadow-light);
+
+    :deep(.el-page-header__back:hover) {
+      color: var(--el-color-primary);
+    }
+  }
+
+  :deep(.tjm_card_style_custom) {
+    width: calc(100% - 2 * $base-padding);
+    margin: $base-padding auto 0;
+
+    .el-card__body {
+      max-height: calc($base-main-height + $base-padding - 54px);
+      overflow: auto;
+    }
+  }
+}
+
 .home-header {
   display: flex;
   align-items: center;
@@ -212,29 +254,53 @@ export default {
         }
       }
 
-      .el-card__body ul li {
-        display: flex;
-        justify-content: space-between;
-        font-size: 16px;
+      .el-card__body {
+        min-height: 208px;
+        max-height: 308px;
+        padding: 0;
+        overflow: auto;
+        font-family: 'Helvetica Neue', Helvetica, Arial, 'Hiragino Sans GB',
+          'Hiragino Sans GB W3', 'Microsoft YaHei UI', 'Microsoft YaHei',
+          'WenQuanYi Micro Hei', sans-serif;
+
+        ul li {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          padding: 14px 0 14px var(--el-card-padding);
+          font-size: 16px;
+
+          .circle-icon {
+            display: inline-block;
+            width: 4px;
+            height: 4px;
+            margin-right: 13px;
+            background: #355d97;
+            border-radius: 50%;
+            line-height: 1;
+          }
 
-        .el-text {
-          cursor: pointer;
-          flex: 1;
-          font-size: inherit;
-          color: inherit;
+          .el-text {
+            cursor: pointer;
+            flex: 1;
+            font-size: inherit;
+            color: inherit;
 
-          span {
-            padding-right: 6px;
+            span {
+              margin-right: 6px;
+            }
           }
-        }
 
-        &:hover .el-text {
-          text-decoration: underline;
-          color: var(--el-color-primary);
-        }
+          &:hover .el-text {
+            font-weight: 700;
+            text-decoration: underline;
+            color: var(--el-color-primary);
+          }
 
-        .date {
-          color: #6c7380;
+          .date {
+            margin-left: 10px;
+            color: #6c7380;
+          }
         }
       }
     }
@@ -246,10 +312,25 @@ export default {
   padding: 0 20px 40px;
 
   .domain-title {
+    position: relative;
+    width: calc(100% - 40px);
+    left: 20px;
     margin-bottom: 30px;
+    padding-bottom: 10px;
+    border-bottom: 2px solid var(--el-border-color-light);
     text-align: center;
     font-size: 36px;
     font-weight: 700;
+
+    &::after {
+      content: '';
+      position: absolute;
+      width: 80px;
+      height: 4px;
+      background-color: var(--el-color-primary);
+      bottom: -3px;
+      left: calc(50% - 40px);
+    }
   }
 
   .domain-link {

+ 29 - 46
src/views/home/policyDetail.vue

@@ -1,12 +1,8 @@
 <template>
-    <el-card class="tjm_card_style_custom">
-        <template #header>
-            <el-page-header title="返回" icon="arrow-left" :content="form.name" @back="$router.go(-1)"></el-page-header>
-        </template>
-
+    <el-card v-loading="loading" class="tjm_card_style_custom">
         <el-collapse v-model="activeNames">
-            <el-collapse-item class="form-collapse-item" v-loading="loading" title="政策内容" name="detail">
-                <share-form ref="shareForm" mode="detail" @formSuccess="formSuccess" @formError="loading=false"></share-form>
+            <el-collapse-item class="form-collapse-item" title="政策内容" name="detail">
+                <share-form ref="shareForm" mode="detail" @formSuccess="loading = false" @formError="loading = false"></share-form>
             </el-collapse-item>
             <el-collapse-item title="政策关联" name="link">
                 <el-empty v-if="!form.docNo"></el-empty>
@@ -15,7 +11,7 @@
                 </template>
             </el-collapse-item>
             <el-collapse-item class="reply-collapse-item" title="政策留言" name="reply">
-                <yh-reply-card :refId="$route.query.id" :replyCount="2" :replyChildrenCount="3"></yh-reply-card>
+                <yh-reply-card v-if="form.id" :refId="form.id" isDetail :replyCount="replyCount || 5" :replyChildrenCount="3" @replySuccess="replySuccess"></yh-reply-card>
             </el-collapse-item>
         </el-collapse>
     </el-card>
@@ -37,66 +33,53 @@ export default {
         return {
             loading: false,
             activeNames: ["detail", "link", "reply"],
+            replyCount: null,
 
             form: {
+                id: null,
                 name: null,
                 docNo: null
             }
         }
     },
 
-    mounted() {
-        this.loading = true;
-        nextTick(() => this.$refs.shareForm.setData(this.$route.query.id));
-    },
-
     methods: {
-        formSuccess(data) {
-            this.loading = false;
-            this.form.name = data.name;
+        setData(data, replyCount) {
+            this.loading = true;
+            this.replyCount = replyCount || null;
+            this.form.id = data.id;
             this.form.docNo = data.docNo;
+            nextTick(() => this.$refs.shareForm.setData(data.id));
+        },
+
+        replySuccess() {
+            this.replyCount && nextTick(() => document.getElementsByClassName("reply-collapse-item") && document.getElementsByClassName("reply-collapse-item")[0] && document.getElementsByClassName("reply-collapse-item")[0].scrollIntoView({ block: "end" }));
         }
     }
 }
 </script>
 
 <style lang="scss" scoped>
-.tjm_card_style_custom > {
-  :deep(.el-card__header) {
-    position: relative;
-    border-bottom: none;
+.tjm_card_style_custom > :deep(.el-card__body) .el-collapse {
+  border: none;
 
-    &::after {
-      content: '';
-      position: absolute;
-      bottom: 0;
-      left: 20px;
-      width: calc(100% - 40px);
-      height: 1px;
-      background: var(--el-card-border-color);
-    }
+  .el-collapse-item .el-collapse-item__header {
+    font-size: 15px;
+    font-weight: 600;
   }
 
-  :deep(.el-card__body) {
-    padding-bottom: calc(var(--el-card-padding) + 25px);
-    .el-collapse {
-      border: none;
-
-      .el-collapse-item .el-collapse-item__header {
-        font-size: 15px;
-        font-weight: 600;
-      }
+  .form-collapse-item .el-form {
+    padding-right: calc(var(--el-card-padding) * 2);
+  }
 
-      .form-collapse-item .el-form {
-        padding-right: calc(var(--el-card-padding) * 2);
-      }
+  .reply-collapse-item .el-collapse-item__wrap {
+    border-bottom: none;
 
-      .reply-collapse-item .el-collapse-item__wrap {
-        border-bottom: none;
+    .el-collapse-item__content {
+      padding-bottom: 0;
 
-        .el-collapse-item__content {
-          padding-bottom: 0;
-        }
+      .reply-card {
+        border: 1px solid var(--el-card-border-color);
       }
     }
   }

+ 7 - 3
src/views/manage/policyShare/index.vue

@@ -53,7 +53,7 @@
             <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="(row, column) => !column.fixed && table_edit(row, 'detail')">
                 <el-table-column type="index" label="序号" width="55"></el-table-column>
                 <template v-for="(item, index) in columns" :key="index">
-                    <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
+                    <el-table-column :label="item.label" :prop="item.props" :min-width="item.width || 180" show-overflow-tooltip>
                         <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
                     </el-table-column>
                 </template>
@@ -61,11 +61,11 @@
                     <template #default="scope">
                         <el-button type="primary" link icon="edit" @click.stop="table_edit(scope.row)">修改</el-button>
                         <el-button type="primary" link icon="delete" @click.stop="table_del(scope.row)">删除</el-button>
-                        <el-button v-if="scope.row.isInWh == 1 && scope.row.inWhType == '文件类'" class="no-m-l" type="primary" link @click.stop="table_edit(scope.row, 'decode')">
+                        <el-button v-if="showDecode(scope.row)" class="no-m-l" type="primary" link @click.stop="table_edit(scope.row, 'decode')">
                             <template #icon><tjm-icon-fluent-emoji-high-contrast-open-book /></template>
                             添加解读
                         </el-button>
-                        <el-button v-if="scope.row.processTaskId && scope.row.processInstanceId" :class="scope.row.isInWh == 0 || scope.row.inWhType == '解读类' && 'no-m-l'" type="primary" link @click.stop="table_process(scope.row)">
+                        <el-button v-if="scope.row.processTaskId && scope.row.processInstanceId" :class="!showDecode(scope.row) && 'no-m-l'" type="primary" link @click.stop="table_process(scope.row)">
                             <template #icon><tjm-icon-uis-process /></template>
                             审批流程
                         </el-button>
@@ -127,6 +127,10 @@ export default {
     },
 
     methods: {
+        showDecode(row) {
+            return row.isInWh == 1 && row.inWhType == '文件类';
+        },
+
         columnFormat(row, props) {
             if (props == "createTime") return row[props].split(" ")[0];
             if (props == "isInWh") return whetherDic[row[props]] || "";

+ 1 - 1
src/views/manage/policyStrive/index.vue

@@ -45,7 +45,7 @@
             <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="(row, column) => !column.fixed && table_detail(row)">
                 <el-table-column type="index" label="序号" width="55"></el-table-column>
                 <template v-for="(item, index) in columns" :key="index">
-                    <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
+                    <el-table-column :label="item.label" :prop="item.props" :min-width="item.width || 180" show-overflow-tooltip>
                         <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
                     </el-table-column>
                 </template>

src/views/toDo/case.vue → src/views/myBusiness/case.vue


+ 155 - 0
src/views/myBusiness/component/done.vue

@@ -0,0 +1,155 @@
+<template>
+    <el-card class="tjm_card_style_custom">
+        <div class="tjm_card_title">查询表格</div>
+        <div class="tjm_card_select">
+            <el-form class="tjm_card_select_left" :model="params" inline label-width="80px" label-position="left">
+                <el-form-item label="政策名称">
+                    <el-input v-model="params.zcName" clearable placeholder="请输入政策名称"></el-input>
+                </el-form-item>
+                <el-form-item label="政策类别">
+                    <el-select v-model="params.zcType" clearable placeholder="请选择政策类别">
+                        <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="业务类型">
+                    <el-select v-model="params.refType" clearable placeholder="请选择业务类型">
+                        <el-option v-for="(label, key) in refTypeDic" :key="key" :label="label" :value="key"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="填报日期">
+                    <el-date-picker v-model="createTime" type="daterange" value-format="YYYY-MM-DD" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+                </el-form-item>
+
+                <el-form-item>
+                    <el-button type="primary" icon="search" @click="reloadTable">搜索</el-button>
+                    <el-button icon="refresh-right" @click="reset">重置</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+        <el-divider></el-divider>
+
+        <div class="tjm_card_table">
+            <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="(row, column) => !column.fixed && table_detail(row)">
+                <el-table-column type="index" label="序号" width="55"></el-table-column>
+                <el-table-column label="政策名称" prop="zcName" min-width="180" show-overflow-tooltip></el-table-column>
+                <el-table-column label="政策概要" prop="zcAbstractContent" min-width="180" show-overflow-tooltip></el-table-column>
+                <el-table-column label="政策类别" prop="zcType" min-width="100" show-overflow-tooltip></el-table-column>
+                <el-table-column label="业务类型" min-width="100" show-overflow-tooltip>
+                    <template #default="scope">{{ refTypeDic[scope.row.refType] }}</template>
+                </el-table-column>
+                <el-table-column label="填报人" prop="zcCreateName" min-width="180" show-overflow-tooltip></el-table-column>
+                <el-table-column label="填报单位" prop="zcCompanyName" min-width="180" show-overflow-tooltip></el-table-column>
+                <el-table-column label="联系方式" prop="zcContactPhone" width="180" show-overflow-tooltip></el-table-column>
+                <el-table-column label="填报日期" width="120" show-overflow-tooltip>
+                    <template #default="scope">{{ scope.row.zcCreateTime.split(" ")[0] }}</template>
+                </el-table-column>
+                <el-table-column label="操作" fixed="right" width="180">
+                    <template #default="scope">
+                        <el-button type="primary" link icon="tickets" @click.stop="table_detail(scope.row)">详情</el-button>
+                        <el-button v-if="scope.row.processTaskId && scope.row.processInstanceId" type="primary" link @click.stop="table_process(scope.row)">
+                            <template #icon><tjm-icon-uis-process /></template>
+                            审批流程
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div class="tjm_card_pagination">
+            <yh-pagination v-model:pageNo="params.page" v-model:pageSize="params.size" :total="total" @paginationChange="reloadTable"></yh-pagination>
+        </div>
+    </el-card>
+
+    <yh-workflow v-if="dialog.workflow" ref="yhWorkflow" @closed="dialog.workflow = false"></yh-workflow>
+    <policy-share v-if="dialog.policy_share" ref="policy_share" @closed="dialog.policy_share = false"></policy-share>
+    <policy-strive v-if="dialog.policy_strive" ref="policy_strive" @closed="dialog.policy_strive = false"></policy-strive>
+    <policy-case v-if="dialog.policy_case" ref="policy_case" @closed="dialog.policy_case = false"></policy-case>
+</template>
+
+<script>
+import API from "@/api/policy/todo";
+import { useUserStore } from "@/store/user";
+import { typeDic } from "@/views/policyShare/main";
+import { refTypeDic } from "@/views/myBusiness/main";
+
+import yhPagination from "@/components/Pagination/index.vue";
+import yhWorkflow from "@/components/Workflow/index.vue";
+import policyShare from "@/views/manage/policyShare/dialog.vue";
+import policyStrive from "@/views/policyStrive/explain.vue";
+import policyCase from "@/views/caseShare/dialog.vue";
+
+export default {
+    components: {
+        yhPagination,
+        yhWorkflow,
+        policyShare,
+        policyStrive,
+        policyCase
+    },
+
+    data() {
+        return {
+            typeDic, refTypeDic,
+
+            loading: false,
+            createTime: [],
+            params: {
+                page: 1,
+                size: 10,
+                status: "done",
+                todoUserId: useUserStore().userInfo.id
+            },
+
+            total: 0,
+            tableData: [],
+
+            dialog: {
+                workflow: false,
+                policy_share: false,
+                policy_strive: false,
+                policy_case: false
+            }
+        }
+    },
+
+    mounted() {
+        this.reloadTable();
+    },
+
+    methods: {
+        reloadTable() {
+            this.params.beginCreateTime = this.createTime && this.createTime.length && this.createTime[0] + " 00:00:00" || null;
+            this.params.endCreateTime = this.createTime && this.createTime.length && this.createTime[1] + " 23:59:59" || null;
+            
+            this.loading = true;
+            API.get(this.params).then(res => {
+                this.loading = false;
+                if (res.code === 200) {
+                    this.tableData = res.data.records;
+                    this.total = res.data.total;
+                } else ElMessage.error(res.msg);
+            }).catch(() => this.loading = false);
+        },
+    
+        reset() {
+            this.createTime = [];
+            this.params = {
+                page: 1,
+                size: 10,
+                status: "done",
+                todoUserId: useUserStore().userInfo.id
+            }
+            this.reloadTable();
+        },
+
+        table_detail({ refId, refType }) {
+            this.dialog[refType] = true;
+            nextTick(() => this.$refs[refType].open("detail").setData(refId));
+        },
+
+        table_process(row) {
+            this.dialog.workflow = true;
+            nextTick(() => this.$refs.yhWorkflow.getDetail(row));
+        }
+    }
+}
+</script>

+ 8 - 0
src/views/myBusiness/component/index.js

@@ -0,0 +1,8 @@
+const modules = import.meta.glob("./*.vue");
+const resultComps = {};
+
+for (const path in modules) {
+    const module = await modules[path]();
+    resultComps[path.replace(/^\.\/(.*)\.\w+$/, "$1")] = markRaw(module.default);
+}
+export default resultComps;

+ 68 - 0
src/views/myBusiness/component/send.vue

@@ -0,0 +1,68 @@
+<template>
+    <el-card class="tjm_card_style_custom">
+        <div class="tjm_card_table">
+            <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="table_detail">
+                <el-table-column type="index" label="序号" width="55"></el-table-column>
+                <el-table-column label="回复人" prop="createName" min-width="120" show-overflow-tooltip></el-table-column>
+                <el-table-column label="回复内容" prop="messageContent" min-width="180" show-overflow-tooltip></el-table-column>
+                <el-table-column label="回复日期" min-width="120" show-overflow-tooltip>
+                    <template #default="scope">{{ scope.row.createTime.split(" ")[0] }}</template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div class="tjm_card_pagination">
+            <yh-pagination v-model:pageNo="params.page" v-model:pageSize="params.size" :total="total" @paginationChange="reloadTable"></yh-pagination>
+        </div>
+    </el-card>
+</template>
+
+<script>
+import API from "@/api/policy/toDo";
+import yhPagination from "@/components/Pagination/index.vue";
+
+export default {
+    components: {
+        yhPagination
+    },
+
+    data() {
+        return {
+            loading: false,
+            params: {
+                page: 1,
+                size: 10
+            },
+
+            total: 0,
+            tableData: []
+        }
+    },
+
+    mounted() {
+        this.reloadTable();
+    },
+
+    methods: {
+        reloadTable() {
+            this.loading = true;
+            API.msg(this.params).then(res => {
+                this.loading = false;
+                if (res.code === 200) {
+                    this.tableData = res.data.records;
+                    this.total = res.data.total;
+                } else ElMessage.error(res.msg);
+            }).catch(() => this.loading = false);
+        },
+
+        table_detail({ refId, policyName, policyDocNo }) {
+            this.$emit("replyAll", { id: refId, name: policyName, docNo: policyDocNo });
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.tjm_card_table {
+  margin-top: 0;
+}
+</style>

+ 15 - 4
src/views/toDo/index.vue

@@ -11,6 +11,11 @@
                         <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
                     </el-select>
                 </el-form-item>
+                <el-form-item label="业务类型">
+                    <el-select v-model="params.refType" clearable placeholder="请选择业务类型">
+                        <el-option v-for="(label, key) in refTypeDic" :key="key" :label="label" :value="key"></el-option>
+                    </el-select>
+                </el-form-item>
                 <el-form-item label="填报日期">
                     <el-date-picker v-model="createTime" type="daterange" value-format="YYYY-MM-DD" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
                 </el-form-item>
@@ -29,6 +34,9 @@
                 <el-table-column label="政策名称" prop="zcName" min-width="180" show-overflow-tooltip></el-table-column>
                 <el-table-column label="政策概要" prop="zcAbstractContent" min-width="180" show-overflow-tooltip></el-table-column>
                 <el-table-column label="政策类别" prop="zcType" min-width="100" show-overflow-tooltip></el-table-column>
+                <el-table-column label="业务类型" min-width="100" show-overflow-tooltip>
+                    <template #default="scope">{{ refTypeDic[scope.row.refType] }}</template>
+                </el-table-column>
                 <el-table-column label="填报人" prop="zcCreateName" min-width="180" show-overflow-tooltip></el-table-column>
                 <el-table-column label="填报单位" prop="zcCompanyName" min-width="180" show-overflow-tooltip></el-table-column>
                 <el-table-column label="联系方式" prop="zcContactPhone" width="180" show-overflow-tooltip></el-table-column>
@@ -57,11 +65,12 @@
 import API from "@/api/policy/todo";
 import { useUserStore } from "@/store/user";
 import { typeDic } from "@/views/policyShare/main";
+import { refTypeDic } from "@/views/myBusiness/main";
 
 import yhPagination from "@/components/Pagination/index.vue";
-import policyShare from "./share.vue";
-import policyStrive from "./strive.vue";
-import policyCase from "./case.vue";
+import policyShare from "../share.vue";
+import policyStrive from "../strive.vue";
+import policyCase from "../case.vue";
 
 export default {
     components: {
@@ -73,13 +82,14 @@ export default {
 
     data() {
         return {
-            typeDic,
+            typeDic, refTypeDic,
 
             loading: false,
             createTime: [],
             params: {
                 page: 1,
                 size: 10,
+                status: "active",
                 todoUserId: useUserStore().userInfo.id
             },
 
@@ -118,6 +128,7 @@ export default {
             this.params = {
                 page: 1,
                 size: 10,
+                status: "active",
                 todoUserId: useUserStore().userInfo.id
             }
             this.reloadTable();

+ 77 - 0
src/views/myBusiness/index.vue

@@ -0,0 +1,77 @@
+<template>
+    <div v-if="detail.show" class="mine-policy-detail">
+        <el-page-header title="返回" icon="arrow-left" :content="detail.name" @back="detail.show = false"></el-page-header>
+        <policy-detail ref="policyDetail"></policy-detail>
+    </div>
+
+    <template v-else>
+        <el-tabs v-model="element">
+            <el-tab-pane v-for="(label, key) in myBusinessTab" :key="key" :label="label" :name="key"></el-tab-pane>
+        </el-tabs>
+
+        <component :is="allComps[element]" @replyAll="table_detail"></component>
+    </template>
+</template>
+
+<script>
+import { myBusinessTab } from "@/views/myBusiness/main";
+import allComps from "@/views/myBusiness/component/index";
+import policyDetail from "@/views/home/policyDetail.vue";
+
+export default {
+    components: {
+        policyDetail
+    },
+
+    data() {
+        return {
+            allComps,
+            myBusinessTab,
+
+            element: "toDo",
+
+            detail: {
+                show: false,
+                name: null
+            }
+        }
+    },
+
+    methods: {
+        table_detail(row) {
+            this.detail.show = true;
+            this.detail.name = row.name;
+            nextTick(() => this.$refs.policyDetail.setData(row, 5));
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.mine-policy-detail {
+  .el-page-header {
+    position: relative;
+    top: calc(-1 * $base-padding);
+    left: calc(-1 * $base-padding);
+    width: calc(100% - $base-padding);
+    padding: 15px;
+    background: #fff;
+    box-shadow: var(--el-box-shadow-light);
+
+    :deep(.el-page-header__back:hover) {
+      color: var(--el-color-primary);
+    }
+  }
+
+  :deep(.tjm_card_style_custom) > .el-card__body {
+    max-height: calc(
+      $base-main-height - $base-padding - 2 * var(--el-card-padding) - 54px
+    );
+    overflow: auto;
+  }
+}
+
+.el-tabs :deep(.el-tabs__content) {
+  display: none;
+}
+</style>

+ 11 - 0
src/views/myBusiness/main.js

@@ -0,0 +1,11 @@
+export const myBusinessTab = {
+    toDo: "待办事宜",
+    done: "我的已办",
+    send: "我的消息"
+}
+
+export const refTypeDic = {
+    policy_share: "政策分享",
+    policy_strive: "政策争取",
+    policy_case: "案例分享"
+}

src/views/toDo/share.vue → src/views/myBusiness/share.vue


src/views/toDo/strive.vue → src/views/myBusiness/strive.vue


+ 2 - 2
src/views/policyShare/index.vue

@@ -63,7 +63,7 @@
             <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="(row, column) => !column.fixed && table_detail(row)">
                 <el-table-column type="index" label="序号" width="55"></el-table-column>
                 <template v-for="(item, index) in columns" :key="index">
-                    <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
+                    <el-table-column :label="item.label" :prop="item.props" :min-width="item.width || 180" show-overflow-tooltip>
                         <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
                     </el-table-column>
                 </template>
@@ -120,7 +120,7 @@ import tableImport from "@/components/Upload/tableImport.vue";
 import yhPagination from "@/components/Pagination/index.vue";
 import policyDetail from "@/views/manage/policyShare/dialog.vue";
 import policyDialog from "./dialog.vue";
-import policyProcessDialog from "@/views/toDo/share.vue";
+import policyProcessDialog from "@/views/myBusiness/share.vue";
 import yhWorkflow from "@/components/Workflow/index.vue";
 
 export default {

+ 112 - 74
src/views/policyShare/message/index.vue

@@ -1,71 +1,78 @@
 <template>
-    <el-card class="tjm_card_style_custom">
-        <div class="tjm_card_title">查询表格</div>
-        <div class="tjm_card_select">
-            <el-form class="tjm_card_select_left" :model="params" inline label-width="80px" label-position="left">
-                <el-form-item label="政策编号">
-                    <el-input v-model="params.businessNo" clearable placeholder="请输入政策编号"></el-input>
-                </el-form-item>
-                <el-form-item label="政策名称">
-                    <el-input v-model="params.name" clearable placeholder="请输入政策名称"></el-input>
-                </el-form-item>
-                <el-form-item label="政策等级">
-                    <el-select v-model="params.zcLevel" clearable placeholder="请选择政策等级">
-                        <el-option v-for="item in levelDic" :key="item" :label="item" :value="item"></el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="政策类别">
-                    <el-select v-model="params.zcType" clearable placeholder="请选择政策类别">
-                        <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="是否入库">
-                    <el-select v-model="params.isInWh" clearable placeholder="请选择入库状态">
-                        <el-option v-for="(label, key) in whetherDic" :key="key" :label="label" :value="parseInt(key)"></el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="入库类别">
-                    <el-select v-model="params.inWhType" clearable placeholder="请选择入库类别">
-                        <el-option v-for="item in storageTypeDic" :key="item" :label="item" :value="item"></el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="发布日期">
-                    <el-date-picker v-model="createTime" type="daterange" value-format="YYYY-MM-DD" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
-                </el-form-item>
-
-                <el-form-item>
-                    <el-button type="primary" icon="search" @click="reloadTable">搜索</el-button>
-                    <el-button icon="refresh-right" @click="reset">重置</el-button>
-                </el-form-item>
-            </el-form>
-        </div>
-        <el-divider></el-divider>
-
-        <div v-loading="loading" class="tjm_card_comment">
-            <el-empty v-if="total <= 0"></el-empty>
-            <template v-else>
-                <template v-for="(item, index) in tableData" v-bind:key="index">
-                    <el-descriptions direction="vertical" :column="columns.length + 1" border @click="table_detail(item)">
-                        <el-descriptions-item v-for="column in columns" :key="column.props" :min-width="column.width || 180">
-                            <template #label>{{ column.label }}</template>
-
-                            <span v-if="column.props == 'index'">{{ index + 1 }}</span>
-                            <span v-else class="desc-cell">
-                                <yh-tooltip :content="columnFormat(item, column.props)" placement="top"></yh-tooltip>
-                            </span>
-                        </el-descriptions-item>
-                    </el-descriptions>
-
-                    <yh-reply-card :refId="item.id"></yh-reply-card>
+    <div v-if="detail.show" class="reply-policy-detail">
+        <el-page-header title="返回" icon="arrow-left" :content="detail.name" @back="detail.show = false"></el-page-header>
+        <policy-detail ref="policyDetail"></policy-detail>
+    </div>
+
+    <template v-else>
+        <el-card class="tjm_card_style_custom">
+            <div class="tjm_card_title">查询表格</div>
+            <div class="tjm_card_select">
+                <el-form class="tjm_card_select_left" :model="params" inline label-width="80px" label-position="left">
+                    <el-form-item label="政策编号">
+                        <el-input v-model="params.businessNo" clearable placeholder="请输入政策编号"></el-input>
+                    </el-form-item>
+                    <el-form-item label="政策名称">
+                        <el-input v-model="params.name" clearable placeholder="请输入政策名称"></el-input>
+                    </el-form-item>
+                    <el-form-item label="政策等级">
+                        <el-select v-model="params.zcLevel" clearable placeholder="请选择政策等级">
+                            <el-option v-for="item in levelDic" :key="item" :label="item" :value="item"></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="政策类别">
+                        <el-select v-model="params.zcType" clearable placeholder="请选择政策类别">
+                            <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="是否入库">
+                        <el-select v-model="params.isInWh" clearable placeholder="请选择入库状态">
+                            <el-option v-for="(label, key) in whetherDic" :key="key" :label="label" :value="parseInt(key)"></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="入库类别">
+                        <el-select v-model="params.inWhType" clearable placeholder="请选择入库类别">
+                            <el-option v-for="item in storageTypeDic" :key="item" :label="item" :value="item"></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="发布日期">
+                        <el-date-picker v-model="createTime" type="daterange" value-format="YYYY-MM-DD" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+                    </el-form-item>
+
+                    <el-form-item>
+                        <el-button type="primary" icon="search" @click="reloadTable">搜索</el-button>
+                        <el-button icon="refresh-right" @click="reset">重置</el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+            <el-divider></el-divider>
+
+            <div v-loading="loading" class="tjm_card_reply">
+                <el-empty v-if="total <= 0"></el-empty>
+                <template v-else>
+                    <template v-for="(item, index) in tableData" v-bind:key="index">
+                        <el-descriptions direction="vertical" :column="columns.length + 1" border @click="table_detail(item)">
+                            <el-descriptions-item v-for="column in columns" :key="column.props" :min-width="column.width || 180">
+                                <template #label>{{ column.label }}</template>
+
+                                <span v-if="column.props == 'index'">{{ index + 1 }}</span>
+                                <span v-else class="desc-cell">
+                                    <yh-tooltip :content="columnFormat(item, column.props)" placement="top"></yh-tooltip>
+                                </span>
+                            </el-descriptions-item>
+                        </el-descriptions>
+                        
+                        <div class="tjm_card_reply__body">
+                            <yh-reply-card :refId="item.id" @replyAll="table_detail(item, $event)"></yh-reply-card>
+                        </div>
+                    </template>
                 </template>
-            </template>
-        </div>
-        <div class="tjm_card_pagination">
-            <yh-pagination v-model:pageNo="params.page" v-model:pageSize="params.size" :total="total" @paginationChange="reloadTable"></yh-pagination>
-        </div>
-    </el-card>
-
-    <policy-detail v-if="dialog" ref="policyDetail" @success="reloadTable" @closed="dialog = false"></policy-detail>
+            </div>
+            <div class="tjm_card_pagination">
+                <yh-pagination v-model:pageNo="params.page" v-model:pageSize="params.size" :total="total" @paginationChange="reloadTable"></yh-pagination>
+            </div>
+        </el-card>
+    </template>
 </template>
 
 <script>
@@ -76,7 +83,7 @@ import { columns } from "./main";
 import yhTooltip from "@/components/Tooltip/index.vue";
 import yhReplyCard from "@/components/ReplyCard/index.vue";
 import yhPagination from "@/components/Pagination/index.vue";
-import policyDetail from "@/views/manage/policyShare/dialog.vue";
+import policyDetail from "@/views/home/policyDetail.vue";
 
 export default {
     components: {
@@ -100,7 +107,10 @@ export default {
             total: 0,
             tableData: [],
 
-            dialog: false
+            detail: {
+                show: false,
+                name: null
+            }
         }
     },
 
@@ -140,16 +150,40 @@ export default {
             this.reloadTable();
         },
 
-        table_detail(row) {
-            this.dialog = true;
-            nextTick(() => this.$refs.policyDetail.open("detail").setData(row.id));
+        table_detail(row, count) {
+            this.detail.show = true;
+            this.detail.name = row.name;
+            nextTick(() => this.$refs.policyDetail.setData(row, count));
         }
     }
 }
 </script>
 
 <style lang="scss" scoped>
-.tjm_card_comment .el-descriptions {
+.reply-policy-detail {
+  .el-page-header {
+    position: relative;
+    top: calc(-1 * $base-padding);
+    left: calc(-1 * $base-padding);
+    width: calc(100% - $base-padding);
+    padding: 15px;
+    background: #fff;
+    box-shadow: var(--el-box-shadow-light);
+
+    :deep(.el-page-header__back:hover) {
+      color: var(--el-color-primary);
+    }
+  }
+
+  :deep(.tjm_card_style_custom) > .el-card__body {
+    max-height: calc(
+      $base-main-height - $base-padding - 2 * var(--el-card-padding) - 54px
+    );
+    overflow: auto;
+  }
+}
+
+.tjm_card_reply .el-descriptions {
   overflow-x: auto;
   border-left: var(--el-descriptions-table-border);
   border-right: var(--el-descriptions-table-border);
@@ -170,9 +204,13 @@ export default {
   }
 }
 
-.tjm_card_comment > :deep(.el-card.reply-card) {
+.tjm_card_reply .tjm_card_reply__body {
   margin-bottom: 25px;
+  border: 1px solid var(--el-border-color-lighter);
   border-top: none;
-  border-radius: 0;
+
+  > :deep(.el-card.reply-card) {
+    border-radius: 0;
+  }
 }
 </style>

+ 2 - 2
src/views/policyStrive/index.vue

@@ -75,7 +75,7 @@
             <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="(row, column) => !column.fixed && table_detail(row)">
                 <el-table-column type="index" label="序号" width="55"></el-table-column>
                 <template v-for="(item, index) in columns" :key="index">
-                    <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
+                    <el-table-column :label="item.label" :prop="item.props" :min-width="item.width || 180" show-overflow-tooltip>
                         <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
                     </el-table-column>
                 </template>
@@ -133,7 +133,7 @@ import yhPagination from "@/components/Pagination/index.vue";
 import yhWorkflow from "@/components/Workflow/index.vue";
 import policyDetail from "./dialog.vue";
 import policyExplain from "./explain.vue";
-import policyProcessDialog from "@/views/toDo/strive.vue";
+import policyProcessDialog from "@/views/myBusiness/strive.vue";
 
 export default {
     components: {

+ 46 - 7
src/views/publicDomain/index.vue

@@ -1,5 +1,10 @@
 <template>
-    <el-card class="tjm_card_style_custom">
+    <div v-if="detail.show" class="domain-policy-detail">
+        <el-page-header title="返回" icon="arrow-left" :content="detail.name" @back="detail.show = false"></el-page-header>
+        <policy-detail ref="policyDetail"></policy-detail>
+    </div>
+
+    <el-card v-else class="tjm_card_style_custom">
         <div class="tjm_card_title">查询表格</div>
         <div class="tjm_card_select">
             <el-form class="tjm_card_select_left" :model="params" inline label-width="80px" label-position="left">
@@ -40,7 +45,7 @@
             <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" height="400" :data="tableData" border @row-click="table_detail">
                 <el-table-column type="index" label="序号" width="55"></el-table-column>
                 <template v-for="(item, index) in columns" :key="index">
-                    <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
+                    <el-table-column :label="item.label" :prop="item.props" :min-width="item.width || 180" show-overflow-tooltip>
                         <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
                     </el-table-column>
                 </template>
@@ -58,10 +63,12 @@ import { levelDic, typeDic, storageTypeDic } from "@/views/policyShare/main";
 import { columns } from "./main";
 
 import yhPagination from "@/components/Pagination/index.vue";
+import policyDetail from "@/views/home/policyDetail.vue";
 
 export default {
     components: {
-        yhPagination
+        yhPagination,
+        policyDetail
     },
 
     data() {
@@ -78,7 +85,12 @@ export default {
             },
 
             total: 0,
-            tableData: []
+            tableData: [],
+
+            detail: {
+                show: false,
+                name: null
+            }
         }
     },
 
@@ -124,9 +136,36 @@ export default {
             this.reloadTable();
         },
 
-        table_detail({ id }) {
-            this.$router.push({ path: "/policyDetail", query: { id } });
+        table_detail(row) {
+            this.detail.show = true;
+            this.detail.name = row.name;
+            nextTick(() => this.$refs.policyDetail.setData(row));
         }
     }
 }
-</script>
+</script>
+
+<style lang="scss" scoped>
+.domain-policy-detail {
+  .el-page-header {
+    position: relative;
+    top: calc(-1 * $base-padding);
+    left: calc(-1 * $base-padding);
+    width: calc(100% - $base-padding);
+    padding: 15px;
+    background: #fff;
+    box-shadow: var(--el-box-shadow-light);
+
+    :deep(.el-page-header__back:hover) {
+      color: var(--el-color-primary);
+    }
+  }
+
+  :deep(.tjm_card_style_custom) > .el-card__body {
+    max-height: calc(
+      $base-main-height - $base-padding - 2 * var(--el-card-padding) - 54px
+    );
+    overflow: auto;
+  }
+}
+</style>

+ 2 - 7
src/views/publicDomain/link/strive.vue

@@ -36,18 +36,13 @@
         <el-divider></el-divider>
 
         <div class="tjm_card_table">
-            <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" :height="tableHeight" :data="tableData" border @row-click="(row, column) => !column.fixed && table_detail(row)">
+            <el-table v-loading="loading" row-key="id" header-cell-class-name="tjm_card_table_header" :height="tableHeight" :data="tableData" border @row-click="table_detail">
                 <el-table-column type="index" label="序号" width="55"></el-table-column>
                 <template v-for="(item, index) in link_columns" :key="index">
-                    <el-table-column :label="item.label" :prop="item.props" :width="item.width || 180" show-overflow-tooltip>
+                    <el-table-column :label="item.label" :prop="item.props" :min-width="item.width || 180" show-overflow-tooltip>
                         <template #default="scope">{{ columnFormat(scope.row, item.props) }}</template>
                     </el-table-column>
                 </template>
-                <el-table-column label="操作" fixed="right" width="100">
-                    <template #default="scope">
-                        <el-button type="primary" link icon="tickets" @click.stop="table_detail(scope.row)">详情</el-button>
-                    </template>
-                </el-table-column>
             </el-table>
         </div>
         <div class="tjm_card_pagination">

+ 5 - 6
src/views/redirect/index.vue

@@ -3,12 +3,11 @@
 </template>
 
 <script setup>
-import { useRoute, useRouter } from 'vue-router'
+import { useRoute, useRouter } from "vue-router";
 
-const route = useRoute()
-const router = useRouter()
-const { params, query } = route
-const { path } = params
+const route = useRoute();
+const router = useRouter();
+const { params: { path }, query } = route;
 
-router.replace({ path: '/' + path, query })
+router.replace({ path: "/" + path, query });
 </script>