tj
2025-03-20 a35f4b4d0c555493cc464bfd36d037230547f1aa
src/views/system/SecurityList.vue
@@ -9,13 +9,22 @@
            <a-row :gutter="24">
              <a-col :md="6" :sm="24">
                <a-form-item label="关键词" :labelCol="labelCol" :wrapperCol="wrapperCol">
                  <a-input placeholder="请输入关键词查询" v-model="queryParam.name"></a-input>
                  <a-input placeholder="请输入关键词查询" v-model="queryParam.keyword"></a-input>
                </a-form-item>
              </a-col>
              <a-col :md="6" :sm="24">
                <a-form-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol">
                  <a-input placeholder="请输入备注查询" v-model="queryParam.description"></a-input>
                </a-form-item>
                <a-form-item label="防护类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
                    <a-select
                      optionFilterProp="children"
                      :dropdownMatchSelectWidth="false"
                      showSearch allow-clear style="width: 100%"
                      placeholder="请选择防护类型"
                      v-model="queryParam.type">
                      <a-select-option v-for="(type,index) in typeList" :value="type.itemValue" :key="index">
                        {{ type.itemText }}
                      </a-select-option>
                    </a-select>
                  </a-form-item>
              </a-col>
              <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
                <a-col :md="6" :sm="24">
@@ -28,10 +37,10 @@
        </div>
        <!-- 操作按钮区域 -->
        <div class="table-operator"  style="margin-top: 5px">
          <a-button v-if="btnEnableList.indexOf(1)>-1" @click="handleAdd" type="primary" icon="plus">新增</a-button>
          <a-button v-if="btnEnableList.indexOf(1)>-1" @click="batchDel" icon="delete">删除</a-button>
          <a-button v-if="btnEnableList.indexOf(1)>-1" @click="batchSetStatus(true)" icon="check-square">启用</a-button>
          <a-button v-if="btnEnableList.indexOf(1)>-1" @click="batchSetStatus(false)" icon="close-square">禁用</a-button>
          <a-button  @click="handleAdd" type="primary" icon="plus">新增</a-button>
          <a-button  @click="batchDel" icon="delete">删除</a-button>
          <a-button  @click="batchSetStatus(true)" icon="check-square">启用</a-button>
          <a-button  @click="batchSetStatus(false)" icon="close-square">禁用</a-button>
        </div>
        <!-- table区域-begin -->
        <div>
@@ -48,27 +57,26 @@
            :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
            @change="handleTableChange">
            <span slot="action" slot-scope="text, record">
              <a @click="handleSetFunction(record)">分配功能</a>
              <a-divider type="vertical" />
              <a @click="handleSetPushBtn(record.id, record.name)">分配按钮</a>
              <a-divider type="vertical" />
              <a @click="handleEdit(record)">编辑</a>
              <a-divider v-if="btnEnableList.indexOf(1)>-1" type="vertical" />
              <a-popconfirm v-if="btnEnableList.indexOf(1)>-1" title="确定删除吗?" @confirm="() => handleDelete(record.id)">
              <a-divider  type="vertical" />
              <a-popconfirm  title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                <a>删除</a>
              </a-popconfirm>
              <a-modal v-model="roleModalVisible" title="操作提示" @ok="handleRoleTip(record)">
                <p>保存角色已经操作成功!现在继续<b>分配功能</b>吗?</p>
              </a-modal>
            </span>
            <span slot="typeTitle">
            <!-- <span slot="typeTitle">
              防护类型
              <a-tooltip title="1、全部数据-该角色对应的用户可以看到全部单据;2、本机构数据-该角色对应的用户可以看到自己所在机构的全部单据;
                3、个人数据-该角色对应的用户只可以看到自己的单据。单据是指采购入库、销售出库等">
              <a-tooltip title="">
                <a-icon type="question-circle" />
              </a-tooltip>
            </span>
            </span> -->
            <!-- 状态渲染模板 -->
            <template slot="type" slot-scope="type">
              <a-tag color="green">{{ getDictItemLabel(typeList,type) }}</a-tag>
            </template>
            <template slot="customRenderFlag" slot-scope="enabled">
              <a-tag v-if="enabled" color="green">启用</a-tag>
              <a-tag v-if="!enabled" color="orange">禁用</a-tag>
