<select> 左右移动

本文介绍了一个用于机构维护的交互式平台,包括选择、查询、调整和保存功能,适用于机构管理领域的专业人士。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<html>
    <head>
    <style type="text/css">
     p {
          padding-top: 50px;
          padding-left: 1%;
        }
     select{
             width: 390px;
             height:500px;
     }
    </style>

 

<script type="text/javascript">
var instcode="";
var kxurl="";
var dxurl="";
 function distinctAry(ary){
      var data=[];
      for(var i=0;i<ary.length-1;i++){
         var found=false;
         for(var j=i+1;j<ary.length;j++){
             if(ary[i]==ary[j]){
                ary[j]=-1
                found=true
             }}
         if(found)
             ary[i]=-1
      }
      for(var i=0;i<ary.length;i++){
         if(ary[i]!=-1)
            data.push(ary[i])
      }
      return data;
   }

    $(function() {
       $('#p').css({'width':$(document).width(),"background-color": "#F0F0F0",'height':$(document).height() });
       $('#maintain').css({'width':$(document).width(),'height':$(document).height()*0.18 });
       $('.below').css({'height':$(document).height()*0.9 })
    })

    $(function(){
            $('#whinput').combobox({
                url:"wh.jsp?_t=(new Date())+'s'",
                valueField:'INSTCODE',
                textField:'NAME',
                panelWidth:'300px',
                onSelect:function(){
                instcode=$('#whinput').combobox('getValue');
                $.getJSON('drag.jsp',{'type':'kx','instcode':instcode,'_t':(new Date()+'s')},function(data){
                          $("#kcx>option").remove();
                          for(var i=0;i<data.len;i++){
                         $("#kcx").append("<option value='"+data.rows[i].CODE+"'>"+data.rows[i].NAME+"</option>");
                          }
                })
               
                $.getJSON('drag.jsp',{'type':'dx','instcode':instcode,'_t':(new Date()+'s')},function(data){
                          $("#dx>option").remove();
                          for(var i=0;i<data.len;i++){
                         $("#dx").append("<option value='"+data.rows[i].CODE+"'>"+data.rows[i].NAME+"</option>");
                          }
                  })
                }
            });
            $('#whinput').css('width','300');
})
       
function left(){
     var selectedValue = "";
     var selectedText = "";         
     var objSelect = document.all('kcx');
     var len=objSelect.options.length;
     var delmark=new Array();
     for(var i=0;i<len;i++)  
     {
         if(objSelect.options[i].selected==true){
            selectedValue += objSelect.options[i].value+",";
            selectedText += objSelect.options[i].text+",";
            delmark[delmark.length]=i;
         }
     }
     for(var i=0;i<delmark.length;i++){
         objSelect.options.remove(delmark[i]);
        // for(var j=i;j<delmark.length;j++){
        //    delmark[j]=delmark[j]-1;
        // }
     }
     var val=selectedValue.substring(0,selectedValue.length-1).split(",");
     var tex=selectedText.substring(0,selectedText.length-1).split(",");
     if(val==null||val==""){
        return;
     }
     for(var i=0;i<val.length;i++){
        document.all('dx').add(new Option(tex[i],val[i]));
     }
//var value=$("#kcx>option:selected").get(0).value;
//$("#kcx option[value='"+value+"']").remove();   //删除Select中Value='3'的Option
}

function right(){
     var selectedValue = "";
     var selectedText = "";         
     var objSelect = document.all('dx');
     var len=objSelect.options.length;
     var delmark=new Array();
     for(var i=0;i<len;i++)  
     {
         if(objSelect.options[i].selected==true){
            selectedValue += objSelect.options[i].value+",";
            selectedText += objSelect.options[i].text+",";
            delmark[delmark.length]=i;
         }
     }
     for(var i=0;i<delmark.length;i++){
         objSelect.options.remove(delmark[i]);
         for(var j=i;j<delmark.length;j++){
            delmark[j]=delmark[j]-1;
         }
     }
     var val=selectedValue.substring(0,selectedValue.length-1).split(",");
     var tex=selectedText.substring(0,selectedText.length-1).split(",");
     if(val==null||val==""){
        return;
     }
     for(var i=0;i<val.length;i++){
        document.all('kcx').add(new Option(tex[i],val[i]));
     }
}

