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