FormTemp.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. const template=`
  2. <div class="form-body">
  3. <el-steps v-if="steps" :active="activeStep" finish-status="success" simple style="margin-bottom: 10px">
  4. <el-step :title="stepTitle" v-for="stepTitle in steps"></el-step>
  5. </el-steps>
  6. <el-tabs v-if="tabs" v-model="activeTab" @tab-change="tabChange">
  7. <el-tab-pane v-for="(tab,index) in tabs" :label="tab" :name="index"></el-tab-pane>
  8. </el-tabs>
  9. <el-form :require-asterisk-position="requireAsteriskPosition" ref="formRef" :model="form_.data" :label-position="documentWidth<=600?'top':labelPosition" :label-width="labelWidth" :rules="form_.rules">
  10. <slot :rows="form_.data" :step="activeStep"></slot>
  11. <template v-for="(column,key) in form_.columns">
  12. <template v-if="column.edit && column.edit.form=='slot'">
  13. <div :class="((steps && column.step!=activeStep) || (tabs && column.tab!=activeTab) || column.visible===false || (column.visible!==undefined && typeof column.visible=='function' && !column.visible(form_.data)) || (column.edit.form=='input' && column.edit.type=='hidden'))?'hide':''">
  14. <slot :name="column.field" :rows="form_.data" :value="column.edit.value" :step="activeStep"></slot>
  15. </div>
  16. </template>
  17. <template v-if="column.isTitle">
  18. <div style="font-size: 14px;font-weight: bold;border-bottom: 1px solid #eae9e9;padding-bottom: 10px;margin-bottom: 10px;">{{column.title}}</div>
  19. </template>
  20. <template v-if="column.edit && column.edit.form!='slot'">
  21. <el-form-item :prop="column.field" :label="column.title+':'" :error="column.edit.error" :class="((steps && column.step!=activeStep) || (tabs && column.tab!=activeTab) || column.visible===false || (column.visible!==undefined && typeof column.visible=='function' && !column.visible(form_.data)) || (column.edit.form=='input' && column.edit.type=='hidden'))?'hide':''">
  22. <el-row style="width:100%">
  23. <el-col :span="24-appendWidth">
  24. <Wangeditor v-if="column.edit.form=='editor'" :field="column.field" @change="changeEditor" :value="form_.data[column.field]" :width="column.edit.width" :height="column.edit.height"></Wangeditor>
  25. <el-input @blur="column.edit.blur(form_.data[column.field],form_.data)" :disabled="column.edit.readonly" v-model="form_.data[column.field]" v-if="column.edit.form=='input'" :type="column.edit.type" :rows="(column.edit.type=='textarea')?column.edit.rows:0" :placeholder="column.edit.placeholder">
  26. <template #prepend v-if="column.edit.prepend">{{column.edit.prepend}}</template>
  27. <template #append v-if="column.edit.append">{{column.edit.append}}</template>
  28. <template #append v-if="column.edit.button">
  29. <div :class="['input-btn',column.edit.button.type?column.edit.button.type:'primary']" @click="column.edit.button.method(form_.data[column.field],form_.data)">{{column.edit.button.text}}</div>
  30. </template>
  31. </el-input>
  32. <el-select @change="column.edit.change(form_.data[column.field],form_.data)" :placeholder="column.edit.placeholder" v-model="form_.data[column.field]" :disabled="column.edit.disabled?true:false" :multiple="column.edit.multiple?true:false" :clearable="column.edit.clearable?true:false" v-if="column.edit.form=='select'" style="width: 100%">
  33. <template #header v-if="column.edit.multiple">
  34. <el-checkbox
  35. v-model="column.edit.checkAll"
  36. :indeterminate="false"
  37. @change="handleSelectCheckAll(column)">
  38. ${__('全选')}
  39. </el-checkbox>
  40. </template>
  41. <el-option
  42. v-for="(value,key) in column.searchList"
  43. :key="key.toString()"
  44. :label="value"
  45. :value="key.toString()">
  46. </el-option>
  47. </el-select>
  48. <el-checkbox-group @change="column.edit.change(form_.data[column.field],form_.data)" v-model="form_.data[column.field]" v-if="column.edit.form=='checkbox'" style="width: 100%;">
  49. <el-checkbox
  50. v-for="(value,key) in column.searchList"
  51. :label="key">
  52. {{value}}
  53. </el-checkbox>
  54. </el-checkbox-group>
  55. <el-radio-group @change="column.edit.change(form_.data[column.field],form_.data)" v-model="form_.data[column.field]" v-if="column.edit.form=='radio'" style="width: 100%;">
  56. <template v-if="isYesOrNo(column.searchList)">
  57. <el-radio label="1">${__('是')}</el-radio>
  58. <el-radio label="0">${__('否')}</el-radio>
  59. </template>
  60. <template v-else>
  61. <el-radio
  62. v-for="(value,key) in column.searchList"
  63. :label="key">
  64. {{value}}
  65. </el-radio>
  66. </template>
  67. </el-radio-group>
  68. <el-switch @change="column.edit.change(form_.data[column.field],form_.data)" v-model="form_.data[column.field]" :active-value="column.edit.activeValue" :inactive-value="column.edit.inactiveValue" v-if="column.edit.form=='switch'"></el-switch>
  69. <el-date-picker
  70. range-separator="到"
  71. v-model="form_.data[column.field]"
  72. @change="column.edit.change(form_.data[column.field],form_.data)"
  73. v-if="column.edit.form=='date-picker'"
  74. :type="column.edit.type"
  75. start-placeholder="开始时间"
  76. end-placeholder="结束时间"
  77. :placeholder="column.edit.placeholder"
  78. :shortcuts="column.edit.shortcuts"
  79. :format="column.edit.format"
  80. style="width: 100%;">
  81. </el-date-picker>
  82. <el-time-picker
  83. v-if="column.edit.form=='time-picker'"
  84. @change="column.edit.change(form_.data[column.field],form_.data)"
  85. range-separator="到"
  86. :is-range="column.edit.isRange"
  87. :placeholder="column.edit.placeholder"
  88. start-placeholder="开始时间"
  89. end-placeholder="结束时间"
  90. :editable="false"
  91. :format="column.edit.format"
  92. :arrow-control="true"
  93. v-model="form_.data[column.field]"
  94. style="width:100%">
  95. </el-time-picker>
  96. <el-cascader
  97. @change="column.edit.change(form_.data[column.field],form_.data)"
  98. v-if="column.edit.form=='cascader'"
  99. v-model="form_.data[column.field]"
  100. :props="column.edit.props"
  101. :placeholder="column.edit.placeholder"
  102. :options="column.edit.options"
  103. :clearable="true"
  104. style="width: 100%">
  105. </el-cascader>
  106. <el-upload
  107. v-if="column.edit.form=='files'"
  108. v-model:file-list="form_.data[column.field]"
  109. :multiple="column.edit.multiple?true:false"
  110. :accept="column.edit.accept?column.edit.accept:'image/*'"
  111. :limit="column.edit.limit?column.edit.limit:1"
  112. action="${Yunqi.config.baseUrl}${Yunqi.config.upload.uploadurl}"
  113. :data="{disks:column.edit.disks?column.edit.disks:'',category:''}"
  114. :headers="{'x-requested-with': 'XMLHttpRequest'}"
  115. list-type="picture-card"
  116. :on-success="fileUploadSuccess"
  117. :before-upload="fileUploadBefore"
  118. :class="(form_.data[column.field].length>=column.edit.limit)?'disabled':''"
  119. :on-preview="handlePictureCardPreview">
  120. <i class="fa fa-plus"></i>
  121. </el-upload>
  122. <Attachment @change="changeAttachment" :field="column.field" :value="form_.data[column.field]" :limit="column.edit.limit" v-if="column.edit.form=='attachment'"></Attachment>
  123. <template v-if="column.edit.form=='selectpage'">
  124. <select-page
  125. @change="changeSelectpage"
  126. :url="column.edit.url"
  127. :label-field="column.edit.labelField"
  128. :key-field="column.edit.keyField"
  129. :field="column.field"
  130. :placeholder="column.edit.placeholder"
  131. :page-size="column.edit.pageSize"
  132. :value="form_.data[column.field]"
  133. :disabled="column.edit.disabled?true:false"
  134. :multiple="column.edit.multiple">
  135. </select-page>
  136. </template>
  137. <template v-if="column.edit.form=='fieldlist'">
  138. <Fieldlist :label="column.edit.label" :keys="column.edit.keys" :value="form_.data[column.field]" @change="changeFieldlist" :field="column.field"></Fieldlist>
  139. </template>
  140. </el-col>
  141. <el-col v-if="appendWidth>0 && appendWidth<13" :span="appendWidth">
  142. <slot name="append" :column="column"></slot>
  143. </el-col>
  144. </el-row>
  145. </el-form-item>
  146. </template>
  147. </template>
  148. <div :class="isLayer?'form-footer-layer':'form-footer'">
  149. <slot name="footer" :step="activeStep">
  150. <el-button v-if="steps && activeStep>0" type="primary" @click="preStep"><i class="fa fa-angle-double-left"></i>&nbsp;上一步</el-button>
  151. <el-button v-if="steps && steps.length>activeStep+1" type="primary" @click="nextStep"><i class="fa fa-angle-double-right"></i>&nbsp;下一步</el-button>
  152. <el-button v-if="!steps || (steps && steps.length==activeStep+1)" type="primary" @click="submit"><i class="fa fa-check"></i>&nbsp;提交</el-button>
  153. <el-button type="info" @click="reset"><i class="fa fa-reply"></i>&nbsp;重置</el-button>
  154. </slot>
  155. </div>
  156. </el-form>
  157. </div>
  158. `;
  159. export default template;