Parcourir la source

feat: 创建歌单/节目支持批量添加自行上传的音频

Damon il y a 8 mois
Parent
commit
d43694bd14

+ 1 - 1
src/api/music/list.js

@@ -49,4 +49,4 @@ export function upload(data){
     method: 'post',
     data
   })
-}
+}

+ 22 - 16
src/components/AudioUpload/index.vue

@@ -1,42 +1,48 @@
 <template>
-  <el-upload action="#" :show-file-list="false" multiple :auto-upload="false" :on-change="onChange">
+  <el-upload
+    action="#"
+    :show-file-list="false"
+    multiple
+    :auto-upload="false"
+    :on-change="onChange"
+  >
     <el-button type="primary" slot="trigger">批量选择音频</el-button>
     <el-button :disabled="disabled" @click="getUpload">上传</el-button>
   </el-upload>
 </template>
 
 <script>
-import { upload } from '@/api/music/list'
+import { upload } from "@/api/music/list";
 export default {
   data() {
     return {
       data: new FormData(),
       fileList: [],
       // 是否选完文件
-      disabled: true
-    }
+      disabled: true,
+    };
   },
   methods: {
     // 选择文件
     onChange(file) {
-      this.data.append('multipartFiles', file.raw)
-      this.disabled = false
+      this.data.append("multipartFiles", file.raw);
+      this.disabled = false;
     },
 
     // 上传
     getUpload() {
-      this.$emit('loading')
-      upload(this.data).then(res => {
+      this.$emit("loading");
+      upload(this.data).then((res) => {
         if (res.code === 0) {
-          this.$message.success('上传成功!')
-          this.disabled = true
-          this.data = []
-          this.$emit('upload')
+          this.$message.success("上传成功!");
+          this.disabled = true;
+          this.data = [];
+          this.$emit("upload");
         }
-      })
-    }
-  }
-}
+      });
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>

+ 407 - 131
src/views/music/menu/detail.vue

@@ -1,53 +1,122 @@
 <template>
   <div class="app-container">
-    <el-form class="form" :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
+    <el-form
+      class="form"
+      :model="form"
+      ref="form"
+      :rules="rules"
+      label-width="100px"
+      :disabled="disabled"
+    >
       <el-form-item label="歌单名称:" prop="name">
         <el-input v-model="form.name" placeholder="请输入歌单名称" />
       </el-form-item>
       <el-form-item label="歌单介绍:" prop="description">
-        <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10 }" maxlength="300"
-          show-word-limit placeholder="请输入歌单介绍" />
+        <el-input
+          v-model="form.description"
+          type="textarea"
+          :autosize="{ minRows: 5, maxRows: 10 }"
+          maxlength="300"
+          show-word-limit
+          placeholder="请输入歌单介绍"
+        />
       </el-form-item>
       <el-form-item label="创建者:" prop="avatarNickName">
-        <el-input v-model="form.avatarNickName" placeholder="请输入歌单创建者名称" />
+        <el-input
+          v-model="form.avatarNickName"
+          placeholder="请输入歌单创建者名称"
+        />
       </el-form-item>
       <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" :disabled="disabledPlatformId(form.platformId)">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label"
-            :disabled="disabledJoinType(item.joinType)" />
+        <el-select
+          v-model="form.platformId"
+          placeholder="请选择资源平台"
+          :disabled="disabledPlatformId(form.platformId)"
+        >
+          <el-option
+            v-for="item in platformOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+            :disabled="disabledJoinType(item.joinType)"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="付费类型:" prop="payType">
         <el-select v-model="form.payType" placeholder="请选择付费类型">
-          <el-option v-for="item in payTypeOptions.slice(0, 2)" :key="item.value" :value="item.value"
-            :label="item.label" />
+          <el-option
+            v-for="item in payTypeOptions.slice(0, 2)"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item v-if="form.payType === 2" label="原价:" prop="price">
-        <el-input-number v-model="form.price" placeholder="请输入原价" :min="1" :precision="2" :controls="false" />
+        <el-input-number
+          v-model="form.price"
+          placeholder="请输入原价"
+          :min="1"
+          :precision="2"
+          :controls="false"
+        />
       </el-form-item>
       <el-form-item v-if="form.payType === 2" label="折扣价" prop="discount">
-        <el-input-number v-model="form.discount" placeholder="请输入折扣价" :min="0" :precision="2" :controls="false" />
+        <el-input-number
+          v-model="form.discount"
+          placeholder="请输入折扣价"
+          :min="0"
+          :precision="2"
+          :controls="false"
+        />
       </el-form-item>
       <el-form-item label="歌单封面:" prop="coverUrl">
-        <Upload listType="picture-card" :url="form.coverUrl" @upload="upload($event, 'coverUrl')" :disabled="disabled" />
+        <Upload
+          listType="picture-card"
+          :url="form.coverUrl"
+          @upload="upload($event, 'coverUrl')"
+          :disabled="disabled"
+        />
       </el-form-item>
       <el-form-item label="头像:" prop="avatarNickHead">
