|
@@ -17,7 +17,7 @@
|
|
</el-form>
|
|
</el-form>
|
|
<el-row :gutter="10" class="mb8">
|
|
<el-row :gutter="10" class="mb8">
|
|
<el-col :span="1.5">
|
|
<el-col :span="1.5">
|
|
- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="toAdd">新增</el-button>
|
|
|
|
|
|
+ <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="infoShow = true">新增</el-button>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
<el-table v-loading="loading" :data="tableData">
|
|
<el-table v-loading="loading" :data="tableData">
|
|
@@ -40,15 +40,15 @@
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column label="操作" align="center">
|
|
<el-table-column label="操作" align="center">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <el-button size="mini" type="text" icon="el-icon-edit">编辑</el-button>
|
|
|
|
- <el-button size="mini" type="text" icon="el-icon-set-up">复制</el-button>
|
|
|
|
|
|
+ <el-button v-if="returnTime(scope.row.beginTime)===0" size="mini" type="text" icon="el-icon-edit" @click="editClick(scope.row)">编辑</el-button>
|
|
|
|
+ <el-button size="mini" type="text" icon="el-icon-set-up" @click="copy(scope.row)">复制</el-button>
|
|
<el-button size="mini" type="text" icon="el-icon-delete" @click="removeInfo(scope.row.id)">删除</el-button>
|
|
<el-button size="mini" type="text" icon="el-icon-delete" @click="removeInfo(scope.row.id)">删除</el-button>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <pagination v-show="total>0" background layout="total, sizes, prev, pager, next, jumper" :total="total" :current-page="searchForm.pageNo" :page-size="searchForm.pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
|
|
|
|
</el-table>
|
|
</el-table>
|
|
|
|
+ <el-pagination class="mt10" v-show="total>0" background layout="total, sizes, prev, pager, next, jumper" :total="total" :current-page="searchForm.pageNo" :page-size="searchForm.pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></el-pagination>
|
|
<!-- 新增编辑弹窗 -->
|
|
<!-- 新增编辑弹窗 -->
|
|
- <el-dialog title="新建测试" :visible.sync="infoShow" append-to-body>
|
|
|
|
|
|
+ <el-dialog @close="dialogClose" class="dialog" :title="editNum ===0?'新建测试':'编辑测试'" :visible.sync="infoShow" append-to-body lock-scroll :close-on-click-modal="false">
|
|
<el-form :model="infoForm" :rules="rules" style="width:60%" ref="ruleForm" label-width="100px">
|
|
<el-form :model="infoForm" :rules="rules" style="width:60%" ref="ruleForm" label-width="100px">
|
|
<el-form-item label="测试名称" prop="name">
|
|
<el-form-item label="测试名称" prop="name">
|
|
<el-input v-model="infoForm.name" />
|
|
<el-input v-model="infoForm.name" />
|
|
@@ -56,12 +56,20 @@
|
|
<el-form-item label="测试描述" prop="content">
|
|
<el-form-item label="测试描述" prop="content">
|
|
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" v-model="infoForm.content" />
|
|
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" v-model="infoForm.content" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="生效时间" prop="timeBox">
|
|
|
|
- <el-date-picker v-model="channelDateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
|
|
|
|
- </el-date-picker>
|
|
|
|
|
|
+ <el-form-item label="生效时间" required>
|
|
|
|
+ <el-col :span="11">
|
|
|
|
+ <el-form-item prop="beginTime">
|
|
|
|
+ <el-date-picker type="datetime" placeholder="开始日期" v-model="infoForm.beginTime" style="width:100%"></el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="11">
|
|
|
|
+ <el-form-item prop="endTime">
|
|
|
|
+ <el-date-picker type="datetime" placeholder="结束日期" v-model="infoForm.endTime" style="width:100%"></el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="渠道选择" prop="channelKey">
|
|
<el-form-item label="渠道选择" prop="channelKey">
|
|
- <el-select v-model="channelVal" multiple clearable filterable placeholder="请选择">
|
|
|
|
|
|
+ <el-select v-model="channelVal" multiple clearable filterable placeholder="请选择" @change="channelChange">
|
|
<el-option v-for="item in channelList" :key="item.channelKey" :label="item.channelName" :value="item.channelKey">
|
|
<el-option v-for="item in channelList" :key="item.channelKey" :label="item.channelName" :value="item.channelKey">
|
|
</el-option>
|
|
</el-option>
|
|
</el-select>
|
|
</el-select>
|
|
@@ -81,13 +89,13 @@
|
|
<el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
|
|
<el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
|
|
<el-tab-pane v-for="(item, index) in infoForm.groupData" :key="item.groupName" :label="item.groupName" :name="item.groupName">
|
|
<el-tab-pane v-for="(item, index) in infoForm.groupData" :key="item.groupName" :label="item.groupName" :name="item.groupName">
|
|
<div>
|
|
<div>
|
|
- <el-form-item label="组别名称" prop="name">
|
|
|
|
|
|
+ <el-form-item label="组别名称">
|
|
<el-input v-model="item.name" />
|
|
<el-input v-model="item.name" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="组别描述" prop="content">
|
|
|
|
|
|
+ <el-form-item label="组别描述">
|
|
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" v-model="item.content" />
|
|
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" v-model="item.content" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="分流占比" prop="flowPercent">
|
|
|
|
|
|
+ <el-form-item label="分流占比">
|
|
<el-input v-model="item.flowPercent" placeholder="请输入小数" />
|
|
<el-input v-model="item.flowPercent" placeholder="请输入小数" />
|
|
<div style="color: red">请输入小数如0.5,各组占比之和为1</div>
|
|
<div style="color: red">请输入小数如0.5,各组占比之和为1</div>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -97,14 +105,14 @@
|
|
</el-form>
|
|
</el-form>
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="infoShow = false">取 消</el-button>
|
|
<el-button @click="infoShow = false">取 消</el-button>
|
|
- <el-button type="primary" @click="createTest">确 定</el-button>
|
|
|
|
|
|
+ <el-button type="primary" @click="editNum===0?createTest():editTest()">确 定</el-button>
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
-import { secondChannel, abtestList, removeAbtest, typeListApi } from './ABtestApi'
|
|
|
|
|
|
+import { secondChannel, abtestList, removeAbtest, typeListApi, createAbtest, editAbtest } from './ABtestApi'
|
|
export default {
|
|
export default {
|
|
name: "abtestIndex",
|
|
name: "abtestIndex",
|
|
data () {
|
|
data () {
|
|
@@ -120,7 +128,7 @@ export default {
|
|
loading: true,
|
|
loading: true,
|
|
tableData: [],
|
|
tableData: [],
|
|
total: 0,
|
|
total: 0,
|
|
- infoShow: true,
|
|
|
|
|
|
+ infoShow: false,
|
|
infoForm: {
|
|
infoForm: {
|
|
name: "",
|
|
name: "",
|
|
content: "",
|
|
content: "",
|
|
@@ -132,43 +140,43 @@ export default {
|
|
groupData: [
|
|
groupData: [
|
|
{
|
|
{
|
|
"content": "",
|
|
"content": "",
|
|
- "flowPercent": null,
|
|
|
|
|
|
+ "flowPercent": 0,
|
|
"groupName": "对照组",
|
|
"groupName": "对照组",
|
|
"name": "对照组",
|
|
"name": "对照组",
|
|
"state": 1,
|
|
"state": 1,
|
|
- "strategyId": null,
|
|
|
|
|
|
+ "strategyId": 0,
|
|
"type": 0
|
|
"type": 0
|
|
},
|
|
},
|
|
{
|
|
{
|
|
"content": "",
|
|
"content": "",
|
|
- "flowPercent": null,
|
|
|
|
|
|
+ "flowPercent": 0,
|
|
"groupName": "控制组1",
|
|
"groupName": "控制组1",
|
|
"name": "控制组1",
|
|
"name": "控制组1",
|
|
"state": 1,
|
|
"state": 1,
|
|
- "strategyId": null,
|
|
|
|
|
|
+ "strategyId": 0,
|
|
"type": 1
|
|
"type": 1
|
|
}
|
|
}
|
|
]
|
|
]
|
|
},
|
|
},
|
|
- channelDateTime: [], //新增编辑选择时间
|
|
|
|
channelList: [], //渠道列表
|
|
channelList: [], //渠道列表
|
|
- channelVal: null, //渠道key
|
|
|
|
|
|
+ channelVal: [], //渠道key
|
|
typeList: [], // 类型列表
|
|
typeList: [], // 类型列表
|
|
// 表单规则
|
|
// 表单规则
|
|
rules: {
|
|
rules: {
|
|
name: [{ required: true, message: "请填写名称", trigger: "blur" }],
|
|
name: [{ required: true, message: "请填写名称", trigger: "blur" }],
|
|
content: [{ required: true, message: "请填写描述", trigger: "blur" }],
|
|
content: [{ required: true, message: "请填写描述", trigger: "blur" }],
|
|
- timeBox: [{ type: 'date', required: true, message: '请选择生效时间', trigger: 'change' }],
|
|
|
|
- channelKey: [{ required: true, message: "请绑定渠道", trigger: "change" }],
|
|
|
|
- typeDictId: [{ required: true, message: "请选择测试类型", trigger: "change" }],
|
|
|
|
- state: [{ required: true, message: "请选择状态", trigger: "change" }],
|
|
|
|
- flowPercent: [{ required: true, message: "请输入占比", trigger: "blur" }],
|
|
|
|
|
|
+ beginTime: [{ type: 'date', required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
|
|
+ endTime: [{ type: 'date', required: true, message: '请选择结束日期', trigger: 'change' }],
|
|
|
|
+ channelKey: [{ required: true, message: "请绑定渠道", trigger: 'change' }],
|
|
|
|
+ typeDictId: [{ required: true, message: "请选择测试类型", trigger: 'change' }],
|
|
},
|
|
},
|
|
// 标签页
|
|
// 标签页
|
|
editableTabsValue: "对照组",
|
|
editableTabsValue: "对照组",
|
|
tabIndex: 1,
|
|
tabIndex: 1,
|
|
thisIndex: 0,
|
|
thisIndex: 0,
|
|
isEdit: true,
|
|
isEdit: true,
|
|
|
|
+ // 修改新增/编辑标识
|
|
|
|
+ editNum: 0
|
|
};
|
|
};
|
|
},
|
|
},
|
|
mounted () {
|
|
mounted () {
|
|
@@ -177,6 +185,12 @@ export default {
|
|
this.getTypeList() //获取类型选择
|
|
this.getTypeList() //获取类型选择
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+
|
|
|
|
+ channelChange (e) {
|
|
|
|
+ if (e) {
|
|
|
|
+ this.infoForm.channelKey = this.channelVal.join(',')
|
|
|
|
+ }
|
|
|
|
+ },
|
|
// 时间格式转换
|
|
// 时间格式转换
|
|
getTimeStr (timeStamp) {
|
|
getTimeStr (timeStamp) {
|
|
var now = new Date(timeStamp),
|
|
var now = new Date(timeStamp),
|
|
@@ -185,6 +199,16 @@ export default {
|
|
d = ("0" + now.getDate()).slice(-2);
|
|
d = ("0" + now.getDate()).slice(-2);
|
|
return y + "-" + m + "-" + d + " " + now.toTimeString().substr(0, 8);
|
|
return y + "-" + m + "-" + d + " " + now.toTimeString().substr(0, 8);
|
|
},
|
|
},
|
|
|
|
+ // 判定当前时间是否大于测试开始时间 大于等于返回1 小于返回0
|
|
|
|
+ returnTime (date) {
|
|
|
|
+ let nowTime = new Date().getTime();
|
|
|
|
+ let dateTime = new Date(date).getTime();
|
|
|
|
+ if (nowTime >= dateTime) {
|
|
|
|
+ return 1
|
|
|
|
+ } else {
|
|
|
|
+ return 0
|
|
|
|
+ }
|
|
|
|
+ },
|
|
// 获取列表
|
|
// 获取列表
|
|
init () {
|
|
init () {
|
|
this.loading = true
|
|
this.loading = true
|
|
@@ -204,22 +228,6 @@ export default {
|
|
},
|
|
},
|
|
this.init();
|
|
this.init();
|
|
},
|
|
},
|
|
- // 新增数据
|
|
|
|
- toAdd () {
|
|
|
|
- this.infoShow = true
|
|
|
|
- },
|
|
|
|
- // 删除数据
|
|
|
|
- removeInfo (id) {
|
|
|
|
- this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
|
|
|
|
- confirmButtonText: "确定",
|
|
|
|
- cancelButtonText: "取消",
|
|
|
|
- type: "warning",
|
|
|
|
- }).then(() => {
|
|
|
|
- removeAbtest({ ids: id }).then(res => {
|
|
|
|
- this.init()
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
- },
|
|
|
|
// 列表选择每页数量
|
|
// 列表选择每页数量
|
|
handleSizeChange (val) {
|
|
handleSizeChange (val) {
|
|
this.searchForm.pageNo = 1
|
|
this.searchForm.pageNo = 1
|
|
@@ -287,20 +295,109 @@ export default {
|
|
},
|
|
},
|
|
// 新建abtest
|
|
// 新建abtest
|
|
createTest () {
|
|
createTest () {
|
|
|
|
+ console.log(this.infoForm)
|
|
this.$refs['ruleForm'].validate((valid) => {
|
|
this.$refs['ruleForm'].validate((valid) => {
|
|
if (valid) {
|
|
if (valid) {
|
|
- alert(123)
|
|
|
|
|
|
+ createAbtest(this.infoForm).then(res => {
|
|
|
|
+ this.$message.success('新增成功!')
|
|
|
|
+ this.infoShow = false
|
|
|
|
+ this.init()
|
|
|
|
+ })
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+ },
|
|
|
|
+ // 删除数据
|
|
|
|
+ removeInfo (id) {
|
|
|
|
+ this.$confirm("此操作将删除该数据, 是否继续?", "提示", {
|
|
|
|
+ confirmButtonText: "确定",
|
|
|
|
+ cancelButtonText: "取消",
|
|
|
|
+ type: "warning",
|
|
|
|
+ }).then(() => {
|
|
|
|
+ removeAbtest({ ids: id }).then(res => {
|
|
|
|
+ this.init()
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ // 编辑数据
|
|
|
|
+ editClick (item) {
|
|
|
|
+ this.channelVal = item.channelKey.split(',')
|
|
|
|
+ this.editNum = 1
|
|
|
|
+ this.infoShow = true
|
|
|
|
+ let { beginTime, channelKey, content, endTime, groupData, id, name, state, typeDictId } = item
|
|
|
|
+ this.infoForm = { beginTime, channelKey, content, endTime, groupData, id, name, state, typeDictId }
|
|
|
|
+ },
|
|
|
|
+ editTest () {
|
|
|
|
+ this.$confirm("此操作将修改该数据, 是否继续?", "提示", {
|
|
|
|
+ confirmButtonText: "确定",
|
|
|
|
+ cancelButtonText: "取消",
|
|
|
|
+ type: "warning",
|
|
|
|
+ }).then(() => {
|
|
|
|
+ this.infoForm.beginTime = new Date(this.infoForm.beginTime).getTime()
|
|
|
|
+ this.infoForm.endTime = new Date(this.infoForm.endTime).getTime()
|
|
|
|
+ editAbtest(this.infoForm).then(res => {
|
|
|
|
+ this.$message.success('修改成功!')
|
|
|
|
+ this.infoShow = false
|
|
|
|
+ this.init()
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ //复制数据
|
|
|
|
+ copy (item) {
|
|
|
|
+ this.channelVal = item.channelKey.split(',')
|
|
|
|
+ this.infoShow = true
|
|
|
|
+ let { beginTime, channelKey, content, endTime, groupData, name, state, typeDictId } = item
|
|
|
|
+ name = name + '副本'
|
|
|
|
+ this.infoForm = { beginTime, channelKey, content, endTime, groupData, name, state, typeDictId }
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+ // 弹窗关闭清空值
|
|
|
|
+ dialogClose () {
|
|
|
|
+ this.channelVal = [];
|
|
|
|
+ this.editNum = 0
|
|
|
|
+ this.infoForm = {
|
|
|
|
+ name: "",
|
|
|
|
+ content: "",
|
|
|
|
+ beginTime: "",
|
|
|
|
+ endTime: "",
|
|
|
|
+ channelKey: "",
|
|
|
|
+ typeDictId: "",
|
|
|
|
+ state: 0,
|
|
|
|
+ groupData: [
|
|
|
|
+ {
|
|
|
|
+ "content": "",
|
|
|
|
+ "flowPercent": 0,
|
|
|
|
+ "groupName": "对照组",
|
|
|
|
+ "name": "对照组",
|
|
|
|
+ "state": 1,
|
|
|
|
+ "strategyId": 0,
|
|
|
|
+ "type": 0
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "content": "",
|
|
|
|
+ "flowPercent": 0,
|
|
|
|
+ "groupName": "控制组1",
|
|
|
|
+ "name": "控制组1",
|
|
|
|
+ "state": 1,
|
|
|
|
+ "strategyId": 0,
|
|
|
|
+ "type": 1
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
}
|
|
}
|
|
},
|
|
},
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|
|
-
|
|
|
|
|
|
+<style scoped>
|
|
|
|
+.dialog /deep/ .el-dialog {
|
|
|
|
+ height: 85vh;
|
|
|
|
+ overflow: auto;
|
|
|
|
+}
|
|
|
|
+</style>
|
|
<style lang="scss">
|
|
<style lang="scss">
|
|
.abtestIndex {
|
|
.abtestIndex {
|
|
padding: 20px;
|
|
padding: 20px;
|
|
box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
|
|
+
|
|
// .searchBox {
|
|
// .searchBox {
|
|
// background-color: #fff;
|
|
// background-color: #fff;
|
|
// border-radius: 4px;
|
|
// border-radius: 4px;
|