function save(){
        var str = "";
        var objSelect = document.all('kcx');
        var len=objSelect.options.length;
        alert(len)
        if(len==0)str+=",";
        else{
        for(var i=0;i<len;i++)  
        {
            str += objSelect.options[i].value+",";
        }}
         //  alert(str)
           str=encodeURI(str);
           $.getJSON('alter.jsp',{'instcode':instcode,'str':str,'_t':(new Date())+'s'},function (data){
              if(data.succ1 && data.succ2){
              $.messager.alert('提示','保存成功!');
              }
           })
}

    </script>
    </head>
   
<body>
    <div id="p" class="easyui-panel">
   
      <div id="maintain" class="easyui-panel" align="left">
        <p><a href="#" class="demo" icon="messager-info"></a>
        <label for="whinput" >请选择要维护的机构:</label>
         <input id="whinput" class="easyui-combobox" style="width:300px">
         </p>
      </div>
     
      <div id="source" class="below" style="border:1px solid #ccc;width:400px;height:500px;float:left;margin:5px;overflow: auto">
        <table id="dxtb">
            <tr  height=20 width="400px">     
              <td width="300px" >待查询机构:</td>  
            </tr>
            <tr>
               <td nowrap><select id="dx" MULTIPLE size="24" name="dx"  onChange="" ></select>
               </td>                     
            </tr>
        </table>
       </div>
      
      <div id="123" class="below" style="border:1px solid #ccc;width:100px;height:400px;float:left;margin:5px;">
        <br><br><br><br><br><br><br><br><br><br><br>
        <a href="#" class="easyui-linkbutton" icon="layout-button-left" onclick="left()" align="center">左</a><br><br>
       
        <a href="#" class="easyui-linkbutton" icon="layout-button-right" onclick="right()">右</a><br><br><br><br><br><br>
      
        <a href="#" class="easyui-linkbutton" icon="icon-save" onclick="save()" >保存</a> 
      </div>
     
     <div id="source" class="below" style="border:1px solid #ccc;width:400px;height:400px;float:left;margin:5px;overflow: auto">
        <table id="kctb">
            <tr  height=20 width="400px">     
              <td width="300px" >可查询机构:</td>  
            </tr>
            <tr>
               <td nowrap>
                 <select id="kcx" MULTIPLE size="24" name="kc"  onChange="">
                 </select>
               </td>                     
            </tr>
        </table>
     </div>
     
    </div> 
</body>
</html>

