FormConfig.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <el-scrollbar>
  3. <div class="form-config-container">
  4. <el-form label-position="top" size="default">
  5. <el-form-item label="UI">
  6. <el-radio-group v-model="dataModel.ui">
  7. <el-radio-button value="element" label="element">Element</el-radio-button>
  8. <el-radio-button value="antd" label="antd" :disabled="!useAntdForm">Ant Design</el-radio-button>
  9. </el-radio-group>
  10. </el-form-item>
  11. <el-form-item :label="$t('fm.config.form.mobileRender')">
  12. <el-switch v-model="dataModel.mobileVant" active-text="Vant" :disabled="!useVantForm"></el-switch>
  13. </el-form-item>
  14. <el-form-item :label="$t('fm.config.form.width')" >
  15. <el-input v-model="dataModel.width" clearable :disabled="isMobile()"></el-input>
  16. </el-form-item>
  17. <el-form-item :label="$t('fm.config.form.labelPosition.title')">
  18. <el-radio-group v-model="dataModel.labelPosition" :key="data.labelPosition">
  19. <el-radio-button value="left" label="left">{{$t('fm.config.form.labelPosition.left')}}</el-radio-button>
  20. <el-radio-button value="right" label="right">{{$t('fm.config.form.labelPosition.right')}}</el-radio-button>
  21. <el-radio-button value="top" label="top">{{$t('fm.config.form.labelPosition.top')}}</el-radio-button>
  22. </el-radio-group>
  23. </el-form-item>
  24. <el-form-item :label="$t('fm.config.form.labelWidth')">
  25. <el-input-number v-model="dataModel.labelWidth" :min="0" :max="200" :step="10"></el-input-number>
  26. </el-form-item>
  27. <!-- <el-form-item :label="$t('fm.config.widget.labelWidth')" v-if="Object.keys(data.options).indexOf('labelWidth')>=0 && !data.options.tableColumn">
  28. <el-checkbox v-model="data.options.isLabelWidth" style="margin-right: 5px;">{{$t('fm.config.widget.custom')}}</el-checkbox>
  29. <el-input-number v-model="data.options.labelWidth" :disabled="!data.options.isLabelWidth" :min="0" :max="99999" :step="10"></el-input-number>
  30. </el-form-item> -->
  31. <el-form-item :label="$t('fm.config.form.labelSuffix')">
  32. <el-switch v-model="dataModel.labelSuffix"></el-switch>
  33. </el-form-item>
  34. <el-form-item :label="$t('fm.config.form.size')">
  35. <el-radio-group v-model="dataModel.size">
  36. <el-radio-button value="large" label="large">Large</el-radio-button>
  37. <el-radio-button value="default" label="default">Default</el-radio-button>
  38. <el-radio-button value="small" label="small">Small</el-radio-button>
  39. </el-radio-group>
  40. </el-form-item>
  41. <el-form-item :label="$t('fm.config.form.styleSheets')">
  42. <el-button style="width: 100%;" @click="handleSetStyleSheets">{{$t('fm.config.widget.setting')}}</el-button>
  43. </el-form-item>
  44. <el-form-item :label="$t('fm.config.form.customClass')" >
  45. <el-select
  46. style="width: 100%;"
  47. v-model="customClassArray"
  48. multiple
  49. filterable
  50. allow-create
  51. default-first-option>
  52. <el-option
  53. v-for="item in sheets"
  54. :key="item"
  55. :label="item"
  56. :value="item">
  57. </el-option>
  58. </el-select>
  59. </el-form-item>
  60. <el-form-item :label="$t('fm.datasource.name')">
  61. <el-button style="width: 100%;" @click="handleSetDatasource">{{$t('fm.config.widget.setting')}}</el-button>
  62. </el-form-item>
  63. <el-form-item :label="$t('fm.eventscript.name')">
  64. <el-button style="width: 100%;" @click="handleSetScript">{{$t('fm.config.widget.setting')}}</el-button>
  65. </el-form-item>
  66. </el-form>
  67. <code-dialog ref="styleDialog" mode="css" :title="$t('fm.config.form.styleSheets')" help="https://form.making.link/docs/manual/custom-style.html#%E8%A1%A8%E5%8D%95%E6%A0%B7%E5%BC%8F%E8%A1%A8" @on-confirm="handlestyleSheetsConfirm"></code-dialog>
  68. <datasource-dialog ref="dataSourceDialog" @dialog-close="handleDataSourceClose"></datasource-dialog>
  69. <event-script-dialog ref="eventScriptDialog" @dialog-close="handleEventScriptClose" @dialog-confirm="handleEventConfirm"></event-script-dialog>
  70. </div>
  71. </el-scrollbar>
  72. </template>
  73. <script>
  74. import CodeDialog from './CodeDialog.vue'
  75. import DatasourceDialog from './DataSource/dialog.vue'
  76. import EventScriptDialog from './EventPanel/dialog.vue'
  77. import { splitStyleSheets } from '../util'
  78. import { EventBus } from '../util/event-bus.js'
  79. import { ElMessage } from '../util/message.js'
  80. export default {
  81. components: {
  82. CodeDialog,
  83. DatasourceDialog,
  84. EventScriptDialog
  85. },
  86. props: ['data', 'sheets', 'formKey'],
  87. emits: ['on-style-update', 'on-datasource-update', 'on-eventscript-update', 'on-eventscript-confirm', 'update:data'],
  88. data () {
  89. return {
  90. customClassArray: this.data && this.data.customClass ? this.data.customClass.split(' ').filter(item => item) : [],
  91. dataModel: this.data
  92. }
  93. },
  94. inject: ['isMobile', 'useAntdForm', 'useVantForm'],
  95. methods: {
  96. handleSetStyleSheets () {
  97. let sheets = document.styleSheets[0]
  98. if (sheets.insertRule) {
  99. this.$refs.styleDialog.open(this.data.styleSheets || '')
  100. } else {
  101. ElMessage({
  102. message: this.$t('fm.message.notSupport'),
  103. type: 'warning'
  104. }, this)
  105. }
  106. },
  107. handlestyleSheetsConfirm (value) {
  108. this.dataModel.styleSheets = value
  109. this.$refs.styleDialog.close()
  110. var arr = splitStyleSheets(value)
  111. this.$emit('on-style-update', arr)
  112. this.$nextTick(() => {
  113. EventBus.$emit('on-history-add-' + this.formKey)
  114. })
  115. },
  116. handleSetDatasource () {
  117. this.dataModel.dataSource = this.data.dataSource || []
  118. this.$refs.dataSourceDialog.open(this.data.dataSource)
  119. },
  120. handleDataSourceClose (list) {
  121. this.dataModel.dataSource = list
  122. this.$emit('on-datasource-update', list)
  123. this.$nextTick(() => {
  124. EventBus.$emit('on-history-add-' + this.formKey)
  125. })
  126. },
  127. handleSetScript () {
  128. this.dataModel.eventScript = this.data.eventScript || []
  129. this.$refs.eventScriptDialog.open(this.data.eventScript)
  130. },
  131. editClass () {
  132. this.handleSetStyleSheets()
  133. },
  134. editDatasource (datasource) {
  135. this.dataModel.dataSource = this.data.dataSource || []
  136. this.$refs.dataSourceDialog.open(this.data.dataSource, datasource)
  137. },
  138. editScript (eventName, eventKey) {
  139. this.dataModel.eventScript = this.data.eventScript || []
  140. this.$refs.eventScriptDialog.open(this.data.eventScript, eventName, eventKey)
  141. },
  142. handleEventScriptClose (list) {
  143. this.dataModel.eventScript = list
  144. this.$emit('on-eventscript-update', list)
  145. this.$nextTick(() => {
  146. EventBus.$emit('on-history-add-' + this.formKey)
  147. })
  148. },
  149. handleEventConfirm (eventObj) {
  150. this.$emit('on-eventscript-confirm', eventObj)
  151. this.$nextTick(() => {
  152. EventBus.$emit('on-history-add-' + this.formKey)
  153. })
  154. }
  155. },
  156. created () {
  157. this.dataModel.ui = this.useAntdForm ? 'antd' : 'element'
  158. this.dataModel.mobileVant = this.useVantForm
  159. },
  160. watch: {
  161. 'data.customClass': function(val) {
  162. this.customClassArray = this.data && this.data.customClass ? this.data.customClass.split(' ').filter(item => item) : []
  163. },
  164. customClassArray (val) {
  165. this.dataModel.customClass = val.join(' ')
  166. },
  167. data (val) {
  168. this.dataModel = val
  169. },
  170. dataModel: {
  171. deep: true,
  172. handler (val) {
  173. this.$emit('update:data', val)
  174. }
  175. },
  176. useVantForm (val) {
  177. this.dataModel.mobileVant = val
  178. },
  179. useAntdForm (val) {
  180. if (!val) {
  181. this.dataModel.ui = 'element'
  182. }
  183. }
  184. }
  185. }
  186. </script>