-        <Upload listType="picture-card" :url="form.avatarNickHead" @upload="upload($event, 'avatarNickHead')"
-          :disabled="disabled" />
+        <Upload
+          listType="picture-card"
+          :url="form.avatarNickHead"
+          @upload="upload($event, 'avatarNickHead')"
+          :disabled="disabled"
+        />
       </el-form-item>
-      <el-form-item label="歌曲列表:" style="width: 100%;">
-        <el-button type="primary" icon="el-icon-plus" @click="getDialog">添加歌曲</el-button>
+      <el-form-item label="歌曲列表:" style="width: 100%">
+        <el-button type="primary" icon="el-icon-plus" @click="getDialog"
+          >添加歌曲</el-button
+        >
         <el-table class="table" :data="form.programList">
           <el-table-column label="ID" prop="id" align="center" />
-          <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
-          <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
+          <el-table-column
+            label="歌曲名称"
+            prop="name"
+            align="center"
+            show-overflow-tooltip
+          />
+          <el-table-column
+            label="歌手名称"
+            prop="singerName"
+            align="center"
+            show-overflow-tooltip
+          />
           <el-table-column label="播放时长" prop="playTime" align="center" />
-          <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
+          <el-table-column
+            label="当前状态"
+            prop="status"
+            align="center"
+            :formatter="statusFormatter"
+          />
           <el-table-column label="操作" align="center">
             <template slot-scope="scope">
               <Audio :src="scope.row.progaramUrl" />
-              <el-button type="delete" @click="getDelete(scope.$index)">删除</el-button>
+              <el-button type="delete" @click="getDelete(scope.$index)"
+                >删除</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
@@ -55,82 +124,151 @@
     </el-form>
     <div class="form-btn">
       <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
+      <el-button v-if="!disabled" type="primary" @click="getSubmit"
+        >确定</el-button
+      >
     </div>
 
     <!-- 弹窗 -->
+    <!-- @change="handleCheckedTreeNodeAll($event, 'menu')" -->
     <el-dialog :visible.sync="dialogVisible" title="添加歌曲" width="1100px">
       <el-form inline size="mini" style="width: 100%">
         <el-form-item label="歌曲Id:">
-          <el-input v-model="dialogForm.id" placeholder="请输入歌曲Id" clearable />
+          <el-input
+            v-model="dialogForm.id"
+            placeholder="请输入歌曲Id"
+            clearable
+          />
         </el-form-item>
         <el-form-item label="歌曲名称:">
-          <el-input v-model="dialogForm.name" placeholder="请输入歌曲名称" clearable />
+          <el-input
+            v-model="dialogForm.name"
+            placeholder="请输入歌曲名称"
+            clearable
+          />
         </el-form-item>
         <el-form-item label="歌手名称:">
-          <el-input v-model="dialogForm.singerName" placeholder="请输入歌手名称" clearable />
+          <el-input
+            v-model="dialogForm.singerName"
+            placeholder="请输入歌手名称"
+            clearable
+          />
         </el-form-item>
         <el-form-item label="资源平台:">
-          <el-select v-model="dialogForm.platformId" placeholder="请选择资源平台">
-            <el-option v-for="item in platformOptions.filter(i => !i.joinType.includes('1'))" :key="item.value"
-              :value="item.value" :label="item.label" />
+          <el-select
+            v-model="dialogForm.platformId"
+            placeholder="请选择资源平台"
+          >
+            <el-option
+              v-for="item in platformOptions.filter(
+                (i) => !i.joinType.includes('1')
+              )"
+              :key="item.value"
+              :value="item.value"
+              :label="item.label"
+            />
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
+          <el-button type="primary" icon="el-icon-search" @click="getSearch"
+            >搜索</el-button
+          >
           <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
         </el-form-item>
       </el-form>
-      <el-table :data="tableData" v-loading="loading">
-        <el-table-column label="歌曲Id" prop="id" align="center" show-overflow-tooltip />
-        <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
-        <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
-        <el-table-column label="播放时长" prop="playTime" align="center" />
-        <el-table-column label="操作" align="center">
-          <template slot-scope="scope">
-            <el-button type="text" @click="getChecked(scope.row)" :disabled="disabledList(scope.row)">
-              选择
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="total > 0" :total="total" :page.sync="dialogForm.pageNum" :limit.sync="dialogForm.pageSize"
-        @pagination="getList" />
-    </el-dialog>
+
+        <el-table :data="tableData" 
+        ref="multipleTable"
+        :row-key="tableKey"
+        v-loading="loading" 
+        @selection-change="handleSelectionChange">
+
+          <el-table-column
+          type="selection"
+          align="center"
+          key="selection"
+          reserve-selection
+        />
+
+          <el-table-column
+            label="歌曲Id"
+            prop="id"
+            align="center"
+            show-overflow-tooltip
+          />
+
+          <el-table-column
+            label="歌曲名称"
+            prop="name"
+            align="center"
+            show-overflow-tooltip
+          />
+
+          <el-table-column
+            label="歌手名称"
+            prop="singerName"
+            align="center"
+            show-overflow-tooltip
+          />
+
+          <el-table-column label="播放时长" prop="playTime" align="center" />
+
+          <!-- <el-table-column label="操作" align="center">
+            <template slot-scope="scope">
+              <el-button
+                type="text"
+                @click="getChecked(scope.row)"
+                :disabled="disabledList(scope.row)"
+              >
+                选择
+              </el-button>
+            </template>
+          </el-table-column> -->
+
+        </el-table>
+        <pagination
+          v-show="total > 0"
+          :total="total"
+          :page.sync="dialogForm.pageNum"
+          :limit.sync="dialogForm.pageSize"
+          @pagination="getList"
+        /></p
+    ></el-dialog>
   </div>
 </template>
 
 <script>
