119 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
 | |
| // Utils
 | |
| import { createNamespace } from '../utils';
 | |
| import { RED } from '../utils/constant';
 | |
| import { emit, inherit } from '../utils/functional'; // Components
 | |
| 
 | |
| import Tag from '../tag';
 | |
| import Icon from '../icon';
 | |
| import Cell from '../cell';
 | |
| import Radio from '../radio';
 | |
| import Button from '../button';
 | |
| import RadioGroup from '../radio-group'; // Types
 | |
| 
 | |
| var _createNamespace = createNamespace('contact-list'),
 | |
|     createComponent = _createNamespace[0],
 | |
|     bem = _createNamespace[1],
 | |
|     t = _createNamespace[2];
 | |
| 
 | |
| function ContactList(h, props, slots, ctx) {
 | |
|   var List = props.list && props.list.map(function (item, index) {
 | |
|     function onClick() {
 | |
|       emit(ctx, 'input', item.id);
 | |
|       emit(ctx, 'select', item, index);
 | |
|     }
 | |
| 
 | |
|     function RightIcon() {
 | |
|       return h(Radio, {
 | |
|         "attrs": {
 | |
|           "name": item.id,
 | |
|           "iconSize": 16,
 | |
|           "checkedColor": RED
 | |
|         },
 | |
|         "on": {
 | |
|           "click": onClick
 | |
|         }
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     function LeftIcon() {
 | |
|       return h(Icon, {
 | |
|         "attrs": {
 | |
|           "name": "edit"
 | |
|         },
 | |
|         "class": bem('edit'),
 | |
|         "on": {
 | |
|           "click": function click(event) {
 | |
|             event.stopPropagation();
 | |
|             emit(ctx, 'edit', item, index);
 | |
|           }
 | |
|         }
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     function Content() {
 | |
|       var nodes = [item.name + "\uFF0C" + item.tel];
 | |
| 
 | |
|       if (item.isDefault && props.defaultTagText) {
 | |
|         nodes.push(h(Tag, {
 | |
|           "attrs": {
 | |
|             "type": "danger",
 | |
|             "round": true
 | |
|           },
 | |
|           "class": bem('item-tag')
 | |
|         }, [props.defaultTagText]));
 | |
|       }
 | |
| 
 | |
|       return nodes;
 | |
|     }
 | |
| 
 | |
|     return h(Cell, {
 | |
|       "key": item.id,
 | |
|       "attrs": {
 | |
|         "isLink": true,
 | |
|         "center": true,
 | |
|         "valueClass": bem('item-value')
 | |
|       },
 | |
|       "class": bem('item'),
 | |
|       "scopedSlots": {
 | |
|         icon: LeftIcon,
 | |
|         default: Content,
 | |
|         'right-icon': RightIcon
 | |
|       },
 | |
|       "on": {
 | |
|         "click": onClick
 | |
|       }
 | |
|     });
 | |
|   });
 | |
|   return h("div", _mergeJSXProps([{
 | |
|     "class": bem()
 | |
|   }, inherit(ctx)]), [h(RadioGroup, {
 | |
|     "attrs": {
 | |
|       "value": props.value
 | |
|     },
 | |
|     "class": bem('group')
 | |
|   }, [List]), h("div", {
 | |
|     "class": bem('bottom')
 | |
|   }, [h(Button, {
 | |
|     "attrs": {
 | |
|       "round": true,
 | |
|       "block": true,
 | |
|       "type": "danger",
 | |
|       "text": props.addText || t('addText')
 | |
|     },
 | |
|     "class": bem('add'),
 | |
|     "on": {
 | |
|       "click": function click() {
 | |
|         emit(ctx, 'add');
 | |
|       }
 | |
|     }
 | |
|   })])]);
 | |
| }
 | |
| 
 | |
| ContactList.props = {
 | |
|   value: null,
 | |
|   list: Array,
 | |
|   addText: String,
 | |
|   defaultTagText: String
 | |
| };
 | |
| export default createComponent(ContactList); | 
