java后端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

778 行
34 KiB

  1. #macro(GET_CHAR_COLUMN_LENGTH $column)## * 如果表列是char/varchar, 获取其最大字符长度, 否则为空字符串 * 参数: 列 * 结果保存在变量名为 $_char_column_length 字符串型
  2. #set($_char_column_length="")
  3. #if($column.columnType.startsWith("char") || $column.columnType.startsWith("varchar"))
  4. #set($startLeft=$column.columnType.indexOf("("))
  5. #if($startLeft != -1)
  6. #set($endRight=$column.columnType.indexOf(")", $startLeft))
  7. #if($endRight != -1)
  8. #set($startLeft=$startLeft+1)
  9. #set($_char_column_length=$column.columnType.substring($startLeft, $endRight))
  10. #end
  11. #end
  12. #end
  13. #end## GET_CHAR_COLUMN_LENGTH
  14. #macro(COLUMN_IS_NUMBER $column)## * 检查表列是否是数字型 * 参数: 列 * 结果保存在变量名为 $_column_is_number bool型
  15. #set($_column_is_number=$column.columnType.startsWith("decimal") || $column.columnType.startsWith("tinyint") || $column.columnType.startsWith("mediumint") || $column.columnType.startsWith("int") || $column.columnType.startsWith("bigint") || $column.columnType.startsWith("smallint"))
  16. #end## COLUMN_IS_NUMBER
  17. #macro(GET_NUMBER_COLUMN_MIN_AND_PRECISION $column)## * 如果表列是数字型, 获取其最小值和浮点数部分精度, 否则为空字符串 * 参数: 列 * 最小值结果保存在变量名为 $_number_column_min 字符串型 * 浮点数部分精度结果保存在变量名为 $_number_column_precision 字符串型
  18. #set($_number_column_min="")
  19. #set($_number_column_precision="")
  20. #if($column.columnType.contains("unsigned"))
  21. #set($_number_column_min="0")
  22. #end
  23. #set($startLeft=$column.columnType.indexOf("("))
  24. #if($startLeft != -1)
  25. #set($endRight=$column.columnType.indexOf(")", $startLeft))
  26. #if($endRight != -1)
  27. #set($startLeft=$startLeft+1)
  28. #set($internalText=$column.columnType.substring($startLeft, $endRight))
  29. #set($splitIndex=$internalText.indexOf(","))
  30. #if($splitIndex != -1)
  31. #set($splitIndex=$splitIndex+1)
  32. #set($_number_column_precision=$internalText.substring($splitIndex))
  33. #end
  34. #end
  35. #end
  36. #end## GET_NUMBER_COLUMN_MIN_AND_PRECISION
  37. <template>
  38. <div class="app-container">
  39. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
  40. #foreach($column in $columns)
  41. #if($column.query)
  42. #set($dictType=$column.dictType)
  43. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  44. #set($parentheseIndex=$column.columnComment.indexOf("("))
  45. #if($parentheseIndex != -1)
  46. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  47. #else
  48. #set($comment=$column.columnComment)
  49. #end
  50. #if($column.htmlType == "input")
  51. <el-form-item label="${comment}" prop="${column.javaField}">
  52. <el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable @keyup.enter.native="handleQuery"/>
  53. </el-form-item>
  54. #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
  55. <el-form-item label="${comment}" prop="${column.javaField}">
  56. <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable>
  57. <el-option v-for="dict in dict.type.${dictType}" :key="dict.value" :label="dict.label" :value="dict.value"/>
  58. </el-select>
  59. </el-form-item>
  60. #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
  61. <el-form-item label="${comment}" prop="${column.javaField}">
  62. <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable>
  63. <el-option label="请选择字典生成" value="" />
  64. </el-select>
  65. </el-form-item>
  66. #elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
  67. <el-form-item label="${comment}" prop="${column.javaField}">
  68. <el-date-picker clearable v-model="queryParams.${column.javaField}" type="date" value-format="yyyy-MM-dd" placeholder="请选择${comment}"></el-date-picker>
  69. </el-form-item>
  70. #elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  71. <el-form-item label="${comment}">
  72. <el-date-picker v-model="daterange${AttrName}" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
  73. </el-form-item>
  74. #end
  75. #end
  76. #end
  77. <el-form-item>
  78. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  79. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  80. </el-form-item>
  81. </el-form>
  82. <el-row :gutter="10" class="mb8">
  83. <el-col :span="1.5">
  84. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['${permissionPrefix}:add']">新增</el-button>
  85. </el-col>
  86. <!--
  87. <el-col :span="1.5">
  88. <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['${permissionPrefix}:edit']">修改</el-button>
  89. </el-col>
  90. <el-col :span="1.5">
  91. <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['${permissionPrefix}:remove']">删除</el-button>
  92. </el-col>
  93. -->
  94. <el-col :span="1.5">
  95. <el-button type="success" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['${permissionPrefix}:import']">导入</el-button>
  96. </el-col>
  97. <el-col :span="1.5">
  98. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['${permissionPrefix}:export']">导出</el-button>
  99. </el-col>
  100. <el-col :span="1.5">
  101. <el-button type="info" plain icon="el-icon-printer" size="mini" @click="handlePrint()" v-hasPermi="['${permissionPrefix}:print']">打印</el-button>
  102. </el-col>
  103. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  104. </el-row>
  105. <!-- 数据列表 列属性 min-width="60" show-overflow-tooltip @selection-change="handleSelectionChange" -->
  106. <el-table v-loading="loading" :data="${businessName}List" border>
  107. <!--<el-table-column type="selection" width="55" align="center" />-->
  108. #foreach($column in $columns)
  109. #set($javaField=$column.javaField)
  110. #set($parentheseIndex=$column.columnComment.indexOf("("))
  111. #if($parentheseIndex != -1)
  112. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  113. #else
  114. #set($comment=$column.columnComment)
  115. #end
  116. #if($column.pk)
  117. <el-table-column label="${comment}" align="center" prop="${javaField}" min-width="60"/>
  118. #elseif($column.list && $column.htmlType == "datetime")
  119. <el-table-column label="${comment}" align="center" prop="${javaField}" />
  120. #elseif($column.list && $column.htmlType == "imageUpload")
  121. <el-table-column label="${comment}" align="center" prop="${javaField}" width="100">
  122. <template slot-scope="scope">
  123. <div v-if="!!scope.row.${javaField}"><el-tooltip effect="light" :content="item" placement="bottom" v-for="(item, index) in scope.row.${javaField}.split(',')" :key="index"><el-image style="height: 48px; width: 48px; margin: 2px; display: inline-block;" fit="scale-down" :src="baseRoutingUrll + item" :preview-src-list="scope.row.${javaField}.split(',').map((x) => baseRoutingUrll + x)"/></el-tooltip></div>
  124. </template>
  125. </el-table-column>
  126. #elseif($column.list && $column.htmlType == "fileUpload")
  127. <el-table-column label="${comment}" header-align="center" align="left" prop="${javaField}" >
  128. <template slot-scope="scope">
  129. <div v-if="!!scope.row.${javaField}"><el-tooltip effect="light" :content="item.substr(item.lastIndexOf('/') + 1)" placement="bottom" v-for="(item, index) in scope.row.${javaField}.split(',')" :key="index"><a :href="baseRoutingUrll + item" target="_blank" style="height: 32px; width: 32px; margin: 2px; display: inline-block; text-align: center;"><img :src="getFileIcon(item)" style="height: 100%;"/></a></el-tooltip></div>
  130. </template>
  131. </el-table-column>
  132. #elseif($column.list && "" != $column.dictType)
  133. <el-table-column label="${comment}" align="center" prop="${javaField}">
  134. <template slot-scope="scope">
  135. #if($column.htmlType == "checkbox")
  136. <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
  137. #else
  138. <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.${javaField}"/>
  139. #end
  140. </template>
  141. </el-table-column>
  142. #elseif($column.list && "" != $javaField)
  143. <el-table-column label="${comment}" align="center" prop="${javaField}" />
  144. #end
  145. #end
  146. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="250">
  147. <template slot-scope="scope">
  148. <el-button size="mini" type="text" icon="el-icon-view" @click="handleLook(scope.row)" v-hasPermi="['${moduleName}:${businessName}:query']">查看</el-button>
  149. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['${permissionPrefix}:edit']">修改</el-button>
  150. <el-dropdown size="mini" v-hasPermi="['${permissionPrefix}:remove']">
  151. <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
  152. <el-dropdown-menu slot="dropdown" style="padding: 5px">
  153. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['${permissionPrefix}:remove']">删除</el-button>
  154. </el-dropdown-menu>
  155. </el-dropdown>
  156. </template>
  157. </el-table-column>
  158. </el-table>
  159. <!-- 分页插件 -->
  160. <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
  161. <!-- 导入EXCEL组件 -->
  162. <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  163. <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
  164. <i class="el-icon-upload"></i>
  165. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  166. <div class="el-upload__tip text-left" slot="tip">
  167. <div class="el-upload__tip" slot="tip">
  168. <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的${functionName}
  169. </div>
  170. <p style="color: red">1、仅允许导入xls、xlsx格式文件;</p>
  171. <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
  172. </div>
  173. </el-upload>
  174. <div slot="footer" class="dialog-footer">
  175. <el-button type="primary" @click="submitFileForm">确 定</el-button>
  176. <el-button @click="upload.open = false">取 消</el-button>
  177. </div>
  178. </el-dialog>
  179. <!-- 查看${functionName}对话框 -->
  180. <el-dialog :title="title" :visible.sync="viewOpen" width="800px" append-to-body>
  181. <el-descriptions id="printDetail" :column="descColumn" border :labelStyle="{width: `${descLabelWidth}%`}" :contentStyle="{width: `${(100 / descColumn) - descLabelWidth}%`}">
  182. #foreach($column in $columns)
  183. #set($field=$column.javaField)
  184. #if($column.insert && !$column.pk)
  185. #if(($column.usableColumn) || (!$column.superColumn))
  186. #set($parentheseIndex=$column.columnComment.indexOf("("))
  187. #if($parentheseIndex != -1)
  188. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  189. #else
  190. #set($comment=$column.columnComment)
  191. #end
  192. #set($dictType=$column.dictType)
  193. <el-descriptions-item label="${comment}">{{ form.${field} }}</el-descriptions-item>
  194. #end
  195. #end
  196. #end
  197. </el-descriptions>
  198. <!-- 弹框操作按钮 -->
  199. <div slot="footer" class="dialog-footer">
  200. <el-button @click="doPrint">打 印</el-button>
  201. <el-button @click="cancelDetail">关 闭</el-button>
  202. </div>
  203. </el-dialog>
  204. <!-- 添加或修改${functionName}对话框 -->
  205. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  206. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  207. #foreach($column in $columns)
  208. #set($field=$column.javaField)
  209. #if($column.insert && !$column.pk)
  210. #if(($column.usableColumn) || (!$column.superColumn))
  211. #set($parentheseIndex=$column.columnComment.indexOf("("))
  212. #if($parentheseIndex != -1)
  213. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  214. #else
  215. #set($comment=$column.columnComment)
  216. #end
  217. #set($dictType=$column.dictType)
  218. #if($column.htmlType == "input")
  219. #COLUMN_IS_NUMBER($column)
  220. #if($_column_is_number)
  221. #GET_NUMBER_COLUMN_MIN_AND_PRECISION($column)
  222. <el-form-item label="${comment}" prop="${field}">
  223. <el-input-number v-model="form.${field}" placeholder="请输入${comment}" controls-position="right" #if($_number_column_min != "") :min="${_number_column_min}"#end #if($_number_column_precision != "") :precision="${_number_column_precision}"#end/>
  224. </el-form-item>
  225. #else
  226. #GET_CHAR_COLUMN_LENGTH($column)
  227. <el-form-item label="${comment}" prop="${field}">
  228. <el-input v-model="form.${field}" placeholder="请输入${comment}" #if($_char_column_length != "") show-word-limit :maxlength="${_char_column_length}"#end/>
  229. </el-form-item>
  230. #end
  231. #elseif($column.htmlType == "imageUpload")
  232. <el-form-item label="${comment}" prop="${field}">
  233. <image-upload v-model="form.${field}"/>
  234. </el-form-item>
  235. #elseif($column.htmlType == "fileUpload")
  236. <el-form-item label="${comment}" prop="${field}">
  237. <file-upload v-model="form.${field}"/>
  238. </el-form-item>
  239. #elseif($column.htmlType == "editor")
  240. <el-form-item label="${comment}">
  241. <editor v-model="form.${field}" :min-height="192"/>
  242. </el-form-item>
  243. #elseif($column.htmlType == "select" && "" != $dictType)
  244. <el-form-item label="${comment}" prop="${field}">
  245. <el-select v-model="form.${field}" placeholder="请选择${comment}">
  246. <el-option v-for="dict in dict.type.${dictType}" :key="dict.value" :label="dict.label" #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.value)" #else:value="dict.value"#end></el-option>
  247. </el-select>
  248. </el-form-item>
  249. #elseif($column.htmlType == "select" && $dictType)
  250. <el-form-item label="${comment}" prop="${field}">
  251. <el-select v-model="form.${field}" placeholder="请选择${comment}">
  252. <el-option label="请选择字典生成" value="" />
  253. </el-select>
  254. </el-form-item>
  255. #elseif($column.htmlType == "checkbox" && "" != $dictType)
  256. <el-form-item label="${comment}" prop="${field}">
  257. <el-checkbox-group v-model="form.${field}">
  258. <el-checkbox v-for="dict in dict.type.${dictType}" :key="dict.value" :label="dict.value">{{dict.label}}</el-checkbox>
  259. </el-checkbox-group>
  260. </el-form-item>
  261. #elseif($column.htmlType == "checkbox" && $dictType)
  262. <el-form-item label="${comment}" prop="${field}">
  263. <el-checkbox-group v-model="form.${field}">
  264. <el-checkbox>请选择字典生成</el-checkbox>
  265. </el-checkbox-group>
  266. </el-form-item>
  267. #elseif($column.htmlType == "radio" && "" != $dictType)
  268. <el-form-item label="${comment}" prop="${field}">
  269. <el-radio-group v-model="form.${field}">
  270. <el-radio v-for="dict in dict.type.${dictType}" :key="dict.value" #if($column.javaType == "Integer" || $column.javaType == "Long"):label="parseInt(dict.value)" #else:label="dict.value"#end>{{dict.label}}</el-radio>
  271. </el-radio-group>
  272. </el-form-item>
  273. #elseif($column.htmlType == "radio" && $dictType)
  274. <el-form-item label="${comment}" prop="${field}">
  275. <el-radio-group v-model="form.${field}">
  276. <el-radio label="1">请选择字典生成</el-radio>
  277. </el-radio-group>
  278. </el-form-item>
  279. #elseif($column.htmlType == "datetime")
  280. <el-form-item label="${comment}" prop="${field}">
  281. <el-date-picker clearable v-model="form.${field}" type="date" value-format="yyyy-MM-dd" placeholder="请选择${comment}"></el-date-picker>
  282. </el-form-item>
  283. #elseif($column.htmlType == "textarea")
  284. <el-form-item label="${comment}" prop="${field}">
  285. <el-input v-model="form.${field}" type="textarea" :autosize="{ minRows: 2, maxRows: 3}" #if($_char_column_length != "") :maxlength="${_char_column_length}"#end show-word-limit placeholder="请输入内容" />
  286. </el-form-item>
  287. #end
  288. #end
  289. #end
  290. #end
  291. #if($table.sub)
  292. <el-divider content-position="center">${subTable.functionName}信息</el-divider>
  293. <el-row :gutter="10" class="mb8">
  294. <el-col :span="1.5">
  295. <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd${subClassName}">添加</el-button>
  296. </el-col>
  297. <el-col :span="1.5">
  298. <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete${subClassName}">删除</el-button>
  299. </el-col>
  300. </el-row>
  301. <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
  302. <el-table-column type="selection" width="50" align="center" />
  303. <el-table-column label="序号" align="center" prop="index" width="50"/>
  304. #foreach($column in $subTable.columns)
  305. #set($javaField=$column.javaField)
  306. #set($parentheseIndex=$column.columnComment.indexOf("("))
  307. #if($parentheseIndex != -1)
  308. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  309. #else
  310. #set($comment=$column.columnComment)
  311. #end
  312. #if($column.pk || $javaField == ${subTableFkclassName})
  313. #elseif($column.list && $column.htmlType == "input")
  314. <el-table-column label="$comment" prop="${javaField}" width="150">
  315. <template slot-scope="scope">
  316. <el-input v-model="scope.row.$javaField" placeholder="请输入$comment" />
  317. </template>
  318. </el-table-column>
  319. #elseif($column.list && $column.htmlType == "datetime")
  320. <el-table-column label="$comment" prop="${javaField}" width="240">
  321. <template slot-scope="scope">
  322. <el-date-picker clearable v-model="scope.row.$javaField" type="date" value-format="yyyy-MM-dd" placeholder="请选择$comment" />
  323. </template>
  324. </el-table-column>
  325. #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType)
  326. <el-table-column label="$comment" prop="${javaField}" width="150">
  327. <template slot-scope="scope">
  328. <el-select v-model="scope.row.$javaField" placeholder="请选择$comment">
  329. <el-option v-for="dict in dict.type.$column.dictType" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
  330. </el-select>
  331. </template>
  332. </el-table-column>
  333. #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType)
  334. <el-table-column label="$comment" prop="${javaField}" width="150">
  335. <template slot-scope="scope">
  336. <el-select v-model="scope.row.$javaField" placeholder="请选择$comment">
  337. <el-option label="请选择字典生成" value="" />
  338. </el-select>
  339. </template>
  340. </el-table-column>
  341. #end
  342. #end
  343. </el-table>
  344. #end
  345. </el-form>
  346. <div slot="footer" class="dialog-footer">
  347. <el-button type="primary" @click="submitForm">确 定</el-button>
  348. <el-button @click="cancel">取 消</el-button>
  349. </div>
  350. </el-dialog>
  351. </div>
  352. </template>
  353. <script>
  354. import { list${BusinessName}, get${BusinessName}, get${BusinessName}Detail, del${BusinessName}, add${BusinessName}, update${BusinessName}, print${BusinessName} } from "@/api/${moduleName}/${businessName}"
  355. import { getToken } from "@/utils/auth"
  356. export default {
  357. name: "${BusinessName}",
  358. #if(${dicts} != '')
  359. dicts: [${dicts}],
  360. #end
  361. data() {
  362. return {
  363. // 遮罩层
  364. loading: true,
  365. // 导出遮罩层
  366. exportLoading: false,
  367. // 选中数组
  368. ids: [],
  369. #if($table.sub)
  370. // 子表选中数据
  371. checked${subClassName}: [],
  372. #end
  373. // 非单个禁用
  374. single: true,
  375. // 非多个禁用
  376. multiple: true,
  377. // 显示搜索条件
  378. showSearch: true,
  379. // 总条数
  380. total: 0,
  381. // ${functionName}表格数据
  382. ${businessName}List: [],
  383. #if($table.sub)
  384. // ${subTable.functionName}表格数据
  385. ${subclassName}List: [],
  386. #end
  387. // 弹出层标题
  388. title: "",
  389. // 是否显示弹出层
  390. open: false,
  391. // 详情组件列数
  392. descColumn: 2,
  393. // 详情组件Label所占百分比, 最大={100 / descColumn}. 内容所占百分比={100 / descColumn - descLabelWidth}
  394. descLabelWidth: 15,
  395. // 对话框显示只读的详情
  396. viewOpen: false,
  397. // 项目路径
  398. baseRoutingUrll: process.env.VUE_APP_BASE_API,
  399. #foreach ($column in $columns)
  400. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  401. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  402. // $comment时间范围
  403. daterange${AttrName}: [],
  404. #end
  405. #end
  406. // 查询参数
  407. queryParams: {
  408. pageNum: 1,
  409. pageSize: 10,
  410. // 查询排序
  411. //orderByColumn: "id",
  412. //isAsc: "desc",
  413. // 翻译字典
  414. //toTranslateDict: "1",
  415. #foreach ($column in $columns)
  416. #if($column.query)
  417. $column.javaField: null#if($foreach.count != $columns.size()),#end
  418. #end
  419. #end
  420. },
  421. // 表单参数
  422. form: {},
  423. // 表单校验
  424. rules: {
  425. #foreach ($column in $columns)
  426. #if($column.required)
  427. #set($parentheseIndex=$column.columnComment.indexOf("("))
  428. #if($parentheseIndex != -1)
  429. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  430. #else
  431. #set($comment=$column.columnComment)
  432. #end
  433. $column.javaField: [
  434. { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
  435. ]#if($foreach.count != $columns.size()),#end
  436. #end
  437. #end
  438. },
  439. // EXCEL导入
  440. upload: {
  441. // 是否显示弹出层(用户导入)
  442. open: false,
  443. // 弹出层标题(用户导入)
  444. title: "",
  445. // 是否禁用上传
  446. isUploading: false,
  447. // 是否更新已经存在的用户数据
  448. updateSupport: 0,
  449. // 设置上传的请求头部
  450. headers: { Authorization: "Bearer " + getToken() },
  451. // 上传的地址
  452. url: process.env.VUE_APP_BASE_API + "/${moduleName}/${businessName}/importData"
  453. },
  454. }
  455. },
  456. created() {
  457. this.getList()
  458. },
  459. methods: {
  460. /** 查询${functionName}列表 */
  461. getList() {
  462. this.loading = true
  463. #foreach ($column in $columns)
  464. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  465. this.queryParams.params = {}
  466. #break
  467. #end
  468. #end
  469. #foreach ($column in $columns)
  470. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  471. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  472. if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
  473. this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0]
  474. this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1]
  475. }
  476. #end
  477. #end
  478. list${BusinessName}(this.queryParams).then(response => {
  479. this.${businessName}List = response.rows
  480. this.total = response.total
  481. this.loading = false
  482. })
  483. },
  484. // 取消按钮
  485. cancel() {
  486. this.open = false
  487. this.reset()
  488. },
  489. cancelDetail() {
  490. this.viewOpen = false
  491. },
  492. // 表单重置
  493. reset() {
  494. this.form = {
  495. #foreach ($column in $columns)
  496. #if($column.htmlType == "checkbox")
  497. $column.javaField: []#if($foreach.count != $columns.size()),#end
  498. #else
  499. $column.javaField: null#if($foreach.count != $columns.size()),#end
  500. #end
  501. #end
  502. }
  503. #if($table.sub)
  504. this.${subclassName}List = []
  505. #end
  506. this.resetForm("form")
  507. },
  508. /** 搜索按钮操作 */
  509. handleQuery() {
  510. this.queryParams.pageNum = 1
  511. this.getList()
  512. },
  513. /** 重置按钮操作 */
  514. resetQuery() {
  515. #foreach ($column in $columns)
  516. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  517. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  518. this.daterange${AttrName} = []
  519. #end
  520. #end
  521. this.resetForm("queryForm")
  522. this.handleQuery()
  523. },
  524. // 多选框选中数据
  525. handleSelectionChange(selection) {
  526. this.ids = selection.map(item => item.${pkColumn.javaField})
  527. this.single = selection.length!==1
  528. this.multiple = !selection.length
  529. },
  530. /** 新增按钮操作 */
  531. handleAdd() {
  532. this.reset()
  533. this.open = true
  534. this.title = "添加${functionName}"
  535. },
  536. /** 修改按钮操作 */
  537. handleUpdate(row) {
  538. this.reset()
  539. const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
  540. get${BusinessName}(${pkColumn.javaField}).then(response => {
  541. this.form = response.data
  542. #foreach ($column in $columns)
  543. #if($column.htmlType == "checkbox")
  544. this.form.$column.javaField = this.form.${column.javaField}.split(",")
  545. #end
  546. #end
  547. #if($table.sub)
  548. this.${subclassName}List = response.data.${subclassName}List
  549. #end
  550. this.open = true
  551. this.title = "修改${functionName}"
  552. })
  553. },
  554. /** 查看按钮操作 */
  555. handleLook(row) {
  556. const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
  557. get${BusinessName}Detail(${pkColumn.javaField}).then(response => {
  558. this.form = response.data;
  559. #foreach ($column in $columns)
  560. #if($column.htmlType == "checkbox")
  561. this.form.$column.javaField = this.form.${column.javaField}.split(",");
  562. #end
  563. #end
  564. #if($table.sub)
  565. this.${subclassName}List = response.data.${subclassName}List;
  566. #end
  567. this.viewOpen = true;
  568. this.title = "查看${functionName}";
  569. });
  570. },
  571. /** 提交按钮 */
  572. submitForm() {
  573. this.#[[$]]#refs["form"].validate(valid => {
  574. if (valid) {
  575. #foreach ($column in $columns)
  576. #if($column.htmlType == "checkbox")
  577. this.form.$column.javaField = this.form.${column.javaField}.join(",")
  578. #end
  579. #end
  580. #if($table.sub)
  581. this.form.${subclassName}List = this.${subclassName}List
  582. #end
  583. if (this.form.${pkColumn.javaField} != null) {
  584. update${BusinessName}(this.form).then(response => {
  585. this.#[[$modal]]#.msgSuccess("修改成功")
  586. this.open = false
  587. this.getList()
  588. })
  589. } else {
  590. add${BusinessName}(this.form).then(response => {
  591. this.#[[$modal]]#.msgSuccess("新增成功")
  592. this.open = false
  593. this.getList()
  594. })
  595. }
  596. }
  597. })
  598. },
  599. /** 删除按钮操作 */
  600. handleDelete(row) {
  601. const ${pkColumn.javaField}s = row.${pkColumn.javaField} || this.ids
  602. this.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + ${pkColumn.javaField}s + '"的数据项?').then(function() {
  603. return del${BusinessName}(${pkColumn.javaField}s)
  604. }).then(() => {
  605. this.getList()
  606. this.#[[$modal]]#.msgSuccess("删除成功")
  607. }).catch(() => {})
  608. },
  609. #if($table.sub)
  610. /** ${subTable.functionName}序号 */
  611. row${subClassName}Index({ row, rowIndex }) {
  612. row.index = rowIndex + 1
  613. },
  614. /** ${subTable.functionName}添加按钮操作 */
  615. handleAdd${subClassName}() {
  616. let obj = {}
  617. #foreach($column in $subTable.columns)
  618. #if($column.pk || $column.javaField == ${subTableFkclassName})
  619. #elseif($column.list && "" != $javaField)
  620. obj.$column.javaField = ""
  621. #end
  622. #end
  623. this.${subclassName}List.push(obj)
  624. },
  625. /** ${subTable.functionName}删除按钮操作 */
  626. handleDelete${subClassName}() {
  627. if (this.checked${subClassName}.length == 0) {
  628. this.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据")
  629. } else {
  630. const ${subclassName}List = this.${subclassName}List
  631. const checked${subClassName} = this.checked${subClassName}
  632. this.${subclassName}List = ${subclassName}List.filter(function(item) {
  633. return checked${subClassName}.indexOf(item.index) == -1
  634. })
  635. }
  636. },
  637. /** 复选框选中数据 */
  638. handle${subClassName}SelectionChange(selection) {
  639. this.checked${subClassName} = selection.map(item => item.index)
  640. },
  641. #end
  642. /** 导出按钮操作 */
  643. handleExport() {
  644. this.download('${moduleName}/${businessName}/export', {
  645. ...this.queryParams
  646. }, `${functionName}_#[[${new Date().getTime()}]]#.xlsx`)
  647. },
  648. /** 打印表单 */
  649. doPrint() {
  650. const originalTitle = document.title;
  651. try {
  652. document.title = this.title || '打印详情';
  653. const printElement = document.getElementById('printDetail');
  654. const printFrame = document.createElement('iframe');
  655. printFrame.style.position = 'absolute';
  656. printFrame.style.width = '0';
  657. printFrame.style.height = '0';
  658. printFrame.style.border = 'none';
  659. printFrame.style.left = '-9999px';
  660. printFrame.onload = function() {
  661. try {
  662. const frameDoc = printFrame.contentDocument || printFrame.contentWindow.document;
  663. const contentClone = printElement.cloneNode(true);
  664. const style = document.createElement('style');
  665. style.innerHTML = `
  666. @page {
  667. size: auto;
  668. margin: 10mm;
  669. }
  670. body {
  671. font-family: Arial, sans-serif;
  672. line-height: 1.5;
  673. margin: 0;
  674. padding: 0;
  675. }
  676. .el-descriptions {
  677. width: 100% !important;
  678. }
  679. .el-descriptions-item__label {
  680. width: ${this.descLabelWidth}% !important;
  681. }
  682. .el-descriptions-item__content {
  683. width: ${(100 / this.descColumn) - this.descLabelWidth}% !important;
  684. }
  685. /* 确保图片在打印时显示完整 */
  686. img, .el-image {
  687. max-width: 100% !important;
  688. height: auto !important;
  689. }
  690. `;
  691. frameDoc.head.appendChild(style);
  692. frameDoc.body.appendChild(contentClone);
  693. setTimeout(() => {
  694. printFrame.contentWindow.focus();
  695. printFrame.contentWindow.print();
  696. setTimeout(() => {
  697. document.body.removeChild(printFrame);
  698. document.title = originalTitle;
  699. }, 1000);
  700. }, 500);
  701. } catch (e) {
  702. document.body.removeChild(printFrame);
  703. document.title = originalTitle;
  704. this.$message.error('打印过程中发生错误');
  705. }
  706. };
  707. document.body.appendChild(printFrame);
  708. } catch (e) {
  709. document.title = originalTitle;
  710. this.$message.error('打印过程中发生错误');
  711. }
  712. },
  713. /** 打印按钮操作 */
  714. handlePrint() {
  715. print${BusinessName}(this.queryParams).then(response => {})
  716. },
  717. /* 导入EXCEL组件 */
  718. handleImport() {
  719. this.upload.title = "${functionName}导入"
  720. this.upload.open = true
  721. },
  722. /** 下载模板操作 */
  723. importTemplate() {
  724. this.download('${moduleName}/${businessName}/importTemplate', {
  725. }, `${functionName}_template.xlsx`)
  726. },
  727. // 文件上传中处理
  728. handleFileUploadProgress(event, file, fileList) {
  729. this.upload.isUploading = true
  730. },
  731. // 文件上传成功处理
  732. handleFileSuccess(response, file, fileList) {
  733. this.upload.open = false
  734. this.upload.isUploading = false
  735. this.$refs.upload.clearFiles()
  736. this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true })
  737. this.getList()
  738. },
  739. // 提交上传文件
  740. submitFileForm() {
  741. this.$refs.upload.submit()
  742. },
  743. #foreach($column in $columns)
  744. #if($column.insert && !$column.superColumn && !$column.pk && $column.htmlType == "fileUpload")
  745. getFileIcon(file) {
  746. if(!file) return '';
  747. switch(file.toLowerCase().substr(file.lastIndexOf('.') + 1)) {
  748. case 'jpg': case 'png': case 'jpeg': case 'bmp': case 'gif':
  749. return this.baseRoutingUrll + file;
  750. case 'doc': case 'docx':
  751. return require('@/assets/images/icon_word.jpg');
  752. case 'xls': case 'xlsx':
  753. return require('@/assets/images/icon_excel.jpg');
  754. case 'pdf':
  755. return require('@/assets/images/icon_pdf.jpg');
  756. case 'zip': case 'rar': case '7z': case 'bz2': case 'gz':
  757. return require('@/assets/images/icon_zip.jpg');
  758. default:
  759. return require('@/assets/images/icon_rest.jpg');
  760. }
  761. },
  762. #break
  763. #end
  764. #end
  765. }
  766. }
  767. </script>