-import { submit, detail } from '@/api/music/menu'
-import { list } from '@/api/music/list'
-import { platformMixin, onOrOffMixin, payTypeMixin } from '@/mixin/index'
-import Audio from '@/components/Audio/index.vue'
+import { list } from "@/api/music/list";
+import { detail, submit } from "@/api/music/menu";
+import Audio from "@/components/Audio/index.vue";
+import { onOrOffMixin, payTypeMixin, platformMixin } from "@/mixin/index";
 export default {
   mixins: [platformMixin, onOrOffMixin, payTypeMixin],
   components: {
-    Audio
+    Audio,
   },
   data() {
     // 判断原价是否大于折扣价
     var checkPrice = (rule, value, callback) => {
       if (!value) {
-        callback(new Error('请输入原价'))
+        callback(new Error("请输入原价"));
       } else {
         if (this.form.discount && value <= this.form.discount) {
-          callback(new Error('原价必须大于折扣价'))
+          callback(new Error("原价必须大于折扣价"));
         }
-        callback()
+        callback();
       }
-    }
+    };
     // 判断折扣价是否小于原价
     var checkDiscount = (rule, value, callback) => {
       if (this.form.price && value >= this.form.price) {
-        callback(new Error('折扣价必须小于原价'))
+        callback(new Error("折扣价必须小于原价"));
       } else {
-        callback()
+        callback();
       }
-    }
+    };
     return {
+      multipleTable: null,
       // 遮罩层
       loading: false,
       // 表单
@@ -138,37 +276,73 @@ export default {
         programList: [], // 歌曲列表
         status: 1,
         type: 2,
-        payType: 1
+        payType: 1,
       },
+
       // 校验
       rules: {
-        name: [{
-          required: true, message: '请输入歌单名称', trigger: 'blur'
-        }],
-        description: [{
-          required: true, message: '请输入歌单介绍', trigger: 'blur'
-        }],
-        avatarNickName: [{
-          required: true, message: '请输入歌单创建者名称', trigger: 'blur'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        payType: [{
-          required: true, message: '请选择付费类型', trigger: 'change'
-        }],
-        price: [{
-          required: true, validator: checkPrice, trigger: 'blur'
-        }],
-        discount: [{
-          validator: checkDiscount, trigger: 'blur'
-        }],
-        coverUrl: [{
-          required: true, message: '请上传歌单封面', trigger: 'change'
-        }],
-        avatarNickHead: [{
-          required: true, message: '请上传创建者头像', trigger: 'change'
-        }]
+        name: [
+          {
+            required: true,
+            message: "请输入歌单名称",
+            trigger: "blur",
+          },
+        ],
+        description: [
+          {
+            required: true,
+            message: "请输入歌单介绍",
+            trigger: "blur",
+          },
+        ],
+        avatarNickName: [
+          {
+            required: true,
+            message: "请输入歌单创建者名称",
+            trigger: "blur",
+          },
+        ],
+        platformId: [
+          {
+            required: true,
+            message: "请选择资源平台",
+            trigger: "change",
+          },
+        ],
+        payType: [
+          {
+            required: true,
+            message: "请选择付费类型",
+            trigger: "change",
+          },
+        ],
+        price: [
+          {
+            required: true,
+            validator: checkPrice,
+            trigger: "blur",
+          },
+        ],
+        discount: [
+          {
+            validator: checkDiscount,
+            trigger: "blur",
+          },
+        ],
+        coverUrl: [
+          {
+            required: true,
+            message: "请上传歌单封面",
+            trigger: "change",
+          },
+        ],
+        avatarNickHead: [
+          {
+            required: true,
+            message: "请上传创建者头像",
+            trigger: "change",
+          },
+        ],
       },
       // 弹窗
       dialogVisible: false,
@@ -177,7 +351,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         status: 1,
-        platformId: null
+        platformId: null,
       },
       // 总数据
       total: 0,
@@ -186,58 +360,148 @@ export default {
       // 只读
       disabled: false,
       // 是否已选
-      disabledChecked: false
-    }
+      disabledChecked: false,
+    };
   },
   mounted() {
     // 获取资源平台
     this.getPlatform({
-      audioType: 10
-    })
+      audioType: 10,
+    });
     if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getDetail()
