2 Комити 087f1a9a44 ... 25db8ac738

Аутор SHA1 Порука Датум
  yangfan 25db8ac738 Merge branch 'new' of http://git.platomix.net/litong/purchase into new пре 2 година
  yangfan a0534efb35 7.11判空 пре 2 година

+ 51 - 48
purchase_ao/src/router/index.js

@@ -28,9 +28,9 @@ export const constantRoutes = [{
   path: '/productManagement',
   component: Layout,
   redirect: '/productManagement/',
-  name: '产品管理',
+  name: '产品管理',
   meta: {
-    title: '产品管理',
+    title: '产品管理',
     icon: 'el-icon-s-goods'
   },
   children: [{
@@ -74,13 +74,13 @@ export const constantRoutes = [{
 {
   path: '/channel',
   component: Layout,
-  name: '渠道管理',
+  name: '渠道管理',
   children: [{
     path: '/channel',
     name: '渠道列表',
     component: () => import('@/views/schemeV2/channel'),
     meta: {
-      title: '渠道管理',
+      title: '渠道管理',
       icon: 'el-icon-s-flag'
     }
   }]
@@ -116,31 +116,30 @@ export const constantRoutes = [{
   }]
 },
 {
-  path: '/schemeV2',
+  path: '/strategy',
   component: Layout,
-  redirect: '/schemeV2/',
-  name: '策略管理',
+  redirect: '/strategy/',
+  name: '新策略',
+  meta: {
+    title: '新策略',
+    icon: 'el-icon-s-tools'
+  },
   children: [{
-    path: '/schemeV2/index',
-    name: '策略列表',
-    component: () => import('@/views/schemeV2/index'),
+    path: '/strategy/index',
+    component: () => import('@/views/strategy/index'),
+    name: '新策略列表',
     meta: {
-      title: '策略管理',
-      icon: 'el-icon-s-management'
+      title: '新策略列表'
+    }
+  }, {
+    path: '/strategy/add',
+    component: () => import('@/views/strategy/add'),
+    name: '编辑策略',
+    meta: {
+      title: '编辑策略'
     }
-  }]
-}, {
-  path: '/schemeAdd',
-  component: Close,
-  redirect: '/schemeAdd/',
-  name: '新增策略',
-  children: [{
-    path: '/schemeV2/schemeAdd',
-    name: '新增策略',
-    component: () => import('@/views/schemeV2/schemeAdd')
   }]
 },
-
 {
   path: '/newSchemeProinfo',
   component: Layout,
@@ -177,6 +176,34 @@ export const constantRoutes = [{
     // },
   ]
 },
+
+{
+  path: '/schemeV2',
+  component: Layout,
+  redirect: '/schemeV2/',
+  name: '策略管理',
+  children: [{
+    path: '/schemeV2/index',
+    name: '策略列表',
+    component: () => import('@/views/schemeV2/index'),
+    meta: {
+      title: '策略管理',
+      icon: 'el-icon-s-management'
+    }
+  }]
+}, {
+  path: '/schemeAdd',
+  component: Close,
+  redirect: '/schemeAdd/',
+  name: '新增策略',
+  children: [{
+    path: '/schemeV2/schemeAdd',
+    name: '新增策略',
+    component: () => import('@/views/schemeV2/schemeAdd')
+  }]
+},
+
+
 // 高级策略
 {
   path: '/schemeProinfo',
@@ -362,31 +389,7 @@ export const constantRoutes = [{
   ]
 },
 
-{
-  path: '/strategy',
-  component: Layout,
-  redirect: '/strategy/',
-  name: '新策略',
-  meta: {
-    title: '新策略',
-    icon: 'el-icon-s-tools'
-  },
-  children: [{
-    path: '/strategy/index',
-    component: () => import('@/views/strategy/index'),
-    name: '新策略列表',
-    meta: {
-      title: '新策略列表'
-    }
-  }, {
-    path: '/strategy/add',
-    component: () => import('@/views/strategy/add'),
-    name: '编辑策略',
-    meta: {
-      title: '编辑策略'
-    }
-  }]
-},
+
 {
   path: '/userRight',
   component: Layout,

+ 389 - 435
purchase_ao/src/views/ABtest/edit.vue

@@ -1,460 +1,414 @@
 <template>
-    <div>
-        <el-container>
-            <el-main>
-                <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px">
-                    <el-form-item label="测试名称" prop="name">
-                        <el-input style="width: 40%" v-model="form.name"/>
-                    </el-form-item>
-                    <el-form-item label="测试描述" prop="content">
-                        <el-input type="textarea"
-                                  :autosize="{ minRows: 2, maxRows: 4}"
-                                  v-model="form.content"
-                                  style="width: 40%"/>
-                    </el-form-item>
-                    <el-form-item label="生效时间" prop="timeBox">
-                        <el-date-picker
-                                v-model="timeBox"
-                                type="datetimerange"
-                                value-format="yyyy-MM-dd HH:mm:ss"
-                                range-separator="至"
-                                start-placeholder="开始日期"
-                                end-placeholder="结束日期"
-                                @change=handleChangeTime
-                        >
-                        </el-date-picker>
-                    </el-form-item>
-                    <el-form-item label="渠道选择" prop="channelKey">
-                        <el-select v-model="channelBox" style="width: 40%" multiple clearable filterable
-                                   placeholder="请选择" @change=handleChangeChannel>
-                            <el-option
-                                    v-for="item in channelList"
-                                    :key="item.channelKey"
-                                    :label="item.channelName"
-                                    :value="item.channelKey"
-                            >
-                            </el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item label="类型选择" prop="typeDictId">
-                        <el-select v-model="form.typeDictId" pr style="width: 40%" clearable filterable
-                                   placeholder="请选择">
-                            <el-option
-                                    v-for="item in typeList"
-                                    :key="item.id"
-                                    :label="item.typeName"
-                                    :value="item.id">
-                            </el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item label="状态">
-                        <el-switch style="width: 300px" v-model="form.state"
-                                   active-text="生效"
-                                   :active-value=1
-                                   inactive-text="无效"
-                                   :inactive-value=0
-                        />
-                    </el-form-item>
+  <div>
+    <el-container>
+      <el-main>
+        <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px">
+          <el-form-item label="测试名称" prop="name">
+            <el-input style="width: 40%" v-model="form.name" />
+          </el-form-item>
+          <el-form-item label="测试描述" prop="content">
+            <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4}" v-model="form.content" style="width: 40%" />
+          </el-form-item>
+          <el-form-item label="生效时间" prop="timeBox">
+            <el-date-picker v-model="timeBox" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change=handleChangeTime>
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="渠道选择" prop="channelKey">
+            <el-select v-model="channelBox" style="width: 40%" multiple clearable filterable placeholder="请选择" @change=handleChangeChannel>
+              <el-option v-for="item in channelList" :key="item.channelKey" :label="item.channelName" :value="item.channelKey">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="类型选择" prop="typeDictId">
+            <el-select v-model="form.typeDictId" pr style="width: 40%" clearable filterable placeholder="请选择">
+              <el-option v-for="item in typeList" :key="item.id" :label="item.typeName" :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="状态">
+            <el-switch style="width: 300px" v-model="form.state" active-text="生效" :active-value=1 inactive-text="无效" :inactive-value=0 />
+          </el-form-item>
 
-                    <div v-if="isEdit === true" style="margin-bottom: 20px;">
-                        <el-button type="primary" size="small" @click="addTab(editableTabsValue)">新增分组</el-button>
-                    </div>
-                    <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab"
-                             @tab-click="clickTab">
-                        <el-tab-pane
-                                v-for="(item, index) in form.groupData"
-                                :key='item.groupName'
-                                :label="item.groupName"
-                                :name='item.groupName'
-                        >
-                            <div>
-                                <el-form-item label="组别名称" prop="name">
-                                    <el-input style="width: 40%" v-model="item.name"/>
-                                </el-form-item>
-                                <el-form-item label="组别描述" prop="content">
-                                    <el-input type="textarea"
-                                              :autosize="{ minRows: 2, maxRows: 4}"
-                                              v-model="item.content"
-                                              style="width: 40%"/>
-                                </el-form-item>
+          <div v-if="isEdit === true" style="margin-bottom: 20px;">
+            <el-button type="primary" size="small" @click="addTab(editableTabsValue)">新增分组</el-button>
+          </div>
+          <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab" @tab-click="clickTab">
+            <el-tab-pane v-for="(item, index) in form.groupData" :key='item.groupName' :label="item.groupName" :name='item.groupName'>
+              <div>
+                <el-form-item label="组别名称" prop="name">
+                  <el-input style="width: 40%" v-model="item.name" />
+                </el-form-item>
+                <el-form-item label="组别描述" prop="content">
+                  <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4}" v-model="item.content" style="width: 40%" />
+                </el-form-item>
 
-                                <el-form-item label="选择策略">
-                                    <el-select v-model="item.strategyId" style="width: 40%" clearable filterable
-                                               placeholder="请选择">
-                                        <el-option
-                                                v-for="item in strategyList"
-                                                :key="item.id"
-                                                :label="item.strategyName"
-                                                :value="item.id"
-                                        >
-                                        </el-option>
-                                    </el-select>
-                                    <span style="margin-left: 20px">
-                                        <vxe-button @click="refresh" icon="el-icon-refresh" size="mini"
-                                                    content="刷新"></vxe-button>
-                                    </span>
-                                    <span style="margin-left: 20px">
-                                        <vxe-button @click="toAdd" icon="el-icon-plus" size="mini"
-                                                    content="新建"></vxe-button>
-                                    </span>
-                                    <span style="margin-left: 20px">
-                                        <vxe-button @click="toEdit(item.strategyId)" icon="el-icon-edit" size="mini"
-                                                    content="编辑"></vxe-button>
-                                    </span>
-                                </el-form-item>
+                <el-form-item label="选择策略">
+                  <el-select v-model="item.strategyId" style="width: 40%" clearable filterable placeholder="请选择">
+                    <el-option v-for="item in strategyList" :key="item.id" :label="item.strategyName" :value="item.id">
+                    </el-option>
+                  </el-select>
+                  <span style="margin-left: 20px">
+                    <vxe-button @click="refresh" icon="el-icon-refresh" size="mini" content="刷新"></vxe-button>
+                  </span>
+                  <span style="margin-left: 20px">
+                    <vxe-button @click="toAdd" icon="el-icon-plus" size="mini" content="新建"></vxe-button>
+                  </span>
+                  <span style="margin-left: 20px">
+                    <vxe-button @click="toEdit(item.strategyId)" icon="el-icon-edit" size="mini" content="编辑"></vxe-button>
+                  </span>
+                </el-form-item>
 
+                <el-form-item label="分流占比" prop="flowPercent">
+                  <el-input style="width: 40%" v-model="item.flowPercent" placeholder="请输入小数" />
+                  <div style="color: red">请输入小数如0.5,各组占比之和为1</div>
+                </el-form-item>
+              </div>
+            </el-tab-pane>
+          </el-tabs>
 
-                                <el-form-item label="分流占比" prop="flowPercent">
-                                    <el-input style="width: 40%" v-model="item.flowPercent" placeholder="请输入小数"/>
-                                    <div style="color: red">请输入小数如0.5,各组占比之和为1</div>
-                                </el-form-item>
-                            </div>
-                        </el-tab-pane>
-                    </el-tabs>
-
-
-                </el-form>
-            </el-main>
-            <el-footer style="z-index: 9999">
-                <div v-if="isEdit === true" class="bodyBox">
-                    <div style="display: flex;justify-content: flex-end">
-                        <el-button type="primary" @click="onSubmit('ruleForm')">
-                            {{btn}}
-                        </el-button>
-                        <el-button @click="close">
-                            取消
-                        </el-button>
-                    </div>
-                </div>
-                <div v-else class="bodyBox">
-                    <div style="display: flex;justify-content: flex-end">
-                        <el-button style="width: 200px;margin-right: 100px" type="primary" @click="closeTwo">
-                            关闭
-                        </el-button>
-                    </div>
-                </div>
-            </el-footer>
-        </el-container>
-    </div>
+        </el-form>
+      </el-main>
+      <el-footer style="z-index: 9999">
+        <div v-if="isEdit === true" class="bodyBox">
+          <div style="display: flex;justify-content: flex-end">
+            <el-button type="primary" @click="onSubmit('ruleForm')">
+              {{btn}}
+            </el-button>
+            <el-button @click="close">
+              取消
+            </el-button>
+          </div>
+        </div>
+        <div v-else class="bodyBox">
+          <div style="display: flex;justify-content: flex-end">
+            <el-button style="width: 200px;margin-right: 100px" type="primary" @click="closeTwo">
+              关闭
+            </el-button>
+          </div>
+        </div>
+      </el-footer>
+    </el-container>
+  </div>
 </template>
 
 <script>
-    import {post, get} from '@/api/common'
+import { post, get } from '@/api/common'
 
-    export default {
-        name: 'ABclassEdit',
-        data() {
-            return {
-                //类型列表
-                typeList: {},
-                //渠道列表
-                channelList: {},
-                //策略列表
-                strategyList: {},
-                //编辑表单
-                form: {
-                    state: 1,
-                    groupData: [
-                        {
-                            "content": "",
-                            "flowPercent": null,
-                            "groupName": "对照组",
-                            "name": "对照组",
-                            "state": 1,
-                            "strategyId": null,
-                            "type": 0
-                        },
-                        {
-                            "content": "",
-                            "flowPercent": null,
-                            "groupName": "控制组1",
-                            "name": "控制组1",
-                            "state": 1,
-                            "strategyId": null,
-                            "type": 1
-                        }
-                    ],
-                },
-                timeBox: [],
-                channelBox: [],
-                btn: '立即创建',
-                // 表单验证
-                rules: {
-                    channelKey: [
-                        {required: true, message: '请绑定渠道', trigger: 'blur'},
-                    ],
-                    name: [
-                        {required: true, message: '请填写测试名称', trigger: 'blur'},
-                    ],
-                    typeDictId: [
-                        {required: true, message: '请选择测试类型', trigger: 'blur'},
-                    ]
-                },
-                // 标签页
-                editableTabsValue: '对照组',
-                tabIndex: 1,
-                thisIndex: 0,
-                isEdit: true
-            }
-        },
-        created() {
-            document.title = '编辑测试'
-            get('/abtest/typedict/list', {pageNum: 1, pageSize: 99999}).then(res => {
-                this.typeList = res.data.list
-            })
-            get('/channelInfo/listChannels', {'pageSize': 9999, 'pageNum': 1}).then(res => {
-                this.channelList = res.data.list
-            })
-            get('/strategyInfoNew/page', {'pageSize': 9999, 'pageNum': 1, 'strategyType': 2}).then(res => {
-                this.strategyList = res.data.list
-            })
+export default {
+  name: 'ABclassEdit',
+  data () {
+    return {
+      //类型列表
+      typeList: {},
+      //渠道列表
+      channelList: {},
+      //策略列表
+      strategyList: {},
+      //编辑表单
+      form: {
+        state: 1,
+        groupData: [
+          {
+            "content": "",
+            "flowPercent": null,
+            "groupName": "对照组",
+            "name": "对照组",
+            "state": 1,
+            "strategyId": null,
+            "type": 0
+          },
+          {
+            "content": "",
+            "flowPercent": null,
+            "groupName": "控制组1",
+            "name": "控制组1",
+            "state": 1,
+            "strategyId": null,
+            "type": 1
+          }
+        ],
+      },
+      timeBox: [],
+      channelBox: [],
+      btn: '立即创建',
+      // 表单验证
+      rules: {
+        channelKey: [
+          { required: true, message: '请绑定渠道', trigger: 'blur' },
+        ],
+        name: [
+          { required: true, message: '请填写测试名称', trigger: 'blur' },
+        ],
+        typeDictId: [
+          { required: true, message: '请选择测试类型', trigger: 'blur' },
+        ]
+      },
+      // 标签页
+      editableTabsValue: '对照组',
+      tabIndex: 1,
+      thisIndex: 0,
+      isEdit: true
+    }
+  },
+  created () {
+    document.title = '编辑测试'
+    get('/abtest/typedict/list', { pageNum: 1, pageSize: 99999 }).then(res => {
+      this.typeList = res.data.list
+    })
+    get('/channelInfo/listChannels', { 'pageSize': 9999, 'pageNum': 1 }).then(res => {
+      this.channelList = res.data.list
+    })
+    get('/strategyInfoNew/page', { 'pageSize': 9999, 'pageNum': 1, 'strategyType': 2 }).then(res => {
+      this.strategyList = res.data.list
+    })
 
-        },
-        mounted() {
-            if (this.$route.query.id) {
-                get('/abtest/info/list', {'id': this.$route.query.id}).then(res => {
-                    let nres = JSON.parse(JSON.stringify(res.data.list[0]));
-                    this.timeBox = [nres.begintime, nres.endtime]
-                    this.channelBox = nres.channelKey.split(',')
-                    let now = Date.parse(new Date());
-                    let begintime = Date.parse(nres.begintime)
-                    let endtime = Date.parse(nres.endtime);
-                    this.form = nres;
-                    if (now > endtime) {
-                        this.form.state = 0
-                        post('/abtest/info/update/' + this.$route.query.id, this.form)
-                    }
-                    if (now > begintime) {
-                        this.isEdit = false
-                    }
-                });
-                this.btn = '编辑保存'
-            }
+  },
+  mounted () {
+    if (this.$route.query.id) {
+      get('/abtest/info/list', { 'id': this.$route.query.id }).then(res => {
+        let nres = JSON.parse(JSON.stringify(res.data.list[0]));
+        this.timeBox = [nres.begintime, nres.endtime]
+        this.channelBox = nres.channelKey.split(',')
+        let now = Date.parse(new Date());
+        let begintime = Date.parse(nres.begintime)
+        let endtime = Date.parse(nres.endtime);
+        this.form = nres;
+        if (now > endtime) {
+          this.form.state = 0
+          post('/abtest/info/update/' + this.$route.query.id, this.form)
+        }
+        if (now > begintime) {
+          this.isEdit = false
+        }
+      });
+      this.btn = '编辑保存'
+    }
 
-            if (this.$route.query.copyId) {
-                get('/abtest/info/list', {'id': this.$route.query.copyId}).then(res => {
-                    let nres = JSON.parse(JSON.stringify(res.data.list[0]));
-                    this.timeBox = [nres.begintime, nres.endtime]
-                    this.channelBox = nres.channelKey.split(',')
-                    this.form = nres;
-                    this.form.name = nres.name + ' 副本'
-                    console.log(this.form)
-                });
+    if (this.$route.query.copyId) {
+      get('/abtest/info/list', { 'id': this.$route.query.copyId }).then(res => {
+        let nres = JSON.parse(JSON.stringify(res.data.list[0]));
+        this.timeBox = [nres.begintime, nres.endtime]
+        this.channelBox = nres.channelKey.split(',')
+        this.form = nres;
+        this.form.name = nres.name + ' 副本'
+        console.log(this.form)
+      });
+    }
+  },
+  methods: {
+    // 提交按钮
+    onSubmit (formName) {
+      this.$confirm('您确定编辑该类型?当前操作会影响所有相关测试', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$refs[formName].validate((valid) => {
+          console.log(valid)
+          if (valid) {
+            if (this.form.groupData.length < 2) {
+              this.$message({
+                message: '至少保留一组控制组',
+                type: 'warning',
+                duration: 3000,
+                offset: 360
+              })
+              return false
+            }
+            let sum = 0
+            let havestag = true
+            this.form.groupData.forEach((item, index) => {
+              sum = item.flowPercent * 1 + sum
+              if (!item.strategyId) {
+                this.$message({
+                  message: '请选择策略',
+                  type: 'warning',
+                  duration: 3000,
+                  offset: 360
+                })
+                havestag = false
+              }
+            });
+            if (sum !== 1) {
+              this.$message({
+                message: '分流之和需要等于1',
+                type: 'warning',
+                duration: 3000,
+                offset: 360
+              })
+              return false
             }
-        },
-        methods: {
-            // 提交按钮
-            onSubmit(formName) {
-                this.$confirm('您确定编辑该类型?当前操作会影响所有相关测试', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                }).then(() => {
-                    this.$refs[formName].validate((valid) => {
-                        console.log(valid)
-                        if (valid) {
-                            if (this.form.groupData.length < 2) {
-                                this.$message({
-                                    message: '至少保留一组控制组',
-                                    type: 'warning',
-                                    duration: 3000,
-                                    offset: 360
-                                })
-                                return false
-                            }
-                            let sum = 0
-                            let havestag = true
-                            this.form.groupData.forEach((item, index) => {
-                                sum = item.flowPercent * 1 + sum
-                                if (!item.strategyId) {
-                                    this.$message({
-                                        message: '请选择策略',
-                                        type: 'warning',
-                                        duration: 3000,
-                                        offset: 360
-                                    })
-                                    havestag = false
-                                }
-                            });
-                            if (sum !== 1) {
-                                this.$message({
-                                    message: '分流之和需要等于1',
-                                    type: 'warning',
-                                    duration: 3000,
-                                    offset: 360
-                                })
-                                return false
-                            }
-                            if (havestag === false) return false
+            if (havestag === false) return false
 
-                            if (this.$route.query.id) {
-                                console.log(this.form)
-                                post('/abtest/info/update/' + this.$route.query.id, this.form).then(res => {
-                                    this.$message({
-                                        message: res.message,
-                                        type: 'success',
-                                        duration: 3000,
-                                        offset: 360
-                                    })
+            if (this.$route.query.id) {
+              console.log(this.form)
+              post('/abtest/info/update/' + this.$route.query.id, this.form).then(res => {
+                this.$message({
+                  message: res.message,
+                  type: 'success',
+                  duration: 3000,
+                  offset: 360
+                })
 
-                                    setTimeout(() => {
-                                        window.close()
-                                    }, 1500)
-                                })
-                            } else {
-                                post('/abtest/info/create', this.form).then(res => {
-                                    this.$message({
-                                        message: res.message,
-                                        type: 'success',
-                                        duration: 3000,
-                                        offset: 360
-                                    })
-                                    setTimeout(() => {
-                                        window.close()
-                                    }, 1500)
-                                })
-                            }
-                        } else {
-                            console.log('error submit!!');
-                            return false;
-                        }
-                    });
-                }).catch(() => {
-                    this.$message({
-                        type: 'info',
-                        message: '已取消'
-                    });
-                });
-            },
+                setTimeout(() => {
+                  window.close()
+                }, 1500)
+              })
+            } else {
+              post('/abtest/info/create', this.form).then(res => {
+                this.$message({
+                  message: res.message,
+                  type: 'success',
+                  duration: 3000,
+                  offset: 360
+                })
+                setTimeout(() => {
+                  window.close()
+                }, 1500)
+              })
+            }
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        });
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消'
+        });
+      });
+    },
 
-            // 取消按钮
-            close() {
-                this.$confirm('此操作不会保存已编辑数据, 是否继续?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                }).then(() => {
-                    window.location.href = 'about:blank'
-                    window.close()
-                }).catch(() => {
-                    this.$message({
-                        type: 'info',
-                        message: '已取消'
-                    });
-                });
-            },
-            closeTwo() {
-                window.location.href = 'about:blank'
-                window.close()
-            },
+    // 取消按钮
+    close () {
+      this.$confirm('此操作不会保存已编辑数据, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        window.location.href = 'about:blank'
+        window.close()
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消'
+        });
+      });
+    },
+    closeTwo () {
+      window.location.href = 'about:blank'
+      window.close()
+    },
 
-            // 表填格式转换
-            handleChangeTime(value) {
-                this.form.begintime = value[0]
-                this.form.endtime = value[1]
-            },
-            handleChangeChannel(value) {
-                let text = ''
-                for (var i = 0; i < value.length; i++) {
-                    if (i === 0) {
-                        text = value[i]
-                    } else {
-                        text = text + ',' + value[i]
-                    }
-                }
-                this.form.channelKey = text
-                // console.log(this.channelBox)
-            },
+    // 表填格式转换
+    handleChangeTime (value) {
+      this.form.begintime = value[0]
+      this.form.endtime = value[1]
+    },
+    handleChangeChannel (value) {
+      let text = ''
+      for (var i = 0; i < value.length; i++) {
+        if (i === 0) {
+          text = value[i]
+        } else {
+          text = text + ',' + value[i]
+        }
+      }
+      this.form.channelKey = text
+      // console.log(this.channelBox)
+    },
 
-            // 标签页
-            addTab(targetName) {
-                if (this.form.groupData.length <= 4) {
-                    this.tabIndex++
-                    this.form.groupData.push({
-                        "content": "",
-                        "flowPercent": null,
-                        "groupName": "控制组" + this.tabIndex,
-                        "name": "控制组" + this.tabIndex,
-                        "state": 1,
-                        "strategyId": null,
-                        "type": 1
-                    });
-                    this.editableTabsValue = "控制组" + this.tabIndex;
-                } else {
-                    this.$message({
-                        message: '对照组最多4组',
-                        type: 'warning',
-                        duration: 3000,
-                        offset: 360
-                    })
-                }
-                console.log(this.form.groupData)
-            },
-            removeTab(targetName) {
-                if (targetName !== '对照组') {
-                    let tabs = this.form.groupData;
-                    let newTabs = []
-                    tabs.forEach((tab, index) => {
-                        if (tab.groupName !== targetName) {
-                            newTabs.push(tab)
-                        }
-                    });
-                    this.editableTabsValue = '对照组'
-                    this.form.groupData = newTabs
-                } else {
-                    this.$message({
-                        message: '对照组不可删除',
-                        type: 'warning',
-                        duration: 3000,
-                        offset: 360
-                    })
-                }
-                console.log(this.form.groupData)
-            },
-            clickTab(tab) {
-                console.log(this.form.groupData[tab.index])
-            },
-            toAdd(e) {
-                const routeUrl = this.$router.resolve({path: '/schemeV2/schemeAdd', query: {id: e.id}})
-                window.open(routeUrl.href, '_blank')
-            },
-            toEdit(e) {
-                if (e === null) {
-                    this.$message({
-                        message: '请先选择一个策略',
-                        type: 'warning',
-                        duration: 3000,
-                        offset: 360
-                    })
-                } else {
-                    const routeUrl = this.$router.resolve({path: '/schemeV2/schemeAdd', query: {id: e.id}})
-                    window.open(routeUrl.href + '?id=' + e, '_blank')
-                }
+    // 标签页
+    addTab (targetName) {
+      if (this.form.groupData.length <= 4) {
+        this.tabIndex++
+        this.form.groupData.push({
+          "content": "",
+          "flowPercent": null,
+          "groupName": "控制组" + this.tabIndex,
+          "name": "控制组" + this.tabIndex,
+          "state": 1,
+          "strategyId": null,
+          "type": 1
+        });
+        this.editableTabsValue = "控制组" + this.tabIndex;
+      } else {
+        this.$message({
+          message: '对照组最多4组',
+          type: 'warning',
+          duration: 3000,
+          offset: 360
+        })
+      }
+      console.log(this.form.groupData)
+    },
+    removeTab (targetName) {
+      if (targetName !== '对照组') {
+        let tabs = this.form.groupData;
+        let newTabs = []
+        tabs.forEach((tab, index) => {
+          if (tab.groupName !== targetName) {
+            newTabs.push(tab)
+          }
+        });
+        this.editableTabsValue = '对照组'
+        this.form.groupData = newTabs
+      } else {
+        this.$message({
+          message: '对照组不可删除',
+          type: 'warning',
+          duration: 3000,
+          offset: 360
+        })
+      }
+      console.log(this.form.groupData)
+    },
+    clickTab (tab) {
+      console.log(this.form.groupData[tab.index])
+    },
+    toAdd (e) {
+      const routeUrl = this.$router.resolve({ path: '/schemeV2/schemeAdd', query: { id: e.id } })
+      window.open(routeUrl.href, '_blank')
+    },
+    toEdit (e) {
+      if (e === null) {
+        this.$message({
+          message: '请先选择一个策略',
+          type: 'warning',
+          duration: 3000,
+          offset: 360
+        })
+      } else {
+        const routeUrl = this.$router.resolve({ path: '/schemeV2/schemeAdd', query: { id: e.id } })
+        window.open(routeUrl.href + '?id=' + e, '_blank')
+      }
 
-            },
-            refresh() {
-                get('/strategyInfoNew/page', {'pageSize': 9999, 'pageNum': 1}).then(res => {
-                    this.strategyList = res.data.list
-                })
-            },
-        }
+    },
+    refresh () {
+      get('/strategyInfoNew/page', { 'pageSize': 9999, 'pageNum': 1 }).then(res => {
+        this.strategyList = res.data.list
+      })
+    },
+  }
 
-    }
+}
 </script>
 
 <style lang="scss">
-    .el-date-editor--datetimerange.el-input, .el-date-editor--datetimerange.el-input__inner {
-        width: 40%;
-    }
+.el-date-editor--datetimerange.el-input,
+.el-date-editor--datetimerange.el-input__inner {
+  width: 40%;
+}
 
-    .el-footer {
-        position: fixed;
-        bottom: 0;
-        right: 0;
-    }
+.el-footer {
+  position: fixed;
+  bottom: 0;
+  right: 0;
+}
 
-    .avatar {
-        width: 100%;
-        max-width: 500px;
-    }
+.avatar {
+  width: 100%;
+  max-width: 500px;
+}
 </style>

+ 6 - 7
purchase_ao/src/views/newSchemeProinfo/index.vue

@@ -18,7 +18,6 @@
               <el-option label="地域投放" :value="2" />
               <el-option label="活动投放" :value="3" />
               <el-option label="智能投放" :value="4" />
-
             </el-select>
           </el-form-item>
           <el-form-item style="float: right">
@@ -36,9 +35,9 @@
           </template>
         </vxe-toolbar>
         <vxe-table border resizable keep-source show-overflow highlight-hover-row ref="xTable" :data="tableData" :edit-config="{trigger: 'click', mode: 'cell', showStatus: true, }">
-          <vxe-table-column field="name" title="策略名称" width="230" />
-          <vxe-table-column field="content" title="策略备注" width="230" />
-          <vxe-table-column field="type" title="策略类型" width="250">
+          <vxe-table-column field="name" title="策略名称" />
+          <vxe-table-column field="content" title="策略备注" />
+          <vxe-table-column field="type" title="策略类型">
             <template #default="{ row }">
               <span v-if="row.type === 1">ab策略</span>
               <span v-if="row.type === 3">活动投放</span>
@@ -46,14 +45,14 @@
               <span v-if="row.type === 2">地域投放</span>
             </template>
           </vxe-table-column>
-          <vxe-table-column title="状态" width="220">
+          <vxe-table-column title="状态">
             <template #default="{ row }">
               <span style="color: rgb(100, 194, 56)" v-if="row.state === 1">生效中</span>
               <span style="color:#b9b9b9" v-if="row.state === 0">未生效</span>
             </template>
           </vxe-table-column>
-          <vxe-table-column field="createTime" title="创建时间" width="320" />
-          <vxe-table-column title="操作">
+          <vxe-table-column field="createTime" title="创建时间" />
+          <vxe-table-column title="操作" width="230">
             <template #default="{ row }">
               <vxe-button @click="toAdd(row)">编辑</vxe-button>
               <vxe-button @click="del(row)">删除</vxe-button>

+ 514 - 279
purchase_ao/src/views/newSchemeProinfo/schemeAb.vue

@@ -2,134 +2,292 @@
   <div>
     <el-container>
       <el-main>
-        <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px">
+        <el-form label-width="100px">
           <el-divider content-position="left">编辑基本信息</el-divider>
-          <el-row :gutter="10">
-            <el-col :span="17">
-              <el-form-item label="策略名称" prop="name">
-                <el-input style="width: 300px" v-model="form.name" @change="changeInputer" />
-              </el-form-item>
-              <el-row :gutter="20">
-                <el-col :span="20">
-                  <el-form-item label="策略描述" prop="maskText">
-                    <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" v-model="form.content" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-form-item label="策略类型">
-                <el-select style="width: 300px" v-model="form.type" placeholder="请选择策略类型" :disabled="this.edit">
-                  <!--  -->
-                  <el-option label="A/B策略" :value="1" />
-                  <el-option label="地域投放" :value="2" />
-                  <el-option label="活动投放" :value="3" />
-                  <el-option label="智能投放" :value="4">
-                    <span style="float:left">智能投放</span>
-                    <span style="float:right;color:#F56C6C">内测中</span>
-                  </el-option>
-
-                </el-select>
-              </el-form-item>
-              <el-form-item label="生效状态" v-if="this.edit">
-                <el-select style="width: 300px" v-model="form.state" placeholder="请选择生效状态">
-                  <el-option label="有效" :value="1" />
-                  <el-option label="无效" :value="0" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
+          <el-form
+            :model="form"
+            :rules="rules"
+            ref="ruleForm"
+            label-width="100px"
+          >
+            <el-row :gutter="10">
+              <el-col :span="17">
+                <el-form-item label="策略名称" prop="name">
+                  <el-input
+                    style="width: 300px"
+                    v-model="form.name"
+                    @change="changeInputer"
+                  />
+                </el-form-item>
+                <el-form-item label="策略描述" prop="maskText">
+                  <el-input
+                    type="textarea"
+                    :autosize="{ minRows: 2, maxRows: 4 }"
+                    v-model="form.content"
+                  />
+                </el-form-item>
+
+                <el-form-item label="策略类型" prop="type">
+                  <el-select
+                    style="width: 300px"
+                    v-model="form.type"
+                    placeholder="请选择策略类型"
+                    :disabled="this.edit"
+                  >
+                    <el-option label="A/B策略" :value="1" />
+                    <el-option label="地域投放" :value="2" />
+                    <el-option label="活动投放" :value="3" />
+                    <el-option label="智能投放" :value="4">
+                      <span style="float: left">智能投放</span>
+                      <span style="float: right; color: #f56c6c">内测中</span>
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="生效状态" v-if="this.edit">
+                  <el-select
+                    style="width: 300px"
+                    v-model="form.state"
+                    placeholder="请选择生效状态"
+                  >
+                    <el-option label="有效" :value="1" />
+                    <el-option label="无效" :value="0" />
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
           <el-divider content-position="left">规则配置 </el-divider>
           <!-- ab策略-->
-          <div v-if="form.type==1">
-            <el-form-item label="日期选择">
-              <el-date-picker type="datetimerange" clearable v-model="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期" range-separator="至" value-format="yyyy-MM-dd HH:mm:ss">
-              </el-date-picker>
-            </el-form-item>
-
-            <el-tabs v-model="editableTabsValue" type="card" closable @tab-click="clickTab">
-              <el-tab-pane v-for="(item, index) in abform.groupInfo" :key='item.groupName' :label="item.groupName" :name='item.groupName'>
-                <div>
-                  <el-form-item label="选择策略">
-                    <el-select v-model="item.strategyTemplateId" style="width: 40%" clearable filterable placeholder="请选择">
-                      <el-option v-for="item in strategyList" :key="item.id" :label="item.strategyName" :value="item.id">
-                      </el-option>
-                    </el-select>
-                  </el-form-item>
-
-                  <el-form-item label="分流占比" prop="flowPercent">
-                    <el-input style="width: 40%" v-model="item.flowPercent" placeholder="请输入小数" />
-                    <div style="color: red">请输入小数如0.5,各组占比之和为1</div>
-                  </el-form-item>
-
-                </div>
-              </el-tab-pane>
-            </el-tabs>
-
+          <div v-if="form.type == 1">
+            <el-form :model="abform" label-width="100px">
+              <div class="tip">
+                <span class="req">*</span>
+                <el-form-item label="日期选择" prop="datetimerange">
+                  <el-date-picker
+                    type="datetimerange"
+                    clearable
+                    v-model="datetimerange"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+                    range-separator="至"
+                    value-format="yyyy-MM-dd HH:mm:ss"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </div>
+              <el-tabs
+                v-model="editableTabsValue"
+                type="card"
+                closable
+                @tab-click="clickTab"
+              >
+                <el-tab-pane
+                  v-for="item in abform.groupInfo"
+                  :key="item.groupName"
+                  :label="item.groupName"
+                  :name="item.groupName"
+                >
+                  <div>
+                    <div class="tip">
+                      <span class="req">*</span>
+                      <el-form-item label="选择策略" prop="strategyTemplateId">
+                        <el-select
+                          v-model="item.strategyTemplateId"
+                          clearable
+                          filterable
+                          placeholder="请选择"
+                        >
+                          <el-option
+                            v-for="item in strategyList"
+                            :key="item.id"
+                            :label="item.strategyName"
+                            :value="item.id"
+                          >
+                          </el-option>
+                        </el-select>
+                      </el-form-item>
+                    </div>
+                    <div class="tip">
+                      <span class="req">*</span>
+                      <el-form-item label="分流占比" prop="flowPercent">
+                        <el-input
+                          style="width: 90%"
+                          v-model="item.flowPercent"
+                          placeholder="请输入小数"
+                        />
+                        <div style="color: red">
+                          请输入小数如0.5,各组占比之和为1
+                        </div>
+                      </el-form-item>
+                    </div>
+                  </div>
+                </el-tab-pane>
+              </el-tabs>
+            </el-form>
           </div>
-          <div v-if="form.type==2">
-            <el-form-item label="地域选择">
-              <el-select v-model="locationForm.locatioName" style="width: 40%" clearable filterable placeholder="请选择">
-                <el-option v-for="item in provinceListAll" :key="item" :value="item" :label="item" />
-                </el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="选用策略">
-              <el-select v-model="locationForm.strategyTemplateId" style="width: 40%" clearable filterable placeholder="请选择">
-                <el-option v-for="item in strategyList" :key="item.id" :label="item.strategyName" :value="item.id">
-                </el-option>
-              </el-select>
-            </el-form-item>
+          <div v-if="form.type == 2">
+            <el-form label-width="100px">
+              <div class="tip">
+                <span class="req">*</span>
+                <el-form-item label="地域选择" prop="locatioName">
+                  <el-select
+                    v-model="locationForm.locatioName"
+                    clearable
+                    filterable
+                    placeholder="请选择"
+                  >
+                    <el-option
+                      v-for="item in provinceListAll"
+                      :key="item"
+                      :value="item"
+                      :label="item"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </div>
+              <div class="tip">
+                <span class="req">*</span>
+                <el-form-item label="选用策略" prop="strategyTemplateId">
+                  <el-select
+                    v-model="locationForm.strategyTemplateId"
+                    clearable
+                    filterable
+                    placeholder="请选择"
+                  >
+                    <el-option
+                      v-for="item in strategyList"
+                      :key="item.id"
+                      :label="item.strategyName"
+                      :value="item.id"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </div>
+            </el-form>
           </div>
-          <div v-if="form.type==3">
-            <el-form-item label="日期选择">
-              <el-date-picker type="datetimerange" clearable v-model="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期" range-separator="至" value-format="yyyy-MM-dd">
-              </el-date-picker>
-            </el-form-item>
-            <el-form-item label="星期选择">
-              <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">
-                全选
-              </el-checkbox>
-              <div style="margin: 15px 0"></div>
-              <el-checkbox-group v-model="checkedWeeks" @change="handleCheckedCitiesChange">
-                <el-checkbox v-for="item in weeksList" :label="item" :key="item">{{ item }}</el-checkbox>
-              </el-checkbox-group>
-            </el-form-item>
-            <el-form-item label="时间选择">
-              <el-time-picker v-model="activeForm.startTime" :picker-options="{ start: '00:00', end: '18:30' }" format="HH:mm:ss" value-format="HH:mm:ss" placeholder="开始时间">
-              </el-time-picker>
-              -
-              <el-time-picker v-model="activeForm.endTime" format="HH:mm:ss" value-format="HH:mm:ss" placeholder="结束时间">
-              </el-time-picker>
-            </el-form-item>
-            <el-form-item label="投放策略">
-              <el-select v-model="activeForm.strategyTemplateId" style="width: 40%" clearable filterable placeholder="请选择">
+          <div v-if="form.type == 3">
+            <el-form label-width="100px">
+              <div class="tip">
+                <span class="req">*</span>
+                <el-form-item label="日期选择" prop="datetimerange">
+                  <el-date-picker
+                    type="datetimerange"
+                    clearable
+                    v-model="datetimerange"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+                    range-separator="至"
+                    value-format="yyyy-MM-dd"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </div>
+              <el-form-item label="星期选择">
+                <el-checkbox
+                  :indeterminate="isIndeterminate"
+                  v-model="checkAll"
+                  @change="handleCheckAllChange"
+                >
+                  全选
+                </el-checkbox>
+                <div style="margin: 15px 0"></div>
+                <el-checkbox-group
+                  v-model="checkedWeeks"
+                  @change="handleCheckedCitiesChange"
+                >
+                  <el-checkbox
+                    v-for="item in weeksList"
+                    :label="item"
+                    :key="item"
+                    >{{ item }}</el-checkbox
+                  >
+                </el-checkbox-group>
+              </el-form-item>
 
-                <el-option v-for="item in strategyList" :key="item.id" :label="item.strategyName" :value="item.id">
-                </el-option>
-              </el-select>
-            </el-form-item>
+              <div class="tip">
+                <span class="req">*</span>
+                <el-form-item label="时间选择" prop="startTime">
+                  <el-time-picker
+                    v-model="activeForm.startTime"
+                    :picker-options="{ start: '00:00', end: '18:30' }"
+                    format="HH:mm:ss"
+                    value-format="HH:mm:ss"
+                    placeholder="开始时间"
+                  >
+                  </el-time-picker>
+                  -
+                  <el-time-picker
+                    v-model="activeForm.endTime"
+                    format="HH:mm:ss"
+                    value-format="HH:mm:ss"
+                    placeholder="结束时间"
+                  >
+                  </el-time-picker>
+                </el-form-item>
+              </div>
+              <div class="tip">
+                <span class="req">*</span>
+                <el-form-item label="投放策略" prop="strategyTemplateId">
+                  <el-select
+                    v-model="activeForm.strategyTemplateId"
+                    style="width: 40%"
+                    clearable
+                    filterable
+                    placeholder="请选择"
+                  >
+                    <el-option
+                      v-for="item in strategyList"
+                      :key="item.id"
+                      :label="item.strategyName"
+                      :value="item.id"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </div>
+            </el-form>
           </div>
-          <div v-if="form.type==4">
+          <div v-if="form.type == 4">
             <el-form-item>
               <el-checkbox-group v-model="checkVideo">
-                <el-checkbox v-for="item in checkList" :label="item">{{ item }}</el-checkbox>
+                <el-checkbox
+                  v-for="item in checkList"
+                  :label="item"
+                  :key="item.id"
+                  >{{ item }}</el-checkbox
+                >
               </el-checkbox-group>
             </el-form-item>
             <el-form-item label="投放策略">
-              <el-select v-model="form.strategyTemplateId" style="width: 40%" clearable filterable placeholder="请选择">
-                <el-option v-for="item in strategyList" :key="item.id" :label="item.strategyName" :value="item.id">
+              <el-select
+                v-model="form.strategyTemplateId"
+                style="width: 40%"
+                clearable
+                filterable
+                placeholder="请选择"
+              >
+                <el-option
+                  v-for="item in strategyList"
+                  :key="item.id"
+                  :label="item.strategyName"
+                  :value="item.id"
+                >
                 </el-option>
               </el-select>
             </el-form-item>
           </div>
-
         </el-form>
       </el-main>
       <el-footer style="z-index: 9999">
-        <div class="bodyBox" style="display: flex;justify-content: flex-end">
-          <el-button>
-            清空
-          </el-button>
-          <el-button style="display: flex;justify-content: flex-end" type="primary" @click="onSubmit">
+        <div class="bodyBox" style="display: flex; justify-content: flex-end">
+          <el-button> 清空 </el-button>
+          <el-button
+            style="display: flex; justify-content: flex-end"
+            type="primary"
+            @click="onSubmit('ruleForm')"
+          >
             保存
           </el-button>
         </div>
@@ -138,11 +296,11 @@
   </div>
 </template>
 <script>
-import { post, get } from '@/api/common'
+import { post, get } from "@/api/common";
 const weekOptions = ["周日", "周一", "周二 ", "周三", "周四", "周五", "周六"];
 import { parseTimee } from "@/utils";
 export default {
-  data () {
+  data() {
     return {
       form: {
         id: null,
@@ -153,43 +311,49 @@ export default {
         state: "",
       },
 
-      abform: { //ab表单
-        effectBeginTime: "00:00:00",
-        effectEndTime: "23:59:59",
+      abform: {
+        //ab表单
+        effectBeginTime: "",
+        effectEndTime: "",
         groupInfo: [
           {
-            "flowPercent": null,
-            "groupName": "对照组",
-            "state": 1,
-            "strategyTemplateId": "",
+            flowPercent: null,
+            groupName: "对照组",
+            state: 1,
+            strategyTemplateId: "",
           },
           {
-
-            "flowPercent": null,
-            "groupName": "控制组",
-            "state": 1,
-            "strategyTemplateId": "",
-
-          }
+            flowPercent: null,
+            groupName: "控制组",
+            state: 1,
+            strategyTemplateId: "",
+          },
         ],
       },
       idd: "",
       edit: false,
-      activeForm: {//活动表单
+      activeForm: {
+        //活动表单
         weeks: "0,1,2,3,4,5,6",
         startDate: "",
         endDate: "",
         startTime: "00:00:00",
         endTime: "23:59:59",
         strategyTemplateId: "",
-
       },
-      locationForm: {//地域表单
+      locationForm: {
+        //地域表单
         strategyTemplateId: "",
         locatioName: "",
       },
-
-      checkList: ["爱奇艺视频", "腾讯视频", "优酷视频", "B站视频", "投诉风险", "黑名单"],
+      checkList: [
+        "爱奇艺视频",
+        "腾讯视频",
+        "优酷视频",
+        "B站视频",
+        "投诉风险",
+        "黑名单",
+      ],
       time: [],
       datetimerange: [],
       timerange: [],
@@ -198,23 +362,7 @@ export default {
       //策略列表
       strategyList: {},
       weeksList: weekOptions,
-      rules: {
-        strategyName: [
-          {
-            required: true,
-            message: "请输入策略名称",
-            trigger: "blur",
-          },
-        ],
-        testTypeId: [
-          {
-            required: true,
-            message: "请选择测试类型",
-            trigger: "change",
-          },
-        ],
-      },
-      editableTabsValue: '对照组',
+      editableTabsValue: "对照组",
       isIndeterminate: true,
       //全选
       checkAll: false,
@@ -253,23 +401,55 @@ export default {
         "海南",
         "香港",
         "澳门",
-      ]
-
-    }
+      ],
+      rules: {
+        name: [
+          //策略名字
+          { required: true, message: "请输入策略名称", trigger: "blur" },
+        ],
+        type: [
+          //策略类型
+          { required: true, message: "请选择测试类型", trigger: "change" },
+        ],
+        // datetimerange: [
+        //   //日期
+        //   {
+        //     type: "date",
+        //     required: true,
+        //     message: "请选择日期",
+        //     trigger: "blur",
+        //   },
+        // ],
+        // strategyTemplateId: [
+        //   //投放策略
+        //   { required: true, message: "请选择策略", trigger: "blur" },
+        // ],
+        // flowPercent: [
+        //   { required: true, message: "请选择分流占比", trigger: "blur" },
+        // ],
+        //   // locatioName: [
+        //   //   { required: true, message: "请选择地区", trigger: "blur", },
+        //   // ],
+        //   startTime: [//时间
+        //     { type: 'date', required: true, message: '请选择时间', trigger: 'blur' }
+        //   ]
+      },
+    };
   },
-  created () {
-    console.log(this.edit)
-    get('/strategytemplate/list', { 'pageSize': 20, 'pageNum': 1 }).then(res => {
-      this.strategyList = res.data.list
-    })
-
+  created() {
+    // console.log(this.edit);
+    get("/strategytemplate/list", { pageSize: 999, pageNum: 1 }).then((res) => {
+      this.strategyList = res.data.list;
+    });
   },
-  mounted () {
+  mounted() {
     //数据回显
     if (this.$route.query.id) {
       //编辑
-      this.edit = true
-      post('/strategysenior/' + this.$route.query.id, { id: this.$route.query.id }).then(res => {
+      this.edit = true;
+      post("/strategysenior/" + this.$route.query.id, {
+        id: this.$route.query.id,
+      }).then((res) => {
         res = res.data;
         this.form = {
           name: res.name,
@@ -278,47 +458,54 @@ export default {
           state: res.state,
         };
 
-        if (res.type === 1) {//ab回显
+        if (res.type === 1) {
+          //ab回显
           if (res.groupInfo) {
             res.groupInfo = JSON.parse(res.groupInfo);
           }
-          this.idd = res.abId
+          this.idd = res.abId;
           this.abform = {
             groupInfo: [
               {
-                "flowPercent": res.groupInfo[0].flowPercent,
-                "groupName": "对照组",
-                "state": 1,
-                "strategyTemplateId": res.groupInfo[0].strategyTemplateId,
+                flowPercent: res.groupInfo[0].flowPercent,
+                groupName: "对照组",
+                state: 1,
+                strategyTemplateId: res.groupInfo[0].strategyTemplateId,
               },
               {
-                "flowPercent": res.groupInfo[1].flowPercent,
-                "groupName": "控制组",
-                "state": 1,
-                "strategyTemplateId": res.groupInfo[1].strategyTemplateId,
-
-              }
+                flowPercent: res.groupInfo[1].flowPercent,
+                groupName: "控制组",
+                state: 1,
+                strategyTemplateId: res.groupInfo[1].strategyTemplateId,
+              },
             ],
-
-          }
+          };
           if (res.effectBeginTime) {
-            let effectBeginTime = parseTimee(res.effectBeginTime, "{y}-{m}-{d} {h}:{i}:{s}")
-            let effectEndTime = parseTimee(res.effectEndTime, "{y}-{m}-{d} {h}:{i}:{s}")
+            let effectBeginTime = parseTimee(
+              res.effectBeginTime,
+              "{y}-{m}-{d} {h}:{i}:{s}"
+            );
+            let effectEndTime = parseTimee(
+              res.effectEndTime,
+              "{y}-{m}-{d} {h}:{i}:{s}"
+            );
             this.datetimerange = [effectBeginTime, effectEndTime];
           }
         }
-        if (res.type === 2) {//地域回显
+        if (res.type === 2) {
+          //地域回显
           this.locationForm = {
             locatioName: res.locatioName,
-            strategyTemplateId: res.strategyTemplateId
-          }
-          this.idd = res.locationId
+            strategyTemplateId: res.strategyTemplateId,
+          };
+          this.idd = res.locationId;
           let checkedWeeks = res.weeks.split(",");
           checkedWeeks.forEach((item) => {
             this.checkedWeeks.push(weekOptions[item]);
           });
         }
-        if (res.type === 3) {//活动回显
+        if (res.type === 3) {
+          //活动回显
           if (res.weeks) {
             let checkedWeeks = res.weeks.split(",");
             checkedWeeks.forEach((item) => {
@@ -326,34 +513,33 @@ export default {
             });
           }
           if (res.startDate) {
-            let startDate = res.startDate
-            let endDate = res.endDate
+            let startDate = res.startDate;
+            let endDate = res.endDate;
             this.datetimerange = [startDate, endDate];
           }
 
-          this.idd = res.activityId
-          this.activeForm = {//活动表单
+          this.idd = res.activityId;
+          this.activeForm = {
+            //活动表单
             weeks: res.weeks,
             startTime: res.startTime,
             endTime: res.endTime,
-            strategyTemplateId: res.strategyTemplateId
-
-          }
+            strategyTemplateId: res.strategyTemplateId,
+          };
         }
-
-      })
+      });
     }
   },
   watch: {
-    datetimerange (val) {
+    datetimerange(val) {
       if (val) {
+        console.log(val);
         //ab
         this.abform.effectBeginTime = val[0];
         this.abform.effectEndTime = val[1];
         //活动
         this.activeForm.startDate = val[0];
         this.activeForm.endDate = val[1];
-
       } else {
         //ab
         this.abform.effectBeginTime = "";
@@ -363,7 +549,7 @@ export default {
         this.activeForm.endDate = "";
       }
     },
-    checkedWeeks (val) {
+    checkedWeeks(val) {
       this.activeForm.weeks = val
         .map((i) => weekOptions.findIndex((j) => j == i))
         .sort()
@@ -373,14 +559,16 @@ export default {
   },
   methods: {
     //提交
-    onSubmit () {
-      if (this.$route.query.id) {//修改
-        this.form.id = this.$route.query.id
-        if (this.form.type === 1) {//ab修改
-          this.abform.abId = this.idd
-
-          let upform1 = { ...this.form, ...this.abform }
-          post("/strategysenior/update/ab", upform1).then(res => {
+    onSubmit(formName) {
+      if (this.$route.query.id) {
+        //修改
+        this.form.id = this.$route.query.id;
+        if (this.form.type === 1) {
+          //ab修改
+          this.abform.abId = this.idd;
+
+          let upform1 = { ...this.form, ...this.abform };
+          post("/strategysenior/update/ab", upform1).then((res) => {
             // console.log(res)
             this.$message({
               message: res.message,
@@ -389,15 +577,15 @@ export default {
               offset: 360,
             });
             setTimeout(() => {
-              window.close()
-            }, 1200)
-          })
-
+              window.close();
+            }, 1200);
+          });
         }
-        if (this.form.type === 2) {//地域修改
-          this.locationForm.locationId = this.idd
-          let upform2 = { ...this.form, ...this.locationForm }
-          post("/strategysenior/update/location/", upform2).then(res => {
+        if (this.form.type === 2) {
+          //地域修改
+          this.locationForm.locationId = this.idd;
+          let upform2 = { ...this.form, ...this.locationForm };
+          post("/strategysenior/update/location/", upform2).then((res) => {
             // console.log(res)
             this.$message({
               message: res.message,
@@ -406,14 +594,15 @@ export default {
               offset: 360,
             });
             setTimeout(() => {
-              window.close()
-            }, 1200)
-          })
+              window.close();
+            }, 1200);
+          });
         }
-        if (this.form.type === 3) {//活动修改
-          this.activeForm.activityId = this.idd
-          let upform3 = { ...this.form, ...this.activeForm }
-          post("/strategysenior/update/activity", upform3).then(res => {
+        if (this.form.type === 3) {
+          //活动修改
+          this.activeForm.activityId = this.idd;
+          let upform3 = { ...this.form, ...this.activeForm };
+          post("/strategysenior/update/activity", upform3).then((res) => {
             // console.log(res)
             this.$message({
               message: res.message,
@@ -422,85 +611,118 @@ export default {
               offset: 360,
             });
             setTimeout(() => {
-              window.close()
-            }, 1200)
-          })
-
-        }
-
-      }
-      else {//新增
-        if (this.form.type == 1) { //ab策略
-          let form1 = { ...this.form, ...this.abform }
-          post("/strategysenior/create/abtest", form1).then(res => {
-            this.$message({
-              message: res.message,
-              type: "success",
-              duration: 3000,
-              offset: 360,
-            });
-            setTimeout(() => {
-              window.close()
-            }, 1200)
-
-          })
-        }
-        if (this.form.type == 3) {//活动策略
-          let form2 = { ...this.form, ...this.activeForm }
-          post("/strategysenior/create/activity", form2).then(res => {
-            this.$message({
-              message: res.message,
-              type: "success",
-              duration: 3000,
-              offset: 360,
-            });
-            setTimeout(() => {
-              window.close()
-            }, 1200)
-          })
-
-        }
-        if (this.form.type == 2) {//地域投放
-          let form3 = { ...this.form, ...this.locationForm }
-          post("/strategysenior/create/location", form3).then((res) => {
-            this.$message({
-              message: res.message,
-              type: "success",
-              duration: 3000,
-              offset: 360,
-            });
-            setTimeout(() => {
-              window.close()
-            }, 1200)
-          })
-
-
+              window.close();
+            }, 1200);
+          });
         }
+      } else {
+        //新增
+        this.$refs[formName].validate((valid) => {
+          console.log(valid);
+          if (valid) {
+            if (this.form.type == 1) {
+              //ab策略新增
+              if (!this.abform.effectBeginTime) {
+                alert("请选择日期");
+              } else if (
+                !this.abform.groupInfo[0].strategyTemplateId ||
+                !this.abform.groupInfo[1].strategyTemplateId
+              ) {
+                alert("请选择策略");
+              } else if (
+                !this.abform.groupInfo[0].flowPercent ||
+                !this.abform.groupInfo[1].flowPercent
+              ) {
+                alert("请填写分流");
+              } else {
+                let form1 = { ...this.form, ...this.abform };
+                post("/strategysenior/create/abtest", form1).then((res) => {
+                  this.$message({
+                    message: res.message,
+                    type: "success",
+                    duration: 3000,
+                    offset: 360,
+                  });
+                  // setTimeout(() => {
+                  //   window.close()
+                  // }, 1200)
+                });
+              }
+            }
+            if (this.form.type == 2) {
+              //地域投放新增
+              if (!this.locationForm.locatioName) {
+                alert("请选择地区");
+              } else if (!this.locationForm.strategyTemplateId) {
+                alert("请选择策略");
+              } else {
+                let form3 = { ...this.form, ...this.locationForm };
+                post("/strategysenior/create/location", form3).then((res) => {
+                  this.$message({
+                    message: res.message,
+                    type: "success",
+                    duration: 3000,
+                    offset: 360,
+                  });
+                  setTimeout(() => {
+                    window.close();
+                  }, 1200);
+                });
+              }
+            }
+            if (this.form.type == 3) {
+              //活动策略新增
+              if (!this.activeForm.endDate) {
+                alert("请选择日期");
+              } else if (!this.activeForm.startDate) {
+                alert("请选择时间");
+              } else if (!this.activeForm.strategyTemplateId) {
+                alert("请选择策略");
+              } else {
+                let form2 = { ...this.form, ...this.activeForm };
+                post("/strategysenior/create/activity", form2).then((res) => {
+                  this.$message({
+                    message: res.message,
+                    type: "success",
+                    duration: 3000,
+                    offset: 360,
+                  });
+                  setTimeout(() => {
+                    window.close();
+                  }, 1200);
+                });
+              }
+            }
+          } else {
+            console.log("error submit!!");
+            return false;
+          }
+        });
       }
     },
-    changeInputer () {
+    changeInputer() {
       //新增自动添加名字
       if (!this.$route.query.id) {
-        this.form.name = `${this.$store.state.user.name}--${this.form.name}`
+        if (this.form.name) {
+          this.form.name = `${this.$store.state.user.name}--${this.form.name}`;
+        }
       }
-
     },
-    clickTab (tab) {
-      console.log(this.abform.groupInfo[tab.index])
+    clickTab(tab) {
+      console.log(this.abform.groupInfo[tab.index]);
     },
-    handleCheckAllChange (val) {
+    handleCheckAllChange(val) {
       this.checkedWeeks = val ? weekOptions : [];
       this.isIndeterminate = false;
     },
-    handleCheckedCitiesChange (value) {
+    handleCheckedCitiesChange(value) {
       let checkedCount = value.length;
       this.checkAll = checkedCount === this.weeksList.length;
       this.isIndeterminate =
         checkedCount > 0 && checkedCount < this.weeksList.length;
     },
-  }
-
-}
+  },
+};
 </script>
 <style lang="scss">
 .bodyBox {
@@ -526,4 +748,17 @@ export default {
     font-weight: bold !important;
   }
 }
-</style>
+
+.tip {
+  display: flex;
+  color: rgb(245, 108, 108);
+  margin-left: 22px;
+}
+.req {
+  height: 10px;
+  margin-top: 12px;
+  width: 3px;
+  // margin-right: 0;
+  margin-right: -25px;
+}
+</style>