index.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. <template>
  2. <div>
  3. <d2-container>
  4. <div class="nav">当前所在位置:<a href="#/index">首页</a>>设备管理>设备</div>
  5. <!-- <template slot="header">首页/数据查询</template> -->
  6. <div class="main">
  7. <div class="zt_right">
  8. <!-- <template slot="header">首页/数据查询</template> -->
  9. <div class="right_main">
  10. <!-- <div class="right_title">
  11. <i
  12. class="fa fa-file-text"
  13. aria-hidden="true"
  14. style="padding-right: 5px"
  15. ></i>
  16. 产品
  17. </div> -->
  18. <div class="right_title">
  19. <span><i class="fa fa-wrench"></i>&emsp;设备</span>
  20. </div>
  21. <div class="right_table">
  22. <div class="flex-between">
  23. <el-form
  24. :inline="true"
  25. :model="formInline"
  26. class="demo-form-inline"
  27. id="formLabel"
  28. >
  29. <!-- <el-form-item label="组织名称:">
  30. <el-select size="mini" v-model="formInline.orgCode" placeholder="请选择" >
  31. <el-option v-for="item in ckLists" :key="item.id" :label="item.orgName" :value="item.orgCode">
  32. </el-option>
  33. </el-select>
  34. </el-form-item> -->
  35. <el-form-item label="产品名称:">
  36. <el-select size="mini" v-model="formInline.proCode" placeholder="请选择" >
  37. <el-option v-for="item in proLists" :key="item.id" :label="item.proName" :value="item.proCode">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="设备名称:">
  42. <!-- <el-input size="mini" v-model="formInline.eqName" placeholder="请输入"></el-input> -->
  43. <el-select
  44. size="mini"
  45. v-model="formInline.eqCode"
  46. placeholder="请选择"
  47. >
  48. <el-option
  49. v-for="item in tableData1"
  50. :key="item.id"
  51. :label="item.eqName"
  52. :value="item.eqCode"
  53. >
  54. </el-option>
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item label="设备标签:">
  58. <el-select size="mini" v-model="formInline.labelCode" placeholder="请选择" >
  59. <el-option v-for="item in tagLists" :key="item.id" :label="item.labelName" :value="item.labelCode">
  60. </el-option>
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item>
  64. <el-button
  65. size="mini"
  66. type="primary"
  67. icon="el-icon-search"
  68. @click="search"
  69. >查询</el-button
  70. >
  71. </el-form-item>
  72. <el-form-item>
  73. <el-button
  74. size="mini"
  75. type="primary"
  76. icon="el-icon-refresh-left"
  77. @click="reset"
  78. >重置</el-button
  79. >
  80. </el-form-item>
  81. </el-form>
  82. <div style="margin-top:-10px;margin-bottom:10px">
  83. <el-button type="primary" @click="goTag" size="mini"
  84. >设备标签</el-button
  85. >
  86. <el-button
  87. size="mini"
  88. type="primary"
  89. icon="el-icon-plus"
  90. @click="dialogTitle='新建设备';$refs.addDialog.dialogFormVisible = true;$refs.addDialog.ckList()"
  91. >新建设备</el-button
  92. >
  93. </div>
  94. </div>
  95. <el-table
  96. :data="tableData"
  97. border
  98. stripe
  99. style="width: 100%"
  100. >
  101. <el-table-column
  102. align="center"
  103. label="序号"
  104. type="index"
  105. width="100px"
  106. :index="indexMethod"
  107. show-overflow-tooltip
  108. ></el-table-column>
  109. <el-table-column
  110. prop="eqCode"
  111. label="设备ID"
  112. align="center"
  113. show-overflow-tooltip
  114. >
  115. </el-table-column>
  116. <el-table-column
  117. prop="eqName"
  118. label="设备名称"
  119. align="center"
  120. >
  121. </el-table-column>
  122. <el-table-column
  123. prop="proName"
  124. label="所属产品名称"
  125. align="center"
  126. >
  127. </el-table-column>
  128. <el-table-column prop="phoneO" label="设备数量" align="center">
  129. </el-table-column>
  130. <el-table-column
  131. prop="orgName"
  132. label="所属组织名称"
  133. align="center"
  134. >
  135. </el-table-column>
  136. <el-table-column
  137. prop="labelName"
  138. label="设备标签"
  139. align="center"
  140. >
  141. </el-table-column>
  142. <el-table-column
  143. prop="eqStatus"
  144. label="状态"
  145. align="center"
  146. >
  147. <template slot-scope="scope">
  148. <el-button
  149. class="online"
  150. v-if="scope.row.eqStatus==1"
  151. type="primary"
  152. size="mini"
  153. plain
  154. >在线</el-button
  155. >
  156. <el-button class="downline" v-if="scope.row.eqStatus==0" type="danger" plain size="mini">离线</el-button>
  157. <!-- <el-button @click="delecheck( scope.$index, scope.row)" type="detailbtn" class="fa fa-info-circle" size="mini">查看</el-button> -->
  158. </template>
  159. </el-table-column>
  160. <el-table-column
  161. prop="registerTime"
  162. label="注册时间"
  163. align="center"
  164. >
  165. </el-table-column>
  166. <el-table-column
  167. prop="lastOnlineTime"
  168. label="最后上线时间"
  169. align="center"
  170. >
  171. </el-table-column>
  172. <el-table-column label="操作" width="160" align="center">
  173. <template slot-scope="scope">
  174. <el-button
  175. size="mini"
  176. plain
  177. class="editBtn"
  178. @click="goDetail(scope.row)"
  179. >查看</el-button
  180. >
  181. <!-- <el-button type="warning" plain size="mini" @click="edit(scope.row)"
  182. >编辑</el-button
  183. > -->
  184. <el-button type="danger" plain size="mini" @click="del(scope.row)"
  185. >删除</el-button
  186. >
  187. <!-- <el-button @click="delecheck( scope.$index, scope.row)" type="detailbtn" class="fa fa-info-circle" size="mini">查看</el-button> -->
  188. </template>
  189. </el-table-column>
  190. </el-table>
  191. <el-pagination
  192. @size-change="handleSizeChange"
  193. @current-change="handleCurrentChange"
  194. :current-page="1"
  195. :page-sizes="[10, 20, 30, 40]"
  196. :page-size="pagination.pageSize"
  197. layout="total, sizes, prev, pager, next, jumper"
  198. :total="pagination.total"
  199. >
  200. </el-pagination>
  201. </div>
  202. </div>
  203. </div>
  204. </div>
  205. <addDialog :dialogTitle="dialogTitle" ref="addDialog"/>
  206. </d2-container>
  207. </div>
  208. </template>
  209. <script>
  210. import addDialog from "../compontents/addDialog.vue";
  211. import api from "@/api";
  212. // 1 异常点 2 断开
  213. export default {
  214. name: "product",
  215. components: { addDialog },
  216. data() {
  217. return {
  218. defaultProps: {
  219. children: "children",
  220. label: "productCategoryName",
  221. },
  222. ckLists:[],
  223. typeLists:[],
  224. proLists:[],
  225. tagLists:[],
  226. addForm: {},
  227. dialogFormVisible: false,
  228. dialogTitle: "",
  229. //头部查询条件
  230. formInline: {
  231. },
  232. //表格字段
  233. tableData: [{}],
  234. tableData1: [],
  235. //分页
  236. pagination: {
  237. // 每页显示的条数
  238. pageSize: 10,
  239. // 当前页
  240. curPage: 1,
  241. // 总数
  242. total: 20,
  243. },
  244. rules: {
  245. id: [{ required: true, message: "请输入产品ID", trigger: "blur" }],
  246. name: [{ required: true, message: "请选择产品名称", trigger: "blur" }],
  247. region: [
  248. { required: true, message: "请选择产品分类", trigger: "blur" },
  249. ],
  250. },
  251. };
  252. },
  253. created(){
  254. this.ckList()
  255. },
  256. methods: {
  257. //编辑
  258. edit(row) {
  259. this.$refs.addDialog.dialogFormVisible = true;
  260. this.dialogTitle = "编辑设备";
  261. this.editRow = row;
  262. this.$refs.addDialog.ckList()
  263. this.$refs.addDialog.getEditRow(row);
  264. },
  265. ckList() {
  266. var data = {
  267. storeTypeCode: 300002,
  268. };
  269. api
  270. .ckList()
  271. .then((res) => {
  272. if (res.code == 200) {
  273. this.ckLists = res.data;
  274. }
  275. })
  276. .catch((err) => {
  277. console.log(err);
  278. });
  279. api
  280. .productCategoryList(localStorage.getItem("orgCode"))
  281. .then((res) => {
  282. if (res.code == 200) {
  283. this.typeLists = res.data;
  284. }
  285. })
  286. .catch((err) => {
  287. console.log(err);
  288. });
  289. api
  290. .productList({ curPage: 1, pageSize: 99999,condition: JSON.stringify({org_code:localStorage.getItem("orgCode")}) })
  291. .then((res) => {
  292. if (res.code == 200) {
  293. this.proLists = res.data.records;
  294. }
  295. })
  296. .catch((err) => {
  297. console.log(err);
  298. });
  299. api
  300. .equipmentTagList({curPage:1,pageSize:99999})
  301. .then((res) => {
  302. if (res.code == 200) {
  303. this.tagLists = res.data.records;
  304. }
  305. })
  306. .catch((err) => {
  307. console.log(err);
  308. });
  309. },
  310. handleNodeClick(data) {
  311. console.log(data);
  312. this.$set(this.formInline,'proCategory',data.productCategoryName)
  313. this.$set(this.formInline,'label',data.productCategoryName)
  314. console.log(this.formInline);
  315. // 使 input 失去焦点,并隐藏下拉框
  316. this.$refs.selectTree.blur();
  317. },
  318. //删除
  319. del(row){
  320. this.$confirm('确认进行删除操作吗?', '删除提示', {
  321. confirmButtonText: '确定',
  322. cancelButtonText: '取消',
  323. type: 'warning'
  324. }).then(() => {
  325. api.equipmentDel(row.id).then(res=>{
  326. if(res.code==200){
  327. this.$message({
  328. type: "success",
  329. message: "删除成功",
  330. });
  331. this.getList()
  332. }else{
  333. this.$message({
  334. type: "error",
  335. message: res.msg,
  336. });
  337. }
  338. })
  339. })
  340. },
  341. //查看
  342. goDetail(row) {
  343. this.$router.push({ path: "equipmentInfo",query:{id:row.id} });
  344. },
  345. //跳转产品分类
  346. goTag() {
  347. this.$router.push({ path: "equipmentTag" });
  348. },
  349. //图标上传
  350. handleAvatarSuccess(res, file) {
  351. this.imageUrl = URL.createObjectURL(file.raw);
  352. },
  353. // beforeAvatarUpload(file) {
  354. // const isJPG = file.type === 'image/jpeg';
  355. // const isLt2M = file.size / 1024 / 1024 < 2;
  356. // if (!isJPG) {
  357. // this.$message.error('上传头像图片只能是 JPG 格式!');
  358. // }
  359. // if (!isLt2M) {
  360. // this.$message.error('上传头像图片大小不能超过 2MB!');
  361. // }
  362. // return isJPG && isLt2M;
  363. // },
  364. //新建产品提交
  365. submitForm(formName) {
  366. this.$refs[formName].validate((valid) => {
  367. if (valid) {
  368. alert("submit!");
  369. } else {
  370. console.log("error submit!!");
  371. return false;
  372. }
  373. });
  374. },
  375. search() {
  376. this.getList()
  377. },
  378. reset() {
  379. this.pagination.curPage=1;
  380. this.pagination.pageSize=10;
  381. this.formInline={}
  382. this.getList()
  383. },
  384. //获取列表数据
  385. getList() {
  386. var condition = this.formInline;
  387. condition.org_code=localStorage.getItem("orgCode");
  388. condition = JSON.stringify(condition);
  389. var data = {
  390. pageIndex: this.pagination.curPage,
  391. pageSize: this.pagination.pageSize,
  392. condition: condition,
  393. };
  394. api.equipmentList(data)
  395. .then((res) => {
  396. if (res.code == 200) {
  397. this.tableData = res.data.records;
  398. this.pagination.pageSize = res.data.size;
  399. this.pagination.total = res.data.total;
  400. }
  401. })
  402. .catch((err) => {
  403. console.log(err);
  404. });
  405. },
  406. //表格序号
  407. indexMethod(index) {
  408. return (
  409. (this.pagination.curPage - 1) * this.pagination.pageSize + index + 1
  410. );
  411. },
  412. // 每页条数改变
  413. handleSizeChange(val) {
  414. this.pagination.pageSize = val;
  415. this.getList();
  416. },
  417. // 当前页改变
  418. handleCurrentChange(val) {
  419. this.pagination.curPage = val;
  420. this.getList();
  421. },
  422. },
  423. mounted() {
  424. this.getList();
  425. api.equipmentList({ pageIndex: 1, pageSize: 99999,condition: JSON.stringify({org_code:localStorage.getItem("orgCode")}) })
  426. .then((res) => {
  427. if (res.code == 200) {
  428. this.tableData1 = res.data.records;
  429. }
  430. })
  431. .catch((err) => {
  432. console.log(err);
  433. });
  434. },
  435. };
  436. </script>
  437. <style lang="scss" scoped>
  438. .main {
  439. height: 100%;
  440. display: flex;
  441. .zt_right {
  442. width: 100%;
  443. border: 1px solid #DEDEDE;
  444. border-radius: 6px;
  445. background: #fff;
  446. // margin-left: 20px;
  447. // width: calc(100% - 250px);
  448. .right_title{
  449. font-weight: bold;
  450. font-size: 16px;
  451. border-bottom:1px solid #ebeef5;
  452. background-color: rgba(233, 244, 243, 0.5);
  453. border-top-left-radius: 6px;
  454. border-top-right-radius: 6px;
  455. color: #008775;
  456. border-bottom: 1px solid rgba(1, 164, 143, 0.3);
  457. padding-left: 0;
  458. span{
  459. padding: 10px;
  460. padding-bottom: 9px;
  461. border-bottom: 2px solid #01a48f;
  462. }
  463. }
  464. }
  465. }
  466. .nav {
  467. padding: 10px 0 10px 10px;
  468. margin-bottom: 20px;
  469. // color: #fff;
  470. font-size: 14px;
  471. background: #FFFFFF;
  472. border: 1px solid #DEDEDE;
  473. cursor: pointer;
  474. }
  475. .float-left {
  476. float: left;
  477. }
  478. .float-right {
  479. float: right;
  480. }
  481. #dialogStyle .el-select {
  482. width: 100%;
  483. }
  484. .flex-between {
  485. display: flex;
  486. align-items: center;
  487. justify-content: space-between;
  488. flex-wrap: wrap;
  489. }
  490. ::v-deep .online:hover{
  491. background-color: rgba(7, 115, 94, 0.07) !important;
  492. color:#008775 !important
  493. }
  494. ::v-deep .downline:hover{
  495. color: #F56C6C !important;
  496. background: #fef0f0 !important;
  497. border-color: #fbc4c4 !important
  498. }
  499. </style>