+      this.form.id = this.$route.query.id;
+      this.disabled = Boolean(this.$route.query.disabled);
+      this.getDetail();
     }
   },
   methods: {
+    tableKey(row) {
+      return row.id;
+    },
+
+    handleSelectionChange(val) {
+      this.form.programList = JSON.parse(JSON.stringify(val));
+      this.$message.success("操作成功!");
+      ///  获取去掉的item
+      // var deleteList = [];
+      // for (var i = 0; i < this.tableData.length; i++) {
+      //   var isHas = false;
+      //   for (var j = 0; j < val.length; j++) {
+      //     if (this.tableData[i].id === val[j].id) {
+      //       isHas = true;
+      //       break;
+      //     }
+      //   }
+      //   if (!isHas) {
+      //     deleteList.push(this.tableData[i]);
+      //   }
+      // }
+
+      // /// 删掉去掉的
+      // if (deleteList.length > 0) {
+      //   for (var i = 0; i < this.form.programList.length; i++) {
+      //     for (var j = 0; j < deleteList.length; j++) {
+      //       if (this.form.programList[i].id === deleteList[j].id) {
+      //         this.form.programList.splice(i, 1);
+      //         break;
+      //       }
+      //     }
+      //   }
+      // }
+      // console.log("gadadfqewrqerqerqr==22=" + this.form.programList.length);
+
+      // ///添加没有的
+      // for (var i = 0; i < val.length; i++) {
+      //   var item = {
+      //     id: val[i].id,
+      //     name: val[i].name,
+      //     singerName: val[i].singerName,
+      //     playTime: val[i].playTime,
+      //     status: val[i].status,
+      //     progaramUrl: val[i].progaramUrl,
+      //   };
+      //   var has = this.disabledList(item);
+      //   ///如果没有,添加
+      //   if (!has) {
+      //     this.form.programList.push(item);
+      //   }
+      // }
+
+      // this.form.programList.push({
+      //   id: row.id,
+      //   name: row.name,
+      //   singerName: row.singerName,
+      //   playTime: row.playTime,
+      //   status: row.status,
+      //   progaramUrl: row.progaramUrl,
+      // });
+      // this.$message.success("添加成功!");
+    },
+
     // 详情
     getDetail() {
-      detail(this.form.id).then(res => {
+      detail(this.form.id).then((res) => {
         if (res.code === 0) {
-          this.form = res.data
-          this.form.programList = res.data.programList === null ? [] : res.data.programList
+          this.form = res.data;
+          this.form.programList =
+            res.data.programList === null ? [] : res.data.programList;
         }
-      })
+      });
     },
     // 上传
     upload(e, key) {
-      this.form[key] = e.file
+      this.form[key] = e.file;
     },
 
     // 添加歌曲
     getDialog() {
-      this.dialogVisible = true
-      this.dialogForm.platformId = this.platformOptions.filter(i => !i.joinType.includes('1'))[0].value
-      this.getList()
+      this.dialogVisible = true;
+      this.dialogForm.platformId = this.platformOptions.filter(
+        (i) => !i.joinType.includes("1")
+      )[0].value;
+      this.getList();
     },
 
     // 列表
     getList() {
-      this.loading = true
-      list(this.dialogForm).then(res => {
+      this.loading = true;
+      list(this.dialogForm).then((res) => {
         if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
+          this.tableData = res.data.records;
+          this.total = res.data.total;
+          this.loading = false;
+
+          // const tableInstance = this.multipleTable;
+          // if (tableInstance) {
+          //   // 通过设置内部 selection 属性来选中行(这是内部实现细节,可能会随版本变化)
+          //   tableInstance.store.states.selection = this.form.programList.map(
+          //     (index) => tableData[index]
+          //   );
+          //   // 强制表格重新渲染,以显示选中的行
+          //   this.tableKey += 1;
+          // }
+
+          // this.$refs.tableData.clearSelection();
+
+          // if (this.form.programList.length > 0) {
+          //   for (var i = 0; i < this.form.programList.length; i++) {
+          //     for (var j = 0; j < this.tableData.length; j++) {
+          //       if (this.form.programList[i] === this.tableData[j]) {
+          //         console.log("gadfadsfqewrqewrqerqerqer===" + j);
+          //         this.tableData.toggleRowSelection(this.tableData[j], true);
+          //         break;
+          //       }
+          //     }
+          //   }
+          // }
         }
-      })
+      });
     },
 
     // 搜索
     getSearch() {
-      this.dialogForm.pageNum = 1
-      this.getList()
+      this.dialogForm.pageNum = 1;
+      this.getList();
     },
 
     // 重置
@@ -246,9 +510,9 @@ export default {
         pageNum: 1,
         pageSize: 10,
         status: 1,
-        platformId: this.platformOptions[0].value
-      }
-      this.getList()
+        platformId: this.platformOptions[0].value,
+      };
+      this.getList();
     },
 
     // 选择
@@ -259,35 +523,35 @@ export default {
         singerName: row.singerName,
         playTime: row.playTime,
         status: row.status,
-        progaramUrl: row.progaramUrl
-      })
-      this.$message.success('添加成功!')
+        progaramUrl: row.progaramUrl,
+      });
+      this.$message.success("添加成功!");
     },
 
     // 删除已选歌曲
     getDelete(index) {
-      this.form.programList.splice(index, 1)
+      this.form.programList.splice(index, 1);
     },
 
     // 确定
     getSubmit() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          let arr = []
