Browse Source

留言互动-1

zhuangyunsheng 1 năm trước cách đây
mục cha
commit
2bfbaac8da

+ 1 - 0
package.json

@@ -31,6 +31,7 @@
     "devDependencies": {
         "@iconify-json/ep": "^1.1.12",
         "@iconify-json/fluent-emoji-high-contrast": "^1.2.1",
+        "@iconify-json/la": "^1.2.0",
         "@iconify-json/mdi": "^1.1.54",
         "@iconify-json/tabler": "^1.2.5",
         "@iconify-json/uis": "^1.2.1",

+ 9 - 1
src/api/common.js

@@ -1,6 +1,6 @@
 import request from "@/utils/request"
 
-// 文件方法
+// 通用方法
 export default {
     // 获取当前组织/单位
     getUserDept: function (deptId) {
@@ -8,5 +8,13 @@ export default {
             url: `/qdport-zcgx/system/${deptId}`,
             method: "get"
         })
+    },
+
+    getDeptCompany: function (params) {
+        return request({
+            url: "/qdport-zcgx/system/getDeptList",
+            method: "get",
+            params
+        })
     }
 }

+ 36 - 0
src/api/policy/message.js

@@ -0,0 +1,36 @@
+import request from "@/utils/request";
+import { useUserStore } from "@/store/user";
+const { userInfo } = useUserStore(); // store 用户
+
+export default {
+    get: function (params) {
+        return request({
+            url: "/qdport-zcgx/message/page",
+            method: "get",
+            params
+        })
+    },
+
+    add: function (data) {
+        return request({
+            url: "/qdport-zcgx/message/save",
+            method: "post",
+            data: {
+                ...data,
+                createId: userInfo.id,
+                createName: userInfo.name
+            }
+        })
+    },
+
+    del: function (data) {
+        return request({
+            headers: {
+                "Content-Type": "application/x-www-form-urlencoded"
+            },
+            url: "/qdport-zcgx/message/remove",
+            method: "post",
+            data
+        })
+    },
+}

+ 73 - 0
src/components/ReplyCard/dialog.vue