<template> <div class="transfer-container"> <!-- 左侧表格 --> <div class="table-container"> <div class="header-box"> <span>设备列表</span> <span class="checkAll" @click="checkAll">全选</span> </div> <div class="select-box"> <div class="select-item"> <span>{{ $t('主机型号:') }}</span> <a-select v-model="hostModel" @change="changeSelect" :placeholder="$t('请选择主机型号')" allowClear> <a-select-option v-for="item in periodList" :key="item.id" :value="item.itemDesc" :title="item.itemName"> {{ item.itemName }} </a-select-option> </a-select> </div> <div class="select-item"> <span>{{ $t('组织名称:') }}</span> <org-tree-select @treeSelect="orgTreeSelect"></org-tree-select> </div> </div> <!-- 左侧列表 --> <div class="list-container"> <div v-for="item in leftData" :key="item.personId" class="list-item"> <a-checkbox v-model="item.checked" :disabled="item.deviceOnOffLine == 0 || item.configStatus == 1" class="checkbox" ></a-checkbox> <div class="device-box"> <div class="top-info"> <span>{{ item.deviceName }}</span> <span v-show="item.configStatus == 1" @click="openTask(item)"> <hd-icon type="files" /> {{ $t('已配任务') }} </span> </div> <div class="bottom-info"> <span>{{ $t('探测器信息:') }}</span> <span>{{ item.detectorName }} </span> | <span>{{ item.productModel }} </span> | <span>{{ item.detectorUniqueCode }} </span> </div> </div> </div> <a-empty v-show="leftData.length === 0" /> </div> <div v-if="leftData.length" class="pagination"> <a-pagination simple :defaultCurrent="pagination.currentPage" :total="pagination.totalRows" @change="changePage" /> </div> </div> <!-- 中间操作按钮 --> <div class="transfer-actions"> <a-button type="primary" icon="right" :disabled="selectedLeft.length === 0" @click="moveToRight"> </a-button> </div> <!-- 右侧表格 --> <div class="table-container right-content"> <div class="header-box"> <span>{{ $t('已选择列表') + '(' + rightData.length + ')' }}</span> <a-button type="primary" :disabled="rightData.length === 0" @click="clearAll"> 清除 </a-button> </div> <div class="list-container"> <div v-for="item in rightData" :key="item.personId" class="list-item right-list"> <div class="device-box"> <div class="top-info"> <span>{{ item.deviceName }}</span> <div>{{ item.detectorOwnerName }}</div> <span v-show="item.configStatus == 1" @click="openTask(item)"> <hd-icon type="files" /> {{ $t('已配任务') }} </span> </div> <div class="bottom-info"> <span>{{ $t('探测器信息:') }}</span> <span>{{ item.detectorName }} </span> | <span>{{ item.productModel }} </span> | <span>{{ item.detectorUniqueCode }} </span> </div> </div> <img src="@/assets/img/icon-remove.png" @click="moveToLeft(item)" alt="" /> </div> <a-empty v-show="rightData.length === 0" /> </div> </div> <!-- 定时任务已存在 --> <myModal :params="{ title: $t('已配置任务列表'), showFooter: false }" :visible="visible" @cancel="visible = false" destroyOnClose > <template v-slot:header><span></span></template> <template v-slot:body> <div class="table_title"> {{ $t('探测名称') }} </div> <a-table :columns="detailColumns" :scroll="{ x: '100%', y: 400 }" :dataSource="detailData" row-key="id" :pagination="false" > </a-table> </template> </myModal> </div> </template> <script> import factory from '../factory' import myModal from '@/components/scfComponents/modalComponents/modal.vue' import orgTreeSelect from '@/components/orgTreeSelect/orgTreeSelect' export default { components: { myModal, orgTreeSelect }, data() { return { visible: false, // 弹窗 periodList: [], // 主机型号列表 orgData: {}, // 组织树数据 leftData: [], // 左侧表格数据 rightData: [], // 右侧表格数据 pagination: { pageSize: 10, currentPage: 1, totalRows: 0, }, // 分页 // 已配任务列表表头 detailColumns: [ { title: this.$t('日期'), dataIndex: 'date', ellipsis: true, }, { title: this.$t('时间'), dataIndex: 'executeTime', ellipsis: true, }, { title: this.$t('空开操作'), dataIndex: 'operation', ellipsis: true, }, ], // 已配任务列表数据 detailData: [], } }, computed: { // 选中左侧列表 selectedLeft() { return this.leftData.filter(item => item.checked) }, }, mounted() { this.getDic() // 初始化数据 this.leftData = [] this.rightData = [] }, methods: { // 主机型号列表 getDic() { factory.getDic(1080).then(res => { this.periodList = res }) }, // 获取左侧表格数据 getLeftTableData() { let params = { page: this.pagination.currentPage, orgCodes: [this.orgData.orgCode], productModel: this.hostModel, } factory.getBatchDetector(params).then(res => { if (res.success) { this.leftData = res.data.map(item => ({ ...item, checked: false })) || [] // 如果右侧存在数据需要把数据过滤一下 if (this.rightData.length > 0) { let ids = this.rightData.map(item => item.id) this.leftData = this.leftData.filter(item => !ids.includes(item.id)) } } }) }, // 查询已存在空开定时任务 getDetectorJob(record) { factory.getDetectorJob(record.jobId).then(res => { if (res.success) { this.detailData = res.data.map(item => { item.detectorName = record.detectorName || '' item.weekList = this.getActiveWeeks(item.rept) return item }) || [] } }) }, // 主机型号 changeSelect(value) { if (value && Object.keys(this.orgData).length > 0) { this.getLeftTableData() } else { this.leftData = [] } }, getActiveWeeks(rept) { const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'] const pattern = rept.split('') return pattern .map((char, index) => (char == '1' ? weekDays[index] : null)) .filter(Boolean) .join('、') }, // 组织树节点选择 orgTreeSelect(node) { this.orgData = node if (this.hostModel && Object.keys(this.orgData).length > 0) { this.getLeftTableData() } else { this.leftData = [] } }, // 全选 checkAll() { if (this.leftData.length === 0) return this.leftData.forEach(item => { if (item.deviceOnOffLine == 1 && item.configStatus == 0) { item.checked = true } }) }, // 清除 clearAll() { const newLeft = [...this.leftData] this.rightData.forEach(rightItem => { if (!newLeft.some(leftItem => leftItem.id == rightItem.id)) { newLeft.push({ ...rightItem, checked: false }) } }) this.leftData = newLeft this.rightData = [] }, // 向右移动选中项 moveToRight() { this.rightData = [...this.rightData, ...this.selectedLeft] this.leftData = this.leftData.filter(item => !this.selectedLeft.some(i => i.id === item.id)) }, // 向左移动单个项 moveToLeft(item) { this.rightData = this.rightData.filter(i => i.id !== item.id) this.leftData = [...this.leftData, { ...item, checked: false }] }, // 打开已配置任务列表 openTask(record) { this.visible = true this.getDetectorJob(record) }, }, } </script> <style lang="less" scoped> .transfer-container { width: 100%; display: flex; justify-content: space-around; box-sizing: border-box; } .table-container { width: 48%; height: 100%; position: relative; font-family: '微软雅黑'; font-weight: 400; border: 1px solid #ebedef; .header-box { height: 46px; width: 100%; display: flex; align-items: center; padding: 0 16px; border-bottom: 1px solid rgb(229, 231, 234); background: rgb(242, 243, 244); justify-content: space-between; color: rgb(21, 23, 26); font-size: 14px; font-weight: 700; .checkAll { cursor: pointer; color: rgb(41, 141, 255); } } .select-box { display: flex; height: 64px; padding: 0 20px; align-items: center; .select-item { margin-right: 24px; color: rgb(157, 166, 177); > span:first-child { margin-right: 5px; } } } .list-container { padding: 0 20px; height: 392px; overflow-y: scroll; .list-item { height: 74px; display: flex; align-items: center; .device-box { margin-left: 16px; .top-info { display: flex; align-items: center; span { cursor: pointer; color: #298dff; font-size: 14px; } div { height: 24px; border-radius: 2px; font-size: 12px; display: flex; cursor: default; margin-right: 24px; align-items: center; padding: 0 8px; color: rgb(66, 75, 86); background: rgb(236, 238, 240); } span:first-child { color: rgb(21, 23, 26); font-size: 16px; cursor: default; margin-right: 24px; } } .bottom-info { color: rgb(105, 118, 136); font-size: 14px; > span { margin: 0 5px; } } } } } .pagination { display: flex; height: 58px; align-items: center; justify-content: flex-end; } } .right-content { .device-box { margin: 0; } .list-container { height: 514px; .list-item { justify-content: space-between; .device-box { margin: 0; } img { width: 20px; height: 20px; display: inline-block; } } } } .transfer-actions { margin-top: 56px; display: flex; flex-direction: column; justify-content: center; } </style> 代码评审
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值