index.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <template>
  2. <el-form-item :label="formConfig.columnComment" style="display: inline-block;" :prop="formConfig.columnName">
  3. <!-- 输入框 -->
  4. <el-input v-if="formConfig.htmlType == 'input'" v-model="config[formConfig.columnName]" :placeholder="'请输入'+formConfig.columnComment"
  5. clearable @keyup.enter.native="handleQuery" />
  6. <!-- 多行输入框 -->
  7. <el-input v-if="formConfig.htmlType == 'textarea'" type="textarea" v-model="config[formConfig.columnName]" :placeholder="'请输入'+formConfig.columnComment"
  8. clearable @keyup.enter.native="handleQuery" />
  9. <!-- 下拉框 -->
  10. <el-select v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'" filterable :placeholder="'请输入'+formConfig.columnComment">
  11. <el-option v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel" :value="itemChild.dictValue">
  12. </el-option>
  13. </el-select>
  14. <!-- 复选框 -->
  15. <el-checkbox-group v-model="config" v-if="formConfig.htmlType == 'checkbox'">
  16. <el-checkbox @change="handleCheckedCitiesChange" v-for="itemChild in formConfig.sysDictData" :label="itemChild.dictValue" :key="itemChild.dictLabel" >
  17. {{itemChild.dictLabel}}
  18. </el-checkbox>
  19. </el-checkbox-group>
  20. <!-- 单选框 -->
  21. <el-radio-group v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'radio'">
  22. <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictValue">{{itemChild.dictLabel}}</el-radio>
  23. </el-radio-group>
  24. <!-- 时间控件 -->
  25. <el-date-picker v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'" type="date" :placeholder="'请输入'+formConfig.columnComment">
  26. </el-date-picker>
  27. <!-- 上传图片 -->
  28. <el-upload v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}" :action="process + '/boman-file/upload'" :file-list="config" list-type="picture-card"
  29. :on-preview="handlePictureCardPreview" :on-success="upImageFn" :on-remove="reseImage" >
  30. <i class="el-icon-plus"></i>
  31. </el-upload>
  32. <el-dialog :visible.sync="dialogVisible" v-if="formConfig.htmlType == 'imageUpload'">
  33. <img width="100%" :src="dialogImageUrl" alt="">
  34. </el-dialog>
  35. <!-- 上传文件 -->
  36. <el-upload
  37. class="upload-demo"
  38. :headers="{Authorization: 'Bearer ' + getToken()}"
  39. v-if="formConfig.htmlType == 'fileUpload'"
  40. :action="process + '/boman-file/upload'"
  41. :on-change="handleChange"
  42. :on-success="upImageFn"
  43. :on-remove="reseImage"
  44. :file-list="config">
  45. <el-button size="small" type="primary">点击上传</el-button>
  46. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  47. </el-upload>
  48. <!-- 富文本 -->
  49. <editor v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'editor'" :min-height="192"/>
  50. </el-form-item>
  51. </template>
  52. <script>
  53. const defaultSettings = require('@/settings.js')
  54. import Editor from '@/components/Editor';
  55. import { getToken } from "@/utils/auth";
  56. export default {
  57. data() {
  58. return {
  59. fileList: [],
  60. defaultSettings,
  61. dialogImageUrl: '',
  62. process: process.env.VUE_APP_BASE_API,
  63. dialogVisible: false,
  64. disabled: false,
  65. config: {},
  66. }
  67. },
  68. components: {
  69. Editor
  70. },
  71. props: {
  72. formConfig: {
  73. type: Object,
  74. required: true,
  75. 'default': {
  76. sysDictData: []
  77. }
  78. },
  79. },
  80. created() {
  81. this.config = {}
  82. this.init()
  83. },
  84. mounted() {
  85. },
  86. methods: {
  87. upImageFn(res, file){
  88. this.config.push(res.data);
  89. console.log(res,12153)
  90. },
  91. init() {
  92. if(this.formConfig.htmlType == 'checkbox' || this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType == 'fileUpload'){
  93. this.config = this.formConfig.columnValue || []
  94. }else{
  95. this.$set(this.config, this.formConfig.columnName,(this.formConfig.columnValue || ''))
  96. }
  97. },
  98. handleChange(file, fileList) {
  99. this.fileList = fileList.slice(-3);
  100. },
  101. getToken() {
  102. return getToken()
  103. },
  104. reseImage(file, fileList) {
  105. let urls = ""
  106. if(file.response){
  107. urls = file.response.url
  108. }else{
  109. urls = file.url
  110. }
  111. for (let i = this.config.length - 1; i >= 0; i--) {
  112. if (this.config[i].url == urls) {
  113. this.config.splice(i, 1);
  114. }
  115. }
  116. },
  117. reseImage1(file, fileList) {
  118. let urls = ""
  119. if(file.response){
  120. urls = file.response.url
  121. }else{
  122. urls = file.url
  123. }
  124. for (let i = this.config.length - 1; i >= 0; i--) {
  125. if (this.config[i].url == urls) {
  126. this.config.splice(i, 1);
  127. }
  128. }
  129. },
  130. handlePictureCardPreview(file) {
  131. this.dialogImageUrl = file.url;
  132. // console.log(this.dialogImageUrl)
  133. this.dialogVisible = true;
  134. },
  135. handleDownload(file) {
  136. console.log(file);
  137. },
  138. handleQuery() {
  139. this.$emit('btns')
  140. },
  141. handleCheckedCitiesChange(value){
  142. console.log(this.config)
  143. }
  144. }
  145. }
  146. </script>
  147. <style>
  148. </style>