index.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <script setup lang="ts" name="Post">
  2. import apis from "@/api"
  3. import DictSelect from "@/components/dict/DictSelect.vue"
  4. import type { VbFormItem } from "@/components/form/models"
  5. import { ElInput } from "element-plus"
  6. import { permissionNames } from "@/core/services/PermissionNames"
  7. const tableRef = ref()
  8. const modalRef = ref()
  9. const opts = reactive<any>({
  10. columns: [
  11. { field: "postId", name: `岗位编号`, width: 85 },
  12. { field: "postCode", name: `岗位编码`, isSort: true },
  13. { field: "postName", name: `岗位名称`, isSort: true },
  14. { field: "postSort", name: `岗位排序`, isSort: true },
  15. { field: "status", name: `状态` },
  16. { field: "createTime", name: `创建时间`, isSort: true },
  17. { field: "actions", name: `操作`, width: 150 },
  18. ],
  19. queryParams: {
  20. postCode: undefined,
  21. postName: undefined,
  22. status: undefined,
  23. },
  24. searchFormItems: [
  25. {
  26. field: "postCode",
  27. label: "岗位编码",
  28. placeholder: "请输入岗位编码",
  29. required: false,
  30. component: ElInput,
  31. listeners: {
  32. keyup: (e: KeyboardEvent) => {
  33. if (e.code == "Enter") {
  34. handleQuery()
  35. }
  36. },
  37. },
  38. },
  39. {
  40. field: "postName",
  41. label: "岗位名称",
  42. placeholder: "请输入岗位名称",
  43. required: false,
  44. component: ElInput,
  45. listeners: {
  46. keyup: (e: KeyboardEvent) => {
  47. if (e.code == "Enter") {
  48. handleQuery()
  49. }
  50. },
  51. },
  52. },
  53. {
  54. field: "status",
  55. label: "岗位状态",
  56. required: false,
  57. component: DictSelect,
  58. props: {
  59. placeholder: "请选择岗位状态",
  60. dictType: "sys_normal_disable",
  61. },
  62. },
  63. // {
  64. // field: "dateRange",
  65. // label: "登录时间",
  66. // required: false,
  67. // component: ElDatePicker,
  68. // props: {
  69. // placeholder: "请选登录建时间",
  70. // valueFormat: "YYYY-MM-DD HH:mm:ss",
  71. // type: "daterange",
  72. // rangeSeparator: "-",
  73. // startPlaceholder: "开始日期",
  74. // endPlaceholder: "结束日期",
  75. // defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)],
  76. // },
  77. // listeners: {
  78. // change: (v: any) => {
  79. // //console.log("DATE_RANGE_CHANGE", v)
  80. // //dateRange.value = v
  81. // queryParams.value.dateRange = v
  82. // },
  83. // },
  84. // },
  85. ],
  86. permission: permissionNames.SystemPost,
  87. handleFuns: {},
  88. customBtns: [],
  89. tableListFun: apis.system.postApi.listPost,
  90. getEntityFun: apis.system.postApi.getPost,
  91. deleteEntityFun: apis.system.postApi.delPost,
  92. exportUrl: apis.system.postApi.exportUrl,
  93. exportName: "POST",
  94. modalTitle: "岗位",
  95. resetForm: () => {
  96. form.value = emptyFormData.value
  97. },
  98. emptyFormData: {
  99. postId: undefined,
  100. postCode: undefined,
  101. postName: undefined,
  102. postSort: 0,
  103. status: "0",
  104. remark: undefined,
  105. },
  106. })
  107. const { queryParams, emptyFormData } = toRefs(opts)
  108. const form = ref<any>(emptyFormData.value)
  109. /** 修改按钮操作 */
  110. function handleUpdate(row: any) {
  111. tableRef.value.defaultHandleFuns["handleUpdate"]("", row)
  112. }
  113. /** 删除按钮操作 */
  114. function handleDelete(rows: Array<any>) {
  115. tableRef.value.defaultHandleFuns["handleDelete"]("", rows)
  116. }
  117. /** 提交按钮 */
  118. function submitForm() {
  119. if (form.value.postId != undefined) {
  120. apis.system.postApi.updatePost(form.value).then(() => {
  121. message.msgSuccess("修改成功")
  122. handleQuery()
  123. })
  124. } else {
  125. apis.system.postApi.addPost(form.value).then(() => {
  126. message.msgSuccess("新增成功")
  127. handleQuery()
  128. })
  129. }
  130. }
  131. /** 查询按钮 */
  132. function handleQuery() {
  133. addDateRange(queryParams.value, queryParams.value.dateRange)
  134. tableRef.value?.search()
  135. }
  136. /** 查询重置按钮 */
  137. function resetQuery() {
  138. queryParams.value.dateRange = []
  139. addDateRange(queryParams.value, queryParams.value.dateRange)
  140. }
  141. const formItems = ref([
  142. {
  143. field: "postName",
  144. label: "岗位名称",
  145. placeholder: "请输入岗位名称",
  146. required: true,
  147. component: ElInput,
  148. span: 12,
  149. },
  150. {
  151. field: "postCode",
  152. label: "岗位编码",
  153. placeholder: "请输入岗位编码",
  154. required: true,
  155. component: ElInput,
  156. span: 12,
  157. },
  158. {
  159. field: "postSort",
  160. label: "岗位顺序",
  161. placeholder: "请输入岗位顺序",
  162. required: true,
  163. component: ElInput,
  164. span: 12,
  165. },
  166. {
  167. field: "status",
  168. label: "岗位状态",
  169. class: "w-100",
  170. component: DictSelect,
  171. props: {
  172. placeholder: "请选择岗位状态",
  173. dictType: "sys_normal_disable",
  174. },
  175. span: 12,
  176. },
  177. {
  178. field: "remark",
  179. label: "备注",
  180. type: "textarea",
  181. placeholder: "请输入备注内容",
  182. required: false,
  183. component: ElInput,
  184. span: 24,
  185. },
  186. ])
  187. </script>
  188. <template>
  189. <div class="app-container">
  190. <VbDataTable
  191. ref="tableRef"
  192. :handle-perm="opts.permission"
  193. :handle-funs="opts.handleFuns"
  194. :search-form-items="opts.searchFormItems"
  195. :header="opts.columns"
  196. :custom-btns="opts.customBtns"
  197. :remote-fun="opts.tableListFun"
  198. :get-entiy-fun="opts.getEntityFun"
  199. :delete-entiy-fun="opts.deleteEntityFun"
  200. :export-url="opts.exportUrl"
  201. :export-name="opts.exportName"
  202. :modal="modalRef"
  203. :reset-form-fun="opts.resetForm"
  204. v-model:form-data="form"
  205. :query-params="queryParams"
  206. :check-multiple="true"
  207. :has-checkbox="true"
  208. :reset-search-form-fun="resetQuery"
  209. :custom-search-fun="handleQuery"
  210. >
  211. <template #status="{ row }">
  212. <DictTag :value="row.status" type="sys_normal_disable"></DictTag>
  213. </template>
  214. <template #actions="{ row }">
  215. <vb-tooltip content="修改" placement="top">
  216. <el-button link type="primary" @click="handleUpdate(row)" v-hasPermission="permissionNames.SystemPostEdit">
  217. <template #icon>
  218. <KTIcon icon-name="notepad-edit" icon-type="duotone" class="fs-3"></KTIcon>
  219. </template>
  220. </el-button>
  221. </vb-tooltip>
  222. <vb-tooltip content="删除" placement="top">
  223. <el-button
  224. link
  225. type="primary"
  226. @click="handleDelete([row])"
  227. v-hasPermission="permissionNames.SystemPostRemove"
  228. >
  229. <template #icon>
  230. <KTIcon icon-name="trash-square" icon-type="duotone" class="fs-3"></KTIcon>
  231. </template>
  232. </el-button>
  233. </vb-tooltip>
  234. </template>
  235. </VbDataTable>
  236. <VbModal
  237. v-model:modal="modalRef"
  238. :title="opts.modalTitle"
  239. :form-items="(formItems as Array<VbFormItem>)"
  240. :form-data="form"
  241. @confirm="submitForm"
  242. append-to-body
  243. ></VbModal>
  244. </div>
  245. </template>