index.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <template>
  2. <el-form-item label-width="120px" :label="formConfig.columnComment" style="display: inline-block;" :prop="formConfig.columnName">
  3. <!-- 输入框 -->
  4. <el-input v-if="formConfig.htmlType == 'input'" @change="iChange" 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'" @change="iChange" 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[formConfig.fkInfo.fkColumnName]" :label="itemChild[formConfig.fkInfo.dkColumnName]"
  20. :value="itemChild[formConfig.fkInfo.fkColumnName]">
  21. </el-option>
  22. </el-select>
  23. <!-- 复选框 -->
  24. <el-checkbox-group :disabled="formConfig.disabshow" v-model="config" v-if="formConfig.htmlType == 'checkbox'">
  25. <el-checkbox @change="handleCheckedCitiesChange" v-for="itemChild in formConfig.sysDictData" :label="itemChild.dictValue"
  26. :key="itemChild.dictLabel">
  27. {{itemChild.dictLabel}}
  28. </el-checkbox>
  29. </el-checkbox-group>
  30. <!-- 单选框 -->
  31. <el-radio-group :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'radio'">
  32. <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictValue">{{itemChild.dictLabel}}</el-radio>
  33. </el-radio-group>
  34. <!-- 时间控件 -->
  35. <el-date-picker :disabled="formConfig.disabshow" @change="iChange" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'"
  36. type="date" :placeholder="'请输入'+formConfig.columnComment">
  37. </el-date-picker>
  38. <!-- 上传图片 -->
  39. <el-upload :disabled="formConfig.disabshow" v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}"
  40. :action="process + '/boman-file/upload'" :file-list="config" list-type="picture-card" :on-preview="handlePictureCardPreview"
  41. :on-success="upImageFn" :on-remove="reseImage">
  42. <i class="el-icon-plus"></i>
  43. </el-upload>
  44. <el-dialog :disabled="formConfig.disabshow" :visible.sync="dialogVisible" v-if="formConfig.htmlType == 'imageUpload'">
  45. <img :src="dialogImageUrl" alt="">
  46. </el-dialog>
  47. <!-- 上传文件 -->
  48. <el-upload :disabled="formConfig.disabshow" class="upload-demo" :headers="{Authorization: 'Bearer ' + getToken()}"
  49. v-if="formConfig.htmlType == 'fileUpload'" :action="process + '/boman-file/upload'" :on-change="handleChange"
  50. :on-success="upImageFn" :on-remove="reseImage" :file-list="config">
  51. <el-button size="small" type="primary">点击上传</el-button>
  52. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  53. </el-upload>
  54. <!-- 富文本 -->
  55. <editor :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'editor'"
  56. :min-height="192" />
  57. </el-form-item>
  58. </template>
  59. <script>
  60. const defaultSettings = require('@/settings.js')
  61. import Editor from '@/components/Editor';
  62. import {
  63. listIndexfou
  64. } from "@/api/tool/gen";
  65. import {
  66. getToken
  67. } from "@/utils/auth";
  68. export default {
  69. data() {
  70. return {
  71. fileList: [],
  72. defaultSettings,
  73. dialogImageUrl: '',
  74. process: process.env.VUE_APP_BASE_API,
  75. dialogVisible: false,
  76. disabled: false,
  77. loading: false,
  78. filterList: [],
  79. config: {},
  80. aliemg: {
  81. table: '',
  82. orderBy: 'create_time desc',
  83. pageNo: 1,
  84. pageSize: 10,
  85. fixedData: {
  86. condition: {}
  87. }
  88. },
  89. }
  90. },
  91. components: {
  92. Editor
  93. },
  94. props: {
  95. queryData: {
  96. type: Object,
  97. default: res => {
  98. return {
  99. showData: []
  100. }
  101. }
  102. },
  103. formConfig: {
  104. type: Object,
  105. required: true,
  106. default: res => {
  107. return {
  108. sysDictData: []
  109. }
  110. }
  111. },
  112. type: {
  113. type: Number,
  114. default: 1
  115. },
  116. },
  117. created() {
  118. this.config = {}
  119. if (this.type) {
  120. if (this.formConfig.readonly == true) {
  121. this.formConfig.disabshow = true
  122. } else if (this.formConfig.mask.slice(3, 4) == '0' || this.formConfig.isonliy == true) {
  123. this.formConfig.disabshow = true
  124. } else {
  125. this.formConfig.disabshow = false
  126. }
  127. if (this.formConfig.fkInfo == null) {
  128. this.formConfig.fkInfo = false
  129. }
  130. }
  131. this.init()
  132. if (this.formConfig.extendedAttributes) {
  133. let extend = JSON.parse(this.formConfig.extendedAttributes)
  134. // this.formConfig.extend=extend
  135. this.extFn(extend.col, extend.comp)
  136. }
  137. },
  138. watch: {
  139. 'config': {
  140. handler: function() {
  141. this.$emit('modelFn', this.formConfig.columnName, this.config[this.formConfig.columnName])
  142. },
  143. deep: true
  144. },
  145. 'queryData': {
  146. handler: function() {
  147. if (this.formConfig.extendedAttributes) {
  148. let extend = JSON.parse(this.formConfig.extendedAttributes)
  149. this.extFn(extend.col, extend.comp)
  150. }
  151. },
  152. deep: true
  153. },
  154. },
  155. mounted() {},
  156. methods: {
  157. iChange(val){
  158. if(this.formConfig.isUseExtend){
  159. console.log(this.formConfig.columnName)
  160. this.$emit('iChange',this.formConfig.columnName,val)
  161. }
  162. },
  163. extFn(col, comp) {
  164. let str = this.getDyn(col, this.queryData.showData,comp)
  165. this.config[this.formConfig.columnName] = str
  166. },
  167. eval(code){
  168. let fun = new Function(`return ${code}`)();
  169. return fun
  170. },
  171. listIndexfouFn() {
  172. listIndexfou(this.aliemg).then(response => {
  173. if (response.data) {
  174. this.filterList = response.data.rows
  175. }
  176. this.loading = false;
  177. })
  178. },
  179. remoteMethod(query) {
  180. if (query !== '') {
  181. this.loading = true;
  182. this.aliemg.fixedData.condition[this.formConfig.fkInfo.dkColumnName] = query
  183. this.listIndexfouFn()
  184. } else {
  185. this.filterList = [];
  186. }
  187. },
  188. upImageFn(res, file) {
  189. this.config.push(res.data);
  190. },
  191. init() {
  192. if (this.formConfig.htmlType == 'checkbox' || this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType ==
  193. 'fileUpload') {
  194. this.config = []
  195. } else {
  196. this.$set(this.config, this.formConfig.columnName, ((this.formConfig.columnValue ? this.formConfig.columnValue :
  197. this.formConfig.defaultValue) || ''))
  198. }
  199. if (this.formConfig.fkInfo) {
  200. this.aliemg.table = this.formConfig.fkInfo.fkTableName
  201. if (this.formConfig.fkInfo.value) {
  202. this.aliemg.fixedData.condition[this.formConfig.fkInfo.dkColumnName] = this.formConfig.fkInfo.value
  203. }
  204. this.listIndexfouFn()
  205. }
  206. },
  207. handleChange(file, fileList) {
  208. this.fileList = fileList.slice(-3);
  209. },
  210. getToken() {
  211. return getToken()
  212. },
  213. reseImage(file, fileList) {
  214. let urls = ""
  215. if (file.response) {
  216. urls = file.response.url
  217. } else {
  218. urls = file.url
  219. }
  220. for (let i = this.config.length - 1; i >= 0; i--) {
  221. if (this.config[i].url == urls) {
  222. this.config.splice(i, 1);
  223. }
  224. }
  225. },
  226. reseImage1(file, fileList) {
  227. let urls = ""
  228. if (file.response) {
  229. urls = file.response.url
  230. } else {
  231. urls = file.url
  232. }
  233. for (let i = this.config.length - 1; i >= 0; i--) {
  234. if (this.config[i].url == urls) {
  235. this.config.splice(i, 1);
  236. }
  237. }
  238. },
  239. handlePictureCardPreview(file) {
  240. console.log(file)
  241. this.dialogImageUrl = file.url;
  242. this.dialogVisible = true;
  243. },
  244. handleDownload(file) {
  245. console.log(file);
  246. },
  247. handleQuery() {
  248. this.$emit('btns')
  249. },
  250. handleCheckedCitiesChange(value) {
  251. console.log(this.config)
  252. }
  253. }
  254. }
  255. </script>
  256. <style>
  257. </style>