index.vue 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-position="top">
  4. <el-form-item label="字典名称" prop="dictName" label-position="top">
  5. <el-input
  6. v-model="queryParams.dictName"
  7. placeholder="请输入字典名称"
  8. clearable
  9. @keyup.enter="handleQuery"
  10. />
  11. </el-form-item>
  12. <el-form-item label="字典类型" prop="dictType" label-position="top">
  13. <el-input
  14. v-model="queryParams.dictType"
  15. placeholder="请输入字典类型"
  16. clearable
  17. @keyup.enter="handleQuery"
  18. />
  19. </el-form-item>
  20. <el-form-item label="状态" prop="status" label-position="top">
  21. <el-select
  22. v-model="queryParams.status"
  23. placeholder="字典状态"
  24. clearable
  25. >
  26. <el-option
  27. v-for="dict in sys_normal_disable"
  28. :key="dict.value"
  29. :label="dict.label"
  30. :value="dict.value"
  31. />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="创建时间" label-position="top">
  35. <el-date-picker
  36. v-model="dateRange"
  37. value-format="YYYY-MM-DD"
  38. type="daterange"
  39. range-separator="-"
  40. start-placeholder="开始日期"
  41. end-placeholder="结束日期"
  42. ></el-date-picker>
  43. </el-form-item>
  44. </el-form>
  45. <div style="float: right;">
  46. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  47. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  48. </div>
  49. <el-row :gutter="10" class="mb8">
  50. <el-col :span="1.5">
  51. <el-button
  52. type="primary"
  53. icon="Plus"
  54. @click="handleAdd"
  55. v-hasPermi="['system:dict:add']"
  56. >新增</el-button>
  57. </el-col>
  58. <el-col :span="1.5">
  59. <el-button
  60. type="success"
  61. icon="Edit"
  62. :disabled="single"
  63. @click="handleUpdate"
  64. v-hasPermi="['system:dict:edit']"
  65. >修改</el-button>
  66. </el-col>
  67. <el-col :span="1.5">
  68. <el-button
  69. type="danger"
  70. icon="Delete"
  71. :disabled="multiple"
  72. @click="handleDelete"
  73. v-hasPermi="['system:dict:remove']"
  74. >删除</el-button>
  75. </el-col>
  76. <el-col :span="1.5">
  77. <el-button
  78. type="warning"
  79. icon="Download"
  80. @click="handleExport"
  81. v-hasPermi="['system:dict:export']"
  82. >导出</el-button>
  83. </el-col>
  84. <el-col :span="1.5">
  85. <el-button
  86. type="danger"
  87. icon="Refresh"
  88. @click="handleRefreshCache"
  89. v-hasPermi="['system:dict:remove']"
  90. >刷新缓存</el-button>
  91. </el-col>
  92. <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
  93. </el-row>
  94. <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
  95. <el-table-column type="selection" width="55" />
  96. <el-table-column label="字典编号" prop="dictId" />
  97. <el-table-column label="字典名称" prop="dictName" :show-overflow-tooltip="true"/>
  98. <el-table-column label="字典类型" :show-overflow-tooltip="true">
  99. <template #default="scope">
  100. <router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
  101. <span>{{ scope.row.dictType }}</span>
  102. </router-link>
  103. </template>
  104. </el-table-column>
  105. <el-table-column label="状态" prop="status">
  106. <template #default="scope">
  107. <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
  108. </template>
  109. </el-table-column>
  110. <el-table-column label="备注" prop="remark" :show-overflow-tooltip="true" />
  111. <el-table-column label="创建时间" prop="createTime" width="180">
  112. <template #default="scope">
  113. <span>{{ parseTime(scope.row.createTime) }}</span>
  114. </template>
  115. </el-table-column>
  116. <el-table-column label="操作" width="160" class-name="small-padding fixed-width">
  117. <template #default="scope">
  118. <el-button link type="primary" @click="handleUpdate(scope.row)" v-hasPermi="['system:dict:edit']"><i class="fa fa-edit"></i>编辑</el-button>
  119. <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['system:dict:remove']"><i class="fa fa-trash"></i>删除</el-button>
  120. </template>
  121. </el-table-column>
  122. </el-table>
  123. <pagination
  124. v-show="total > 0"
  125. :total="total"
  126. v-model:page="queryParams.pageNum"
  127. v-model:limit="queryParams.pageSize"
  128. @pagination="getList"
  129. />
  130. <!-- 添加或修改参数配置对话框 -->
  131. <el-dialog :title="title" v-model="open" width="500px" append-to-body>
  132. <el-form ref="dictRef" :model="form" :rules="rules" label-width="80px">
  133. <el-form-item label="字典名称" prop="dictName">
  134. <el-input v-model="form.dictName" placeholder="请输入字典名称" />
  135. </el-form-item>
  136. <el-form-item label="字典类型" prop="dictType">
  137. <el-input v-model="form.dictType" placeholder="请输入字典类型" />
  138. </el-form-item>
  139. <el-form-item label="状态" prop="status">
  140. <el-radio-group v-model="form.status">
  141. <el-radio
  142. v-for="dict in sys_normal_disable"
  143. :key="dict.value"
  144. :value="dict.value"
  145. >{{ dict.label }}</el-radio>
  146. </el-radio-group>
  147. </el-form-item>
  148. <el-form-item label="备注" prop="remark">
  149. <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
  150. </el-form-item>
  151. </el-form>
  152. <template #footer>
  153. <div class="dialog-footer">
  154. <el-button type="primary" @click="submitForm">确 定</el-button>
  155. <el-button @click="cancel">取 消</el-button>
  156. </div>
  157. </template>
  158. </el-dialog>
  159. </div>
  160. </template>
  161. <script setup name="Dict">
  162. import useDictStore from '@/store/modules/dict'
  163. import { listType, getType, delType, addType, updateType, refreshCache } from "@/api/system/dict/type"
  164. const { proxy } = getCurrentInstance()
  165. const { sys_normal_disable } = proxy.useDict("sys_normal_disable")
  166. const typeList = ref([])
  167. const open = ref(false)
  168. const loading = ref(true)
  169. const showSearch = ref(true)
  170. const ids = ref([])
  171. const single = ref(true)
  172. const multiple = ref(true)
  173. const total = ref(0)
  174. const title = ref("")
  175. const dateRange = ref([])
  176. const data = reactive({
  177. form: {},
  178. queryParams: {
  179. pageNum: 1,
  180. pageSize: 10,
  181. dictName: undefined,
  182. dictType: undefined,
  183. status: undefined
  184. },
  185. rules: {
  186. dictName: [{ required: true, message: "字典名称不能为空", trigger: "blur" }],
  187. dictType: [{ required: true, message: "字典类型不能为空", trigger: "blur" }]
  188. },
  189. })
  190. const { queryParams, form, rules } = toRefs(data)
  191. /** 查询字典类型列表 */
  192. function getList() {
  193. loading.value = true
  194. listType(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
  195. typeList.value = response.rows
  196. total.value = response.total
  197. loading.value = false
  198. })
  199. }
  200. /** 取消按钮 */
  201. function cancel() {
  202. open.value = false
  203. reset()
  204. }
  205. /** 表单重置 */
  206. function reset() {
  207. form.value = {
  208. dictId: undefined,
  209. dictName: undefined,
  210. dictType: undefined,
  211. status: "0",
  212. remark: undefined
  213. }
  214. proxy.resetForm("dictRef")
  215. }
  216. /** 搜索按钮操作 */
  217. function handleQuery() {
  218. queryParams.value.pageNum = 1
  219. getList()
  220. }
  221. /** 重置按钮操作 */
  222. function resetQuery() {
  223. dateRange.value = []
  224. proxy.resetForm("queryRef")
  225. handleQuery()
  226. }
  227. /** 新增按钮操作 */
  228. function handleAdd() {
  229. reset()
  230. open.value = true
  231. title.value = "添加字典类型"
  232. }
  233. /** 多选框选中数据 */
  234. function handleSelectionChange(selection) {
  235. ids.value = selection.map(item => item.dictId)
  236. single.value = selection.length != 1
  237. multiple.value = !selection.length
  238. }
  239. /** 修改按钮操作 */
  240. function handleUpdate(row) {
  241. reset()
  242. const dictId = row.dictId || ids.value
  243. getType(dictId).then(response => {
  244. form.value = response.data
  245. open.value = true
  246. title.value = "修改字典类型"
  247. })
  248. }
  249. /** 提交按钮 */
  250. function submitForm() {
  251. proxy.$refs["dictRef"].validate(valid => {
  252. if (valid) {
  253. if (form.value.dictId != undefined) {
  254. updateType(form.value).then(response => {
  255. proxy.$modal.msgSuccess("修改成功")
  256. open.value = false
  257. getList()
  258. })
  259. } else {
  260. addType(form.value).then(response => {
  261. proxy.$modal.msgSuccess("新增成功")
  262. open.value = false
  263. getList()
  264. })
  265. }
  266. }
  267. })
  268. }
  269. /** 删除按钮操作 */
  270. function handleDelete(row) {
  271. const dictIds = row.dictId || ids.value
  272. proxy.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function() {
  273. return delType(dictIds)
  274. }).then(() => {
  275. getList()
  276. proxy.$modal.msgSuccess("删除成功")
  277. }).catch(() => {})
  278. }
  279. /** 导出按钮操作 */
  280. function handleExport() {
  281. proxy.download("system/dict/type/export", {
  282. ...queryParams.value
  283. }, `dict_${new Date().getTime()}.xlsx`)
  284. }
  285. /** 刷新缓存按钮操作 */
  286. function handleRefreshCache() {
  287. refreshCache().then(() => {
  288. proxy.$modal.msgSuccess("刷新成功")
  289. useDictStore().cleanDict()
  290. })
  291. }
  292. getList()
  293. </script>