-          this.form.programList.map(i => {
-            arr.push(i.id)
-          })
-          this.form.programList = arr
-          submit(this.form).then(res => {
+          let arr = [];
+          this.form.programList.map((i) => {
+            arr.push(i.id);
+          });
+          this.form.programList = arr;
+          submit(this.form).then((res) => {
             if (res.code === 0) {
-              this.$message.success(`提交成功!`)
-              this.cancel()
+              this.$message.success(`提交成功!`);
+              this.cancel();
             }
-          })
+          });
         } else {
-          return false
+          return false;
         }
-      })
+      });
     },
 
     // 取消
@@ -297,17 +561,29 @@ export default {
 
     // 字典翻译
     statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
+      return this.selectDictLabel(this.onOrOffOptions, row.status);
+    },
+
+    // 已有的歌曲不可重复选择
+    disabledTableData(row) {
+      if (this.tableData.length > 0) {
+        return this.tableData.findIndex((i) => i.id === row.id) === -1
+          ? false
+          : true;
+      }
     },
 
     // 已有的歌曲不可重复选择
     disabledList(row) {
       if (this.form.programList.length > 0) {
-        return this.form.programList.findIndex(i => i.id === row.id) === -1 ? false : true
+        return this.form.programList.findIndex((i) => i.id === row.id) === -1
+          ? false
+          : true;
       }
-    }
-  }
-}
+      return false;
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>

Fichier diff supprimé car celui-ci est trop grand
+ 564 - 276
src/views/operation/recommend/detail.vue


+ 356 - 133
src/views/system/role/index.vue

@@ -1,91 +1,222 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      v-show="showSearch"
+      :inline="true"
+    >
       <el-form-item label="角色名称" prop="roleName">
-        <el-input v-model="queryParams.roleName" placeholder="请输入角色名称" clearable size="small" style="width: 240px"
-          @keyup.enter.native="handleQuery" />
+        <el-input
+          v-model="queryParams.roleName"
+          placeholder="请输入角色名称"
+          clearable
+          size="small"
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="权限字符" prop="roleKey">
-        <el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable size="small" style="width: 240px"
-          @keyup.enter.native="handleQuery" />
+        <el-input
+          v-model="queryParams.roleKey"
+          placeholder="请输入权限字符"
+          clearable
+          size="small"
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="角色状态" clearable size="small" style="width: 240px">
-          <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
-            :value="dict.value" />
+        <el-select
+          v-model="queryParams.status"
+          placeholder="角色状态"
+          clearable
+          size="small"
+          style="width: 240px"
+        >
+          <el-option
+            v-for="dict in dict.type.sys_normal_disable"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="创建时间">
-        <el-date-picker v-model="dateRange" size="small" style="width: 240px" value-format="yyyy-MM-dd" type="daterange"
-          range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+        <el-date-picker
+          v-model="dateRange"
+          size="small"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+        ></el-date-picker>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+          >重置</el-button
+        >
       </el-form-item>
     </el-form>
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-          v-hasPermi="['system:role:add']">新增</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:role:add']"
+          >新增</el-button
+        >
       </el-col>
       <el-col :span="1.5">
-        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
-          v-hasPermi="['system:role:edit']">修改</el-button>
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:role:edit']"
+          >修改</el-button
+        >
       </el-col>
       <el-col :span="1.5">
-        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
-          v-hasPermi="['system:role:remove']">删除</el-button>
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:role:remove']"
+          >删除</el-button
+        >
       </el-col>
       <el-col :span="1.5">
-        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
-          v-hasPermi="['system:role:export']">导出</el-button>
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:role:export']"
+          >导出</el-button
+        >
       </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
+    <el-table
+      v-loading="loading"
+      :data="roleList"
+      @selection-change="handleSelectionChange"
+    >
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="角色编号" prop="roleId" width="120" />
-      <el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
-      <el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
+      <el-table-column
+        label="角色名称"
+        prop="roleName"
+        :show-overflow-tooltip="true"
+        width="150"
+      />
+      <el-table-column
+        label="权限字符"
+        prop="roleKey"
+        :show-overflow-tooltip="true"
+        width="150"
+      />
       <el-table-column label="显示顺序" prop="roleSort" width="100" />
       <el-table-column label="状态" align="center" width="100">
         <template slot-scope="scope">
-          <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
-            @change="handleStatusChange(scope.row)"></el-switch>
+          <el-switch
+            v-model="scope.row.status"
+            active-value="0"
+            inactive-value="1"
+            @change="handleStatusChange(scope.row)"
+          ></el-switch>
         </template>
       </el-table-column>
-      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        width="180"
+      >
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.createTime) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column
+        label="操作"
+        align="center"
+        class-name="small-padding fixed-width"
+      >
         <template slot-scope="scope" v-if="scope.row.roleId !== 1">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:role:edit']">修改</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-            v-hasPermi="['system:role:remove']">删除</el-button>
-          <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)"
-            v-hasPermi="['system:role:edit']">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:role:edit']"
+            >修改</el-button
+          >
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:role:remove']"
+            >删除</el-button
+          >
+          <el-dropdown
+            size="mini"
+            @command="(command) => handleCommand(command, scope.row)"
+            v-hasPermi="['system:role:edit']"
+          >
             <span class="el-dropdown-link">
               <i class="el-icon-d-arrow-right el-icon--right"></i>更多
             </span>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"
