|
@@ -0,0 +1,422 @@
|
|
|
+<template>
|
|
|
+ <div class="select-more-box">
|
|
|
+
|
|
|
+ <div class="select-more-item">
|
|
|
+ <div class="c_left_tag" v-if="modalDetails.length>0">
|
|
|
+ <el-tag class="tag" size="closable" v-for="(item, index) in modalDetails" :key="index"
|
|
|
+ @close="handleClose(item)" closable>
|
|
|
+ {{ item.name }}
|
|
|
+ </el-tag>
|
|
|
+ </div>
|
|
|
+ <span style="color: #c0c0c0;" v-else>请点击添加,选择优惠券</span>
|
|
|
+ <div class="select-more-tool">
|
|
|
+ <span>目前已选择:{{ modalDetails.length }}个</span>
|
|
|
+ <div class="select-more-but-add" @click="dialogVisible = true"><span>添加</span><span>+</span></div>
|
|
|
+ <div class="select-more-but-clear" @click="clearModalDetails"><span>清除已选</span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-dialog
|
|
|
+ append-to-body
|
|
|
+ :title="title"
|
|
|
+ :visible.sync="dialogVisible"
|
|
|
+ @open="dialogOpen"
|
|
|
+ @close="dialogClose"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :destroy-on-close="true"
|
|
|
+ width="900px"
|
|
|
+ class="information-dialog"
|
|
|
+ custom-class="template-con-dialog" top="auto">
|
|
|
+ <div class="form-con" v-loading="loading">
|
|
|
+ <div class="form_content">
|
|
|
+ <!-- left -->
|
|
|
+ <div class="c_left">
|
|
|
+ <div class="c_left_btn">
|
|
|
+ <div>已选成员</div>
|
|
|
+ <el-button type="text" @click="clearUser">清空</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="c_left_tag">
|
|
|
+ <el-tag class="tag" size="closable" v-for="(item, index) in nameList" :key="index"
|
|
|
+ @close="handleClose(item)" closable>
|
|
|
+ {{ item.name }}
|
|
|
+ </el-tag>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- right -->
|
|
|
+ <div class="c_right">
|
|
|
+ <div class="c_input">
|
|
|
+ <el-input prefix-icon="el-icon-search" v-model="userValue" placeholder="输入搜索"></el-input>
|
|
|
+ </div>
|
|
|
+ <div class="c_checkbox">
|
|
|
+ <!-- <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll"
|
|
|
+ @change="handleCheckAllChange">全选</el-checkbox>
|
|
|
+ <div style="margin: 15px 0;"></div>
|
|
|
+ <el-checkbox-group class="checkBox" v-model="checkedUsers" @change="handleCheckedCitiesChange">
|
|
|
+ <el-checkbox class="checkBox_item" v-for="(item, index) in dataList" :label="item.id"
|
|
|
+ :key="index">{{
|
|
|
+ item.name
|
|
|
+ }}</el-checkbox>
|
|
|
+ </el-checkbox-group> -->
|
|
|
+ <el-checkbox
|
|
|
+ class="checkBox_item"
|
|
|
+ v-for="(item, index) in dataList"
|
|
|
+ v-model="item.checked"
|
|
|
+ @change="(val)=>changeCheckbox(item,index,val)"
|
|
|
+ :key="index">{{
|
|
|
+ item.name
|
|
|
+ }}</el-checkbox>
|
|
|
+ </div>
|
|
|
+ <div class="c_pagination">
|
|
|
+ <el-pagination
|
|
|
+ small
|
|
|
+ background
|
|
|
+ layout="total, prev, pager, next"
|
|
|
+ :page-sizes="page.pageSizes"
|
|
|
+ :page-size="page.pageSize"
|
|
|
+ :total="page.total"
|
|
|
+ :current-page="page.pageNum"
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ >
|
|
|
+ </el-pagination>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="drawer-footer">
|
|
|
+ <el-button @click="dialogVisible = false">
|
|
|
+ 取消
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="submitForm()" type="primary">
|
|
|
+ 确定
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { listUser } from '@/api/system/user'
|
|
|
+export default {
|
|
|
+ props: {
|
|
|
+ title: {
|
|
|
+ type: String,
|
|
|
+ default: '新增',
|
|
|
+ },
|
|
|
+ value: {
|
|
|
+ type: Array,
|
|
|
+ default: ()=>{
|
|
|
+ return []
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ dialogVisible: false, //弹窗选择
|
|
|
+ userValue: '', //人员搜索
|
|
|
+ dataList: [], //数据列表集合
|
|
|
+ nameList: [],//已选择人员
|
|
|
+ checkAll: false,
|
|
|
+ checkedUsers: [], // 选中的
|
|
|
+ isIndeterminate: false,
|
|
|
+ modalDetails: [],
|
|
|
+ loading: false,//
|
|
|
+ page: {
|
|
|
+ pageSizes: [100, 200, 300, 400],
|
|
|
+ pageSize: 3,
|
|
|
+ pageNum: 1,
|
|
|
+ total: 0,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ value: {
|
|
|
+ handler(newValue){
|
|
|
+ if(this.value) {
|
|
|
+ this.modalDetails = JSON.parse(JSON.stringify(this.value))
|
|
|
+ }else {
|
|
|
+ this.modalDetails = []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ immediate: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 弹窗组件显示事件
|
|
|
+ async dialogOpen() {
|
|
|
+ this.loading = true
|
|
|
+ this.$set(this.page,'pageNum',1)
|
|
|
+ //this.$set(this.page,'pageSize',3)
|
|
|
+ this.dataList = [] //用户集合
|
|
|
+ await this.listUser()
|
|
|
+ this.checkedUsers = []
|
|
|
+ if (this.modalDetails.length) {
|
|
|
+ this.modalDetails.forEach((item) => {
|
|
|
+ this.checkedUsers.push(item.id)
|
|
|
+ })
|
|
|
+ this.nameList = this.modalDetails//已选择人员
|
|
|
+ this.checkAll = false
|
|
|
+ this.isIndeterminate = false
|
|
|
+ this.userValue = '' //人员搜索
|
|
|
+ } else {
|
|
|
+ this.nameList = []//已选择人员
|
|
|
+ this.checkAll = false
|
|
|
+ this.checkedUsers = [] // 选中的
|
|
|
+ this.isIndeterminate = false
|
|
|
+ this.userValue = '' //人员搜索
|
|
|
+ }
|
|
|
+ this.loading = false
|
|
|
+ },
|
|
|
+ // 查询支部人员集合
|
|
|
+ async listUser() {
|
|
|
+ try {
|
|
|
+ let res = await listUser({
|
|
|
+ name: '',
|
|
|
+ pageNum: this.page.pageNum,
|
|
|
+ pageSize: this.page.pageSize
|
|
|
+ })
|
|
|
+ if (res.code == 200) {
|
|
|
+ let list = []
|
|
|
+ res.data.rows.forEach((item,index)=>{
|
|
|
+ list.push({
|
|
|
+ ...item,
|
|
|
+ checked: false
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.dataList = list
|
|
|
+ this.$set(this.page,'total',res.data.total)
|
|
|
+ } else {
|
|
|
+ this.$message({
|
|
|
+ type: 'error',
|
|
|
+ message: res.msg
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ this.loading = false
|
|
|
+ this.dialogVisible = false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 清空按钮
|
|
|
+ clearUser() {
|
|
|
+ this.handleCheckAllChange(false)
|
|
|
+ this.isIndeterminate = false;
|
|
|
+ this.checkAll = false
|
|
|
+ },
|
|
|
+ // 清除全部
|
|
|
+ clearModalDetails() {
|
|
|
+ this.$emit('input', [])
|
|
|
+ this.$emit('submitForm')
|
|
|
+ },
|
|
|
+ // 单项删除按钮(){
|
|
|
+ handleClose(item) {
|
|
|
+ let arr = this.checkedUsers.filter((id) => {
|
|
|
+ return item.id !== id
|
|
|
+ })
|
|
|
+ console.log(arr);
|
|
|
+ this.checkedUsers = arr
|
|
|
+ this.handleCheckedCitiesChange(arr)
|
|
|
+ },
|
|
|
+ // 全选按钮
|
|
|
+ handleCheckAllChange(val) {
|
|
|
+ let arr = []
|
|
|
+ let arrName = []
|
|
|
+ this.dataList.forEach((item) => {
|
|
|
+ arr.push(item.userid)
|
|
|
+ arrName.push(item)
|
|
|
+ })
|
|
|
+ this.checkedUsers = val ? arr : [];
|
|
|
+ this.nameList = val ? arrName : [];
|
|
|
+ this.isIndeterminate = false;
|
|
|
+
|
|
|
+ },
|
|
|
+ // 单选按钮
|
|
|
+ handleCheckedCitiesChange(value) {
|
|
|
+ // console.log(value);
|
|
|
+ let checkedCount = value.length;
|
|
|
+ this.checkAll = checkedCount === this.dataList.length;
|
|
|
+ this.isIndeterminate = checkedCount > 0 && checkedCount < this.dataList.length;
|
|
|
+ let arrName = []
|
|
|
+ value.forEach((user) => {
|
|
|
+ this.dataList.forEach((item) => {
|
|
|
+ if (user == item.id) {
|
|
|
+ arrName.push(item)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.nameList = []
|
|
|
+
|
|
|
+ this.nameList = Array.from(new Set(arrName))
|
|
|
+ // console.log(this.nameList);
|
|
|
+ },
|
|
|
+
|
|
|
+ // 弹窗组件关闭事件
|
|
|
+ dialogClose() {
|
|
|
+ },
|
|
|
+ // 提交表单事件
|
|
|
+ submitForm() {
|
|
|
+ let list = []
|
|
|
+ this.checkedUsers.forEach((user) => {
|
|
|
+ this.dataList.forEach((item) => {
|
|
|
+ if (user == item.id) {
|
|
|
+ list.push({
|
|
|
+ ...item
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.$emit('input', list)
|
|
|
+ this.$emit('submitForm')
|
|
|
+ this.dialogVisible = false
|
|
|
+ //this.$emit('submitForm', this.nameList)
|
|
|
+ },
|
|
|
+ handleSizeChange(val) {
|
|
|
+ console.log(`每页 ${val} 条`);
|
|
|
+ },
|
|
|
+ handleCurrentChange(val) {
|
|
|
+ this.$set(this.page,'pageNum',val)
|
|
|
+ console.log(`当前页: ${val}dddd`,this.page.pageNum);
|
|
|
+ this.listUser()
|
|
|
+ },
|
|
|
+ changeCheckbox(item,index,val) {
|
|
|
+ console.log("item,index,val====",item,index,val)
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.is-error {
|
|
|
+ .select-more-item {
|
|
|
+ border-color: #f56c6c !important;
|
|
|
+ }
|
|
|
+}
|
|
|
+.select-more-tool {
|
|
|
+ position: absolute;
|
|
|
+ bottom: 5px;
|
|
|
+ right: 5px;
|
|
|
+ display: flex;
|
|
|
+ .select-more-but-add {
|
|
|
+ width: 80px;
|
|
|
+ height: 36px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ color: #fff;
|
|
|
+ background-color: #409eff;
|
|
|
+ border-color: #409eff;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ border-radius: 5px;
|
|
|
+ cursor: pointer;
|
|
|
+ margin-left: 10px;
|
|
|
+
|
|
|
+ }
|
|
|
+ .select-more-but-clear {
|
|
|
+ width: 80px;
|
|
|
+ height: 36px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ color: #fff;
|
|
|
+ background-color: #f56c6c;
|
|
|
+ border-color: #f56c6c;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ border-radius: 5px;
|
|
|
+ cursor: pointer;
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.select-more-item {
|
|
|
+ width: 100%;
|
|
|
+ height: 300px;
|
|
|
+ border: 1px solid #C0C4CC;
|
|
|
+ overflow: hidden;
|
|
|
+ overflow-y: auto;
|
|
|
+ border-radius: 5px;
|
|
|
+ margin-top: 5px;
|
|
|
+ position: relative;
|
|
|
+ padding: 10px;
|
|
|
+ .c_left_tag {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tag {
|
|
|
+ margin-left: 0 !important;
|
|
|
+ margin-right: 10px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.form-con {
|
|
|
+ padding-top: 10px;
|
|
|
+ margin: auto;
|
|
|
+
|
|
|
+ .form_content {
|
|
|
+ height: 500px;
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .c_left {
|
|
|
+ width: 50%;
|
|
|
+ border-right: 1px solid #EBEEF5;
|
|
|
+ padding: 0 10px;
|
|
|
+
|
|
|
+ .c_left_btn {
|
|
|
+ height: 32px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c_left_tag {
|
|
|
+ margin-top: 10px;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tag {
|
|
|
+ margin-left: 0 !important;
|
|
|
+ margin-right: 10px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .c_right {
|
|
|
+ width: 50%;
|
|
|
+ height: 100%;
|
|
|
+ padding: 0 10px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-between;
|
|
|
+ box-sizing: border-box;
|
|
|
+ .c_input {
|
|
|
+ height: 32px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ }
|
|
|
+ .c_checkbox {
|
|
|
+ margin-top: 10px;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .checkBox {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+
|
|
|
+ .checkBox_item {
|
|
|
+ height: 30px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .c_pagination {
|
|
|
+ height: 32px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|