<template>
|
<div>
|
<el-dialog
|
:title="title"
|
center
|
width="850px"
|
:visible.sync="show"
|
:close-on-click-modal="false"
|
@close="handleClose"
|
>
|
<el-form :model="form" :rules="rules" ref="form" label-width="105px">
|
<div class="form">
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="模板名称" prop="tempNo">
|
<el-select v-model="form.tempNo" @change="tempNameChange" placeholder="请选择" filterable >
|
<el-option
|
v-for="item in channelTempList"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="模板编号" prop="tempNo">
|
<el-input v-model="form.tempNo" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row><el-col :span="12">
|
<el-form-item label="渠道" prop="channelName">
|
<el-input v-model="form.channelName" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="主体选择" prop="accountId">
|
<el-select v-model="form.accountId" placeholder="请选择" filterable>
|
<el-option
|
v-for="item in accountList"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="模板类型" prop="tempType">
|
<el-select v-model="form.tempType" placeholder="请选择">
|
<el-option label="短信" value="01"></el-option>
|
<el-option label="通知" value="02"></el-option>
|
<el-option label="验证码" value="03"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="延迟时长" prop="delayTime">
|
<el-input style="width:90%" v-model="form.delayTime" type="number" min="0" oninput ="value=value.replace(/[^\d]/g,'')" ></el-input> (秒)
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="模板状态" prop="status">
|
<el-select v-model="form.status" placeholder="请选择">
|
<el-option label="启用" value="01"></el-option>
|
<el-option label="停用" value="02"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="挡板开关" prop="stubType">
|
<el-select v-model="form.stubType" placeholder="请选择">
|
<el-option label="不启用" value="00"></el-option>
|
<el-option label="开启挡板-成功" value="01"></el-option>
|
<el-option label="开启挡板-处理中" value="02"></el-option>
|
<el-option label="开启挡板-失败" value="03"></el-option>
|
<el-option label="开启挡板-黑名单" value="04"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="生效日期" prop="validDate">
|
<el-date-picker
|
v-model="form.validDate"
|
type="datetime"
|
placeholder="选择日期时间"
|
>
|
</el-date-picker>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="发送类型" prop="sentType">
|
<el-select v-model="form.sentType" placeholder="请选择">
|
<el-option label="实时" value="01"></el-option>
|
<el-option label="跑批" value="02"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="失效日期" prop="invalidDate">
|
<el-date-picker
|
v-model="form.invalidDate"
|
type="datetime"
|
placeholder="选择日期时间"
|
>
|
</el-date-picker>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="备注" prop="memo">
|
<el-input v-model="form.memo" :disabled="disabled"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="24">
|
<el-form-item label="模板内容" prop="tempContent">
|
<el-input
|
type="textarea"
|
:rows="3"
|
:disabled="disabled"
|
v-model="form.tempContent"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</div>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button size="mini" @click="handleClose">{{
|
!disabled ? "取消" : "关闭"
|
}}</el-button>
|
<el-button
|
class="blueBtn"
|
type="primary"
|
size="mini"
|
v-if="!disabled"
|
@click="handleSubmit"
|
>确定</el-button
|
>
|
</div>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import common from "@/utils/common";
|
import * as dayjs from 'dayjs'
|
import { addTemp, updateTemp } from "@/api/dreamSend";
|
import queryAccountList from "@dreamSend/model/queryAccountList";
|
import qryChannelTemp from "@dreamSend/model/qryChannelTemp";
|
|
export default {
|
props: {
|
// 1 新增 2 编辑 0查看
|
type: {
|
type: Number,
|
default: 0,
|
},
|
},
|
data: function () {
|
return {
|
show: false,
|
required: true,
|
accountList: [],
|
channelTempList: [],
|
|
form: {
|
status: "01",
|
stubType: "00",
|
delayTime:0,
|
sentType: "02",
|
},
|
rules: {
|
tempName: { required: true, message: "此项为必填项", trigger: "blur" },
|
tempNo: { required: true, message: "此项为必填项", trigger: "blur" },
|
channelName: { required: true, message: "此项为必填项", trigger: "blur" },
|
accountId: {
|
required: true,
|
message: "此项为必填项",
|
trigger: "select",
|
},
|
tempType: {
|
required: true,
|
message: "此项为必填项",
|
trigger: "select",
|
},
|
status: { required: true, message: "此项为必填项", trigger: "select" },
|
memo: { required: true, message: "此项为必填项", trigger: "blur" },
|
tempContent: {
|
required: true,
|
message: "此项为必填项",
|
trigger: "blur",
|
},
|
stubType: {
|
required: true,
|
message: "此项为必填项",
|
trigger: "select",
|
},
|
sentType: {
|
required: true,
|
message: "此项为必填项",
|
trigger: "select",
|
},
|
validDate: { required: true, message: "此项为必填项", trigger: "blur" },
|
invalidDate: {
|
required: true,
|
message: "此项为必填项",
|
trigger: "blur",
|
},
|
},
|
title: "编辑",
|
};
|
},
|
computed: {
|
disabled() {
|
return this.type === 0 ? true : false;
|
},
|
},
|
methods: {
|
initInfo(title, data) {
|
this.title = title;
|
this.show = true;
|
this.queryAccountList();
|
this.qryChannelTemp();
|
if(!data.delayTime){
|
data.delayTime = 0
|
}
|
data.validDate = dayjs(data.validDate).format("YYYY-MM-DD HH:mm:ss"),
|
data.invalidDate = dayjs(data.invalidDate).format("YYYY-MM-DD HH:mm:ss"),
|
|
this.form = { ...this.form, ...data };
|
},
|
|
// 主体下拉列表
|
async queryAccountList() {
|
const res = await queryAccountList().request({});
|
const { list } = res;
|
this.accountList = list;
|
// this.updateValue('channelCode', { options: list })
|
},
|
// 渠道下拉列表
|
async qryChannelTemp() {
|
const res = await qryChannelTemp().request({tempName: ''});
|
let { list } = res;
|
this.channelTempList = list;
|
},
|
tempNameChange(val) {
|
const smsChannelList = this.$parent.smsChannel
|
this.form.tempNo = val
|
let { channelTempList } = this
|
channelTempList.map(item => {
|
if(item.value === val) {
|
this.form.channelName = smsChannelList[item.channelId]
|
this.form.channelId = item.channelId
|
this.form.tempName = item.label
|
}
|
})
|
},
|
manualstatusChange(e) {
|
// 审批拒绝,意见必填
|
this.$refs.form.clearValidate("manualdesc");
|
this.rules.manualdesc.required = e == 4;
|
this.required = e == 4;
|
},
|
handleClose() {
|
this.form = {
|
status: "01",
|
stubType: "00",
|
sentType: "02",
|
delayTime:0
|
};
|
this.$refs.form.resetFields();
|
this.show = false;
|
},
|
handleSubmit() {
|
this.$refs["form"].validate(async (valid) => {
|
if (valid) {
|
let {form} = this
|
|
const params = {
|
accountId: form.accountId,
|
channelId: form.channelId,
|
memo: form.memo,
|
sentType: form.sentType,
|
status: form.status,
|
stubType: form.stubType,
|
sentType: form.sentType,
|
tempContent: form.tempContent,
|
tempNo: form.tempNo,
|
tempName: form.tempName,
|
tempType: form.tempType,
|
delayTime:form.delayTime?Number(form.delayTime):0,
|
validDate: dayjs(form.validDate).format("YYYY-MM-DD HH:mm:ss"),
|
invalidDate: dayjs(form.invalidDate).format("YYYY-MM-DD HH:mm:ss"),
|
};
|
|
|
let res = this.type === 1 ? await addTemp({ ...params }) : await updateTemp({ ...params, id: form.id })
|
if (res.code === "200") {
|
this.$refs.form.resetFields();
|
this.show = false;
|
this.$message.success(res.message || '保存成功!');
|
this.$emit("submit");
|
}
|
} else {
|
return false;
|
}
|
});
|
},
|
},
|
};
|
</script>
|
|
<style lang="stylus" scoped>
|
>>> .el-dialog__header {
|
padding-top: 40px;
|
|
.el-dialog__title {
|
font-size: 18px;
|
// font-family PingFangSC-Medium,PingFangSC
|
font-weight: bold;
|
color: #222222;
|
line-height: 25px;
|
}
|
}
|
|
>>> .el-select {
|
width: 100%;
|
}
|
|
>>> .el-dialog__footer {
|
padding-bottom: 30px;
|
|
.dialog-footer {
|
button {
|
width: 120px;
|
height: 30px;
|
}
|
|
.blueBtn {
|
background-color: rgba(0, 129, 240, 1);
|
border-radius: 4px;
|
color: rgba(255, 255, 255, 1);
|
padding: 0;
|
|
span {
|
font-size: 14px;
|
height: 20px;
|
font-weight: 400;
|
line-height: 20px;
|
}
|
}
|
}
|
}
|
</style>
|