EditViewTemplate.ftl 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <template>
  2. <div class="edit-view">
  3. <el-form :model="formData" :rules="rules" ref="form" label-width="${labelWidth}" label-position="right" size="small"
  4. style="max-width: 500px;">
  5. <#list model.fields as field>
  6. <el-form-item prop="${field.modelName}" label="${field.remark}">
  7. <#if field.showInForm>
  8. <#if field.formType == 'singleLineText'>
  9. <el-input v-model="formData.${field.modelName}"></el-input>
  10. <#elseif field.formType == 'textarea'>
  11. <el-input type="textarea" v-model="formData.${field.modelName}"></el-input>
  12. <#elseif field.formType == 'number'>
  13. <el-input-number type="number" v-model="formData.${field.modelName}"></el-input-number>
  14. <#elseif field.formType == 'date'>
  15. <el-date-picker
  16. v-model="formData.${field.modelName}"
  17. type="date"
  18. value-format="yyyy-MM-dd"
  19. placeholder="选择日期">
  20. </el-date-picker>
  21. <#elseif field.formType == 'datetime'>
  22. <el-date-picker
  23. v-model="formData.${field.modelName}"
  24. type="datetime"
  25. value-format="yyyy-MM-dd HH:mm:ss"
  26. placeholder="选择日期时间">
  27. </el-date-picker>
  28. <#elseif field.formType == 'select'>
  29. <el-select v-model="formData.${field.modelName}" clearable filterable placeholder="请选择">
  30. <el-option
  31. v-for="item in ${field.modelName}Options"
  32. :key="item.value"
  33. :label="item.label"
  34. :value="item.value">
  35. </el-option>
  36. </el-select>
  37. <#elseif field.formType == 'multiSelect'>
  38. <template>
  39. <el-select v-model="formData.${field.modelName}" multiple clearable filterable placeholder="请选择">
  40. <el-option
  41. v-for="item in ${field.modelName}Options"
  42. :key="item.value"
  43. :label="item.label"
  44. :value="item.value">
  45. </el-option>
  46. </el-select>
  47. </template>
  48. <#elseif field.formType == 'singleImage'>
  49. <single-upload v-model="formData.${field.modelName}"></single-upload>
  50. <#elseif field.formType == 'multiImage'>
  51. <multi-upload v-model="formData.${field.modelName}"></multi-upload>
  52. <#elseif field.formType == 'fileUpload'>
  53. <el-upload
  54. class="upload-demo"
  55. action="../upload/file"
  56. :on-change="handleChange"
  57. :file-list="fileList3">
  58. <el-button size="small" type="primary" >
  59. 点击上传
  60. </el-button>
  61. </el-upload>
  62. <#elseif field.formType == 'tree'>
  63. <el-tree
  64. :props="props"
  65. :load="loadNode"
  66. lazy
  67. show-checkbox
  68. @check-change="handleCheckChange">
  69. </el-tree>
  70. <#elseif field.formType == 'switch'>
  71. <el-switch v-model="formData.${field.modelName}"></el-switch>
  72. <#elseif field.formType == 'richText'>
  73. <rich-text v-model="formData.${field.modelName}"></rich-text>
  74. <#elseif field.formType == 'loginName'>
  75. <el-input v-model="formData.${field.modelName}" disabled></el-input>
  76. <#elseif field.formType == 'currentTime'>
  77. <el-input v-model="formData.${field.modelName}" disabled></el-input>
  78. <#elseif field.formType == 'currentDate'>
  79. <el-input v-model="formData.${field.modelName}" disabled></el-input>
  80. <#else>
  81. <el-input v-model="formData.${field.modelName}"></el-input>
  82. </#if>
  83. </#if>
  84. </el-form-item>
  85. </#list>
  86. <el-form-item>
  87. <el-button @click="onSave" :loading="saving"
  88. type="primary">保存</el-button>
  89. <el-button @click="onDelete" :loading="saving"
  90. type="danger" v-if="formData.id">删除
  91. </el-button>
  92. <el-button @click="$router.go(-1)">取消</el-button>
  93. </el-form-item>
  94. </el-form>
  95. </div>
  96. </template>
  97. <script>
  98. export default {
  99. name: '${model.className}Edit',
  100. created() {
  101. if (this.$route.query.id) {
  102. this.$http
  103. .get('${model.className?uncap_first}/get/'+${r'this.$route.query.id'})
  104. .then(res => {
  105. <#list model.fields as field>
  106. <#if field.formType == 'multiSelect'>
  107. if(res.${field.modelName}) {
  108. res.${field.modelName} = res.${field.modelName}.split(',');
  109. } else {
  110. res.${field.modelName} = [];
  111. }
  112. </#if>
  113. </#list>
  114. this.formData = res;
  115. })
  116. .catch(e => {
  117. console.log(e);
  118. this.$message.error(e.error);
  119. });
  120. }
  121. <#list model.fields as field>
  122. <#if (field.formType == 'select' || field.formType == 'multiSelect') && field.apiFlag == '2'>
  123. this.$http.get('${field.optionsMethod}').then(res => {
  124. if (res.content.length > 0) {
  125. res.content.forEach(item => {
  126. this.${field.modelName}Options.push({
  127. label: item.${field.optionsLabel},
  128. value: item.${field.optionsValue}<#if field.formType == 'multiSelect'>+ ''</#if>
  129. });
  130. })
  131. }
  132. }).catch(e => {
  133. console.log(e);
  134. this.$message.error(e.error);
  135. });
  136. </#if>
  137. </#list>
  138. },
  139. data() {
  140. return {
  141. saving: false,
  142. formData: {
  143. <#list model.fields as field>
  144. <#if field.formType == 'loginName'>
  145. ${field.modelName}: '',
  146. </#if>
  147. </#list>
  148. },
  149. rules: {
  150. <#list model.fields as field>
  151. <#if field.required!false == true || field.validate!false == true>
  152. ${field.modelName}: [
  153. <#if field.required!false == true>
  154. {
  155. required: true,
  156. message: '请输入${field.remark!field.modelName}',
  157. trigger: 'blur'
  158. },
  159. </#if>
  160. <#if field.validate!false == true>
  161. <#if field.maxLength?? && field.minLength??>
  162. {
  163. min: ${field.minLength},
  164. max: ${field.maxLength},
  165. message: '长度在 ${field.minLength} 到 ${field.maxLength} 个字符',
  166. trigger: 'blur'
  167. },
  168. </#if>
  169. <#if field.min?? && field.max??>
  170. {
  171. validator: (rule, value, callback) => {
  172. if(value) {
  173. if (value <= ${field.max} && value >= ${field.min}) {
  174. callback();
  175. } else {
  176. callback(new Error('值在 ${field.min} 到 ${field.max} 之间'));
  177. }
  178. }
  179. }, trigger: 'blur'
  180. },
  181. </#if>
  182. <#if field.validatorType == 'phone'>
  183. {
  184. pattern: /^1[3-9]\d{9}$/,
  185. message: "请输入正确的手机号",
  186. trigger: "blur"
  187. },
  188. </#if>
  189. <#if field.validatorType == 'number'>
  190. {
  191. type: "number",
  192. message: "输入有误",
  193. trigger: "blur"
  194. },
  195. </#if>
  196. <#if field.validatorType == 'url'>
  197. {
  198. pattern: /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/,
  199. message: "请输入正确的URL",
  200. trigger: "blur"
  201. },
  202. </#if>
  203. <#if field.validatorType == 'email'>
  204. {
  205. type: "email",
  206. message: "请输入正确的邮箱地址",
  207. trigger: "blur"
  208. },
  209. </#if>
  210. <#if field.validatorType == 'id'>
  211. {
  212. pattern: /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/,
  213. message: "请输入正确的身份证号码",
  214. trigger: "blur"
  215. },
  216. </#if>
  217. <#if field.validatorType == 'english'>
  218. {
  219. pattern: /^[A-Za-z].+$/,
  220. message: "输入有误",
  221. trigger: "blur"
  222. },
  223. </#if>
  224. </#if>
  225. ],
  226. </#if>
  227. </#list>
  228. },
  229. <#list model.fields as field>
  230. <#if (field.formType == 'select' || field.formType=='multiSelect')>
  231. <#if (field.apiFlag == '2' || field.apiFlag == '3')>
  232. ${field.modelName}Options:[],
  233. <#else>
  234. ${field.modelName}Options:${field.optionsValue},
  235. </#if>
  236. </#if>
  237. </#list>
  238. }
  239. },
  240. methods: {
  241. onSave() {
  242. this.$refs.form.validate((valid) => {
  243. if (valid) {
  244. this.submit();
  245. } else {
  246. return false;
  247. }
  248. });
  249. },
  250. submit() {
  251. let data = {...this.formData};
  252. <#list model.fields as field>
  253. <#if field.formType == 'currentTime"||${field.formType}=="currentDate'>
  254. if (data.${field.modelName}) {
  255. data.${field.modelName} = Date.parse(new Date(data.${field.modelName}));
  256. }
  257. </#if>
  258. </#list>
  259. this.saving = true;
  260. this.$http
  261. .post('/${model.className?uncap_first}/save', data, {body: 'json'})
  262. .then(res => {
  263. this.saving = false;
  264. this.$message.success('成功');
  265. this.$router.go(-1);
  266. })
  267. .catch(e => {
  268. console.log(e);
  269. this.saving = false;
  270. this.$message.error(e.error);
  271. });
  272. },
  273. onDelete() {
  274. this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
  275. return this.$http.post(`/${model.className?uncap_first}/del/${r'${this.formData.id}'}`)
  276. }).then(() => {
  277. this.$message.success('删除成功');
  278. this.$router.go(-1);
  279. }).catch(e => {
  280. if (e !== 'cancel') {
  281. console.log(e);
  282. this.$message.error(e.error);
  283. }
  284. })
  285. },
  286. }
  287. }
  288. </script>
  289. <style lang="less" scoped>
  290. </style>