-                v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item>
-              <el-dropdown-item command="handleAuthUser" icon="el-icon-user"
-                v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item>
+              <el-dropdown-item
+                command="handleDataScope"
+                icon="el-icon-circle-check"
+                v-hasPermi="['system:role:edit']"
+                >数据权限</el-dropdown-item
+              >
+              <el-dropdown-item
+                command="handleAuthUser"
+                icon="el-icon-user"
+                v-hasPermi="['system:role:edit']"
+                >分配用户</el-dropdown-item
+              >
             </el-dropdown-menu>
           </el-dropdown>
         </template>
       </el-table-column>
     </el-table>
 
-    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
-      @pagination="getList" />
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
 
     <!-- 添加或修改角色配置对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
@@ -95,7 +226,10 @@
         </el-form-item>
         <el-form-item prop="roleKey">
           <span slot="label">
-            <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
+            <el-tooltip
+              content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)"
+              placement="top"
+            >
               <i class="el-icon-question"></i>
             </el-tooltip>
             权限字符
@@ -103,24 +237,55 @@
           <el-input v-model="form.roleKey" placeholder="请输入权限字符" />
         </el-form-item>
         <el-form-item label="角色顺序" prop="roleSort">
-          <el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
+          <el-input-number
+            v-model="form.roleSort"
+            controls-position="right"
+            :min="0"
+          />
         </el-form-item>
         <el-form-item label="状态">
           <el-radio-group v-model="form.status">
-            <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value"
-              :label="dict.value">{{ dict.label }}</el-radio>
+            <el-radio
+              v-for="dict in dict.type.sys_normal_disable"
+              :key="dict.value"
+              :label="dict.value"
+              >{{ dict.label }}</el-radio
+            >
           </el-radio-group>
         </el-form-item>
         <el-form-item label="菜单权限">
-          <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
-          <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
-          <el-checkbox v-model="form.menuCheckStrictly"
-            @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>
-          <el-tree class="tree-border" :data="menuOptions" show-checkbox ref="menu" node-key="id"
-            :check-strictly="!form.menuCheckStrictly" empty-text="加载中,请稍候" :props="defaultProps"></el-tree>
+          <el-checkbox
+            v-model="menuExpand"
+            @change="handleCheckedTreeExpand($event, 'menu')"
+            >展开/折叠</el-checkbox
+          >
+          <el-checkbox
+            v-model="menuNodeAll"
+            @change="handleCheckedTreeNodeAll($event, 'menu')"
+            >全选/全不选</el-checkbox
+          >
+          <el-checkbox
+            v-model="form.menuCheckStrictly"
+            @change="handleCheckedTreeConnect($event, 'menu')"
+            >父子联动</el-checkbox
+          >
+          <el-tree
+            class="tree-border"
+            :data="menuOptions"
+            show-checkbox
+            ref="menu"
+            node-key="id"
+            :check-strictly="!form.menuCheckStrictly"
+            empty-text="加载中,请稍候"
+            :props="defaultProps"
+          ></el-tree>
         </el-form-item>
         <el-form-item label="备注">
-          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+          <el-input
+            v-model="form.remark"
+            type="textarea"
+            placeholder="请输入内容"
+          ></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -130,7 +295,12 @@
     </el-dialog>
 
     <!-- 分配角色数据权限对话框 -->
-    <el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body>
+    <el-dialog
+      :title="title"
+      :visible.sync="openDataScope"
+      width="500px"
+      append-to-body
+    >
       <el-form :model="form" label-width="80px">
         <el-form-item label="角色名称">
           <el-input v-model="form.roleName" :disabled="true" />
@@ -140,17 +310,43 @@
         </el-form-item>
         <el-form-item label="权限范围">
           <el-select v-model="form.dataScope" @change="dataScopeSelectChange">
-            <el-option v-for="item in dataScopeOptions" :key="item.value" :label="item.label"
-              :value="item.value"></el-option>
+            <el-option
+              v-for="item in dataScopeOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="数据权限" v-show="form.dataScope == 2">
-          <el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
-          <el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
-          <el-checkbox v-model="form.deptCheckStrictly"
-            @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>
-          <el-tree class="tree-border" :data="deptOptions" show-checkbox default-expand-all ref="dept" node-key="id"
-            :check-strictly="!form.deptCheckStrictly" empty-text="加载中,请稍候" :props="defaultProps"></el-tree>
+          <el-checkbox
+            v-model="deptExpand"
+            @change="handleCheckedTreeExpand($event, 'dept')"
+            >展开/折叠</el-checkbox
+          >
+          <el-checkbox
+            v-model="deptNodeAll"
+            @change="handleCheckedTreeNodeAll($event, 'dept')"
+            >全选/全不选</el-checkbox
+          >
+          <el-checkbox
+            v-model="form.deptCheckStrictly"
+            @change="handleCheckedTreeConnect($event, 'dept')"
+            >父子联动</el-checkbox
+          >
+
+          <el-tree
+            class="tree-border"
+            :data="deptOptions"
+            show-checkbox
+            default-expand-all
+            ref="dept"
+            node-key="id"
+            :check-strictly="!form.deptCheckStrictly"
+            empty-text="加载中,请稍候"
+            :props="defaultProps"
+          ></el-tree>
+          
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -162,13 +358,27 @@
 </template>
 
 <script>
