addEditDialog.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <template>
  2. <div class="add-edit-dialog-container">
  3. <el-dialog
  4. :title="title"
  5. :visible.sync="visible"
  6. width="600px"
  7. :before-close="close"
  8. :close-on-click-modal="false"
  9. >
  10. <el-form :model="formData" ref="formData" :rules="rules" label-width="90px">
  11. <el-form-item label="名称:" prop="imgName">
  12. <el-input placeholder="请输入" v-model="formData.imgName"></el-input>
  13. </el-form-item>
  14. <el-form-item label="图片:" class="plate-icon" prop="file">
  15. <!-- <p class="color666">图片大小不能超过3MB</p> -->
  16. <Upload
  17. :fileList="fileList"
  18. @changeUploadFile="changeUploadFile"
  19. @validateUpload="validateUpload"
  20. :limitUpload="1"
  21. :maximumSize="maximumSize"
  22. :uploadType="1"
  23. ref="upload"
  24. ></Upload>
  25. </el-form-item>
  26. <el-form-item label="跳转类型:" prop="jumpType">
  27. <el-select v-model="formData.jumpType" placeholder="请选择">
  28. <el-option label="pdf" :value="1"></el-option>
  29. <el-option label="网页链接" :value="2"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label="跳转链接:" prop="url" v-show="formData.jumpType == 2">
  33. <el-input placeholder="跳转链接" v-model="formData.url"></el-input>
  34. </el-form-item>
  35. <el-form-item label="文件:" prop="jumpType" v-show="formData.jumpType == 1">
  36. <el-upload
  37. ref="uploadPdf"
  38. :action="uploadUrl"
  39. :on-remove="handlePdfRemove"
  40. :on-success="handlePdfSuccess"
  41. :on-exceed="handlePdfExceed"
  42. :before-upload="beforeUpload"
  43. :file-list="pdfList"
  44. :multiple="false"
  45. :limit="1"
  46. accept="application/pdf">
  47. <el-button size="small" type="primary">点击上传</el-button>
  48. </el-upload>
  49. </el-form-item>
  50. <el-form-item label="显示位置:" prop="type">
  51. <el-select v-model="formData.type" placeholder="请选择">
  52. <el-option label="工作台banner" :value="1"></el-option>
  53. <el-option label="物业端banner" :value="2"></el-option>
  54. <el-option label="4.0首页banner" :value="3"></el-option>
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item label="排序:" prop="serialNo">
  58. <el-input placeholder="请排序" v-model="formData.serialNo" class="sort-input" maxlength="20"></el-input>
  59. </el-form-item>
  60. <!-- <el-form-item label="启用状态:">
  61. <el-switch
  62. v-model="formData.statuz"
  63. active-text="开"
  64. inactive-text="关"
  65. :active-value="1"
  66. :inactive-value="0"
  67. ></el-switch> -->
  68. </el-form-item>
  69. </el-form>
  70. <div slot="footer" class="dialog-footer">
  71. <el-button @click="close()">取 消</el-button>
  72. <el-button
  73. type="primary"
  74. @click="submitForm('formData')"
  75. :disabled="submitBtndisabled"
  76. >确 定</el-button>
  77. </div>
  78. </el-dialog>
  79. </div>
  80. </template>
  81. <script>
  82. import { uploadUrl } from '@/config.js';
  83. import Upload from '@/apps/mobile/components/uploadAuto/index';
  84. import { addBanner, editBanner } from '@/apps/mobile/api/banner/index';
  85. import { validPositiveInteger, validHttps } from '@/apps/mobile/utils/validate';
  86. import { staticPath } from '@/apps//mobile/utils/util';
  87. export default {
  88. components: {
  89. Upload,
  90. },
  91. data() {
  92. // http(s)校验
  93. var checkHttps = (rule, value, callback) => {
  94. if (value && !validHttps(value)) {
  95. callback(new Error('格式不正确'));
  96. } else {
  97. callback();
  98. }
  99. };
  100. // 排序校验
  101. var checkSort = (rule, value, callback) => {
  102. if (value && !validPositiveInteger(value)) {
  103. callback(new Error('格式不正确'));
  104. } else {
  105. callback();
  106. }
  107. };
  108. return {
  109. uploadUrl: uploadUrl,
  110. jumpType: null,
  111. type: null,
  112. visible: false,
  113. title: '新增',
  114. formData: { file: null },
  115. submitBtndisabled: false,
  116. fileList: [], // 图片列表
  117. pdfList: [],//pdf列表
  118. maximumSize: 3, //图片大小 不超过3MB
  119. limitUpload: 1,
  120. rules: {
  121. imgName: [
  122. { required: true, message: '请输入名称', trigger: 'blur' },
  123. { max: 30, message: '长度最大30个字符', trigger: 'blur' },
  124. ],
  125. jumpType: [{ required: true, message: '请选择跳转类型', trigger: 'change' }],
  126. type: [{ required: true, message: '请选择显示位置', trigger: 'blur' }],
  127. serialNo: [
  128. { validator: checkSort, message: '请输入正整数', trigger: 'blur' }
  129. ],
  130. file: [{ required: true, message: '请上传图片', trigger: 'blur' }],
  131. url: [
  132. { validator: checkHttps, message: '请输入正确的链接地址', trigger: 'blur' }
  133. ],
  134. },
  135. };
  136. },
  137. methods: {
  138. open(type, data) {
  139. this.type = type;
  140. let obj1 = {
  141. file: null,
  142. };
  143. if (type === 'edit') {
  144. this.title = '编辑';
  145. if (data.image) {
  146. obj1.file = true;
  147. let url = staticPath(data.image);
  148. let obj = {
  149. name: '',
  150. url,
  151. response: {
  152. data: { pathUrl: data.image },
  153. },
  154. };
  155. this.fileList.push(obj);
  156. this.pdfList = [
  157. {
  158. name: data.url,
  159. url: data.url,
  160. hasBeenUploaded: true,
  161. newName: data.url,
  162. },
  163. ];
  164. }
  165. this.formData = Object.assign({ ...data, ...obj1 });
  166. } else {
  167. this.title = '新增';
  168. this.formData = obj1;
  169. }
  170. this.visible = true;
  171. },
  172. close() {
  173. this.type = null;
  174. this.$refs['formData'].resetFields();
  175. this.$refs.upload.clearFiles(); // 清空已上传的文件列表
  176. this.fileList = [];
  177. this.pdfList = [];
  178. this.submitBtndisabled = false;
  179. this.visible = false;
  180. },
  181. submitForm(formName) {
  182. this.$refs[formName].validate(valid => {
  183. if (valid) {
  184. this.submitBtndisabled = true;
  185. let message = '';
  186. let image = null;
  187. if (this.fileList.length > 0) {
  188. console.log(this.fileList, 'this.fileList');
  189. image = this.fileList[0].response.data.pathUrl;
  190. }
  191. let obj = Object.assign({ ...this.formData, image });
  192. console.log(obj, 'objj');
  193. if (this.type === 'add') {
  194. message = '新增成功';
  195. delete obj.file;
  196. obj.createBy = 0; //创建者ID
  197. addBanner(obj)
  198. .then(res => {
  199. this.completeOperation(message);
  200. })
  201. .catch(err => err);
  202. }
  203. if (this.type === 'edit') {
  204. message = '修改成功';
  205. let editObj = {
  206. id: obj.id,
  207. imgName: obj.imgName,
  208. url: obj.url,
  209. jumpType: obj.jumpType,
  210. type: obj.type,
  211. serialNo: obj.serialNo,
  212. image: obj.image,
  213. };
  214. editBanner(editObj)
  215. .then(() => {
  216. this.completeOperation(message);
  217. })
  218. .catch(err => err);
  219. }
  220. }
  221. });
  222. },
  223. /**
  224. * 手动验证upload、更新选择完成的图片数据
  225. * @param {Object} data: fileList是上传的图片数据 validateValues为true时说明有上传图片 为null时无上传图片
  226. */
  227. validateUpload(data) {
  228. this.changeUploadFile(data.fileList);
  229. // console.log(data,'data');
  230. this.formData.file = data.validateValues;
  231. this.$refs['formData'].validateField('file');
  232. },
  233. changeUploadFile(fileList) {
  234. this.fileList = fileList;
  235. console.log(this.fileList, 'this.fileList');
  236. },
  237. /**
  238. * 将新增、编辑操作完成之后共同需要调用的方法放在此函数里面
  239. * @param {String} message 提示信息
  240. */
  241. completeOperation(message) {
  242. this.$message({
  243. type: 'success',
  244. message,
  245. });
  246. this.close();
  247. this.submitBtndisabled = false;
  248. this.$emit('queryListData');
  249. },
  250. handlePdfRemove() {
  251. this.formData.url = '';
  252. this.formData.file = null;
  253. },
  254. handlePdfSuccess(response) {
  255. this.formData.url = response.data.pathUrl;
  256. this.formData.file = true;
  257. this.$refs['formData'].validateField('file');
  258. },
  259. handlePdfExceed() {
  260. this.$message.warning('只能上传一个文件!');
  261. },
  262. beforeUpload(file) {
  263. let fileType = ['application/pdf'].indexOf(file.type);
  264. const isLt5M = file.size / 1024 / 1024 < 8;
  265. if (fileType === -1) {
  266. this.$message.warning('文件只能是pdf格式!');
  267. }
  268. if (!isLt5M) {
  269. this.$message.warning('文件大小不能超过8MB!');
  270. }
  271. return fileType !== -1 && isLt5M;
  272. },
  273. },
  274. watch: {
  275. fileList(val) {
  276. this.$nextTick(() => {
  277. this.$refs.upload.changeHideUpload();
  278. });
  279. },
  280. },
  281. };
  282. </script>
  283. <style lang="stylus" scoped>
  284. .add-edit-dialog-container {
  285. ::v-deep .el-input {
  286. width: auto;
  287. }
  288. ::v-deep .el-input__inner {
  289. width: 200px;
  290. }
  291. .upload {
  292. display: inline-block;
  293. }
  294. }
  295. </style>