index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
  4. <el-form-item label="轮播图名称" prop="bannerName">
  5. <el-input
  6. v-model="queryParams.bannerName"
  7. placeholder="请输入轮播图名称"
  8. clearable
  9. @keyup.enter="handleQuery"
  10. />
  11. </el-form-item>
  12. <!-- <el-form-item label="跳转链接" prop="linkUrl">
  13. <el-input
  14. v-model="queryParams.linkUrl"
  15. placeholder="请输入跳转链接"
  16. clearable
  17. @keyup.enter="handleQuery"
  18. />
  19. </el-form-item>-->
  20. <el-form-item label="状态" prop="isActive">
  21. <el-select v-model="queryParams.isActive" placeholder="请选择状态" clearable>
  22. <el-option
  23. v-for="dict in banner_status"
  24. :key="dict.value"
  25. :label="dict.label"
  26. :value="dict.value"
  27. />
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="系统类型" prop="sysType">
  31. <el-select v-model="queryParams.sysType" placeholder="请选择系统类型" clearable>
  32. <el-option
  33. v-for="dict in banner_sys_type"
  34. :key="dict.value"
  35. :label="dict.label"
  36. :value="dict.value"
  37. />
  38. </el-select>
  39. </el-form-item>
  40. <!-- <el-form-item label="部门id" prop="deptId">
  41. <el-input
  42. v-model="queryParams.deptId"
  43. placeholder="请输入部门id"
  44. clearable
  45. @keyup.enter="handleQuery"
  46. />
  47. </el-form-item>
  48. <el-form-item label="用户id" prop="userId">
  49. <el-input
  50. v-model="queryParams.userId"
  51. placeholder="请输入用户id"
  52. clearable
  53. @keyup.enter="handleQuery"
  54. />
  55. </el-form-item>-->
  56. <el-form-item>
  57. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  58. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  59. </el-form-item>
  60. </el-form>
  61. <el-row :gutter="10" class="mb8">
  62. <el-col :span="1.5">
  63. <el-button
  64. type="primary"
  65. plain
  66. icon="Plus"
  67. @click="handleAdd"
  68. v-hasPermi="['logistics:banner:add']"
  69. >新增</el-button>
  70. </el-col>
  71. <el-col :span="1.5">
  72. <el-button
  73. type="success"
  74. plain
  75. icon="Edit"
  76. :disabled="single"
  77. @click="handleUpdate"
  78. v-hasPermi="['logistics:banner:edit']"
  79. >修改</el-button>
  80. </el-col>
  81. <el-col :span="1.5">
  82. <el-button
  83. type="danger"
  84. plain
  85. icon="Delete"
  86. :disabled="multiple"
  87. @click="handleDelete"
  88. v-hasPermi="['logistics:banner:remove']"
  89. >删除</el-button>
  90. </el-col>
  91. <!-- <el-col :span="1.5">
  92. <el-button
  93. type="warning"
  94. plain
  95. icon="Download"
  96. @click="handleExport"
  97. v-hasPermi="['logistics:banner:export']"
  98. >导出</el-button>
  99. </el-col>-->
  100. <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
  101. </el-row>
  102. <el-table v-loading="loading" :data="bannerList" @selection-change="handleSelectionChange">
  103. <el-table-column type="selection" width="55" align="center" />
  104. <!-- <el-table-column label="轮播图id" align="center" prop="bannerId" />-->
  105. <el-table-column label="轮播图名称" align="center" prop="bannerName" />
  106. <el-table-column label="轮播图" align="center" prop="imageUrl" width="100">
  107. <template #default="scope">
  108. <image-preview :src="scope.row.imageUrl" :width="50" :height="50"/>
  109. </template>
  110. </el-table-column>
  111. <el-table-column label="跳转链接" align="center" prop="linkUrl" width="150" :show-overflow-tooltip="true"/>
  112. <!-- <el-table-column label="排序" align="center" prop="sortOrder" />-->
  113. <el-table-column label="状态" align="center" prop="isActive">
  114. <template #default="scope">
  115. <dict-tag :options="banner_status" :value="scope.row.isActive"/>
  116. </template>
  117. </el-table-column>
  118. <el-table-column label="系统类型" align="center" prop="sysType">
  119. <template #default="scope">
  120. <dict-tag :options="banner_sys_type" :value="scope.row.sysType"/>
  121. </template>
  122. </el-table-column>
  123. <!-- <el-table-column label="备注" align="center" prop="remark" />-->
  124. <!-- <el-table-column label="部门id" align="center" prop="deptId" />-->
  125. <!-- <el-table-column label="用户id" align="center" prop="userId" />-->
  126. <el-table-column label="创建时间" align="center" prop="createTime" width="180">
  127. <template #default="scope">
  128. <span>{{ parseTime(scope.row.createTime) }}</span>
  129. </template>
  130. </el-table-column>
  131. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  132. <template #default="scope">
  133. <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['logistics:banner:edit']">修改</el-button>
  134. <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['logistics:banner:remove']">删除</el-button>
  135. </template>
  136. </el-table-column>
  137. </el-table>
  138. <pagination
  139. v-show="total>0"
  140. :total="total"
  141. v-model:page="queryParams.pageNum"
  142. v-model:limit="queryParams.pageSize"
  143. @pagination="getList"
  144. />
  145. <!-- 添加或修改轮播图对话框 -->
  146. <el-dialog :title="title" v-model="open" width="500px" append-to-body>
  147. <el-form ref="bannerRef" :model="form" :rules="rules" label-width="120px">
  148. <el-form-item label="轮播图名称" prop="bannerName">
  149. <el-input v-model="form.bannerName" placeholder="请输入轮播图名称" />
  150. </el-form-item>
  151. <el-form-item label="轮播图" prop="imageUrl">
  152. <image-upload v-model="form.imageUrl" :limit="1"/>
  153. </el-form-item>
  154. <!-- <el-form-item label="排序值" prop="sortOrder">
  155. <el-input v-model="form.sortOrder" placeholder="请输入排序值" />
  156. </el-form-item>-->
  157. <el-form-item label="状态" prop="isActive">
  158. <el-radio-group v-model="form.isActive">
  159. <el-radio
  160. v-for="dict in banner_status"
  161. :key="dict.value"
  162. :label="dict.value"
  163. >{{dict.label}}</el-radio>
  164. </el-radio-group>
  165. </el-form-item>
  166. <el-form-item label="系统类型" prop="sysType">
  167. <el-radio-group v-model="form.sysType">
  168. <el-radio
  169. v-for="dict in banner_sys_type"
  170. :key="dict.value"
  171. :label="dict.value"
  172. >{{dict.label}}</el-radio>
  173. </el-radio-group>
  174. </el-form-item>
  175. <el-form-item label="跳转链接" v-if="form.sysType == 0">
  176. <el-input v-model="form.linkUrl" placeholder="请输入跳转链接" />
  177. </el-form-item>
  178. <!-- <el-form-item label="备注" prop="remark">
  179. <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
  180. </el-form-item>
  181. <el-form-item label="删除标志" prop="delFlag">
  182. <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
  183. </el-form-item>
  184. <el-form-item label="部门id" prop="deptId">
  185. <el-input v-model="form.deptId" placeholder="请输入部门id" />
  186. </el-form-item>
  187. <el-form-item label="用户id" prop="userId">
  188. <el-input v-model="form.userId" placeholder="请输入用户id" />
  189. </el-form-item>-->
  190. </el-form>
  191. <template #footer>
  192. <div class="dialog-footer">
  193. <el-button type="primary" @click="submitForm">确 定</el-button>
  194. <el-button @click="cancel">取 消</el-button>
  195. </div>
  196. </template>
  197. </el-dialog>
  198. </div>
  199. </template>
  200. <script setup name="Banner">
  201. import { listBanner, getBanner, delBanner, addBanner, updateBanner } from "@/api/logistics/banner"
  202. const { proxy } = getCurrentInstance()
  203. const { banner_status, banner_sys_type } = proxy.useDict('banner_status', 'banner_sys_type')
  204. const bannerList = ref([])
  205. const open = ref(false)
  206. const loading = ref(true)
  207. const showSearch = ref(true)
  208. const ids = ref([])
  209. const single = ref(true)
  210. const multiple = ref(true)
  211. const total = ref(0)
  212. const title = ref("")
  213. const data = reactive({
  214. form: {},
  215. queryParams: {
  216. pageNum: 1,
  217. pageSize: 10,
  218. bannerName: null,
  219. imageUrl: null,
  220. linkUrl: null,
  221. isActive: null,
  222. sysType: null,
  223. deptId: null,
  224. userId: null
  225. },
  226. rules: {
  227. bannerName: [
  228. { required: true, message: "轮播图名称不能为空", trigger: "blur" }
  229. ],
  230. imageUrl: [
  231. { required: true, message: "图片路径不能为空", trigger: "blur" }
  232. ],
  233. linkUrl: [
  234. { required: true, message: "跳转链接不能为空", trigger: "blur" }
  235. ],
  236. isActive: [
  237. { required: true, message: "状态不能为空", trigger: "change" }
  238. ],
  239. sysType: [
  240. { required: true, message: "系统类型不能为空", trigger: "change" }
  241. ],
  242. }
  243. })
  244. const { queryParams, form, rules } = toRefs(data)
  245. /** 查询轮播图列表 */
  246. function getList() {
  247. loading.value = true
  248. listBanner(queryParams.value).then(response => {
  249. bannerList.value = response.rows
  250. total.value = response.total
  251. loading.value = false
  252. })
  253. }
  254. // 取消按钮
  255. function cancel() {
  256. open.value = false
  257. reset()
  258. }
  259. // 表单重置
  260. function reset() {
  261. form.value = {
  262. bannerId: null,
  263. bannerName: null,
  264. imageUrl: null,
  265. linkUrl: null,
  266. sortOrder: null,
  267. isActive: null,
  268. sysType: null,
  269. remark: null,
  270. delFlag: null,
  271. createTime: null,
  272. updateTime: null,
  273. createBy: null,
  274. updateBy: null,
  275. deptId: null,
  276. userId: null
  277. }
  278. proxy.resetForm("bannerRef")
  279. }
  280. /** 搜索按钮操作 */
  281. function handleQuery() {
  282. queryParams.value.pageNum = 1
  283. getList()
  284. }
  285. /** 重置按钮操作 */
  286. function resetQuery() {
  287. proxy.resetForm("queryRef")
  288. handleQuery()
  289. }
  290. // 多选框选中数据
  291. function handleSelectionChange(selection) {
  292. ids.value = selection.map(item => item.bannerId)
  293. single.value = selection.length != 1
  294. multiple.value = !selection.length
  295. }
  296. /** 新增按钮操作 */
  297. function handleAdd() {
  298. reset()
  299. open.value = true
  300. title.value = "添加轮播图"
  301. }
  302. /** 修改按钮操作 */
  303. function handleUpdate(row) {
  304. reset()
  305. const _bannerId = row.bannerId || ids.value
  306. getBanner(_bannerId).then(response => {
  307. form.value = response.data
  308. open.value = true
  309. title.value = "修改轮播图"
  310. })
  311. }
  312. /** 提交按钮 */
  313. function submitForm() {
  314. proxy.$refs["bannerRef"].validate(valid => {
  315. if (valid) {
  316. if (form.value.bannerId != null) {
  317. updateBanner(form.value).then(response => {
  318. proxy.$modal.msgSuccess("修改成功")
  319. open.value = false
  320. getList()
  321. })
  322. } else {
  323. addBanner(form.value).then(response => {
  324. proxy.$modal.msgSuccess("新增成功")
  325. open.value = false
  326. getList()
  327. })
  328. }
  329. }
  330. })
  331. }
  332. /** 删除按钮操作 */
  333. function handleDelete(row) {
  334. const _bannerIds = row.bannerId || ids.value
  335. proxy.$modal.confirm('是否确认删除轮播图编号为"' + _bannerIds + '"的数据项?').then(function() {
  336. return delBanner(_bannerIds)
  337. }).then(() => {
  338. getList()
  339. proxy.$modal.msgSuccess("删除成功")
  340. }).catch(() => {})
  341. }
  342. /** 导出按钮操作 */
  343. function handleExport() {
  344. proxy.download('logistics/banner/export', {
  345. ...queryParams.value
  346. }, `banner_${new Date().getTime()}.xlsx`)
  347. }
  348. getList()
  349. </script>