开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 296

ALM/framework-admin

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
master
dev
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (2)
master
dev
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
master
dev
framework-admin
/
src
/
widgets
/
selectize.vue
framework-admin
/
src
/
widgets
/
selectize.vue
selectize.vue 5.69 KB
一键复制 编辑 原始数据 按行查看 历史
Nandy 提交于 2017年10月19日 10:51 +08:00 . 依赖更新..
<template>
<div>
<span class="img-btn cover mr-1" :title="item.name" :key="item.id"
:style="{backgroundImage: 'url(' + item.avatar + ')'}" v-for="item in selected"></span>
<div class="dropdown selectize" ref="dropdown">
<a class="img-btn text-white unselectable" title="选择用户" @click.stop="show"></a>
<div class="dropdown-menu" :class="{'loading' : dirty || loading}">
<div class="input">
<input ref="input" v-model.trim="keyword" class="form-control" placeholder="搜索用户" maxlength="32" tabindex="-1">
<i v-if="keyword" class="ti-close" @click="keyword = ''"></i>
<i v-else class="ti-search"></i>
</div>
<div class="selectize-items">
<label v-if="multi && items.length" class="selectize-item">
<span class="img img-xxs"><i class="fa fa-users font-lg text-grey"></i></span>
<input type="checkbox" hidden @change="checkall">
<span class="info font-xs ml-2">选择所有</span>
</label>
<label v-show="!items.length && keyword" class="selectize-item">
<span class="info font-xs text-grey ml-2">没有找到该用户</span>
</label>
<label v-show="!items.length" class="selectize-item">
<span class="img-btn text-white" title="创建用户"></span>
<router-link to="/user/new" class="info font-xs text-blue ml-2">创建用户</router-link>
</label>
<label class="selectize-item" v-for="(item, index) in items" :key="item.id">
<span class="img img-xxs rounded-circle" :style="{backgroundImage: 'url(' + item.avatar + ')'}"></span>
<input name="item" :type="type" :checked="idarr.includes(item.id)" @change="change(item, $event)">
<span class="info ml-2">
<span class="font-xs">{{item.name}}</span>
<span class="font-xs text-grey">{{item.phone}}</span>
</span>
</label>
</div>
</div>
</div>
</div>
</template>
<!--
用户选择框
-->
<script>
import {User} from '../resources'
import {debounce} from '../misc/utils'
import $ from 'jquery'
var backup = [] // 初始用户列表备份, 当用户清空查询时, 直接使用备份数据而不再执行查询请求
export default {
name: 'selectize',
props: ['value', 'multi'],
data: () => ({
selected: [], // 选中用户列表
idarr: [], // 选中用户ID列表
items: [], // 用户列表
keyword: '', // 搜索关键字
loading: 1, // 加载标识
dirty: 0, // 用户输入标识
type: '' // chckbox 或 radio
}),
created () {
this.type = this.multi ? 'checkbox' : 'radio'
this.check(this.value, true)
console.log('created', this.value)
},
methods: {
// 点击时触发的change事件
change (item, event) {
var checked = event.target.checked // 是否选中
var index = this.selected.findIndex(e => e.id === item.id) // 选中目标在数组中的位置
var include = index !== -1 // 是否在数组中
if (this.multi) { // 多选时
if (checked) { // 选中时
if (!include) this.selected.push(item) // 不存在时添加
} else { // 反选时
if (include) this.selected.splice(index, 1) // 存在时删除
}
this.idarr = this.selected.map(e => e.id)
this.$emit('input', this.idarr)
} else { // 单选时
this.selected = [item] // 直接覆盖
this.$emit('input', item.id) // 触发v-model事件设值
}
},
// 加载默认已选中用户, initial为true时表示组件初始化时调用
check (v, initial) {
if (!v) return
this.idarr = Array.isArray(v) ? v.map(Number) : [Number(v)]
// 如果是初始化进入, 请求数据
if (initial) {
User.search({include: this.idarr}).then(response => {
this.selected = response.data
this.loading = 0
})
}
},
// 全选/反选
checkall (e) {
this.selected = e.target.checked ? this.items.slice() : []
this.idarr = this.selected.map(e => e.id)
this.$emit('input', this.idarr)
},
// DOM点击事件, 当点击元素处于Dropdown外部时隐藏Dropdown并移除事件监听
handler (e) {
if (!$.contains(this.$refs.dropdown, e.target)) {
this.$refs.dropdown.classList.remove('show')
document.removeEventListener('click', this.handler)
}
},
// 显示菜单
show () {
if (this.$refs.dropdown.className.indexOf('show') === -1) {
this.$refs.dropdown.classList.add('show')
this.$refs.input.focus()
document.addEventListener('click', this.handler)
if (!this.keyword && !this.items.length) {
this.paging()
}
}
},
// 查询(支持分页)
paging: debounce(function () {
this.loading = 1
User.search({keyword: this.keyword}).then(response => {
this.items = response.data
this.loading = 0
this.dirty = 0
if (!backup.length) {
backup = response.data
}
})
}, 500)
},
watch: {
keyword (v) {
if (!v) { // 清空搜索框时, 已经备份过原始数据, 直接使用跳过查询
this.items = this.selected.concat(backup.filter(e => {
return !this.idarr.includes(e.id)
}))
return
}
this.dirty = 1
this.paging()
},
value (v, o) {
console.log('watch', v, o)
this.check(v, !o)
}
}
}
</script>
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

尽管oschina已经存在大量优秀的Java平台管理系统, 但还有不少数量的项目前端架构还是上古时代遗留下来的iframe + jsp, 较新一点的是ajax + HistoryAPI, 前一秒刚被各项目琳琅满目的功能吓尿的同时, 再一看那粗鄙的前端交互设计, 就像远处看见一个肤白貌美大长腿的大美女, 走近才发现竟然他妈的长得跟凤姐一样?(凤姐对不起) 在这个全民ES6 + Babel的大时代下, 总感觉像吃了苍蝇一样难受! 这个项目就是告诉大家什么叫高颜值的后台系统!
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/almcode/framework-admin.git
git@gitee.com:almcode/framework-admin.git
almcode
framework-admin
framework-admin
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /