罗永浩 5 mesi fa
parent
commit
6a403aff87

+ 1 - 0
.gitignore

@@ -9,3 +9,4 @@ addons/admin/node_modules/
 addons/min-exam/
 .idea/
 sql/xb_interact.sql
+addons/

+ 1 - 1
addons/admin/src/views/system/ad/banner.vue

@@ -1,5 +1,5 @@
 <template>
-  <list defaultPosition="1" :permissionMap="permissionMap"></list>
+  <list :defaultPosition="1" :permissionMap="permissionMap"></list>
 </template>
 
 <script>

+ 6 - 5
addons/admin/src/views/system/ad/components/list.vue

@@ -232,15 +232,16 @@ export default {
     defaultPosition: {
       handler(newPosition) {
         this.table.where.position = newPosition;
-        this.$refs.table.reload();
+        // 确保refs存在后再调用reload
+        this.$nextTick(() => {
+          if (this.$refs.table) {
+            this.$refs.table.reload();
+          }
+        });
       },
       immediate: true
     }
   },
-  mounted() {
-    // 在这里初始化数据
-    this.table.where.position = this.defaultPosition;
-  },
   methods: {
     /* 显示编辑 */
     edit(row) {

+ 24 - 6
addons/admin/src/views/system/article/components/ArticleForm.vue

@@ -1,6 +1,6 @@
 <template>
-    <el-dialog :title="formData.id ? '编辑' : '创建'" :visible.sync="visible" width="1000px" :destroy-on-close="true"
-        custom-class="ele-dialog-form" :lock-scroll="false" @closed="resetForm">
+    <el-dialog :title="formData.id ? '编辑' : '创建'" :visible.sync="dialogVisible" width="1000px"
+        custom-class="ele-dialog-form" :lock-scroll="false" @closed="handleClosed">
         <el-form :model="formData" ref="formRef" :rules="rules" label-width="100px">
             <el-row :gutter="15">
                 <el-col :sm="12">
@@ -34,7 +34,7 @@
         </el-form>
 
         <div slot="footer">
-            <el-button @click="visible = false">取消</el-button>
+            <el-button @click="closeDialog">取消</el-button>
             <el-button type="primary" @click="save">保存</el-button>
         </div>
     </el-dialog>
@@ -64,6 +64,15 @@ export default {
         }
     },
     computed: {
+        // 弹窗显示状态(处理prop的双向绑定)
+        dialogVisible: {
+            get() {
+                return this.visible;
+            },
+            set(val) {
+                this.$emit('update:visible', val);
+            }
+        },
         // 判断是否为智能问答类型
         isSmartReply() {
             const currentType = this.defaultType || this.formData.type;
@@ -101,9 +110,18 @@ export default {
         },
     },
     methods: {
+        closeDialog() {
+            this.$emit('update:visible', false);
+        },
+        handleClosed() {
+            // 对话框关闭后重置表单
+            this.resetForm();
+        },
         resetForm() {
-            this.$refs.formRef && this.$refs.formRef.resetFields()
-            this.formData = Object.assign({}, this.defaultData)
+            if (this.$refs.formRef) {
+                this.$refs.formRef.resetFields();
+            }
+            this.formData = Object.assign({}, this.defaultData);
         },
         save() {
             this.$refs.formRef.validate(valid => {
@@ -115,7 +133,7 @@ export default {
                         if (res.data.code === 0) {
                             this.$message.success(res.data.msg)
                             this.$emit('success')
-                            this.$emit('update:visible', false) // ✅ 让父组件把 visible 改成 false
+                            this.closeDialog()
                         } else {
                             this.$message.error(res.data.msg)
                         }

+ 14 - 7
addons/admin/src/views/system/article/components/list.vue

@@ -34,13 +34,13 @@
               <el-button @click="reloadTable()">
                 重置
               </el-button>
-              <el-button v-if="permission.includes(permissionMap['add'])" type="primary" icon="el-icon-plus" size="small"
-                @click="openCreate">
+              <el-button v-if="permission.includes(permissionMap['add'])" type="primary" icon="el-icon-plus"
+                size="small" @click="openCreate">
                 创建
               </el-button>
               <!-- 导入按钮,仅在 defaultType 为 9 时可见 -->
-              <el-button v-if="defaultType == 9 && permission.includes(permissionMap['add'])" type="success" icon="el-icon-upload2"
-                size="small" @click="openImportDialog">
+              <el-button v-if="defaultType == 9 && permission.includes(permissionMap['add'])" type="success"
+                icon="el-icon-upload2" size="small" @click="openImportDialog">
                 导入
               </el-button>
             </div>
@@ -65,7 +65,7 @@
           </el-table-column>
           <el-table-column prop="status" label="发布" :resizable="false" min-width="120">
             <template slot-scope="{row}">
-              <el-switch v-model="row.status" @change="editStatus(row)" :active-value="1" :inactive-value="2" />
+              <el-switch v-model="row.status" @change="handleStatusChange(row)" :active-value="1" :inactive-value="2" />
             </template>
           </el-table-column>
           <el-table-column label="操作" width="130px" align="center" :resizable="false" fixed="right">
@@ -254,21 +254,28 @@ export default {
         });
       }
     },
+    /* 处理状态切换 */
+    handleStatusChange(row) {
+      this.editStatus(row);
+    },
     /* 更改状态 */
     editStatus(row) {
       this.$message.closeAll()
       const loading = this.$loading({ lock: true });
-      let params = Object.assign({}, row);
+      let params = { id: row.id, status: row.status };
       this.$http.post('/article/status', params).then(res => {
         loading.close();
         if (res.data.code === 0) {
           this.$message({ type: 'success', message: res.data.msg });
         } else {
-          row.status = !row.status ? 2 : 1;
+          // 失败时恢复原状态
+          row.status = row.status === 1 ? 2 : 1;
           this.$message.error(res.data.msg);
         }
       }).catch(e => {
         loading.close();
+        // 失败时恢复原状态
+        row.status = row.status === 1 ? 2 : 1;
         this.$message.error(e.message);
       });
     },