add.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <template>
  2. <div>
  3. <el-button type="primary" size="small" @click="onShow">新 建</el-button>
  4. <el-drawer
  5. title="新建活动"
  6. :visible.sync="drawer"
  7. size="800px"
  8. direction="rtl"
  9. append-to-body
  10. @close="onClose">
  11. <div class="drawer__panel">
  12. <el-form :model="form" :rules="rules" ref="form" label-width="100px" size="small">
  13. <el-form-item label="活动名称" prop="name">
  14. <el-input v-model="form.name" placeholder="请输入活动名称" clearable></el-input>
  15. </el-form-item>
  16. <el-form-item label="活动类型" prop="type">
  17. <el-select v-model="form.type" placeholder="请选择类型" style="width:100%" clearable>
  18. <el-option
  19. v-for="item in campaigntypeList()"
  20. :key="item.index"
  21. :label="item.value"
  22. :value="item.value">
  23. </el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="负责人" prop="director">
  27. <el-input v-model="form.director" placeholder="请输入负责人"></el-input>
  28. </el-form-item>
  29. <el-form-item label="地址" prop="address">
  30. <el-input v-model="form.address" placeholder="请输入地址"></el-input>
  31. </el-form-item>
  32. <el-form-item label="开始日期" prop="begdate">
  33. <el-date-picker
  34. v-model="form.begdate"
  35. type="date"
  36. value-format="yyyy-MM-dd"
  37. placeholder="选择日期"
  38. style="width:100%">
  39. </el-date-picker>
  40. </el-form-item>
  41. <el-form-item label="结束日期" prop="enddate">
  42. <el-date-picker
  43. v-model="form.enddate"
  44. type="date"
  45. value-format="yyyy-MM-dd"
  46. placeholder="选择日期"
  47. style="width:100%">
  48. </el-date-picker>
  49. </el-form-item>
  50. </el-form>
  51. </div>
  52. <div class="fixed__btn__panel">
  53. <el-button size="small" @click="drawer = false,$refs.form.resetFields()" class="normal-btn-width">取 消</el-button>
  54. <el-button size="small" type="primary" @click="add()" class="normal-btn-width">确 定</el-button>
  55. </div>
  56. </el-drawer>
  57. </div>
  58. </template>
  59. <script>
  60. export default {
  61. inject:['campaigntypeList'],
  62. data () {
  63. return {
  64. drawer:false,
  65. form:{
  66. "sat_campaignid":0,
  67. "name":"",
  68. "director":"",
  69. "address":"",
  70. "type":"",
  71. "begdate":"",
  72. "enddate": ""
  73. },
  74. rules:{
  75. name:[
  76. { required: true, message: '请输入活动名称', trigger: 'blur' },
  77. ],
  78. type:[
  79. { required: true, message: '请选择活动类型', trigger: 'change' }
  80. ],
  81. begdate: [
  82. { required: true, message: '请选择开始日期', trigger: 'change' }
  83. ],
  84. enddate: [
  85. { validator:this.validateEndDate, trigger: 'change' }
  86. ],
  87. },
  88. options:[]
  89. }
  90. },
  91. methods:{
  92. onShow () {
  93. this.drawer = true
  94. },
  95. validateEndDate(rule, value, callback){
  96. let start = (new Date(this.form.begdate)).getTime()
  97. let end = (new Date(this.form.enddate)).getTime()
  98. if (value === '' || !value) {
  99. this.form.enddate = ''
  100. callback();
  101. } else if (end < start) {
  102. callback(new Error('结束日期不能小于开始日期'))
  103. } else {
  104. callback();
  105. }
  106. },
  107. add () {
  108. this.$refs['form'].validate(async (valid) => {
  109. if (!valid) return false
  110. const res = await this.$api.requested({
  111. "classname":"webmanage.saletool.orderclue.ordercluecampaign",
  112. "method": "insertormodify_campaign",
  113. "content": this.form
  114. })
  115. this.tool.showMessage(res,()=>{
  116. this.drawer = false
  117. this.$refs.form.resetFields()
  118. this.$emit('onSuccess')
  119. })
  120. });
  121. },
  122. onClose () {
  123. this.form = {
  124. "sat_campaignid":0,
  125. "name":"",
  126. "director":"",
  127. "address":"",
  128. "type":"",
  129. "begdate":"",
  130. "enddate": ""
  131. }
  132. }
  133. }
  134. }
  135. </script>
  136. <style scoped>
  137. .dialog-footer{
  138. margin-top:32px;
  139. text-align: center;
  140. }
  141. </style>