index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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" :disabled="formConfig.disabshow" />
  6. <!-- 多行输入框 -->
  7. <el-input v-if="formConfig.htmlType == 'textarea'" type="textarea" v-model="config[formConfig.columnName]"
  8. :placeholder="'请输入'+formConfig.columnComment" clearable @keyup.enter.native="handleQuery" :disabled="formConfig.disabshow"/>
  9. <!-- 下拉框 -->
  10. <el-select v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'&&(!formConfig.fkInfo)"
  11. filterable :placeholder="'请输入'+formConfig.columnComment" :disabled="formConfig.disabshow">
  12. <el-option v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel"
  13. :value="itemChild.dictValue">
  14. </el-option>
  15. </el-select>
  16. <!-- 下拉框搜索 -->
  17. <el-select :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'&&(formConfig.fkInfo)"
  18. filterable remote :remote-method="remoteMethod" :loading="loading" :placeholder="'请输入'+formConfig.columnComment">
  19. <el-option v-for="itemChild in filterList" :key="itemChild.id" :label="itemChild.table_name" :value="itemChild.id">
  20. </el-option>
  21. </el-select>
  22. <!-- 复选框 -->
  23. <el-checkbox-group :disabled="formConfig.disabshow" v-model="config" v-if="formConfig.htmlType == 'checkbox'">
  24. <el-checkbox @change="handleCheckedCitiesChange" v-for="itemChild in formConfig.sysDictData" :label="itemChild.dictValue"
  25. :key="itemChild.dictLabel">
  26. {{itemChild.dictLabel}}
  27. </el-checkbox>
  28. </el-checkbox-group>
  29. <!-- 单选框 -->
  30. <el-radio-group :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'radio'">
  31. <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictValue">{{itemChild.dictLabel}}</el-radio>
  32. </el-radio-group>
  33. <!-- 时间控件 -->
  34. <el-date-picker :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'" type="date"
  35. :placeholder="'请输入'+formConfig.columnComment">
  36. </el-date-picker>
  37. <!-- 上传图片 -->
  38. <el-upload :disabled="formConfig.disabshow" v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}" :action="process + '/boman-file/upload'"
  39. :file-list="config" list-type="picture-card" :on-preview="handlePictureCardPreview" :on-success="upImageFn"
  40. :on-remove="reseImage">
  41. <i class="el-icon-plus"></i>
  42. </el-upload>
  43. <el-dialog :disabled="formConfig.disabshow" :visible.sync="dialogVisible" v-if="formConfig.htmlType == 'imageUpload'">
  44. <img width="100%" :src="dialogImageUrl" alt="">
  45. </el-dialog>
  46. <!-- 上传文件 -->
  47. <el-upload :disabled="formConfig.disabshow" class="upload-demo" :headers="{Authorization: 'Bearer ' + getToken()}" v-if="formConfig.htmlType == 'fileUpload'"
  48. :action="process + '/boman-file/upload'" :on-change="handleChange" :on-success="upImageFn" :on-remove="reseImage"
  49. :file-list="config">
  50. <el-button size="small" type="primary">点击上传</el-button>
  51. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  52. </el-upload>
  53. <!-- 富文本 -->
  54. <editor :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'editor'" :min-height="192" />
  55. </el-form-item>
  56. </template>
  57. <script>
  58. const defaultSettings = require('@/settings.js')
  59. import Editor from '@/components/Editor';
  60. import {
  61. listIndexfou
  62. } from "@/api/tool/gen";
  63. import {
  64. getToken
  65. } from "@/utils/auth";
  66. export default {
  67. data() {
  68. return {
  69. fileList: [],
  70. defaultSettings,
  71. dialogImageUrl: '',
  72. process: process.env.VUE_APP_BASE_API,
  73. dialogVisible: false,
  74. disabled: false,
  75. loading: false,
  76. filterList: [],
  77. config: {},
  78. aliemg: {
  79. table: '',
  80. orderBy: 'create_time desc',
  81. pageNo: 1,
  82. pageSize: 10,
  83. fixedData: {
  84. condition: {}
  85. }
  86. },
  87. }
  88. },
  89. components: {
  90. Editor
  91. },
  92. props: {
  93. formConfig: {
  94. type: Object,
  95. required: true,
  96. 'default': {
  97. sysDictData: []
  98. }
  99. },
  100. type: {
  101. type: Number,
  102. default: 1
  103. },
  104. },
  105. created() {
  106. this.config = {}
  107. // console.log(this.formConfig.mask.slice(3,4),876454)
  108. console.log(this.formConfig.fkInfo)
  109. if(this.type){
  110. if(this.formConfig.readonly == true){
  111. this.formConfig.disabshow = true
  112. }else if(this.formConfig.mask.slice(3,4) == '0'){
  113. this.formConfig.disabshow = true
  114. }else{
  115. this.formConfig.disabshow = false
  116. }
  117. if(this.formConfig.fkInfo == null){
  118. this.formConfig.fkInfo=false
  119. }
  120. }
  121. this.init()
  122. },
  123. watch: {
  124. 'config': {
  125. handler: function() {
  126. this.$emit('modelFn',this.formConfig.columnName,this.config[this.formConfig.columnName])
  127. },
  128. deep: true
  129. }
  130. },
  131. mounted() {},
  132. methods: {
  133. listIndexfouFn() {
  134. listIndexfou(this.aliemg).then(response => {
  135. if (response.data) {
  136. this.filterList = response.data.rows
  137. }
  138. this.loading = false;
  139. })
  140. },
  141. remoteMethod(query) {
  142. if (query !== '') {
  143. this.loading = true;
  144. this.aliemg.fixedData.condition[this.formConfig.fkInfo.dkColumnName] = query
  145. this.listIndexfouFn()
  146. } else {
  147. this.filterList = [];
  148. }
  149. },
  150. upImageFn(res, file) {
  151. this.config.push(res.data);
  152. },
  153. init() {
  154. if (this.formConfig.htmlType == 'checkbox' || this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType ==
  155. 'fileUpload') {
  156. this.config = []
  157. } else {
  158. this.$set(this.config, this.formConfig.columnName, (this.formConfig.columnValue || ''))
  159. }
  160. if(this.formConfig.fkInfo){
  161. this.aliemg.table = this.formConfig.fkInfo.fkTableName
  162. }
  163. },
  164. handleChange(file, fileList) {
  165. this.fileList = fileList.slice(-3);
  166. },
  167. getToken() {
  168. return getToken()
  169. },
  170. reseImage(file, fileList) {
  171. let urls = ""
  172. if (file.response) {
  173. urls = file.response.url
  174. } else {
  175. urls = file.url
  176. }
  177. for (let i = this.config.length - 1; i >= 0; i--) {
  178. if (this.config[i].url == urls) {
  179. this.config.splice(i, 1);
  180. }
  181. }
  182. },
  183. reseImage1(file, fileList) {
  184. let urls = ""
  185. if (file.response) {
  186. urls = file.response.url
  187. } else {
  188. urls = file.url
  189. }
  190. for (let i = this.config.length - 1; i >= 0; i--) {
  191. if (this.config[i].url == urls) {
  192. this.config.splice(i, 1);
  193. }
  194. }
  195. },
  196. handlePictureCardPreview(file) {
  197. this.dialogImageUrl = file.url;
  198. this.dialogVisible = true;
  199. },
  200. handleDownload(file) {
  201. console.log(file);
  202. },
  203. handleQuery() {
  204. this.$emit('btns')
  205. },
  206. handleCheckedCitiesChange(value) {
  207. console.log(this.config)
  208. }
  209. }
  210. }
  211. </script>
  212. <style>
  213. </style>