liweilong
2020-12-02 037956b0794e6b47ef6b6daf308844522c448e96
提交 | 用户 | age
ad3cc5 1 <template>
L 2   <div class="app-container">
3     <el-form ref="couponForm" label-position="left" :model="mData" label-width="150px" :rules="rules">
4       <el-form-item label="标题:" prop="title">
5         <el-input v-model="mData.title" placeholder="请输入标题" class="com-edit-input" />
6       </el-form-item>
7       <el-form-item label="面值:" prop="valueMoney">
8         <el-input v-model.number="mData.valueMoney" placeholder="请输入面值" class="com-edit-input" />
9       </el-form-item>
10       <el-form-item label="省市区" prop="provinces">
11         <el-cascader
12           v-model="mData.provinces"
13           :options="areaOpts"
14           placeholder="请选择省市区"
15           style="width: 100%"
16         />
17       </el-form-item>
18       <el-form-item label="有效日期" prop="dateValue">
19         <el-date-picker
20           v-model="mData.dateValue"
21           value-format="yyyy-MM-dd"
22           class="com-edit-input"
23           type="daterange"
24           range-separator="至"
25           start-placeholder="开始日期"
26           end-placeholder="结束日期"
27         />
28       </el-form-item>
29       <el-form-item prop="uploadImgs">
30         <span slot="label">
31           图片:<br><span>(668*164像素)</span>
32         </span>
33         <!-- 上传图片组件(单图) -->
34         <el-upload
35           ref="refUploadImg"
36           accept="image/jpeg,image/jpg,image/gif,image/png"
37           :auto-upload="false"
38           list-type="picture-card"
39           :class="{disabled:uploadDisabled}"
40           action="#"
41           :limit="1"
42           :file-list="mData.uploadImgs"
43           :on-change="addUploadImg"
44           :on-remove="delUploadImg"
45           :http-request="uploadImg"
46           :on-preview="uploadPreview"
47           :before-upload="beforeUploadImg"
48         >
49           <i class="el-icon-plus" />
50         </el-upload>
51       </el-form-item>
52       <el-form-item label="是否上架:">
53         <el-switch v-model="mData.isUp" :active-value="1" :inactive-value="0" />
54       </el-form-item>
55       <el-form-item label="详情:" prop="content">
56         <!-- 富文本 -->
57         <WangEnduit :catchdata="catchData" :content="mData.content" :rangenum="rangenum" />
58       </el-form-item>
59     </el-form>
60
61     <div class="com-edit-bottom-btns flex flex-align-center">
62       <el-button size="mini" @click="jumpBack">取消</el-button>
63       <el-button type="primary" size="mini" @click="submit">提交</el-button>
64     </div>
65
66     <!-- upload放大图片 -->
67     <el-dialog :visible.sync="uploadPreviewVisible" style="text-align:center">
68       <img style="max-width:100%" :src="uploadPreviewUrl" alt="">
69     </el-dialog>
70
71   </div>
72 </template>
73
74 <script>
75 import WangEnduit from '@/components/WangEnduit' // 富文本
76 import mixin_upload from '@/mixins/upload.js' // 通用上传图片预览
77 import Area from '@/utils/area' // 地区选择
78 export default {
79   name: 'DemoForm',
80   components: { WangEnduit },
81   mixins: [
82     mixin_upload
83   ],
84   data() {
85     return {
86       // 富文本
87       rangenum: null,
88       // 表单字段
89       mData: {
90         title: '', // 标题
91         valueMoney: '', // 面值
92         dateValue: [], // 有效日期(开始日期至结束日期)
93         content: '', // 详情
94         isUp: 1, // 是否上架
95         uploadImgs: [], // 图片
96         provinces: [],
97         imgUrl: ''
98       },
99
100       // 初始化地区
101       areaOpts: Area.getAreaOpts(Area.data), // 省市区数据
102
103       // 表单校验
104       rules: {
105         title: [{
106           required: true, message: '请填写优惠券标题', trigger: 'change'
107         }],
108         valueMoney: [{
109           required: true, message: '请填写优惠券面值', trigger: 'change'
110         }, {
111           type: 'number', message: '面值必须为数字', trigger: 'change'
112         }],
113         dateValue: [{
114           required: true, message: '请选择有效日期', trigger: 'change'
115         }],
116         provinces: [{
117           required: true, message: '请选择地址', trigger: 'change'
118         }],
119         content: [{
120           required: true, message: '请填写优惠券详情'
121         }],
122         uploadImgs: [{
123           required: true, message: '请选择图片'
124         }]
125       }
126     }
127   },
128   computed: {
129     // 禁用上传图片功能
130     uploadDisabled() {
131       return this.mData.uploadImgs.length > 0
132     }
133   },
134   mounted() {
135     this.init()
136   },
137   methods: {
138     init() {
139
140     },
141
142     jumpBack() {
143       this.$router.go(-1)
144     },
145
146     // 富文本相关
147     // 富文本编辑器的内容赋值
148     catchData(content) {
149       if (content === '<p><br></p>') content = ''
150       try {
151         const currentRange = window.getSelection().getRangeAt(0)
152         this.rangenum = currentRange
153       } catch (e) {
154         //
155       }
156       this.mData.content = content
157       this.$refs.couponForm.validateField('content')
158     },
159     // 富文本相关
160
161     // 上传图片 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
162     // 上传前确认格式
163     beforeUploadImg(file) {
164       const isImg = file.type.indexOf('image/') > -1
165       if (!isImg) {
166         this.$message.error('必须是选择图片文件')
167       }
168       return isImg
169     },
170     // 增加图片
171     addUploadImg(file, fileList) {
172       this.mData.uploadImgs = fileList
173       this.$refs.couponForm.validateField('uploadImgs')
174     },
175     // 删除图片
176     delUploadImg(file, fileList) {
177       this.mData.uploadImgs = fileList
178     },
179     // 上传图片
180     uploadImg(res) {
181       const file = res.file
182       const formData = new FormData()
183       formData.append('file', file)
184       this.postFN({
185         url: 'admin/image/upload',
186         header: { 'Content-Type': 'multipart/form-data' },
187         params: formData,
188         mockData: {
189           code: 100,
190           msg: '',
191           data: {
192             imgUrl: 'xxxx'
193           }
194         }
195       }, (inf) => {
196         console.log('上传图成功')
197         this.$set(this.mData, 'imgUrl', inf.imgUrl)
198         console.log('上传图结束')
199
200         // 上传完图片
201         this.submitReq()
202       })
203     },
204     // 上传图片 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
205
206     submit() {
207       this.$refs['couponForm'].validate(valid => {
208         if (valid) {
209           if (this.checkNeedUpload(this.mData.uploadImgs)) {
210             console.log('开始上传图片')
211             // 先上传图片,再提交
212             this.$refs.refUploadImg.submit()
213           } else {
214             // 提交
215             this.submitReq()
216           }
217         }
218       })
219     },
220
221     submitReq() {
222       var { mData } = this
223       console.log(mData)
224       // 字段未写
225       var params = {
226         title: mData.title,
227         priceStr: mData.valueMoney, // 元为单位
228         startTime: mData.dateValue[0],
229         endTime: mData.dateValue[1],
230         imgUrl: mData.imgUrl,
231         content: mData.content,
232         isUp: mData.isUp
233       }
234
235       // 提交表单
236       this.postFN({
237         url: 'admin/coupon/add',
238         params: params,
239         mockData: {
240           code: 100,
241           msg: '',
242           data: {}
243         }
244       }, () => {
245         this.$messageSuc('保存成功')
246         this.jumpBack()
247       })
248     }
249   }
250 }
251 </script>
252
253 <style lang="scss" scoped>
254
255 </style>