form.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <template>
  2. <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')">
  3. <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
  4. <el-form-item label="店铺名称" prop="poi_name">
  5. <el-input v-model="formData.poi_name" disabled readonly clearable placeholder="请输入"></el-input>
  6. <div class="el-form-item-msg"></div>
  7. </el-form-item>
  8. <el-form-item label="客服电话" prop="service_mobile">
  9. <el-input v-model="formData.service_mobile" clearable placeholder="请输入"></el-input>
  10. <div class="el-form-item-msg">小程序中展现</div>
  11. </el-form-item>
  12. <el-form-item label="营业时间">
  13. <el-row :gutter="10">
  14. <el-col :span="11">
  15. <el-time-select v-model="formData.start_at" start="00:00" step="00:01" end="23:59" placeholder="请选择" style="width: 100%"/>
  16. </el-col>
  17. <el-col :span="2" class="text-center">
  18. <span class="text-gray-500">-</span>
  19. </el-col>
  20. <el-col :span="11">
  21. <el-time-select v-model="formData.end_at" start="00:00" step="00:01" end="23:59" placeholder="请选择" style="width: 100%"/>
  22. </el-col>
  23. </el-row>
  24. <div class="el-form-item-msg">营业时间为必选,否则小程序端无法下单</div>
  25. </el-form-item>
  26. <el-form-item label="可发布商品类型" prop="product_type" v-loading="channelLoad">
  27. <el-checkbox-group v-model="formData.product_type">
  28. <el-checkbox-button border :value="item.key" :label="item.key" v-for="(item,indx) in cateData" :key="indx">{{ item.name }}</el-checkbox-button>
  29. </el-checkbox-group>
  30. <div class="el-form-item-msg"></div>
  31. </el-form-item>
  32. <el-form-item label="到期时间" prop="vip_end">
  33. <el-date-picker v-model="formData.vip_end" :style="{width: '100%'}" placeholder="请选择" />
  34. </el-form-item>
  35. <el-form-item label="状态" prop="status">
  36. <el-radio-group v-model="formData.status">
  37. <el-radio-button border label="1">开启</el-radio-button>
  38. <el-radio-button border label="2">关店</el-radio-button>
  39. </el-radio-group>
  40. <div class="el-form-item-msg"></div>
  41. </el-form-item>
  42. </el-form>
  43. <template #footer>
  44. <el-button @click="visible=false" size="large">取 消</el-button>
  45. <el-button v-if="mode!='show'" size="large" type="primary" :loading="isSaveing" @click="submit()">保 存</el-button>
  46. </template>
  47. </el-dialog>
  48. </template>
  49. <script>
  50. export default {
  51. data(){
  52. return {
  53. loading: false,
  54. isSaveing: false,
  55. mode:"add",
  56. titleMap:{
  57. add:"新增店铺",
  58. edit:"编辑店铺信息"
  59. },
  60. channelLoad:false,
  61. visible:false,
  62. formData:{},
  63. cateData:[],
  64. rules:{
  65. service_mobile: [
  66. {required: true, message: '请输入'}
  67. ],
  68. start_at: [
  69. {required: true, message: '请选择'}
  70. ],
  71. end_at: [
  72. {required: true, message: '请选择'}
  73. ],
  74. vip_end: [
  75. {required: true, message: '请选择'}
  76. ],
  77. product_type: [
  78. {required: true, message: '请选择'}
  79. ],
  80. }
  81. }
  82. },
  83. methods:{
  84. open(mode = 'add'){
  85. this.mode = mode;
  86. this.visible = true;
  87. return this
  88. },
  89. //表单注入数据
  90. setData(data){
  91. this.formData = JSON.parse(JSON.stringify(data));
  92. this.getCate()
  93. },
  94. async getCate(){
  95. this.channelLoad = true;
  96. var resp = await this.$API.store.cate.get();
  97. this.channelLoad = false;
  98. if (resp.code == 0 ) {
  99. return this.$message.error(resp.message)
  100. }
  101. this.cateData = resp.data.data;
  102. },
  103. async submit(){
  104. var validate = await this.$refs.dialogForm.validate().catch(()=>{});
  105. if(!validate){ return false }
  106. this.isSaveing = true;
  107. let submitData = JSON.parse(JSON.stringify(this.formData));
  108. if (this.formData.vip_end) {
  109. submitData.vip_end = this.$TOOL.dateFormat(this.formData.vip_end, "yyyy-MM-dd");
  110. }
  111. if (this.mode == 'add') {
  112. var resp = await this.$API.store.save.post(submitData);
  113. } else {
  114. var resp = await this.$API.store.edit.post(submitData);
  115. }
  116. this.isSaveing = false;
  117. if (resp.code == 0) {
  118. return this.$message.error(resp.msg);
  119. }
  120. this.$message.success(resp.msg);
  121. this.visible = false;
  122. this.formData = {};
  123. this.submitState = false;
  124. this.$emit("success");
  125. }
  126. }
  127. }
  128. </script>
  129. <style>
  130. .text-center{text-align: center;}
  131. </style>