@@ -0,0 +1,73 @@
+<template>
+    <el-dialog v-model="visible" :title="`回复@${form.replyName}`" width="680" @closed="$emit('closed')">
+        <el-input v-model="form.messageContent" type="textarea" autosize clearable show-word-limit maxlength="140" placeholder="发布你的回复"></el-input>
+
+        <template #footer>
+            <el-button :loading="isSaving" type="primary" :disabled="!form.messageContent" @click="submit">回复</el-button>
+        </template>
+    </el-dialog>
+</template>
+
+<script>
+import API from "@/api/policy/message";
+
+export default {
+    emits: ["success", "closed"],
+    props: {
+        refId: { type: String, default: "" },
+        refType: { type: String, default: "policy_share" }
+    },
+    
+    data() {
+        return {
+            visible: false,
+            isSaving: false,
+            
+            form: {
+                parentId: null,
+                refId: this.refId,
+                refType: this.refType,
+                replyId: null,
+                replyName: null,
+                messageContent: null
+            }
+        }
+    },
+
+    methods: {
+        open() {
+            this.visible = true;
+            return this;
+        },
+
+        setData(data) {
+            if (data.parentId == 0) {
+                this.form.parentId = data.id;
+            } else {
+                this.form.parentId = data.parentId;
+                this.form.replyId = data.createId;
+                this.form.replyName = data.createName;
+            }
+        },
+
+        // 表单提交方法
+        submit() {
+            this.isSaving = true;
+            API.add(this.form).then(res => {
+                this.isSaving = false;
+                if (res.code === 200) {
+                    ElMessage.success("操作成功");
+                    this.visible = false;
+                    this.$emit("success", this.form.parentId);
+                } else ElMessage.error(res.msg);
+            }).catch(() => this.isSaving = false);
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.el-textarea {
+  margin: 10px 0 18px;
+}
+</style>

+ 345 - 0
src/components/ReplyCard/index.vue

@@ -0,0 +1,345 @@
+<template>
+    <el-card shadow="never" :class="total > 0 && 'reply-card'">
+        <template #header>
+            <el-button type="primary" link @click="showInput = !showInput">留言
+                <template #icon><el-icon size="16"><tjm-icon-mdi-comment-text-outline /></el-icon></template>
+            </el-button>
+
+            <div v-show="showInput" class="reply-form">
+                <el-input v-model="messageContent" type="textarea" autosize clearable show-word-limit maxlength="140" placeholder="发布你的留言"></el-input>
+                <el-button :loading="isSaving" type="primary" :disabled="!messageContent" @click="submit">发布</el-button>
+            </div>
+        </template>
+
+        <el-form v-loading="loading">
+            <template v-for="(item, index) in replyData" :key="item.id">
+                <div class="reply-item">
+                    <el-form-item :label="`${item.createName}:`">{{ item.messageContent }}</el-form-item>
+                    <el-form-item class="reply-date-item" :label="formatDate(item.createTime)">
+                        <div class="handle-button-group">
+                            <el-tooltip content="删除" placement="top">
+                                <el-button v-if="item.createId == loginUser" icon="delete" circle @click="reply_del(item)"></el-button>
+                            </el-tooltip>
+                            <el-tooltip content="留言" placement="top">
+                                <el-button circle @click="reply_add(item)">
+                                    <template #icon><tjm-icon-mdi-comment-text-outline /></template>
+                                </el-button>
+                            </el-tooltip>
+                        </div>
+                    </el-form-item>
+                </div>
+                <div class="reply-item__children">
+                    <div class="reply-item" v-for="child in replyChildren[index]" :key="child.id">
+                        <el-form-item>
+                            <template #label>{{ child.createName }}:
+                                <template v-if="child.replyId"><span>回复@</span>{{ child.replyName }}:</template>
+                            </template>
+                            {{ child.messageContent }}
+                        </el-form-item>
+                        <el-form-item class="reply-date-item" :label="formatDate(child.createTime)">
+                            <div class="handle-button-group">
+                                <el-tooltip content="删除" placement="top">
+                                    <el-button v-if="child.createId == loginUser" icon="delete" circle @click="reply_del(child)"></el-button>
+                                </el-tooltip>
+                                <el-tooltip content="留言" placement="top">
+                                    <el-button circle @click="reply_add(child)">
+                                        <template #icon><tjm-icon-mdi-comment-text-outline /></template>
+                                    </el-button>
+                                </el-tooltip>
+                            </div>
+                        </el-form-item>
+                    </div>
+                    <el-button v-if="item.childrenCount > replyChildrenCount" class="text-reverse" type="primary" link>共{{ item.childrenCount }}条回复
+                        <template #icon><el-icon size="22"><tjm-icon-mdi-menu-down /></el-icon></template>
+                    </el-button>
+                </div>
+            </template>
+        </el-form>
+
+        <template v-if="total > replyCount">
+            <el-divider></el-divider>
+            <el-button class="text-reverse" type="primary" link>查看全部{{ allTotal }}条留言
+                <template #icon><arrow-right /></template>
+            </el-button>
+        </template>
+        <template v-else>
+            <el-divider v-if="total">已加载全部留言</el-divider>
+        </template>
+    </el-card>
+
+    <reply-detail v-if="dialog.detail" ref="replyDetail" :refId="refId" :refType="refType" @success="reloadChildrenTree" @closed="dialog.detail = false"></reply-detail>
+</template>
+
+<script>
+import moment from "moment";
+import API from "@/api/policy/message";
+import replyDetail from "./dialog.vue";
+import { useUserStore } from "@/store/user";
+
+export default {
+    components: {
+        replyDetail
+    },
+    props: {
+        refId: { type: String, default: "" },
+        refType: { type: String, default: "policy_share" },
+        replyCount: { type: Number, default: 2 },
+        replyChildrenCount: { type: Number, default: 2 }
+    },
+
+    data() {
+        return {
+            loading: false,
+            loginUser: useUserStore().userInfo.id,
+            params: {
+                page: 1,
+                size: this.replyCount,
+                parentId: 0,
+                refId: this.refId,
+                refType: this.refType
+            },
+            total: 0,
+            replyData: [],
+            replyChildren: [],
+
+            showInput: false,
+            isSaving: false,
+            messageContent: null,
+
+            dialog: {
+                detail: false
+            }
+        }
+    },
+
+    computed: {
+        allTotal() {
+            return this.total + (this.replyChildren.length && this.replyChildren.map(c => c.length).reduce((p, v) => p + v) || 0);
+        }
+    },
+
+    mounted() {
+        this.reloadTree();
+    },
+
+    methods: {
+        formatDate(value) {
+            return value && moment(value).format("YY-MM-DD HH:mm") || "";
+        },
+
+        reloadTree() {
+            this.loading = true;
+            API.get(this.params).then(res => {
+                this.loading = false;
+                if (res.code === 200) {
+                    this.replyData = res.data.records;
+                    this.total = res.data.total;
+                    this.reloadChildrenTree();
+                } else ElMessage.error(res.msg);
+            }).catch(() => this.loading = false);
+        },
+
+        reloadChildrenTree(parentId) {
+            let promiseArray = [];
+            if (parentId) {
+                const reply_i = this.replyData.findIndex(c => c.id == parentId);
+                this.replyData[reply_i].childrenCount++;
+
+                promiseArray = this.replyData.map(_ => []);
+                promiseArray[reply_i] = API.get({ ...this.params, size: this.replyChildrenCount, parentId });
+            } else this.replyData.forEach(item => promiseArray.push(API.get({ ...this.params, size: this.replyChildrenCount, parentId: item.id })));
+
+            Promise.all(promiseArray).then(res => {
+                this.replyChildren = res.map(r => r.code == 200 && r.data.records || []);
+            }).catch(() => {
+                this.replyChildren = [];
+            });
+        },
+
+        submit() {
+            if (this.refId && this.refType) {
+                const data = {
+                    parentId: 0,
+                    refId: this.refId,
+                    refType: this.refType,
+                    messageContent: this.messageContent
+                }
+
+                this.isSaving = true;
+                API.add(data).then(res => {
+                    this.isSaving = false;
+                    if (res.code === 200) {
+                        ElMessage.success("留言成功");
+                        this.messageContent = null;
+                        this.reloadTree();
+                    } else ElMessage.error(res.msg);
+                }).catch(() => this.isSaving = false);
+            }
+        },
+
+        reply_add(data) {
+            this.dialog.detail = true;
+            nextTick(() => this.$refs.replyDetail.open().setData(data));
+        },
+
+        reply_del(data) {
+            ElMessageBox.confirm("是否确认删除?", "删除警告", {
+                type: "warning",
+                confirmButtonText: "确定",
+                cancelButtonText: "取消"
+            }).then(() => {
+                API.del({ ids: data.id }).then(res => {
+                    if (res.code == 200) {
+                        ElMessage.success("操作成功");
+                        this.reloadTree();
+                    } else ElMessage.error(res.msg);
+                });
+            }).catch(() => ElMessage.success("已取消"));
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.text-reverse {
+  display: flex;
+  flex-direction: row-reverse;
+
+  :deep([class*='el-icon'] + span) {
+    margin-left: 0;
+    margin-right: 6px;
+    font-size: 13px;
+  }
+}
+
+.el-card {
+  margin-bottom: 25px;
+  border-top: none;
+  border-radius: 0 0 var(--el-card-border-radius) var(--el-card-border-radius);
+
+  :deep(.el-card__header) {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    border-bottom: 0;
+    padding: calc(var(--el-card-padding) / 2) var(--el-card-padding);
+
+    .reply-form {
+      display: flex;
+      flex-direction: column;
+      align-items: flex-end;
+      width: 80%;
+      margin-top: calc(var(--el-card-padding) / 2);
+      padding-bottom: calc(var(--el-card-padding) / 2);
+
+      .el-button {
+        margin-top: calc(var(--el-card-padding) / 2);
+      }
+    }
+  }
+
+  :deep(.el-card__body) {
+    padding: 0;
+
+    .el-divider {
+      margin: calc(var(--el-card-padding) / 2) 0;
+      border-color: var(--el-border-color-light);
+
+      .el-divider__text {
+        color: var(--el-text-color-disabled);
+      }
+    }
+  }
+}
+
+.reply-card :deep(.el-card__body) {
+  display: flex;
+  flex-direction: column;
+  padding: calc(var(--el-card-padding) / 2) var(--el-card-padding);
+  padding-top: 0;
+
+  .el-form {
+    flex-basis: 100%;
+    padding: calc(var(--el-card-padding) / 2) 10% 0;
+    border-top: 1px solid var(--el-card-border-color);
+
+    .el-form-item {
+      align-items: baseline;
+      margin-bottom: 0;
+      padding: 0 6px;
+      border-radius: 4px 4px 0 0;
+
+      .el-form-item__label {
+        height: fit-content;
+        line-height: 22px;
+        font-size: 13px;
+        color: var(--el-color-primary);
+      }
+
+      .el-form-item__content {
+        height: fit-content;
+        line-height: 22px;
+        font-size: 13px;
+        color: var(--el-text-color-regular);
+      }
+    }
+
+    .reply-date-item {
+      margin-bottom: 6px;
+      align-items: center;
+      border-radius: 0 0 4px 4px;
+
+      .el-form-item__label {
+        color: var(--el-text-color-placeholder);
+      }
+
+      .el-form-item__content {
+        justify-content: flex-end;
+
+        .handle-button-group {
+          display: none;
+
+          .el-button {
+            width: 20px;
+            height: 20px;
+            padding: 0;
+            background-color: transparent;
+            border: none;
+
+            &:hover {
+              background-color: var(--el-color-primary-light-8);
+            }
+          }
+        }
+      }
+    }
+
+    .reply-item:hover .el-form-item {
+      background: var(--el-color-primary-light-9);
+
+      .el-form-item__content .handle-button-group {
+        display: inline-flex;
+      }
+    }
+
+    .reply-item__children {
+      margin-bottom: 6px;
+      margin-left: 6px;
+      padding-left: 1px;
+      border-left: 1px solid var(--el-card-border-color);
+
+      .el-form-item__label span {
+        color: var(--el-text-color-regular);
+      }
+
+      .reply-item:last-child .reply-date-item {
+        margin-bottom: 0;
+      }
+
+      .text-reverse {
+        margin-left: 3px;
+      }
+    }
+  }
+}
+</style>

+ 40 - 0
src/components/Tooltip/index.vue

@@ -0,0 +1,40 @@
+<template>
+  <el-tooltip :content="content" :placement="placement" :disabled="!showTooltip">
+    <span class="yh-tooltip-content overflow-ellipsis" @mouseenter.stop.prevent="onMouseenter" @mouseleave.stop.prevent="showTooltip = false">{{ content }}</span>
+  </el-tooltip>
+</template>
+
+<script>
+	export default {
+		props: {
+			placement: { type: String, default: "bottom" },
+			content: { type: String, default: "" },
+      		spacing: { type: Number, default: 0 }
+		},
+
+		data() {
+			return {
+        		showTooltip: false
+			}
+		},
+
+		methods: {
+			onMouseenter({ currentTarget }) {
+				this.showTooltip = currentTarget.scrollWidth >= currentTarget.parentElement.offsetWidth - this.spacing
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.yh-tooltip-content {
+  max-width: 100% !important;
+  display: inline-block;
+}
+
+.overflow-ellipsis {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+</style>

+ 1 - 1
src/views/caseShare/dialog.vue

@@ -169,7 +169,7 @@ export default {
         showStrive() {
             if (this.mode == "add") {
                 this.dialog = true;
-                this.$nextTick(() => this.$refs.striveSelect.open().reloadTable());
+                nextTick(() => this.$refs.striveSelect.open().reloadTable());
             }
         },
 

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

@@ -182,23 +182,23 @@ export default {
 
         table_add() {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.caseShareDetail.open());
+            nextTick(() => this.$refs.caseShareDetail.open());
         },
 
         table_edit(row) {
             if (row.status == "inactive") {
                 this.dialog.process = true;
-                this.$nextTick(() => this.$refs.processDialog.open("resubmit").setData(row.id));
+                nextTick(() => this.$refs.processDialog.open("resubmit").setData(row.id));
             }
             if (row.status == "active") {
                 this.dialog.detail = true;
-                this.$nextTick(() => this.$refs.caseShareDetail.open("edit").setData(row.id));
+                nextTick(() => this.$refs.caseShareDetail.open("edit").setData(row.id));
             }
         },
 
         table_detail(row) {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.caseShareDetail.open("detail").setData(row.id));
+            nextTick(() => this.$refs.caseShareDetail.open("detail").setData(row.id));
         },
 
         table_del(row) {
@@ -213,7 +213,7 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         table_withdraw(row) {
@@ -228,12 +228,12 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         table_process(row) {
             this.dialog.workflow = true;
-            this.$nextTick(() => this.$refs.yhWorkflow.getDetail(row));
+            nextTick(() => this.$refs.yhWorkflow.getDetail(row));
         }
     }
 }

+ 5 - 8
src/views/caseShare/strive.vue

@@ -62,7 +62,7 @@
         </template>
     </el-dialog>
 
-    <policy-strive-detail v-if="dialog.detail" ref="policyStriveDetail" @closed="dialog.detail = false"></policy-strive-detail>
+    <policy-strive-detail v-if="dialog" ref="policyStriveDetail" @closed="dialog = false"></policy-strive-detail>
 </template>
 
 <script>
@@ -102,10 +102,7 @@ export default {
             total: 0,
             tableData: [],
 
-            dialog: {
-                detail: false
-            },
-
+            dialog: false,
             selectData: null
         }
     },
@@ -134,7 +131,7 @@ export default {
                     this.total = res.data.total;
 
                     if (this.striveId) { // 回显
-                        this.$nextTick(() => this.$refs.selectStrive.toggleRowSelection(res.data.records.find(r => r.id == this.striveId)))
+                        nextTick(() => this.$refs.selectStrive.toggleRowSelection(res.data.records.find(r => r.id == this.striveId)))
                         this.selectData = Object.assign({}, res.data.records.find(r => r.id == this.striveId));
                     }
                 } else ElMessage.error(res.msg);
@@ -154,8 +151,8 @@ export default {
         },
 
         table_detail(row) {
-            this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyStriveDetail.open("detail").setData(row.id));
+            this.dialog = true;
+            nextTick(() => this.$refs.policyStriveDetail.open("detail").setData(row.id));
         },
 
         selectable(row) {

+ 11 - 202
src/views/manage/policyShare/dialog.vue

@@ -1,106 +1,6 @@
 <template>
     <el-dialog v-model="visible" :title="titleMap[mode]" width="680" @closed="$emit('closed', fileIsDel)">
-        <el-form ref="formRef" :model="form" :rules="rules" :disabled="mode == 'detail'" label-width="110px">
-            <el-row>
-                <el-col v-if="form.id" :span="12">
-                    <el-form-item label="政策编号" prop="businessNo">
-                        <el-input v-model="form.businessNo" readonly></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="填报人">
-                        <el-input v-model="form.createName" readonly></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="填报部门">
-                        <el-input v-model="form.deptName" readonly></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="填报单位">
-                        <el-input v-model="form.companyName" readonly></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col v-if="form.id" :span="12">
-                    <el-form-item label="填报日期">
-                        <el-date-picker v-model="form.createTime" readonly format="YYYY-MM-DD"></el-date-picker>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="政策名称" prop="name">
-                        <el-input v-model="form.name" placeholder="请输入政策名称"></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="政策等级" prop="zcLevel">
-                        <el-select v-model="form.zcLevel" placeholder="请选择政策等级">
-                            <el-option v-for="item in levelDic" :key="item" :label="item" :value="item"></el-option>
-                        </el-select>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="政策类别" prop="zcType">
-                        <el-select v-model="form.zcType" placeholder="请选择政策类别">
-                            <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
-                        </el-select>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="政策文号" prop="docNo">
-                        <el-input v-model="form.docNo" placeholder="请输入政策文号"></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                    <el-form-item label="联系方式" prop="contactPhone">
-                        <el-input v-model="form.contactPhone" placeholder="请输入联系方式"></el-input>
-                    </el-form-item>
-                </el-col>
-                <template v-if="!form.status || form.status == 'done'">
-                    <el-col :span="12">
-                        <el-form-item label="是否入库" prop="isInWh">
-                            <template v-if="mode == 'decode'">{{ whetherDic[form.isInWh] }}</template>
-                            <el-radio-group v-else v-model="form.isInWh" @change="form.inWhType = null">
-                                <el-radio v-for="(label, key) in whetherDic" :key="key" :label="label" :value="parseInt(key)"></el-radio>
-                            </el-radio-group>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                        <el-form-item label="分值(0-10)" prop="score">
-                            <el-input-number v-model="form.score" :min="0" :max="10" :step="0.1" :precision="2" :controls="false" placeholder="请输入分值"></el-input-number>
-                        </el-form-item>
-                    </el-col>
-                    <el-col v-if="form.isInWh == 1" :span="12">
-                        <el-form-item label="入库类型" prop="inWhType">
-                            <template v-if="mode == 'decode'">{{ form.inWhType }}</template>
-                            <el-select v-else v-model="form.inWhType" placeholder="请选择入库类型">
-                                <el-option v-for="item in storageTypeDic" :key="item" :label="item" :value="item"></el-option>
-                            </el-select>
-                        </el-form-item>
-                    </el-col>
-                </template>
-
-                <el-col :span="24">
-                    <el-form-item label="政策概要" prop="abstractContent">
-                        <el-input v-model="form.abstractContent" type="textarea" :rows="4" placeholder="请输入政策概要"></el-input>
-                    </el-form-item>
-                </el-col>
-                <template v-if="form.inWhType == '文件类'">
-                    <el-col v-if="(mode == 'decode' || (mode == 'detail' && form.decodeContent))" :span="24">
-                        <el-form-item label="政策解读" prop="decodeContent">
-                            <el-input v-model="form.decodeContent" type="textarea" :rows="4" placeholder="请输入政策解读"></el-input>
-                        </el-form-item>
-                    </el-col>
-                </template>
-                <el-col :span="24">
-                    <el-form-item :class="mode == 'detail' && 'no-upload-btn'" label="附件">
-                        <yhUpload v-model="form.fileList" v-model:isUpload="isUpload" :limit="10" @updateTable="fileIsDel = true">
-                            <el-button type="primary" icon="upload" size="small"></el-button>
-                        </yhUpload>
-                    </el-form-item>
-                </el-col>
-            </el-row>
-        </el-form>
+        <share-form ref="shareForm" :mode="mode" @isUploadChange="isUpload = $event" @fileIsDelChange="fileIsDel = true"></share-form>
 
         <template #footer>
             <template v-if="mode != 'detail'">
@@ -111,81 +11,33 @@
 </template>
 
 <script>
-import Common from "@/api/common";
 import API from "@/api/policy/share";
-import { useUserStore } from "@/store/user";
-import { levelDic, typeDic, storageTypeDic, whetherDic } from "@/views/policyShare/main";
-import yhUpload from "@/components/Upload/index.vue";
-
-const { userInfo } = useUserStore(); // store 用户
+import shareForm from "./form.vue";
 
 export default {
     emits: ["success", "closed"],
     
     components: {
-        yhUpload
+        shareForm
     },
 
     data() {
         return {
-            levelDic, typeDic, storageTypeDic, whetherDic,
-            isUpload: false,
-
             visible: false,
             isSaving: false,
+            isUpload: false,
+            fileIsDel: false,
+
             mode: "saveDone",
             titleMap: {
                 saveDone: "新增",
                 edit: "修改",
                 detail: "详情",
                 decode: "添加解读"
-            },
-            form: {
-                id: null,
-                businessNo: null,
-                status: null,
-                createId: userInfo.id,
-                createName: userInfo.name,
-                createTime: null,
-                deptId: userInfo.deptId,
-                deptName: null,
-                companyId: null,
-                companyName: null,
-                name: null,
-                zcLevel: null,
-                zcType: null,
-                docNo: null,
-                contactPhone: null,
-                score: null,
-                isInWh: 1,
-                inWhType: null,
-                abstractContent: null,
-                decodeContent: null,
-                fileList: []
-            },
-
-            rules: {
-                businessNo: [{ required: true }],
-                name: [{ required: true, message: "请输入政策名称" }],
-                zcLevel: [{ required: true, message: "请选择政策等级" }],
-                zcType: [{ required: true, message: "请选择政策类别" }],
-                docNo: [{ required: true, message: "请输入政策文号" }],
-                contactPhone: [{ required: true, message: "请输入联系方式" }],
-                score: [{ required: true, message: "请输入分值" }],
-                isInWh: [{ required: true }],
-                inWhType: [{ required: true, message: "请选择入库类型" }],
-                abstractContent: [{ required: true, message: "请输入政策概要" }],
-                decodeContent: [{ required: true, message: "请输入政策解读" }]
-            },
-
-            fileIsDel: false
+            }
         }
     },
 
-    mounted() {
-        this.getUserDept();
-    },
-
     methods: {
         open(mode = "saveDone") {
             this.mode = mode;
@@ -194,34 +46,15 @@ export default {
         },
 
         setData(id) {
-            API.detail(id).then(res => {
-                if (res.code === 200) {
-                    for (const key in this.form) {
-                        if (key == "fileList") this.form[key] = res.data[key].map(file => ({ ...file, name: file.originalName, path: file.fileDomain + "/" + file.fileName }));
-                        else if (key == "isInWh") this.form.isInWh = !!res.data[key] && res.data[key] || 0;
-                        else this.form[key] = res.data[key] || null;
-                    }
-                } else ElMessage.error(res.msg);
-            });
-        },
-
-        getUserDept() {
-            Common.getUserDept(userInfo.deptId).then(res => {
-                if (res.code === 200) {
-                    this.form.deptId = res.data.deptId;
-                    this.form.deptName = res.data.deptName;
-                    this.form.companyId = res.data.companyId;
-                    this.form.companyName = res.data.companyName;
-                }
-            });
+            nextTick(() => this.$refs.shareForm.setData(id));
         },
 
         // 表单提交方法
         submit(mode) {
-            this.$refs.formRef.validate(valid => {
+            this.$refs.shareForm.$refs.formRef.validate(valid => {
                 if (valid) {
                     this.isSaving = true;
-                    API[mode](this.form).then(res => {
+                    API[mode](this.$refs.shareForm.form).then(res => {
                         this.isSaving = false;
                         if (res.code === 200) {
                             ElMessage.success("操作成功");
@@ -237,28 +70,4 @@ export default {
         }
     }
 }
-</script>
-
-<style lang="scss" scoped>
-.no-upload-btn :deep(.yh-upload-file) {
-  .el-upload {
-    display: none;
-  }
-
-  .el-upload-list.is-disabled {
-    margin-top: 0;
-  }
-}
-
-.el-input-number {
-  width: 100%;
-
-  :deep(.el-input) .el-input__wrapper {
-    padding: 1px 11px;
-
-    .el-input__inner {
-      text-align: unset;
-    }
-  }
-}
-</style>
+</script>

+ 227 - 0
src/views/manage/policyShare/form.vue

@@ -0,0 +1,227 @@
+<template>
+    <el-form ref="formRef" :model="form" :rules="rules" :disabled="mode == 'detail'" label-width="110px">
+        <el-row>
+            <el-col v-if="form.id" :span="12">
+                <el-form-item label="政策编号" prop="businessNo">
+                    <el-input v-model="form.businessNo" readonly></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="填报人">
+                    <el-input v-model="form.createName" readonly></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="填报部门">
+                    <el-input v-model="form.deptName" readonly></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="填报单位">
+                    <el-input v-model="form.companyName" readonly></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col v-if="form.id" :span="12">
+                <el-form-item label="填报日期">
+                    <el-date-picker v-model="form.createTime" readonly format="YYYY-MM-DD"></el-date-picker>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="政策名称" prop="name">
+                    <el-input v-model="form.name" placeholder="请输入政策名称"></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="政策等级" prop="zcLevel">
+                    <el-select v-model="form.zcLevel" placeholder="请选择政策等级">
+                        <el-option v-for="item in levelDic" :key="item" :label="item" :value="item"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="政策类别" prop="zcType">
+                    <el-select v-model="form.zcType" placeholder="请选择政策类别">
+                        <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="政策文号" prop="docNo">
+                    <el-input v-model="form.docNo" placeholder="请输入政策文号"></el-input>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="联系方式" prop="contactPhone">
+                    <el-input v-model="form.contactPhone" placeholder="请输入联系方式"></el-input>
+                </el-form-item>
+            </el-col>
+            <template v-if="!form.status || form.status == 'done'">
+                <el-col :span="12">
+                    <el-form-item label="是否入库" prop="isInWh">
+                        <template v-if="mode == 'decode'">{{ whetherDic[form.isInWh] }}</template>
+                        <el-radio-group v-else v-model="form.isInWh" @change="form.inWhType = null">
+                            <el-radio v-for="(label, key) in whetherDic" :key="key" :label="label" :value="parseInt(key)"></el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="分值(0-10)" prop="score">
+                        <el-input-number v-model="form.score" :min="0" :max="10" :step="0.1" :precision="2" :controls="false" placeholder="请输入分值"></el-input-number>
+                    </el-form-item>
+                </el-col>
+                <el-col v-if="form.isInWh == 1" :span="12">
+                    <el-form-item label="入库类型" prop="inWhType">
+                        <template v-if="mode == 'decode'">{{ form.inWhType }}</template>
+                        <el-select v-else v-model="form.inWhType" placeholder="请选择入库类型">
+                            <el-option v-for="item in storageTypeDic" :key="item" :label="item" :value="item"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+            </template>
+
+            <el-col :span="24">
+                <el-form-item label="政策概要" prop="abstractContent">
+                    <el-input v-model="form.abstractContent" type="textarea" :rows="4" placeholder="请输入政策概要"></el-input>
+                </el-form-item>
+            </el-col>
+            <template v-if="form.inWhType == '文件类'">
+                <el-col v-if="(mode == 'decode' || (mode == 'detail' && form.decodeContent))" :span="24">
+                    <el-form-item label="政策解读" prop="decodeContent">
+                        <el-input v-model="form.decodeContent" type="textarea" :rows="4" placeholder="请输入政策解读"></el-input>
+                    </el-form-item>
+                </el-col>
+            </template>
+            <el-col :span="24">
+                <el-form-item :class="mode == 'detail' && 'no-upload-btn'" label="附件">
+                    <yhUpload v-model="form.fileList" v-model:isUpload="isUpload" :limit="10" @updateTable="$emit('fileIsDelChange')">
+                        <el-button type="primary" icon="upload" size="small"></el-button>
+                    </yhUpload>
+                </el-form-item>
+            </el-col>
+        </el-row>
+    </el-form>
+</template>
+
+<script>
+import Common from "@/api/common";
+import API from "@/api/policy/share";
+import { useUserStore } from "@/store/user";
+import { levelDic, typeDic, storageTypeDic, whetherDic } from "@/views/policyShare/main";
+import yhUpload from "@/components/Upload/index.vue";
+
+const { userInfo } = useUserStore(); // store 用户
+
+export default {
+    props: {
+        mode: { type: String, default: "saveDone" }
+    },
+    
+    components: {
+        yhUpload
+    },
+
+    data() {
+        return {
+            levelDic, typeDic, storageTypeDic, whetherDic,
+            isUpload: false,
+
+            form: {
+                id: null,
+                businessNo: null,
+                status: null,
+                createId: userInfo.id,
+                createName: userInfo.name,
+                createTime: null,
+                deptId: userInfo.deptId,
+                deptName: null,
+                companyId: null,
+                companyName: null,
+                name: null,
+                zcLevel: null,
+                zcType: null,
+                docNo: null,
+                contactPhone: null,
+                score: null,
+                isInWh: 1,
+                inWhType: null,
+                abstractContent: null,
+                decodeContent: null,
+                fileList: []
+            },
+
+            rules: {
+                businessNo: [{ required: true }],
+                name: [{ required: true, message: "请输入政策名称" }],
+                zcLevel: [{ required: true, message: "请选择政策等级" }],
+                zcType: [{ required: true, message: "请选择政策类别" }],
+                docNo: [{ required: true, message: "请输入政策文号" }],
+                contactPhone: [{ required: true, message: "请输入联系方式" }],
+                score: [{ required: true, message: "请输入分值" }],
+                isInWh: [{ required: true }],
+                inWhType: [{ required: true, message: "请选择入库类型" }],
+                abstractContent: [{ required: true, message: "请输入政策概要" }],
+                decodeContent: [{ required: true, message: "请输入政策解读" }]
+            }
+        }
+    },
+
+    watch: {
+        isUpload(value) {
+            this.$emit("isUploadChange", value);
+        }
+    },
+
+    mounted() {
+        this.getUserDept();
+    },
+
+    methods: {
+        setData(id) {
+            API.detail(id).then(res => {
+                if (res.code === 200) {
+                    for (const key in this.form) {
+                        if (key == "fileList") this.form[key] = res.data[key].map(file => ({ ...file, name: file.originalName, path: file.fileDomain + "/" + file.fileName }));
+                        else if (key == "isInWh") this.form.isInWh = !!res.data[key] && res.data[key] || 0;
+                        else this.form[key] = res.data[key] || null;
+                    }
+                } else ElMessage.error(res.msg);
+            });
+        },
+
+        getUserDept() {
+            Common.getUserDept(userInfo.deptId).then(res => {
+                if (res.code === 200) {
+                    this.form.deptId = res.data.deptId;
+                    this.form.deptName = res.data.deptName;
+                    this.form.companyId = res.data.companyId;
+                    this.form.companyName = res.data.companyName;
+                }
+            });
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.no-upload-btn :deep(.yh-upload-file) {
+  .el-upload {
+    display: none;
+  }
+
+  .el-upload-list.is-disabled {
+    margin-top: 0;
+  }
+}
+
+.el-input-number {
+  width: 100%;
+
+  :deep(.el-input) .el-input__wrapper {
+    padding: 1px 11px;
+
+    .el-input__inner {
+      text-align: unset;
+    }
+  }
+}
+</style>

+ 4 - 4
src/views/manage/policyShare/index.vue

@@ -168,12 +168,12 @@ export default {
 
         table_add() {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyDetail.open());
+            nextTick(() => this.$refs.policyDetail.open());
         },
 
         table_edit(row, mode = "edit") {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyDetail.open(mode).setData(row.id));
+            nextTick(() => this.$refs.policyDetail.open(mode).setData(row.id));
         },
 
         table_del(row) {
@@ -188,7 +188,7 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         closed(e) {
@@ -198,7 +198,7 @@ export default {
 
         table_process(row) {
             this.dialog.workflow = true;
-            this.$nextTick(() => this.$refs.yhWorkflow.getDetail(row));
+            nextTick(() => this.$refs.yhWorkflow.getDetail(row));
         }
     }
 }

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

@@ -165,22 +165,22 @@ export default {
 
         table_detail(row) {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyStriveDetail.open("detail").setData(row.id));
+            nextTick(() => this.$refs.policyStriveDetail.open("detail").setData(row.id));
         },
 
         table_score(row) {
             this.dialog.score = true;
-            this.$nextTick(() => this.$refs.policyStriveScore.open().setData(row));
+            nextTick(() => this.$refs.policyStriveScore.open().setData(row));
         },
 
         table_reward(row) {
             this.dialog.reward = true;
-            this.$nextTick(() => this.$refs.policyStriveReward.open().setData(row));
+            nextTick(() => this.$refs.policyStriveReward.open().setData(row));
         },
 
         table_process(row) {
             this.dialog.workflow = true;
-            this.$nextTick(() => this.$refs.yhWorkflow.getDetail(row));
+            nextTick(() => this.$refs.yhWorkflow.getDetail(row));
         }
     }
 }

+ 4 - 5
src/views/policyShare/dialog.vue

@@ -97,10 +97,11 @@ export default {
     data() {
         return {
             levelDic, typeDic,
-            isUpload: false,
-
             visible: false,
             isSaving: false,
+            isUpload: false,
+            fileIsDel: false,
+            
             mode: "add",
             titleMap: {
                 add: "新增",
@@ -134,9 +135,7 @@ export default {
                 docNo: [{ required: true, message: "请输入政策文号" }],
                 contactPhone: [{ required: true, message: "请输入联系方式" }],
                 abstractContent: [{ required: true, message: "请输入政策概要" }]
-            },
-
-            fileIsDel: false
+            }
         }
     },
 

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

@@ -145,8 +145,8 @@ export default {
                     value: "id"
                 },
                 paramsFormat: {
-                    0: "companyId",
-                    1: "deptId"
+                    0: "deptId",
+                    1: "companyId"
                 }
             },
 
@@ -253,23 +253,23 @@ export default {
 
         table_add() {
             this.dialog.update = true;
-            this.$nextTick(() => this.$refs.policyDialog.open());
+            nextTick(() => this.$refs.policyDialog.open());
         },
 
         table_edit(row) {
             if (row.status == "inactive") {
                 this.dialog.process = true;
-                this.$nextTick(() => this.$refs.processDialog.open("resubmit").setData(row.id));
+                nextTick(() => this.$refs.processDialog.open("resubmit").setData(row.id));
             }
             if (row.status == "active") {
                 this.dialog.update = true;
-                this.$nextTick(() => this.$refs.policyDialog.open("edit").setData(row.id));
+                nextTick(() => this.$refs.policyDialog.open("edit").setData(row.id));
             }
         },
 
         table_detail(row) {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyDetail.open("detail").setData(row.id));
+            nextTick(() => this.$refs.policyDetail.open("detail").setData(row.id));
         },
 
         table_del(row) {
@@ -284,7 +284,7 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         table_withdraw(row) {
@@ -299,7 +299,7 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         closed(e) {
@@ -309,7 +309,7 @@ export default {
 
         table_process(row) {
             this.dialog.workflow = true;
-            this.$nextTick(() => this.$refs.yhWorkflow.getDetail(row));
+            nextTick(() => this.$refs.yhWorkflow.getDetail(row));
         }
     }
 }

+ 172 - 0
src/views/policyShare/message/index.vue

@@ -0,0 +1,172 @@
+<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>
+                </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>
+</template>
+
+<script>
+import API from "@/api/policy/share";
+import { levelDic, typeDic, storageTypeDic, whetherDic } from "../main";
+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";
+
+export default {
+    components: {
+        yhTooltip,
+        yhReplyCard,
+        yhPagination,
+        policyDetail
+    },
+
+    data() {
+        return {
+            columns, levelDic, typeDic, storageTypeDic, whetherDic,
+
+            loading: false,
+            createTime: [],
+            params: {
+                page: 1,
+                size: 10,
+                status: "done"
+            },
+            total: 0,
+            tableData: [],
+
+            dialog: false
+        }
+    },
+
+    mounted() {
+        this.reloadTable();
+    },
+
+    methods: {
+        columnFormat(row, props) {
+            if (props == "createTime") return row[props].split(" ")[0];
+            if (props == "isInWh") return whetherDic[row[props]] || "";
+            if (props == "inWhType") return row.isInWh == 1 && row[props] || "";
+            return row[props];
+        },
+
+        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"
+            }
+            this.reloadTable();
+        },
+
+        table_detail(row) {
+            this.dialog = true;
+            nextTick(() => this.$refs.policyDetail.open("detail").setData(row.id));
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.tjm_card_comment .el-descriptions {
+  overflow-x: auto;
+  border-left: var(--el-descriptions-table-border);
+  border-right: var(--el-descriptions-table-border);
+
+  :deep(.el-descriptions__body) tr {
+    .el-descriptions__cell:first-child {
+      border-left: none;
+    }
+
+    .el-descriptions__cell:last-child {
+      border-right: none;
+    }
+  }
+
+  .desc-cell {
+    display: inline-block;
+    width: 100%;
+  }
+}
+</style>

+ 13 - 0
src/views/policyShare/message/main.js

@@ -0,0 +1,13 @@
+export const columns = [
+    { label: "序号", props: "index", width: "60" },
+    { label: "政策编号", props: "businessNo" },
+    { label: "政策名称", props: "name" },
+    { label: "政策概要", props: "abstractContent" },
+    { label: "政策类别", props: "zcType", width: "100" },
+    { label: "政策等级", props: "zcLevel", width: "100" },
+    { label: "发布人", props: "createName" },
+    { label: "发布单位", props: "companyName" },
+    { label: "联系方式", props: "contactPhone" },
+    { label: "发布日期", props: "createTime", width: "120" },
+    { label: "入库类别", props: "inWhType", width: "100" }
+]

+ 4 - 5
src/views/policyStrive/dialog.vue

@@ -120,10 +120,11 @@ export default {
     data() {
         return {
             levelDic, typeDic, rewardTypeDic,
-            isUpload: false,
-
             visible: false,
             isSaving: false,
+            isUpload: false,
+            fileIsDel: false,
+
             mode: "add",
             titleMap: {
                 add: "新增",
@@ -165,9 +166,7 @@ export default {
                 yjStriveAmount: [{ required: true, message: "请输入预计争取金额" }],
                 rewardType: [{ required: true, message: "请选择政策考核类别" }],
                 abstractContent: [{ required: true, message: "请输入政策概要" }]
-            },
-
-            fileIsDel: false
+            }
         }
     },
 

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

@@ -235,23 +235,23 @@ export default {
 
         table_add() {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyDetail.open());
+            nextTick(() => this.$refs.policyDetail.open());
         },
 
         table_edit(row) {
             if (row.status == "inactive") {
                 this.dialog.process = true;
-                this.$nextTick(() => this.$refs.processDialog.open("resubmit").setData(row.id));
+                nextTick(() => this.$refs.processDialog.open("resubmit").setData(row.id));
             }
             if (row.status == "active") {
                 this.dialog.detail = true;
-                this.$nextTick(() => this.$refs.policyDetail.open("edit").setData(row.id));
+                nextTick(() => this.$refs.policyDetail.open("edit").setData(row.id));
             }
         },
 
         table_detail(row, mode = "detail") {
             this.dialog.explain = true;
-            this.$nextTick(() => this.$refs.policyExplain.open(mode).setData(row.id));
+            nextTick(() => this.$refs.policyExplain.open(mode).setData(row.id));
         },
 
         table_del(row) {
@@ -266,7 +266,7 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         table_withdraw(row) {
@@ -281,7 +281,7 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         closed(e) {
@@ -291,7 +291,7 @@ export default {
 
         table_process(row) {
             this.dialog.workflow = true;
-            this.$nextTick(() => this.$refs.yhWorkflow.getDetail(row));
+            nextTick(() => this.$refs.yhWorkflow.getDetail(row));
         }
     }
 }

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

@@ -133,12 +133,12 @@ export default {
 
         table_detail(row) {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyDetail.open("detail").setData(row.id));
+            nextTick(() => this.$refs.policyDetail.open("detail").setData(row.id));
         },
 
         table_link(row) {
             this.dialog.link = true;
-            this.$nextTick(() => this.$refs.policyLink.open().setData(row));
+            nextTick(() => this.$refs.policyLink.open().setData(row));
         },
 
         table_msg(row) {

+ 1 - 1
src/views/publicDomain/link.vue

@@ -143,7 +143,7 @@ export default {
 
         table_detail(row) {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyStriveDetail.open("detail").setData(row.id));
+            nextTick(() => this.$refs.policyStriveDetail.open("detail").setData(row.id));
         }
     }
 }

+ 3 - 4
src/views/system/template/dialog.vue

@@ -46,8 +46,9 @@ export default {
         return {
             typeDic,
             visible: false,
-            isUpload: false,
             isSaving: false,
+            isUpload: false,
+            fileIsDel: false,
 
             mode: "add",
             titleMap: {
@@ -66,9 +67,7 @@ export default {
                 templateName: [{ required: true, message: "请输入模版名称" }],
                 refType: [{ required: true, message: "请选择模版类型" }],
                 fileList: [{ required: true, message: "请上传模版文件" }]
-            },
-
-            fileIsDel: false
+            }
         }
     },
 

+ 3 - 3
src/views/system/template/index.vue

@@ -66,12 +66,12 @@ export default {
 
         table_add() {
             this.dialog = true;
-            this.$nextTick(() => this.$refs.tempDialog.open());
+            nextTick(() => this.$refs.tempDialog.open());
         },
 
         table_edit(row) {
             this.dialog = true;
-            this.$nextTick(() => this.$refs.tempDialog.open("edit").setData(row));
+            nextTick(() => this.$refs.tempDialog.open("edit").setData(row));
         },
 
         table_del(row) {
@@ -86,7 +86,7 @@ export default {
                         this.reloadTable();
                     } else ElMessage.error(res.msg);
                 });
-            });
+            }).catch(() => ElMessage.success("已取消"));
         },
 
         closed(e) {

+ 1 - 1
src/views/toDo/index.vue

@@ -125,7 +125,7 @@ export default {
     
         table_approve({ refId, refType }, mode = "agree") {
             this.dialog[refType] = true;
-            this.$nextTick(() => this.$refs[refType].open(mode).setData(refId));
+            nextTick(() => this.$refs[refType].open(mode).setData(refId));
         }
     }
 }