155 lines
3.7 KiB
Vue
155 lines
3.7 KiB
Vue
<script>
|
|
/* eslint no-console:0 */
|
|
|
|
import '../assets/index.less';
|
|
// use import Dialog from 'rc-dialog'
|
|
import Dialog from '../index';
|
|
|
|
const clearPath =
|
|
'M793 242H366v-74c0-6.7-7.7-10.4-12.9' +
|
|
'-6.3l-142 112c-4.1 3.2-4.1 9.4 0 12.6l142 112c' +
|
|
'5.2 4.1 12.9 0.4 12.9-6.3v-74h415v470H175c-4.4' +
|
|
' 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h618c35.3 0 64-' +
|
|
'28.7 64-64V306c0-35.3-28.7-64-64-64z';
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
visible: false,
|
|
width: 600,
|
|
destroyOnClose: false,
|
|
center: false,
|
|
mousePosition: undefined,
|
|
useIcon: false,
|
|
forceRender: false,
|
|
};
|
|
},
|
|
methods: {
|
|
getSvg(path, props = {}, align = false) {
|
|
return (
|
|
<i {...{ props }}>
|
|
<svg
|
|
viewBox="0 0 1024 1024"
|
|
width="1em"
|
|
height="1em"
|
|
fill="currentColor"
|
|
style={align ? { verticalAlign: '-.125em ' } : {}}
|
|
>
|
|
<path d={path} p-id="5827"></path>
|
|
</svg>
|
|
</i>
|
|
);
|
|
},
|
|
onClick(e) {
|
|
this.visible = true;
|
|
this.mousePosition = {
|
|
x: e.pageX,
|
|
y: e.pageY,
|
|
};
|
|
},
|
|
|
|
onClose() {
|
|
// console.log(e);
|
|
this.visible = false;
|
|
},
|
|
|
|
onDestroyOnCloseChange(e) {
|
|
this.destroyOnClose = e.target.checked;
|
|
},
|
|
|
|
onForceRenderChange(e) {
|
|
this.forceRender = e.target.checked;
|
|
},
|
|
|
|
changeWidth() {
|
|
this.width = this.width === 600 ? 800 : 600;
|
|
},
|
|
|
|
handleCenter(e) {
|
|
this.center = e.target.checked;
|
|
},
|
|
toggleCloseIcon() {
|
|
this.useIcon = !this.useIcon;
|
|
},
|
|
},
|
|
|
|
render() {
|
|
const style = {
|
|
width: this.width + 'px',
|
|
};
|
|
let wrapClassName = '';
|
|
if (this.center) {
|
|
wrapClassName = 'center';
|
|
}
|
|
const dialog = (
|
|
<Dialog
|
|
// getContainer={() => this.$refs.container}
|
|
visible={this.visible}
|
|
wrapClassName={wrapClassName}
|
|
animation="zoom"
|
|
maskAnimation="fade"
|
|
onClose={this.onClose}
|
|
style={style}
|
|
mousePosition={this.mousePosition}
|
|
destroyOnClose={this.destroyOnClose}
|
|
closeIcon={this.useIcon ? this.getSvg(clearPath, {}, true) : undefined}
|
|
forceRender={this.forceRender}
|
|
>
|
|
<input autoFocus />
|
|
<p>basic modal</p>
|
|
<button onClick={this.changeWidth}>change width</button>
|
|
<button onClick={this.toggleCloseIcon}>
|
|
use custom icon, is using icon: {(this.useIcon && 'true') || 'false'}.
|
|
</button>
|
|
<div style={{ height: '200px' }} />
|
|
</Dialog>
|
|
);
|
|
return (
|
|
<div>
|
|
<h2>ant-design dialog</h2>
|
|
<div style={{ width: '90%', margin: '0 auto' }} ref="container">
|
|
<style>
|
|
{`
|
|
.center {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
`}
|
|
</style>
|
|
<p>
|
|
<button className="btn btn-primary" onClick={this.onClick}>
|
|
show dialog
|
|
</button>
|
|
|
|
<label>
|
|
destroy on close:
|
|
<input
|
|
type="checkbox"
|
|
checked={this.destroyOnClose}
|
|
onChange={this.onDestroyOnCloseChange}
|
|
/>
|
|
</label>
|
|
|
|
<label>
|
|
center
|
|
<input type="checkbox" checked={this.center} onChange={this.handleCenter} />
|
|
</label>
|
|
|
|
<label>
|
|
force render
|
|
<input
|
|
type="checkbox"
|
|
checked={this.forceRender}
|
|
onChange={this.onForceRenderChange}
|
|
/>
|
|
</label>
|
|
</p>
|
|
{dialog}
|
|
</div>
|
|
</div>
|
|
);
|
|
},
|
|
};
|
|
</script>
|