后端管理系统

自作多情 提交于 2020-12-08 08:30:55

后端管理系统网址:https://irdms-dev.bozhon.com/

技术栈:vue+element

首页/用户权限/用户列表code

    <template>
      <div class="app-container">
        <div class="filter-container">
          <el-form>
            <el-form-item>
              <el-button type="primary" icon="plus" v-if="hasPerm('user:add')" @click="showCreate">添加用户
              </el-button>
            </el-form-item>
          </el-form>
        </div>
        <el-table :data="list" v-loading.body="listLoading" element-loading-text="拼命加载中" border fit
                  highlight-current-row>
          <el-table-column align="center" label="序号" width="80">
            <template slot-scope="scope">
              <span v-text="getIndex(scope.$index)"> </span>
            </template>
          </el-table-column>
          <el-table-column align="center" label="昵称" prop="nickname" style="width: 60px;"></el-table-column>
          <el-table-column align="center" label="用户名" prop="username" style="width: 60px;"></el-table-column>
          <el-table-column align="center" label="角色" width="100">
            <template slot-scope="scope">
              <el-tag type="success" v-text="scope.row.roleName" v-if="scope.row.roleId===1"></el-tag>
              <el-tag type="primary" v-text="scope.row.roleName" v-else></el-tag>
            </template>
          </el-table-column>
          <el-table-column align="center" label="创建时间" prop="createTime" width="170"></el-table-column>
          <el-table-column align="center" label="最近修改时间" prop="updateTime" width="170"></el-table-column>
          <el-table-column align="center" label="管理" width="220" v-if="hasPerm('user:update')">
            <template slot-scope="scope">
              <el-button type="primary" icon="edit" @click="showUpdate(scope.$index)">修改</el-button>
              <el-button type="danger" icon="delete" v-if="scope.row.userId!=userId "
                         @click="removeUser(scope.$index)">删除
              </el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="listQuery.pageNum"
          :page-size="listQuery.pageRow"
          :total="totalCount"
          :page-sizes="[10, 20, 50, 100]"
          layout="total, sizes, prev, pager, next, jumper">
        </el-pagination>
        <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
          <el-form class="small-space" :model="tempUser" label-position="left" label-width="80px"
                   style='width: 300px; margin-left:50px;'>
            <el-form-item label="用户名" required v-if="dialogStatus=='create'">
              <el-input type="text" v-model="tempUser.username">
              </el-input>
            </el-form-item>
            <el-form-item label="密码" v-if="dialogStatus=='create'" required>
              <el-input type="password" v-model="tempUser.password">
              </el-input>
            </el-form-item>
            <el-form-item label="新密码" v-else>
              <el-input type="password" v-model="tempUser.password" placeholder="不填则表示不修改">
              </el-input>
            </el-form-item>
            <el-form-item label="角色" required>
              <el-select v-model="tempUser.roleId" placeholder="请选择">
                <el-option
                  v-for="item in roles"
                  :key="item.roleId"
                  :label="item.roleName"
                  :value="item.roleId">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="昵称" required>
              <el-input type="text" v-model="tempUser.nickname">
              </el-input>
            </el-form-item>
          </el-form>
          <div slot="footer" class="dialog-footer">
            <el-button @click="dialogFormVisible = false">取 消</el-button>
            <el-button v-if="dialogStatus=='create'" type="success" @click="createUser">创 建</el-button>
            <el-button type="primary" v-else @click="updateUser">修 改</el-button>
          </div>
        </el-dialog>
      </div>
    </template>
    <script>
      import {mapGetters} from 'vuex'
    
      export default {
        data() {
          return {
            totalCount: 0, //分页组件--数据总条数
            list: [],//表格的数据
            listLoading: false,//数据加载等待动画
            listQuery: {
              pageNum: 1,//页码
              pageRow: 50,//每页条数
            },
            roles: [],//角色列表
            dialogStatus: 'create',
            dialogFormVisible: false,
            textMap: {
              update: '编辑',
              create: '新建用户'
            },
            tempUser: {
              username: '',
              password: '',
              nickname: '',
              roleId: '',
              userId: ''
            }
          }
        },
        created() {
          this.getList();
          if (this.hasPerm('user:add') || this.hasPerm('user:update')) {
            this.getAllRoles();
          }
        },
        computed: {
          ...mapGetters([
            'userId'
          ])
        },
        methods: {
          getAllRoles() {
            this.api({
              url: "/web/sysUser/getAllRoles",
              method: "get"
            }).then(data => {
              this.roles = data.list;
            })
          },
          getList() {
            //查询列表
            this.listLoading = true;
            this.api({
              url: "/web/sysUser/list",
              method: "get",
              params: this.listQuery
            }).then(data => {
              this.listLoading = false;
              this.list = data.list;
              this.totalCount = data.totalCount;
            })
          },
          handleSizeChange(val) {
            //改变每页数量
            this.listQuery.pageRow = val
            this.handleFilter();
          },
          handleCurrentChange(val) {
            //改变页码
            this.listQuery.pageNum = val
            this.getList();
          },
          handleFilter() {
            //查询事件
            this.listQuery.pageNum = 1
            this.getList()
          },
          getIndex($index) {
            //表格序号
            return (this.listQuery.pageNum - 1) * this.listQuery.pageRow + $index + 1
          },
          showCreate() {
            //显示新增对话框
            this.tempUser.username = "";
            this.tempUser.password = "";
            this.tempUser.nickname = "";
            this.tempUser.roleId = "";
            this.tempUser.userId = "";
            this.dialogStatus = "create"
            this.dialogFormVisible = true
          },
          showUpdate($index) {
            let user = this.list[$index];
            this.tempUser = user;
            this.tempUser.deleteStatus = '1';
            this.tempUser.password = '';
            this.dialogStatus = "update"
            this.dialogFormVisible = true
          },
          createUser() {
            //添加新用户
            this.api({
              url: "/web/sysUser/addUser",
              method: "post",
              data: this.tempUser
            }).then(() => {
              this.getList();
              this.dialogFormVisible = false
            })
          },
          updateUser() {
            //修改用户信息
            let _vue = this;
            this.api({
              url: "/web/sysUser/updateUser",
              method: "post",
              data: this.tempUser
            }).then(() => {
              let msg = "修改成功";
              this.dialogFormVisible = false
              if (this.userId === this.tempUser.userId) {
                msg = '修改成功,部分信息重新登录后生效'
              }
              this.$message({
                message: msg,
                type: 'success',
                duration: 1 * 1000,
                onClose: () => {
                  _vue.getList();
                }
              })
            })
          },
          removeUser($index) {
            let _vue = this;
            this.$confirm('确定删除此用户?', '提示', {
              confirmButtonText: '确定',
              showCancelButton: false,
              type: 'warning'
            }).then(() => {
              let user = _vue.list[$index];
              user.deleteStatus = '2';
              _vue.api({
                url: "/web/sysUser/removeUser",
                method: "post",
                data: user
              }).then(() => {
                _vue.getList()
              }).catch(() => {
                _vue.$message.error("删除失败")
              })
            })
          },
        }
      }
    </script>
    

    首页/用户权限/权限管理 code

       

      <template>
        <div class="app-container">
          <div class="filter-container">
            <el-form>
              <el-form-item>
                <el-button type="success" icon="plus" v-if="hasPerm('user:add')" @click="showCreate">添加角色
                </el-button>
              </el-form-item>
            </el-form>
          </div>
          <el-table :data="list" v-loading.body="listLoading" element-loading-text="拼命加载中" border fit
                    highlight-current-row>
            <el-table-column align="center" label="序号" width="80">
              <template slot-scope="scope">
                <span v-text="getIndex(scope.$index)"> </span>
              </template>
            </el-table-column>
            <el-table-column align="center" label="角色" prop="roleName" width="150"></el-table-column>
            <el-table-column align="center" label="用户">
              <template slot-scope="scope">
                <div v-for="user in scope.row.users" :key="user">
                  <div v-text="user.nickname" style="display: inline-block;vertical-align: middle;"></div>
                </div>
              </template>
            </el-table-column>
            <el-table-column align="center" label="菜单&权限" width="420">
              <template slot-scope="scope">
                <!-- <el-tag v-if="scope.row.roleName==adminName" type="success">全部</el-tag>
                <div v-else>
                  <div v-for="menu in scope.row.menus" style="text-align: left">
                    <span style="width: 100px;display: inline-block;text-align: right ">{{menu.menuName}}</span>
                    <el-tag v-for="perm in menu.permissions" :key="perm.permissionName" v-text="perm.permissionName"
                            style="margin-right: 3px;"
                            type="primary"></el-tag>
                  </div>
                </div> -->
                <div>
                  <div v-for="menu in scope.row.menus" :key="menu" style="text-align: left">
                    <span style="width: 100px;display: inline-block;text-align: right ">{{menu.menuName}}</span>
                    <el-tag v-for="perm in menu.permissions" :key="perm.permissionName" v-text="perm.permissionName"
                            style="margin-right: 3px;"
                            type="primary"></el-tag>
                  </div>
                </div>
              </template>
            </el-table-column>
            <el-table-column align="center" label="管理" width="220" v-if="hasPerm('role:update') ||hasPerm('role:delete') ">
              <template slot-scope="scope">
                <!-- <div v-if="scope.row.roleName!='管理员'"> -->
                <div>
                  <el-button type="primary" icon="edit" @click="showUpdate(scope.$index)" v-if="hasPerm('role:update')">修改
                  </el-button>
                  <el-button v-if=" scope.row.users && scope.row.users.length===0 && hasPerm('role:delete')" type="danger"
                             icon="delete"
                             @click="removeRole(scope.$index)">
                    删除
                  </el-button>
                </div>
              </template>
            </el-table-column>
          </el-table>
          <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
            <el-form class="small-space" :model="tempRole" label-position="left" label-width="100px"
                     style='width: 500px; margin-left:50px;'>
              <el-form-item label="角色名称" required>
                <el-input type="text" v-model="tempRole.roleName" style="width: 250px;">
                </el-input>
              </el-form-item>
              <el-form-item label="菜单&权限" required>
                <div v-for=" (menu,_index) in allPermission" :key="menu.menuName">
                  <span style="width: 100px;display: inline-block;">
                    <el-button :type="isMenuNone(_index)?'':(isMenuAll(_index)?'success':'primary')" size="mini"
                               style="width:80px;"
                               @click="checkAll(_index)">{{menu.menuName}}</el-button>
                  </span>
                  <div style="display: inline-block;margin-left:20px;">
                    <el-checkbox-group v-model="tempRole.permissions">
                      <el-checkbox v-for="perm in menu.permissions" :label="perm.id" @change="checkRequired(perm,_index)"
                                   :key="perm.id">
                        <span :class="{requiredPerm:perm.requiredPerm===1}">{{perm.permissionName}}</span>
                      </el-checkbox>
                    </el-checkbox-group>
                  </div>
                </div>
                <p style="color:#848484;">说明:红色权限为对应菜单内的必选权限</p>
              </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer">
              <el-button @click="dialogFormVisible = false">取 消</el-button>
              <el-button v-if="dialogStatus=='create'" type="success" @click="createRole">创 建</el-button>
              <el-button type="primary" v-else @click="updateRole">修 改</el-button>
            </div>
          </el-dialog>
        </div>
      </template>
      <script>
        export default {
          data() {
            return {
              list: [],//表格的数据
              allPermission: [],
              listLoading: false,//数据加载等待动画
              dialogStatus: 'create',
              dialogFormVisible: false,
              textMap: {
                update: '编辑',
                create: '新建角色'
              },
              tempRole: {
                roleName: '',
                roleId: '',
                permissions: [],
              },
              adminName: '管理员'
            }
          },
          created() {
            this.getList();
            this.getAllPermisson();
          },
          methods: {
            getAllPermisson() {
              //查询所有权限
              this.api({
                url: "/web/sysUser/listAllPermission",
                method: "get"
              }).then(data => {
                this.allPermission = data.list;
              })
            },
            getList() {
              //查询列表
              this.listLoading = true;
              this.api({
                url: "/web/sysUser/listRole",
                method: "get"
              }).then(data => {
                this.listLoading = false;
                this.list = data.list;
              })
            },
            getIndex($index) {
              //表格序号
              return $index + 1
            },
            showCreate() {
              //显示新增对话框
              this.tempRole.roleName = '';
              this.tempRole.roleId = '';
              this.tempRole.permissions = [];
              this.dialogStatus = "create"
              this.dialogFormVisible = true
            },
            showUpdate($index) {
              let role = this.list[$index];
              this.tempRole.roleName = role.roleName;
              this.tempRole.roleId = role.roleId;
              this.tempRole.permissions = [];
              for (let i = 0; i < role.menus.length; i++) {
                let perm = role.menus[i].permissions;
                for (let j = 0; j < perm.length; j++) {
                  this.tempRole.permissions.push(perm[j].permissionId);
                }
              }
              this.dialogStatus = "update"
              this.dialogFormVisible = true
            },
            createRole() {
              if (!this.checkRoleNameUnique()) {
                return;
              }
              if (!this.checkPermissionNum()) {
                return;
              }
              //添加新角色
              this.api({
                url: "/web/sysUser/addRole",
                method: "post",
                data: this.tempRole
              }).then(() => {
                this.getList();
                this.dialogFormVisible = false
              })
            },
            updateRole() {
              if (!this.checkRoleNameUnique(this.tempRole.roleId)) {
                return;
              }
              if (!this.checkPermissionNum()) {
                return;
              }
              //修改角色
              this.api({
                url: "/web/sysUser/updateRole",
                method: "post",
                data: this.tempRole
              }).then(() => {
                this.getList();
                this.dialogFormVisible = false
              })
            },
            checkPermissionNum() {
              //校验至少有一种权限
              if (this.tempRole.permissions.length === 0) {
                this.$message.error("请至少选择一种权限");
                return false;
              }
              return true;
            },
            checkRoleNameUnique(roleId) {
              //校验名称重复
              let roleName = this.tempRole.roleName;
              if (!roleName) {
                this.$message.error("请填写角色名称");
                return false;
              }
              let roles = this.list;
              let result = true;
              for (let j = 0; j < roles.length; j++) {
                if (roles[j].roleName === roleName && (!roleId || roles[j].roleId !== roleId  )) {
                  this.$message.error("角色名称已存在");
                  result = false;
                  break;
                }
              }
              return result;
            },
            removeRole($index) {
              let _vue = this;
              this.$confirm('确定删除此角色?', '提示', {
                confirmButtonText: '确定',
                showCancelButton: false,
                type: 'warning'
              }).then(() => {
                let role = _vue.list[$index];
                _vue.api({
                  url: "/web/sysUser/deleteRole",
                  method: "post",
                  data: {
                    roleId: role.roleId
                  }
                }).then(() => {
                  _vue.getList()
                }).catch(e => {
                })
              })
            },
            isMenuNone(_index) {
              //判断本级菜单内的权限是否一个都没选
              let menu = this.allPermission[_index].permissions;
              let result = true;
              for (let j = 0; j < menu.length; j++) {
                if (this.tempRole.permissions.indexOf(menu[j].id) > -1) {
                  result = false;
                  break;
                }
              }
              return result;
            },
            isMenuAll(_index) {
              //判断本级菜单内的权限是否全选了
              let menu = this.allPermission[_index].permissions;
              let result = true;
              for (let j = 0; j < menu.length; j++) {
                if (this.tempRole.permissions.indexOf(menu[j].id) < 0) {
                  result = false;
                  break;
                }
              }
              return result;
            },
            checkAll(_index) {
              //点击菜单   相当于全选按钮
              let v = this;
              if (v.isMenuAll(_index)) {
                //如果已经全选了,则全部取消
                v.noPerm(_index);
              } else {
                //如果尚未全选,则全选
                v.allPerm(_index);
              }
            },
            allPerm(_index) {
              //全部选中
              let menu = this.allPermission[_index].permissions;
              for (let j = 0; j < menu.length; j++) {
                this.addUnique(menu[j].id, this.tempRole.permissions)
              }
            },
            noPerm(_index) {
              //全部取消选中
              let menu = this.allPermission[_index].permissions;
              for (let j = 0; j < menu.length; j++) {
                let idIndex = this.tempRole.permissions.indexOf(menu[j].id);
                if (idIndex > -1) {
                  this.tempRole.permissions.splice(idIndex, 1);
                }
              }
            },
            addUnique(val, arr) {
              //数组内防重复地添加元素
              let _index = arr.indexOf(val);
              if (_index < 0) {
                arr.push(val);
              }
            },
            checkRequired(_perm, _index) {
              //本方法会在勾选状态改变之后触发
              let permId = _perm.id;
              if (this.tempRole.permissions.indexOf(permId) > -1) {
                //选中事件
                //如果之前未勾选本权限,现在勾选完之后,tempRole里就会包含本id
                //那么就要将必选的权限勾上
                this.makeReuqiredPermissionChecked(_index);
              } else {
                //取消选中事件
                if (_perm.requiredPerm === 1) {
                  //如果是必勾权限,就把本菜单的权限全部移出
                  //(其实也可以提示用户本权限是菜单里的必选,请先取消勾选另外几个权限,交互太麻烦,此处就直接全部取消选中了)
                  this.noPerm(_index);
                }
              }
            },
            makeReuqiredPermissionChecked(_index) {
              //将本菜单必选的权限勾上
              let menu = this.allPermission[_index].permissions;
              for (let j = 0; j < menu.length; j++) {
                let perm = menu[j];
                if (perm.requiredPerm === 1) {
                  //找到本菜单的必选权限,将其勾上
                  this.addUnique(perm.id, this.tempRole.permissions)
                }
              }
            }
          }
        }
      </script>
      <style scoped>
        .requiredPerm {
          color: #ff0e13;
        }
      </style>
      

      首页/用户权限/菜单管理code

      <template>
        <div class="app-container">
          <div class="filter-container">
            <el-form>
              <el-form-item>
                <el-button type="primary" icon="plus" @click="showCreate">添加菜单
                </el-button>
              </el-form-item>
            </el-form>
          </div>
          <el-table :data="list" v-loading.body="listLoading" element-loading-text="拼命加载中" border fit
                    highlight-current-row>
            <el-table-column align="center" label="序号" width="80">
              <template slot-scope="scope">
                <span v-text="getIndex(scope.$index)"> </span>
              </template>
            </el-table-column>
            <el-table-column align="center" label="菜单编号" prop="menuCode" style="width: 60px;"></el-table-column>
            <el-table-column align="center" label="菜单名称" prop="menuName" style="width: 60px;"></el-table-column>
            <el-table-column align="center" label="机能编号" prop="permissionCode" width="170"></el-table-column>
            <el-table-column align="center" label="机能名称" prop="permissionName" width="170"></el-table-column>
            <el-table-column align="center" label="操作" width="220" >
              <template slot-scope="scope">
                <!-- <el-button type="primary" icon="edit" @click="showUpdate(scope.$index)">修改</el-button>  -->
                <el-button type="danger" icon="delete" 
                           @click="removeMenu(scope.$index)">删除
                </el-button>
              </template>
            </el-table-column> 
          </el-table>
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="listQuery.pageNum"
            :page-size="listQuery.pageSize"
            :total="totalCount"
            :page-sizes="[10, 20, 50, 100]"
            layout="total, sizes, prev, pager, next, jumper">
          </el-pagination>
          <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
            <el-form class="small-space" :model="menu" label-position="left" label-width="80px"
                     style='width: 300px; margin-left:50px;'>
              <el-form-item label="菜单编号" required v-if="dialogStatus=='create'">
                <el-input type="text" v-model="menu.menuCode">
                </el-input>
              </el-form-item>
              <el-form-item label="菜单名称" v-if="dialogStatus=='create'" required>
                <el-input type="text" v-model="menu.menuName">
                </el-input>
              </el-form-item>
              <el-form-item label=权限编号  v-if="dialogStatus=='create'" required>
                <el-input type="text" v-model="menu.permissionCode">
                </el-input>
              </el-form-item>
              <el-form-item label="权限名称" required>
                <el-input type="text" v-model="menu.permissionName">
                </el-input>
              </el-form-item>
              <el-form-item label="是否必须" required>
                <el-select v-model="menu.requiredPermission" placeholder="请选择">
                  <el-option
                    v-for="item in requireType"
                    :key="item.id"
                    :label="item.text"
                    :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer">
              <el-button @click="dialogFormVisible = false">取 消</el-button>
              <el-button v-if="dialogStatus=='create'" type="success" @click="createMenu">创 建</el-button>
              <el-button type="primary" v-else @click="updateUser">修 改</el-button>
            </div>
          </el-dialog>
        </div>
      </template>
      <script>
        import {mapGetters} from 'vuex'
      
        export default {
          data() {
            return {
              totalCount: 0, //分页组件--数据总条数
              list: [],//表格的数据
              listLoading: false,//数据加载等待动画
              listQuery: {
                pageNum: 1,//页码
                pageSize: 20,//每页条数
              },
              requireType: [
                { id : 1,text: '是' },
                { id : 2,text: '否' }
                ],//是否本菜单必选权限, 1.必选 2非必选 通常是"列表"权限是必选
              dialogStatus: 'create',
              dialogFormVisible: false,
              textMap: {
                update: '编辑',
                create: '新建菜单'
              },
              menu: {
                menuCode: '',
                menuName: '',
                permissionCode: '',
                permissionName: '',
                requiredPermission: ''
              }
            }
          },
          created() {
            this.getList();
          },
          computed: {
            ...mapGetters([
              'userId'
            ])
          },
          methods: {
            getList() {
              //查询列表
              this.listLoading = true;
              this.request({
                url: "/sysPermission/listPermission",
                method: "post",
                params: this.listQuery
              }).then(data => {
                this.listLoading = false;
                this.list = data.data.list;
                this.totalCount = data.data.total;
      
              })
            },
            handleSizeChange(val) {
              debugger
              //改变每页数量
              this.listQuery.pageSize = val
              this.handleFilter();
            },
            handleCurrentChange(val) {
              //改变页码
              this.listQuery.pageNum = val
              this.getList();
            },
            handleFilter() {
              //查询事件
              this.listQuery.pageNum = 1
              this.getList()
            },
            getIndex($index) {
              //表格序号
              return (this.listQuery.pageNum - 1) * this.listQuery.pageSize + $index + 1
            },
            showCreate() {
              //显示新增对话框
              this.menu.menuCode = "";
              this.menu.menuName = "";
              this.menu.permissionCode = "";
              this.menu.permissionName = "";
              this.menu.requiredPermission = "";
              this.dialogStatus = "create"
              this.dialogFormVisible = true
            },
            showUpdate($index) {
              let menu = this.list[$index];
              this.menu = menu;
              this.menu.deleteStatus = '1';
              this.menu.menuCode = '';
              this.dialogStatus = "update"
              this.dialogFormVisible = true
            },
            createMenu() {
              //添加新菜单
              this.request({
                url: "/sysPermission/addPermission",
                method: "post",
                data: this.menu
              }).then(() => {
                this.getList();
                this.dialogFormVisible = false
              })
            },
            updateUser() {
              //修改用户信息
              let _vue = this;
              this.api({
                url: "/sysUser/updateUser",
                method: "post",
                data: this.tempUser
              }).then(() => {
                let msg = "修改成功";
                this.dialogFormVisible = false
                if (this.userId === this.tempUser.userId) {
                  msg = '修改成功,部分信息重新登录后生效'
                }
                this.$message({
                  message: msg,
                  type: 'success',
                  duration: 1 * 1000,
                  onClose: () => {
                    _vue.getList();
                  }
                })
              })
            },
            /**
             * delete the selected menu 
             */
            removeMenu($index) {
              let _vue = this;
              this.$confirm('确定删除此菜单?', '提示', {
                confirmButtonText: '确定',
                showCancelButton: false,
                type: 'warning'
              }).then(() => {
                let menuObj = _vue.list[$index];
                _vue.menu.deleteStatus = '2';
                _vue.request({
                  url: "/sysPermission/deletePermission",
                  method: "post",
                  params: {id:menuObj.id}
                }).then(() => {
                  _vue.getList()
                }).catch(() => {
                  _vue.$message.error("删除失败")
                })
              })
            },
          }
        }
      </script>
      
        标签
        易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
        该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!