@@ -77,36 +85,34 @@
        </div>
        <!-- table区域-end -->
        <!-- 表单区域 -->
        <role-modal ref="modalForm" @ok="roleModalFormOk"></role-modal>
        <security-modal ref="modalForm" @ok="roleModalFormOk"></security-modal>
        <role-function-modal ref="roleFunctionModal" @ok="roleFunctionModalFormOk"></role-function-modal>
        <role-push-btn-modal ref="rolePushBtnModal" @ok="modalFormOk"></role-push-btn-modal>
        <a-modal v-model="roleFunctionModalVisible" title="操作提示" @ok="handleRoleFunctionTip">
          <p>分配功能已经操作成功!现在继续<b>分配按钮</b>吗?</p>
        </a-modal>
      </a-card>
    </a-col>
  </a-row>
</template>
<!-- f r o m 7 5  2 7 1  8 9 2 0 -->
<script>
  import RoleModal from './modules/RoleModal'
  import SecurityModal from './modules/SecurityModal'
  import RoleFunctionModal from './modules/RoleFunctionModal'
  import RolePushBtnModal from './modules/RolePushBtnModal'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import JDate from '@/components/jeecg/JDate'
  import {getAction,deleteAction,postAction } from '@/api/manage'
  export default {
    name: "RoleList",
    name: "SecurityList",
    mixins:[JeecgListMixin],
    components: {
      RoleModal,
      SecurityModal,
      RoleFunctionModal,
      RolePushBtnModal,
      JDate
    },
    data () {
      return {
        description: '角色管理页面',
        roleModalVisible: false,
        description: '高级安全防护管理页面',
        roleFunctionModalVisible: false,
        currentRoleId: '',
        labelCol: {
@@ -118,8 +124,8 @@
        },
        // 查询条件
        queryParam: {
          name: '',
          description: '',
          keyword: '',
          type: '',
        },
        // 表头
        columns: [
@@ -144,8 +150,9 @@
            title: '关键词', align:"left", dataIndex: 'keyword', width: 120
          },
          {
            align:"left", dataIndex: 'type', width: 100,
            slots: { title: 'typeTitle' }
            title:'   防护类型',align:"left", dataIndex: 'type', width: 100,
            slots: { title: 'typeTitle' },
            scopedSlots: { customRender: 'type' }
          },
          { title: '状态',dataIndex: 'status',width:60,align:"center",
            scopedSlots: { customRender: 'customRenderFlag' }
@@ -157,6 +164,7 @@
          deleteBatch: "/config-security/deleteBatch",
          batchSetStatusUrl: "/config-security/batchSetStatus"
        },
        typeList:[],
      }
    },
    computed: {
@@ -164,11 +172,56 @@
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      }
    },
    mounted(){
      this.loadDictData();
    },
    methods: {
      handleSetFunction(record) {
        this.$refs.roleFunctionModal.edit(record);
        this.$refs.roleFunctionModal.title = "分配功能给:" + record.name + "【分配之后请继续分配按钮】"
        this.$refs.roleFunctionModal.disableSubmit = false;
      searchQuery() {
        this.ipagination.current = 1;
        this.loadData();
      },
      loadData(arg) {
        //加载数据 若传入参数1则加载第一页的内容
        // this.ipagination.current = 1;
        let params = this.queryParam
        params.currentPage = this.ipagination.current;
        params.pageSize = this.ipagination.pageSize;
        this.loading = true;
        getAction(this.url.list, params).then((res) => {
          if (res.code===200) {
            this.dataSource = res.data.rows;
            this.ipagination.total = res.data.total;
            this.tableAddTotalRow(this.columns, this.dataSource)
            this.realityPriceTotal = res.data.realityPriceTotal
          } else if(res.code===510){
            this.$message.warning(res.data)
          } else {
            this.$message.warning(res.data.message)
          }
          this.loading = false;
        })
      },
      loadDictData() {
        // 安全防护类型
        var dictCode='securityType'
        getAction(`/sysDict/items/dict-code/${dictCode}`).then((res)=>{
          if(res.code === 200){
            this.typeList = res.data;
          }else{
            this.$message.info(res.data);
          }
        })
      },
      getDictItemLabel(list, value) {
        const item = list.find(item => item.itemValue === value);
        return item ? item.itemText : null;
      },
      handleSetPushBtn(roleId, roleName) {
        this.$refs.rolePushBtnModal.edit(roleId);
@@ -178,7 +231,6 @@
      roleModalFormOk() {
        //重载列表
        this.loadData()
        this.roleModalVisible = true
      },
      roleFunctionModalFormOk(id) {
        //重载列表
@@ -186,37 +238,84 @@
        this.roleFunctionModalVisible = true
        this.currentRoleId = id
      },
      handleRoleTip(record) {
        if(record) {
          this.roleModalVisible = false
          this.handleSetFunction(record)
        }
      },
      handleRoleFunctionTip() {
        if(this.currentRoleId) {
          this.roleFunctionModalVisible = false
          let roleName = ''
          for (let i = 0; i < this.dataSource.length; i++) {
            if(this.dataSource[i].id == this.currentRoleId) {
              roleName = this.dataSource[i].name
            }
          }
          this.handleSetPushBtn(this.currentRoleId, roleName)
        }
      },
      handleAdd: function () {
        this.$refs.modalForm.add();
        this.$refs.modalForm.title = "新增【保存之后请继续分配功能】";
        this.$refs.modalForm.title = "新增";
        this.$refs.modalForm.disableSubmit = false;
      },
      handleEdit: function (record) {
        console.log("edit", record);
        this.$refs.modalForm.edit(record);
        this.$refs.modalForm.title = "编辑【保存之后请继续分配功能】";
        this.$refs.modalForm.title = "编辑";
        this.$refs.modalForm.disableSubmit = false;
        if(this.btnEnableList.indexOf(1)===-1) {
          this.$refs.modalForm.isReadOnly = true
        }
      }
      },
      handleDelete(id) {
        deleteAction(this.url.delete+`/${id}`, {id: id}).then((res) => {
          if (res.code === 200) {
            this.loadData();
            this.$message.success(res.message);
          } else {
            this.$message.warning(res.message);
          }
        });
      },
      batchDel() {
        if (this.selectedRowKeys.length <= 0) {
          this.$message.warning('请选择一条记录!');
          return;
        }
        let ids = "";
        this.selectedRowKeys.forEach(function(val) {
          ids+=val+",";
        });
        ids = ids.substring(0,ids.length-1);
        deleteAction(this.url.deleteBatch, {ids: ids}).then((res) => {
          if(res.code === 200){
            this.$message.success(res.msg);
            this.loadData();
            this.selectedRowKeys = [];
          } else {
            this.$message.warning(res.msg);
          }
        });
      },
       batchSetStatus: function (status) {
            if(!this.url.batchSetStatusUrl){
              this.$message.error("请设置url.batchSetStatusUrl属性!")
              return
            }
            if (this.selectedRowKeys.length <= 0) {
              this.$message.warning('请选择一条记录!');
              return;
            } else {
              var ids = "";
              for (var a = 0; a < this.selectedRowKeys.length; a++) {
                ids += this.selectedRowKeys[a] + ",";
              }
              var that = this;
              this.$confirm({
                title: "确认操作",
                content: "是否操作选中数据?",
                onOk: function () {
                  that.loading = true;
                  postAction(that.url.batchSetStatusUrl, {status: status, ids: ids}).then((res) => {
                    if(res.code === 200){
                      that.loadData()
                    } else {
                      that.$message.warning(res.data.message);
                    }
                  }).finally(() => {
                    that.loading = false;
                  });
                }
              });
            }
          },
    }
  }
</script>