vue-view.go.template 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. {{$tableComment:=.TableComment}}
  2. <script setup lang="ts" name="{{.BBusinessName}}">
  3. import apis from "@a"
  4. import message from "@@/utils/message"
  5. import dayjs from "dayjs"
  6. {{ range .Columns -}}
  7. {{- if ne .FkTableName "" }}
  8. const {{.JsonField}}Options = ref<any[]>([])
  9. {{- else if (ne .DictType "") }}
  10. {{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") (eq .HtmlType "checkbox") }}
  11. const {{.JsonField}}Options = computed(() => {
  12. return [
  13. { label: "请选择", value: "" },
  14. { label: "", value: "" }
  15. ]
  16. })
  17. {{- end -}}
  18. {{- end }}
  19. const tableRef = ref()
  20. const modalRef = ref()
  21. const opts = reactive<any>({
  22. columns: [
  23. {{- range .Columns -}}
  24. {{$sort := eq .IsSort "1"}}
  25. {{- if (eq .IsPk "1") }}
  26. { field: "{{.JsonField}}", name: "{{.ColumnComment}}", width: 100, visible: false, isSort: {{ $sort }}, tooltip: true},
  27. {{- else if (eq .IsList "1") }}
  28. {{- if ne .DictType ""}}
  29. { field: "{{.JsonField}}", name: "{{.ColumnComment}}", width: 100, isSort: {{ $sort }}, visible: true},
  30. {{- else if eq .HtmlType "datetime"}}
  31. { field: "{{.JsonField}}", name: "{{.ColumnComment}}", width: 185, isSort: {{ $sort }}, visible: true},
  32. {{- else }}
  33. { field: "{{.JsonField}}", name: "{{.ColumnComment}}", width: "auto", isSort: {{ $sort }}, visible: true},
  34. {{- end -}}
  35. {{- else if (eq .JsonField "createdAt") }}
  36. { field: "{{.JsonField}}", name: "{{.ColumnComment}}", width: 185, isSort: true, visible: true},
  37. {{- end -}}
  38. {{- end }}
  39. { field: "actions", name: `操作`, width: 150 }
  40. ],
  41. queryParams: {
  42. {{- range .Columns -}}
  43. {{- if (eq .GoField "CreatedAt") }}
  44. dateRange:[]
  45. {{- else if (eq .IsQuery "1") }}
  46. {{- if eq .HtmlType "datetime"}}
  47. dateRange{{.BJsonField}}: [],
  48. {{- else }}
  49. {{.JsonField}}: undefined,
  50. {{- end -}}
  51. {{- end -}}
  52. {{- end }}
  53. },
  54. searchFormItems: [
  55. {{- range .Columns -}}
  56. {{- if eq .GoField "CreatedAt"}}
  57. {
  58. field: "dateRange",
  59. label: "{{.ColumnComment}}",
  60. class: "w-100",
  61. component: "D",
  62. placeholder: "请选择{{.ColumnComment }}",
  63. props: {
  64. type: "daterange",
  65. valueFormat: "YYYY-MM-DD",
  66. rangeSeparator: "-",
  67. startPlaceholder: "开始日期",
  68. endPlaceholder: "结束日期"
  69. },
  70. listeners: {
  71. change: (v: any) => {
  72. queryParams.value.dateRange = v
  73. }
  74. },
  75. },
  76. {{- else if (eq .IsQuery "1") -}}
  77. {{ $required := eq .IsRequired "1" }}
  78. {{- if ne .FkTableName ""}}
  79. {
  80. field: "{{.JsonField}}",
  81. label: "{{.ColumnComment}}",
  82. class: "w-100",
  83. component: "VS",
  84. data: () => {{.JsonField}}Options.value,
  85. props: {
  86. {{- if eq .HtmlType "radio"}}
  87. type: "radio",
  88. {{- else if eq .HtmlType "checkbox"}}
  89. type: "checkbox",
  90. {{- else }}
  91. type: "select",
  92. {{- end }}
  93. clearable: true,
  94. placeholder: "请选择{{.ColumnComment }}",
  95. props:{
  96. label:'{{.FkLabelName}}',
  97. value:'{{.FkLabelId}}',
  98. }
  99. }
  100. },
  101. {{- else if ne .DictType ""}}
  102. {
  103. field: "{{.JsonField}}",
  104. label: "{{.ColumnComment}}",
  105. class: "w-100",
  106. component: "Dict",
  107. props: {
  108. {{- if eq .HtmlType "radio"}}
  109. type: "radio",
  110. {{- else if eq .HtmlType "checkbox"}}
  111. type: "checkbox",
  112. {{- else }}
  113. type: "select",
  114. clearable: true,
  115. {{- end }}
  116. placeholder: "请选择{{.ColumnComment }}",
  117. dictType: "{{.DictType}}",
  118. {{- if or (eq .GoType "int") (eq .GoType "int64") }}
  119. valueIsNumber: true,
  120. {{- end }}
  121. }
  122. },
  123. {{- else if eq .HtmlType "datetime"}}
  124. {
  125. field: "dateRange{{.BJsonField}}",
  126. label: "{{.ColumnComment}}",
  127. class: "w-100",
  128. component: "D",
  129. placeholder: "请选择{{.ColumnComment }}",
  130. props: {
  131. type: "daterange",
  132. valueFormat: "YYYY-MM-DD",
  133. rangeSeparator: "-",
  134. startPlaceholder: "开始日期",
  135. endPlaceholder: "结束日期"
  136. },
  137. listeners: {
  138. change: (v: any) => {
  139. queryParams.value.dateRange{{.BJsonField}} = v
  140. }
  141. },
  142. },
  143. {{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") (eq .HtmlType "checkbox") }}
  144. {
  145. field: "{{.JsonField}}",
  146. label: "{{.ColumnComment}}",
  147. class: "w-100",
  148. component: "VS",
  149. placeholder: "请选择{{.ColumnComment }}",
  150. data: () => {{.JsonField}}Options.value,
  151. props: {
  152. type: "{{.HtmlType}}",
  153. clearable: true,
  154. {{- if or (eq .GoType "int") (eq .GoType "int64") }}
  155. valueIsNumber: true,
  156. {{- end }}
  157. },
  158. },
  159. {{- else }}
  160. {
  161. field: "{{.JsonField}}",
  162. label: "{{.ColumnComment}}",
  163. class: "w-100",
  164. component: "I",
  165. listeners:{
  166. keyup: (e: any) => {
  167. if (e.code == "Enter") {
  168. handleQuery()
  169. }
  170. }
  171. }
  172. },
  173. {{- end -}}
  174. {{- end -}}
  175. {{- end }}
  176. ] as any,
  177. permission: "{{.PackageName}}:{{.BusinessName}}",
  178. handleFuns: {},
  179. customBtns: [],
  180. tableListFun: apis.{{.PackageName}}.{{.BusinessName}}Api.list{{.BBusinessName}},
  181. getEntityFun: apis.{{.PackageName}}.{{.BusinessName}}Api.get{{.BBusinessName}},
  182. deleteEntityFun: apis.{{.PackageName}}.{{.BusinessName}}Api.del{{.BBusinessName}},
  183. formItems:[
  184. {{- range .Columns -}}
  185. {{- if (eq .IsInsert "1") -}}
  186. {{ $required := eq .IsRequired "1" }}
  187. {{- if (.Pk) }}
  188. {{- else if or (eq .GoField "CreatedAt") (eq .GoField "UpdatedAt") (eq .GoField "DeletedAt") (eq .GoField "UpdateBy") (eq .GoField "CreateBy") -}}
  189. {{- else if ne .FkTableName ""}}
  190. {
  191. field: "{{.JsonField}}",
  192. label: "{{.ColumnComment}}",
  193. class: "w-100",
  194. required: {{$required}},
  195. component: "VS",
  196. data: () => {{.JsonField}}Options.value,
  197. props: {
  198. {{- if eq .HtmlType "radio"}}
  199. type: "radio",
  200. {{- else if eq .HtmlType "checkbox"}}
  201. type: "checkbox",
  202. {{- else }}
  203. type: "select",
  204. {{- end }}
  205. {{- if or (eq .GoType "int") (eq .GoType "int64") }}
  206. valueIsNumber: true,
  207. {{- end }}
  208. clearable: true,
  209. placeholder: "请选择{{.ColumnComment }}",
  210. props:{
  211. label:'{{.FkLabelName}}',
  212. value:'{{.FkLabelId}}',
  213. }
  214. }
  215. },
  216. {{- else if ne .DictType ""}}
  217. {
  218. field: "{{.JsonField}}",
  219. label: "{{.ColumnComment}}",
  220. class: "w-100",
  221. required: {{$required}},
  222. component: "Dict",
  223. props: {
  224. {{- if eq .HtmlType "radio"}}
  225. type: "radio",
  226. {{- else if eq .HtmlType "checkbox"}}
  227. type: "checkbox",
  228. {{- else }}
  229. type: "select",
  230. {{- end }}
  231. {{- if or (eq .GoType "int") (eq .GoType "int64") }}
  232. valueIsNumber: true,
  233. {{- end }}
  234. clearable: true,
  235. placeholder: "请选择{{.ColumnComment }}",
  236. dictType: "{{.DictType}}"
  237. }
  238. },
  239. {{- else if eq .HtmlType "datetime"}}
  240. {
  241. field: "{{.JsonField}}",
  242. label: "{{.ColumnComment}}",
  243. class: "w-100",
  244. required: {{$required}},
  245. component: "D",
  246. placeholder: "请选择{{.ColumnComment }}",
  247. props: {
  248. type: "date",
  249. valueFormat: "YYYY-MM-DD",
  250. },
  251. },
  252. {{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") (eq .HtmlType "checkbox") }}
  253. {
  254. field: "{{.JsonField}}",
  255. label: "{{.ColumnComment}}",
  256. class: "w-100",
  257. required: {{$required}},
  258. component: "VS",
  259. placeholder: "请选择{{.ColumnComment }}",
  260. data: () => {{.JsonField}}Options.value,
  261. props: {
  262. type: "{{.HtmlType}}",
  263. clearable: true,
  264. {{- if or (eq .GoType "int") (eq .GoType "int64") }}
  265. valueIsNumber: true,
  266. {{- end }}
  267. },
  268. },
  269. {{- else }}
  270. {
  271. field: "{{.JsonField}}",
  272. label: "{{.ColumnComment}}",
  273. class: "w-100",
  274. {{- if eq .HtmlType "file"}}
  275. component: "VU",
  276. {{- else if eq .HtmlType "textarea"}}
  277. component: "VE",
  278. {{- else }}
  279. component: "I",
  280. {{- end }}
  281. {{- if or (eq .GoType "int") (eq .GoType "int64") }}
  282. type: "number",
  283. {{- end }}
  284. required: {{ $required }}
  285. },
  286. {{- end -}}
  287. {{- end -}}
  288. {{- end }}
  289. ] as any,
  290. modalTitle: "{{.FunctionName}}",
  291. resetForm: () => {
  292. form.value = emptyFormData.value
  293. },
  294. emptyFormData: {
  295. {{- range .Columns -}}
  296. {{- if (eq .IsPk "1") }}
  297. {{.JsonField}}: undefined,
  298. {{- else if or (eq .GoField "CreatedAt") (eq .GoField "UpdatedAt") (eq .GoField "DeletedAt") (eq .GoField "UpdateBy") (eq .GoField "CreateBy") -}}
  299. {{- else if (eq .IsInsert "1") }}
  300. {{.JsonField}}: undefined,
  301. {{- end -}}
  302. {{- end }}
  303. }
  304. })
  305. const { queryParams, emptyFormData } = toRefs(opts)
  306. const form = ref<any>(emptyFormData.value)
  307. /** 修改按钮操作 */
  308. function handleUpdate(row: any) {
  309. tableRef.value.defaultHandleFuns.handleUpdate("", row)
  310. }
  311. /** 删除按钮操作 */
  312. function handleDelete(rows: any[]) {
  313. tableRef.value.defaultHandleFuns.handleDelete("", rows)
  314. }
  315. /** 提交按钮 */
  316. function submitForm() {
  317. if (form.value.{{.PkJsonField}} != undefined) {
  318. apis.{{.PackageName}}.{{.BusinessName}}Api.update{{.BBusinessName}}(form.value).then(() => {
  319. message.msgSuccess("修改成功")
  320. handleQuery()
  321. })
  322. } else {
  323. apis.{{.PackageName}}.{{.BusinessName}}Api.add{{.BBusinessName}}(form.value).then(() => {
  324. message.msgSuccess("新增成功")
  325. handleQuery()
  326. })
  327. }
  328. }
  329. /** 查询按钮 */
  330. function handleQuery(query?: any) {
  331. query = query || tableRef.value?.getQueryParams() || queryParams.value
  332. {{- range .Columns -}}
  333. {{- if ( eq .GoField "CreatedAt")}}
  334. addDateRange(query, query.dateRange)
  335. {{- else if and (eq .IsQuery "1") (eq .HtmlType "datetime")}}
  336. addDateRange(query, query.dateRange{{.BJsonField}})
  337. {{- end -}}
  338. {{- end }}
  339. tableRef.value?.query(query)
  340. }
  341. /** 查询重置按钮 */
  342. function resetQuery(query?: any) {
  343. {{- range .Columns -}}
  344. {{- if ( eq .GoField "CreatedAt")}}
  345. query.dateRange = []
  346. addDateRange(query, query.dateRange)
  347. {{- else if and (eq .IsQuery "1") (eq .HtmlType "datetime")}}
  348. query.dateRange{{.BJsonField}} = []
  349. addDateRange(query, query.dateRange{{.BJsonField}})
  350. {{- end -}}
  351. {{- end }}
  352. }
  353. function init(){
  354. {{ range .Columns -}}
  355. {{- if ne .FkTableName "" -}}
  356. apis.{{.FkTableNamePackage}}.{{.FkTableNameBusiness}}Api.list{{.BFkTableNameBusiness}}({pageSize:10000,pageIndex:1}).then((res)=>{
  357. {{.JsonField}}Options.value = res.data.rows
  358. })
  359. {{- end -}}
  360. {{- end }}
  361. }
  362. onMounted(init)
  363. </script>
  364. <template>
  365. <div class="app-container">
  366. <VbDataTable
  367. ref="tableRef"
  368. :handle-perm="opts.permission"
  369. :handle-funs="opts.handleFuns"
  370. :search-form-items="opts.searchFormItems"
  371. :columns="opts.columns"
  372. :custom-btns="opts.customBtns"
  373. :remote-fun="opts.tableListFun"
  374. :get-entity-fun="opts.getEntityFun"
  375. :delete-entity-fun="opts.deleteEntityFun"
  376. {{- range .Columns -}}
  377. {{- if (eq .JsonField "createdAt") }}
  378. sortField="createdAt"
  379. sort-order="desc"
  380. {{- end -}}
  381. {{- end }}
  382. :modal="modalRef"
  383. :reset-form-fun="opts.resetForm"
  384. v-model:form-data="form"
  385. :query-params="queryParams"
  386. :check-multiple="true"
  387. :has-checkbox="true"
  388. :reset-search-form-fun="resetQuery"
  389. :custom-search-fun="handleQuery">
  390. {{ range .Columns -}}
  391. {{- if (eq .IsList "1") -}}
  392. {{- if (ne .FkTableName "") -}}
  393. <template #{{.JsonField}}="{ row }">
  394. <vb-tag :value="row.{{.JsonField}}" :data="{{.JsonField}}Options"></vb-tag>
  395. </template>
  396. {{- else if (ne .DictType "") -}}
  397. <template #{{.JsonField}}="{ row }">
  398. {{- if or (eq .GoType "int") (eq .GoType "int64")}}
  399. <DictTag valueIsNumber :value="row.{{.JsonField}}" type="{{.DictType}}"></DictTag>
  400. {{- else }}
  401. <DictTag :value="row.{{.JsonField}}" type="{{.DictType}}"></DictTag>
  402. {{- end}}
  403. </template>
  404. {{- else if (eq .HtmlType "datetime") -}}
  405. <template #{{.JsonField}}="{ row }">
  406. <span>{{"{{"}} {{"dayjs"}}(row.{{.JsonField}}).format("YYYY-MM-DD HH:mm:ss") {{"}}"}}</span>
  407. </template>
  408. {{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") (eq .HtmlType "checkbox") -}}
  409. <template #{{.JsonField}}="{ row }">
  410. {{- if or (eq .GoType "int") (eq .GoType "int64")}}
  411. <vb-tag valueIsNumber :value="row.{{.JsonField}}" :data="{{.JsonField}}Options"></vb-tag>
  412. {{- else }}
  413. <vb-tag :value="row.{{.JsonField}}" :data="[]"></vb-tag>
  414. {{- end}}
  415. </template>
  416. {{- end}}
  417. {{- else if (eq .JsonField "createdAt") }}
  418. <template #{{.JsonField}}="{ row }">
  419. <span>{{"{{"}} {{"dayjs"}}(row.{{.JsonField}}).format("YYYY-MM-DD HH:mm:ss") {{"}}"}}</span>
  420. </template>
  421. {{- end -}}
  422. {{- end }}
  423. <template #actions="{ row }">
  424. <vb-tooltip content="修改" placement="top">
  425. <el-button
  426. link
  427. type="primary"
  428. @click="handleUpdate(row)"
  429. v-hasPermission="'{{.PackageName}}:{{.BusinessName}}:edit'">
  430. <template #icon>
  431. <VbIcon icon-name="notepad-edit" icon-type="duotone" class="fs-3"></VbIcon>
  432. </template>
  433. </el-button>
  434. </vb-tooltip>
  435. <vb-tooltip content="删除" placement="top">
  436. <el-button
  437. link
  438. type="primary"
  439. @click="handleDelete([row])"
  440. v-hasPermission="'{{.PackageName}}:{{.BusinessName}}:remove'">
  441. <template #icon>
  442. <VbIcon icon-name="trash-square" icon-type="duotone" class="fs-3"></VbIcon>
  443. </template>
  444. </el-button>
  445. </vb-tooltip>
  446. </template>
  447. </VbDataTable>
  448. <VbModal
  449. v-model:modal="modalRef"
  450. :title="opts.modalTitle"
  451. :form-items="opts.formItems as any"
  452. :form-data="form"
  453. @confirm="submitForm"
  454. append-to-body></VbModal>
  455. </div>
  456. </template>