form.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <el-drawer v-model="visible" size="800px" destroy-on-close :close-on-click-modal="false" :with-header="false">
  3. <el-container class="flex-column">
  4. <div class="drawer-detail-main">
  5. <div class="drawer-detail-header">
  6. <div class="drawer-detail-header-body">
  7. <div class="drawer-detail-header-left">{{titleMap[mode]}}</div>
  8. <div class="drawer-detail-header-left">
  9. <el-button type="default" icon="el-icon-close" @click="visible=false"></el-button>
  10. </div>
  11. </div>
  12. </div>
  13. </div>
  14. <el-main>
  15. <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
  16. <el-form-item label="关联团单" prop="product_name">
  17. <el-input v-model="formData.product_name" placeholder="请选择团单" clearbale readonly :style="{width:'100%'}" @click="selectStore">
  18. <template #append>
  19. <el-tooltip effect="dark" content="点这里,清除选择" placement="top-start">
  20. <div class="remove-a" @click="clearStore">清除</div>
  21. </el-tooltip>
  22. </template>
  23. </el-input>
  24. <div class="el-form-item-msg"></div>
  25. </el-form-item>
  26. <el-form-item label="商品标题" prop="title">
  27. <el-input v-model="formData.title" clearable placeholder="请输入"></el-input>
  28. <div class="el-form-item-msg"></div>
  29. </el-form-item>
  30. <el-form-item label="商品主图" prop="image">
  31. <sc-upload v-model="formData.image" tip="图片尺寸不超过5M,图片越小呈现的速度越快,建议分辨率不低于750*562px"></sc-upload>
  32. </el-form-item>
  33. <el-form-item label="状态" prop="status">
  34. <el-radio-group v-model="formData.status">
  35. <el-radio-button :label="1">正常</el-radio-button>
  36. <el-radio-button :label="0">禁用</el-radio-button>
  37. </el-radio-group>
  38. <div class="el-form-item-msg"></div>
  39. </el-form-item>
  40. </el-form>
  41. </el-main>
  42. <el-footer>
  43. <el-button @click="visible=false" size="large">取 消</el-button>
  44. <el-button v-if="mode!='show'" size="large" type="primary" :loading="isSaveing" @click="submit()">保 存</el-button>
  45. </el-footer>
  46. </el-container>
  47. </el-drawer>
  48. <goodsMain ref="goodsMain" :multiple="false" @success="handleGoods"></goodsMain>
  49. </template>
  50. <script>
  51. import goodsMain from '@/views/merchant/components/goods';
  52. export default {
  53. components: {
  54. goodsMain
  55. },
  56. data(){
  57. return {
  58. goodsData:[],
  59. starData:[],
  60. loading: false,
  61. isSaveing: false,
  62. mode:"add",
  63. titleMap:{
  64. add:"新增核销商品",
  65. edit:"编辑核销商品"
  66. },
  67. visible:false,
  68. formData:{
  69. status:1
  70. },
  71. rules:{
  72. status: [
  73. {required: true, message: '请选择'}
  74. ],
  75. title: [
  76. {required: true, message: '请输入'}
  77. ],
  78. image: [
  79. {required: true, message: '请上传'}
  80. ],
  81. product_name: [
  82. {required: true, message: '请输入'}
  83. ]
  84. }
  85. }
  86. },
  87. methods:{
  88. open(mode = 'add'){
  89. this.mode = mode;
  90. this.visible = true;
  91. return this
  92. },
  93. //表单注入数据
  94. setData(data){
  95. if (this.mode == 'edit') {
  96. data.goods_id = data.goods.goods_id;
  97. data.product_name = data.goods.product_name;
  98. }
  99. this.formData = JSON.parse(JSON.stringify(data));
  100. },
  101. selectStore(){
  102. this.$nextTick(()=>{
  103. this.$refs.goodsMain.open('off')
  104. })
  105. },
  106. handleGoods(data){
  107. this.formData.goods_id = data.goods_id;
  108. this.formData.product_name = data.product_name;
  109. },
  110. clearStore(){
  111. this.formData.goods_id = "";
  112. this.formData.product_name = "";
  113. },
  114. async submit(){
  115. var validate = await this.$refs.dialogForm.validate().catch(()=>{});
  116. if(!validate){ return false }
  117. this.isSaveing = true;
  118. let submitData = JSON.parse(JSON.stringify(this.formData));
  119. var resp = await this.$API.goodsoff.save.post(submitData);
  120. this.isSaveing = false;
  121. if (resp.code == 0) {
  122. return this.$message.error(resp.msg);
  123. }
  124. this.$message.success(resp.msg);
  125. this.visible = false;
  126. this.formData = {};
  127. this.$emit("success");
  128. }
  129. }
  130. }
  131. </script>
  132. <style>
  133. .text-center{text-align: center;}
  134. .goods-live{width: 100%;margin-top: 10px;}
  135. </style>