202 lines
4.8 KiB
Vue
202 lines
4.8 KiB
Vue
|
<template>
|
|||
|
<div>
|
|||
|
<obj-modal
|
|||
|
ref="modal"
|
|||
|
labelWidth="150px"
|
|||
|
:modalConfig="modalConfig"
|
|||
|
:modalData="modalData"
|
|||
|
:modalHandles="modalHandles"
|
|||
|
>
|
|||
|
<div slot="dialog__content">
|
|||
|
<el-alert class="Example" title="需要注意的事项" type="info">
|
|||
|
<template slot="title">
|
|||
|
<el-form label-width="80px">
|
|||
|
<el-form-item label="示例:">
|
|||
|
<div class="iconSize">属性名称:温度</div>
|
|||
|
<div class="iconSize">属性内容:常温;冷饮</div>
|
|||
|
<div class="iconSize">顾客下单时可选择【常温】 或 【冷饮】</div>
|
|||
|
</el-form-item>
|
|||
|
</el-form>
|
|||
|
</template>
|
|||
|
</el-alert>
|
|||
|
<el-form
|
|||
|
:model="ruleForm"
|
|||
|
:rules="rules"
|
|||
|
ref="ruleForm"
|
|||
|
label-width="100px"
|
|||
|
class="demo-ruleForm"
|
|||
|
>
|
|||
|
<el-form-item label="属性名称:" prop="name">
|
|||
|
<el-input
|
|||
|
style="width: 80%"
|
|||
|
placeholder="请输入属性名称"
|
|||
|
v-model="ruleForm.name"
|
|||
|
clearable
|
|||
|
></el-input>
|
|||
|
</el-form-item>
|
|||
|
<el-form-item label="属性内容:" prop="value">
|
|||
|
<el-tag
|
|||
|
:key="tag"
|
|||
|
v-for="tag in ruleForm.value"
|
|||
|
closable
|
|||
|
:disable-transitions="false"
|
|||
|
@close="handleClose(tag)"
|
|||
|
>
|
|||
|
{{ tag }}
|
|||
|
</el-tag>
|
|||
|
<el-input
|
|||
|
class="input-new-tag"
|
|||
|
v-if="inputVisible"
|
|||
|
v-model="inputValue"
|
|||
|
ref="saveTagInput"
|
|||
|
size="small"
|
|||
|
@keyup.enter.native="handleInputConfirm"
|
|||
|
@blur="handleInputConfirm"
|
|||
|
>
|
|||
|
</el-input>
|
|||
|
<el-button
|
|||
|
v-else
|
|||
|
class="button-new-tag"
|
|||
|
size="small"
|
|||
|
@click="showInput"
|
|||
|
>+添加内容</el-button
|
|||
|
>
|
|||
|
</el-form-item>
|
|||
|
</el-form>
|
|||
|
</div>
|
|||
|
</obj-modal>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
<script>
|
|||
|
import { debounce, cloneDeep } from "lodash";
|
|||
|
export default {
|
|||
|
components: {},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
isAdd: true,
|
|||
|
//表格属性
|
|||
|
modalConfig: {
|
|||
|
title: "属性",
|
|||
|
show: false,
|
|||
|
width: "80%",
|
|||
|
},
|
|||
|
modalData: {},
|
|||
|
inputValue: "",
|
|||
|
inputVisible: false,
|
|||
|
ruleForm: {
|
|||
|
name: "",
|
|||
|
value: [],
|
|||
|
},
|
|||
|
rules: {
|
|||
|
name: [{ required: true, message: "请输入属性名称", trigger: "blur" }],
|
|||
|
value: [
|
|||
|
{
|
|||
|
required: true,
|
|||
|
message: "请输入属性内容",
|
|||
|
trigger: "blur",
|
|||
|
},
|
|||
|
],
|
|||
|
},
|
|||
|
};
|
|||
|
},
|
|||
|
methods: {
|
|||
|
queryTableData(pageNo, pageSize) {},
|
|||
|
toggle(e) {
|
|||
|
if (this.modalConfig.show == false) {
|
|||
|
this.modalConfig.show = true;
|
|||
|
} else {
|
|||
|
this.modalConfig.show = false;
|
|||
|
}
|
|||
|
if (e) {
|
|||
|
this.init(cloneDeep(e.row));
|
|||
|
}
|
|||
|
return {
|
|||
|
add: () => {
|
|||
|
this.modalConfig.title = "添加属性";
|
|||
|
this.$nextTick(() => {
|
|||
|
this.modalData = {};
|
|||
|
this.$refs.ruleForm.resetFields();
|
|||
|
});
|
|||
|
this.isAdd = true;
|
|||
|
},
|
|||
|
update: () => {
|
|||
|
this.isAdd = false;
|
|||
|
},
|
|||
|
};
|
|||
|
},
|
|||
|
init(row) {
|
|||
|
this.modalData = row;
|
|||
|
},
|
|||
|
handleClose(tag) {
|
|||
|
this.ruleForm.value.splice(this.ruleForm.value.indexOf(tag), 1);
|
|||
|
},
|
|||
|
//聚焦
|
|||
|
showInput() {
|
|||
|
this.inputVisible = true;
|
|||
|
this.$nextTick((_) => {
|
|||
|
this.$refs.saveTagInput.$refs.input.focus();
|
|||
|
});
|
|||
|
},
|
|||
|
handleInputConfirm() {
|
|||
|
let inputValue = this.inputValue;
|
|||
|
if (inputValue) {
|
|||
|
this.ruleForm.value.push(inputValue);
|
|||
|
}
|
|||
|
this.inputVisible = false;
|
|||
|
this.inputValue = "";
|
|||
|
},
|
|||
|
},
|
|||
|
computed: {
|
|||
|
modalHandles() {
|
|||
|
return [
|
|||
|
{
|
|||
|
label: "取消",
|
|||
|
handle: () => {
|
|||
|
this.toggle();
|
|||
|
},
|
|||
|
},
|
|||
|
{
|
|||
|
label: this.isAdd ? "确认添加" : "确认修改",
|
|||
|
type: "primary",
|
|||
|
loading: this.isLoading,
|
|||
|
// submit: true,
|
|||
|
handle: () => {
|
|||
|
this.$refs.ruleForm.validate((valid) => {
|
|||
|
if (valid) {
|
|||
|
this.$emit("getAttribute", this.ruleForm);
|
|||
|
this.toggle();
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
},
|
|||
|
];
|
|||
|
},
|
|||
|
},
|
|||
|
asyncComputed: {},
|
|||
|
};
|
|||
|
</script>
|
|||
|
<style lang="scss" scoped>
|
|||
|
.Example {
|
|||
|
margin: 0 0 20px 20px;
|
|||
|
width: 80%;
|
|||
|
}
|
|||
|
.iconSize {
|
|||
|
font-size: 15px;
|
|||
|
// padding: 3px;
|
|||
|
}
|
|||
|
.el-tag + .el-tag {
|
|||
|
margin-left: 10px;
|
|||
|
}
|
|||
|
.button-new-tag {
|
|||
|
margin-left: 10px;
|
|||
|
height: 32px;
|
|||
|
line-height: 30px;
|
|||
|
padding-top: 0;
|
|||
|
padding-bottom: 0;
|
|||
|
}
|
|||
|
.input-new-tag {
|
|||
|
width: 90px;
|
|||
|
margin-left: 10px;
|
|||
|
vertical-align: bottom;
|
|||
|
}
|
|||
|
</style>
|