java后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

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