index.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <!-- 设备管理 设备列表 -->
  2. <template>
  3. <div class="app-container">
  4. <!-- 搜索表单 -->
  5. <el-form inline size="mini">
  6. <el-form-item label="设备名称111:">
  7. <el-input v-model="form.name" placeholder="请输入设备名称" clearable />
  8. </el-form-item>
  9. <el-form-item label="设备型号:">
  10. <el-select
  11. v-model="form.clientTypeId"
  12. placeholder="请选择设备型号"
  13. filterable
  14. clearable
  15. >
  16. <el-option
  17. v-for="item in devOptions"
  18. :key="item.value"
  19. :label="item.label"
  20. :value="item.value"
  21. />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="设备分类:">
  25. <el-select
  26. v-model="form.categoryId"
  27. placeholder="请选择设备分类"
  28. clearable
  29. >
  30. <el-option
  31. v-for="item in categoryOptions"
  32. :key="item.value"
  33. :value="item.value"
  34. :label="item.label"
  35. />
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="当前状态:">
  39. <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
  40. <el-option
  41. v-for="item in onOrOffOptions"
  42. :key="item.value"
  43. :value="item.value"
  44. :label="item.label"
  45. />
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item label="是否热门:">
  49. <el-select v-model="form.isHot" placeholder="请选择是否热门" clearable>
  50. <el-option
  51. v-for="item in yesOrNoOptions"
  52. :key="item.value"
  53. :value="item.value"
  54. :label="item.label"
  55. />
  56. </el-select>
  57. </el-form-item>
  58. <el-form-item>
  59. <el-button type="primary" icon="el-icon-search" @click="getSearch"
  60. >搜索</el-button
  61. >
  62. <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
  63. <el-button
  64. type="primary"
  65. icon="el-icon-plus"
  66. plain
  67. @click="getChange()"
  68. v-hasPermi="['device:list:add']"
  69. >
  70. 新增
  71. </el-button>
  72. <el-button
  73. type="primary"
  74. icon="el-icon-top"
  75. @click="getShelves(1)"
  76. :disabled="isDisabled()"
  77. v-hasPermi="['device:list:up']"
  78. >
  79. 批量上架
  80. </el-button>
  81. <el-button
  82. type="primary"
  83. icon="el-icon-bottom"
  84. @click="getShelves(2)"
  85. :disabled="isDisabled()"
  86. v-hasPermi="['device:list:down']"
  87. >
  88. 批量下架
  89. </el-button>
  90. </el-form-item>
  91. </el-form>
  92. <!-- 表格 -->
  93. <el-table
  94. :data="tableData"
  95. v-loading="loading"
  96. @selection-change="handleSelectionChange"
  97. >
  98. <el-table-column type="selection" align="center" />
  99. <el-table-column label="设备ID" prop="id" align="center" />
  100. <el-table-column label="设备型号" prop="clientType" align="center" />
  101. <el-table-column label="设备名称" prop="name" align="center" />
  102. <el-table-column label="蓝牙名称" prop="bluetoothName" align="center" />
  103. <el-table-column label="设备图片" prop="img" align="center" width="100">
  104. <template slot-scope="scope">
  105. <el-image :src="scope.row.img" />
  106. </template>
  107. </el-table-column>
  108. <el-table-column label="设备分类" prop="categoryName" align="center" />
  109. <el-table-column
  110. label="设备类型"
  111. prop="deviceType"
  112. align="center"
  113. :formatter="deviceTypeFormatter"
  114. />
  115. <el-table-column
  116. label="是否热门"
  117. prop="isHot"
  118. align="center"
  119. :formatter="hotFormatter"
  120. />
  121. <el-table-column label="创建时间" prop="createTimeText" align="center" />
  122. <el-table-column label="操作" align="center">
  123. <template slot-scope="scope">
  124. <el-button type="text" @click="getChange(scope.row.id, true)"
  125. >查看</el-button
  126. >
  127. <el-button
  128. v-if="scope.row.status === 2"
  129. type="text"
  130. @click="getChange(scope.row.id)"
  131. v-hasPermi="['device:list:edit']"
  132. >
  133. 编辑
  134. </el-button>
  135. <el-button
  136. v-if="scope.row.status === 2"
  137. type="text"
  138. @click="getShelves(1, scope.row.id)"
  139. v-hasPermi="['device:list:up']"
  140. >
  141. 上架
  142. </el-button>
  143. <el-button
  144. v-else
  145. type="text"
  146. @click="getShelves(2, scope.row.id)"
  147. v-hasPermi="['device:list:down']"
  148. >
  149. 下架
  150. </el-button>
  151. <el-button
  152. v-if="scope.row.status === 2"
  153. type="delete"
  154. @click="getDelete(scope.row)"
  155. v-hasPermi="['device:list:delete']"
  156. >
  157. 删除
  158. </el-button>
  159. </template>
  160. </el-table-column>
  161. </el-table>
  162. <pagination
  163. v-show="total > 0"
  164. :total="total"
  165. :page.sync="form.pageNum"
  166. :limit.sync="form.pageSize"
  167. @pagination="getList"
  168. />
  169. </div>
  170. </template>
  171. <script>
  172. import { change, list, remove } from "@/api/device/list";
  173. import {
  174. devCategoryMixin,
  175. devMixin,
  176. devTypeMixin,
  177. onOrOffMixin,
  178. yesOrNoMixin,
  179. } from "@/mixin/index";
  180. import { dialogCallBack } from "@/utils/DialogUtil";
  181. export default {
  182. mixins: [
  183. devMixin,
  184. onOrOffMixin,
  185. devTypeMixin,
  186. devCategoryMixin,
  187. yesOrNoMixin,
  188. ],
  189. data() {
  190. return {
  191. // 遮罩层
  192. loading: true,
  193. // 表格
  194. tableData: [],
  195. // 总数据
  196. total: 0,
  197. // 搜索表单
  198. form: {
  199. pageNum: 1,
  200. pageSize: 10,
  201. },
  202. // 批量上下架
  203. changeForm: {
  204. ids: "",
  205. type: null,
  206. },
  207. };
  208. },
  209. mounted() {
  210. this.getDevList();
  211. this.getCateGory(1);
  212. this.getList();
  213. },
  214. methods: {
  215. // 列表
  216. getList() {
  217. this.loading = true;
  218. list(this.form).then((res) => {
  219. this.tableData = res.data.records;
  220. this.total = res.data.total;
  221. this.loading = false;
  222. });
  223. },
  224. // 搜索
  225. getSearch() {
  226. this.form.pageNum = 1;
  227. this.form.pageSize = 10;
  228. this.getList();
  229. },
  230. // 重置
  231. getRefresh() {
  232. this.form = {
  233. name: "",
  234. pageNum: 1,
  235. pageSize: 10,
  236. };
  237. this.getList();
  238. },
  239. // 禁用上下架功能
  240. isDisabled() {
  241. return this.changeForm.ids === "" ? true : false;
  242. },
  243. // 上下架
  244. getShelves(key, e) {
  245. if (e) {
  246. this.changeForm.ids = e;
  247. }
  248. let title = key === 1 ? "上架" : "下架";
  249. this.changeForm.type = key;
  250. change(this.changeForm).then((res) => {
  251. if (res.code === 0) {
  252. this.$message.success(`${title}成功!`);
  253. this.getList();
  254. }
  255. });
  256. },
  257. // 新增 / 编辑 / 查看
  258. getChange(id, boolean) {
  259. this.$router.push({
  260. path: `/device/deviceList/detail`,
  261. query: {
  262. id: id,
  263. boolean: boolean,
  264. },
  265. });
  266. },
  267. // 多选
  268. handleSelectionChange(e) {
  269. if (e.length > 0) {
  270. let arr = [];
  271. e.filter((i) => {
  272. arr.push(i.id);
  273. this.changeForm.ids = arr.join(",");
  274. });
  275. } else {
  276. this.changeForm.ids = "";
  277. }
  278. },
  279. // 删除
  280. getDelete(row) {
  281. var that = this;
  282. var id = row.id;
  283. dialogCallBack(that, function () {
  284. that
  285. .$confirm(`是否删除${row.name}?`, "提示:", {
  286. type: "warning",
  287. })
  288. .then(() => {
  289. remove(id).then((res) => {
  290. if (res.code === 0) {
  291. that.getList();
  292. that.$message.success("删除成功!");
  293. }
  294. });
  295. })
  296. .catch(() => {});
  297. });
  298. },
  299. // 字典翻译
  300. hotFormatter(row) {
  301. return this.selectDictLabel(this.yesOrNoOptions, row.isHot);
  302. },
  303. deviceTypeFormatter(row) {
  304. return this.selectDictLabel(this.devTypeOptions, row.deviceType);
  305. },
  306. },
  307. };
  308. </script>