index.vue 9.1 KB

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