-import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus } from "@/api/system/role";
-import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";
-import { treeselect as deptTreeselect, roleDeptTreeselect } from "@/api/system/dept";
+import {
+  treeselect as deptTreeselect,
+  roleDeptTreeselect,
+} from "@/api/system/dept";
+import {
+  treeselect as menuTreeselect,
+  roleMenuTreeselect,
+} from "@/api/system/menu";
+import {
+  addRole,
+  changeRoleStatus,
+  dataScope,
+  delRole,
+  getRole,
+  listRole,
+  updateRole,
+} from "@/api/system/role";
 
 export default {
   name: "Role",
-  dicts: ['sys_normal_disable'],
+  dicts: ["sys_normal_disable"],
   data() {
     return {
       // 遮罩层
@@ -201,24 +411,24 @@ export default {
       dataScopeOptions: [
         {
           value: "1",
-          label: "全部数据权限"
+          label: "全部数据权限",
         },
         {
           value: "2",
-          label: "自定数据权限"
+          label: "自定数据权限",
         },
         {
           value: "3",
-          label: "本部门数据权限"
+          label: "本部门数据权限",
         },
         {
           value: "4",
-          label: "本部门及以下数据权限"
+          label: "本部门及以下数据权限",
         },
         {
           value: "5",
-          label: "仅本人数据权限"
-        }
+          label: "仅本人数据权限",
+        },
       ],
       // 菜单列表
       menuOptions: [],
@@ -230,26 +440,26 @@ export default {
         pageSize: 10,
         roleName: undefined,
         roleKey: undefined,
-        status: undefined
+        status: undefined,
       },
       // 表单参数
       form: {},
       defaultProps: {
         children: "children",
-        label: "label"
+        label: "label",
       },
       // 表单校验
       rules: {
         roleName: [
-          { required: true, message: "角色名称不能为空", trigger: "blur" }
+          { required: true, message: "角色名称不能为空", trigger: "blur" },
         ],
         roleKey: [
-          { required: true, message: "权限字符不能为空", trigger: "blur" }
+          { required: true, message: "权限字符不能为空", trigger: "blur" },
         ],
         roleSort: [
-          { required: true, message: "角色顺序不能为空", trigger: "blur" }
-        ]
-      }
+          { required: true, message: "角色顺序不能为空", trigger: "blur" },
+        ],
+      },
     };
   },
   created() {
@@ -259,22 +469,23 @@ export default {
     /** 查询角色列表 */
     getList() {
       this.loading = true;
-      listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-        this.roleList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      }
+      listRole(this.addDateRange(this.queryParams, this.dateRange)).then(
+        (response) => {
+          this.roleList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
       );
     },
     /** 查询菜单树结构 */
     getMenuTreeselect() {
-      menuTreeselect().then(response => {
+      menuTreeselect().then((response) => {
         this.menuOptions = response.data;
       });
     },
     /** 查询部门树结构 */
     getDeptTreeselect() {
-      deptTreeselect().then(response => {
+      deptTreeselect().then((response) => {
         this.deptOptions = response.data;
       });
     },
@@ -298,14 +509,14 @@ export default {
     },
     /** 根据角色ID查询菜单树结构 */
     getRoleMenuTreeselect(roleId) {
-      return roleMenuTreeselect(roleId).then(response => {
+      return roleMenuTreeselect(roleId).then((response) => {
         this.menuOptions = response.menus;
         return response;
       });
     },
     /** 根据角色ID查询部门树结构 */
     getRoleDeptTreeselect(roleId) {
-      return roleDeptTreeselect(roleId).then(response => {
+      return roleDeptTreeselect(roleId).then((response) => {
         this.deptOptions = response.depts;
         return response;
       });
@@ -313,13 +524,17 @@ export default {
     // 角色状态修改
     handleStatusChange(row) {
       let text = row.status === "0" ? "启用" : "停用";
-      this.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function () {
-        return changeRoleStatus(row.roleId, row.status);
-      }).then(() => {
-        this.$modal.msgSuccess(text + "成功");
-      }).catch(function () {
-        row.status = row.status === "0" ? "1" : "0";
-      });
+      this.$modal
+        .confirm('确认要"' + text + '""' + row.roleName + '"角色吗?')
+        .then(function () {
+          return changeRoleStatus(row.roleId, row.status);
+        })
+        .then(() => {
+          this.$modal.msgSuccess(text + "成功");
+        })
+        .catch(function () {
+          row.status = row.status === "0" ? "1" : "0";
+        });
     },
     // 取消按钮
     cancel() {
@@ -336,11 +551,11 @@ export default {
       if (this.$refs.menu != undefined) {
         this.$refs.menu.setCheckedKeys([]);
       }
-      this.menuExpand = false,
-        this.menuNodeAll = false,
-        this.deptExpand = true,
-        this.deptNodeAll = false,
-        this.form = {
+      (this.menuExpand = false),
+        (this.menuNodeAll = false),
+        (this.deptExpand = true),
+        (this.deptNodeAll = false),
+        (this.form = {
           roleId: undefined,
           roleName: undefined,
           roleKey: undefined,
@@ -350,8 +565,8 @@ export default {
           deptIds: [],
           menuCheckStrictly: true,
           deptCheckStrictly: true,
-          remark: undefined
-        };
+          remark: undefined,
+        });
       this.resetForm("form");
     },
     /** 搜索按钮操作 */
@@ -367,9 +582,9 @@ export default {
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.roleId)
-      this.single = selection.length != 1
-      this.multiple = !selection.length
+      this.ids = selection.map((item) => item.roleId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
     },
     // 更多操作触发
     handleCommand(command, row) {
@@ -386,12 +601,12 @@ export default {
     },
     // 树权限(展开/折叠)
     handleCheckedTreeExpand(value, type) {
-      if (type == 'menu') {
+      if (type == "menu") {
         let treeList = this.menuOptions;
         for (let i = 0; i < treeList.length; i++) {
           this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
         }
-      } else if (type == 'dept') {
+      } else if (type == "dept") {
         let treeList = this.deptOptions;
         for (let i = 0; i < treeList.length; i++) {
           this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
@@ -400,17 +615,17 @@ export default {
     },
     // 树权限(全选/全不选)
     handleCheckedTreeNodeAll(value, type) {
-      if (type == 'menu') {
+      if (type == "menu") {
         this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);
-      } else if (type == 'dept') {
+      } else if (type == "dept") {
         this.$refs.dept.setCheckedNodes(value ? this.deptOptions : []);
       }
     },
     // 树权限(父子联动)
     handleCheckedTreeConnect(value, type) {
-      if (type == 'menu') {
+      if (type == "menu") {
         this.form.menuCheckStrictly = value ? true : false;
-      } else if (type == 'dept') {
+      } else if (type == "dept") {
         this.form.deptCheckStrictly = value ? true : false;
       }
     },
@@ -424,19 +639,19 @@ export default {
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
-      const roleId = row.roleId || this.ids
+      const roleId = row.roleId || this.ids;
       const roleMenu = this.getRoleMenuTreeselect(roleId);
-      getRole(roleId).then(response => {
+      getRole(roleId).then((response) => {
         this.form = response.data;
         this.open = true;
         this.$nextTick(() => {
-          roleMenu.then(res => {
-            let checkedKeys = res.checkedKeys
+          roleMenu.then((res) => {
+            let checkedKeys = res.checkedKeys;
             checkedKeys.forEach((v) => {
               this.$nextTick(() => {
                 this.$refs.menu.setChecked(v, true, false);
-              })
-            })
+              });
+            });
           });
         });
         this.title = "修改角色";
@@ -444,7 +659,7 @@ export default {
     },
     /** 选择角色权限范围触发 */
     dataScopeSelectChange(value) {
-      if (value !== '2') {
+      if (value !== "2") {
         this.$refs.dept.setCheckedKeys([]);
       }
     },
@@ -452,11 +667,11 @@ export default {
     handleDataScope(row) {
       this.reset();
       const roleDeptTreeselect = this.getRoleDeptTreeselect(row.roleId);
-      getRole(row.roleId).then(response => {
+      getRole(row.roleId).then((response) => {
         this.form = response.data;
         this.openDataScope = true;
         this.$nextTick(() => {
-          roleDeptTreeselect.then(res => {
+          roleDeptTreeselect.then((res) => {
             this.$refs.dept.setCheckedKeys(res.checkedKeys);
           });
         });
@@ -470,18 +685,18 @@ export default {
     },
     /** 提交按钮 */
     submitForm: function () {
-      this.$refs["form"].validate(valid => {
+      this.$refs["form"].validate((valid) => {
         if (valid) {
           if (this.form.roleId != undefined) {
             this.form.menuIds = this.getMenuAllCheckedKeys();
-            updateRole(this.form).then(response => {
+            updateRole(this.form).then((response) => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             this.form.menuIds = this.getMenuAllCheckedKeys();
-            addRole(this.form).then(response => {
+            addRole(this.form).then((response) => {
               this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
@@ -494,7 +709,7 @@ export default {
     submitDataScope: function () {
       if (this.form.roleId != undefined) {
         this.form.deptIds = this.getDeptAllCheckedKeys();
-        dataScope(this.form).then(response => {
+        dataScope(this.form).then((response) => {
           this.$modal.msgSuccess("修改成功");
           this.openDataScope = false;
           this.getList();
@@ -504,19 +719,27 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const roleIds = row.roleId || this.ids;
-      this.$modal.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?').then(function () {
-        return delRole(roleIds);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("删除成功");
-      }).catch(() => { });
+      this.$modal
+        .confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?')
+        .then(function () {
+          return delRole(roleIds);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
     },
     /** 导出按钮操作 */
     handleExport() {
-      this.download('system/role/export', {
-        ...this.queryParams
-      }, `role_${new Date().getTime()}.xlsx`)
-    }
-  }
+      this.download(
+        "system/role/export",
+        {
+          ...this.queryParams,
+        },
+        `role_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
 };
 </script>