index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <!-- 信标列表 -->
  2. <template>
  3. <div class="app-container beaconList">
  4. <div class="page-container beaconListPage">
  5. <div class="page-form-title-box">
  6. <el-form :model="queryParams" class="form-box" ref="queryForm"
  7. :inline="true" style="width:100%;">
  8. <el-form-item label="关键字" prop="searchValue" label-width="60px">
  9. <el-input
  10. maxLength="30"
  11. v-model="queryParams.searchValue"
  12. placeholder="编号"
  13. clearable
  14. style="width: 200px"
  15. />
  16. </el-form-item>
  17. <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
  18. <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
  19. <p class="page-add-common-style-button"
  20. style="float: right;"
  21. @click="tableButton(3)"
  22. v-hasPermi="['db:beancon:add']"
  23. >+ 新增信标</p>
  24. </el-form>
  25. </div>
  26. <div class="page-content-box">
  27. <el-table class="table-box" v-loading="loading" border :data="dataList">
  28. <el-table-column label="序号" width="50" align="center" type="index"/>
  29. <el-table-column label="信标编号" prop="beaconTag" show-overflow-tooltip/>
  30. <el-table-column label="最后使用时间" prop="bindingTime" show-overflow-tooltip>
  31. <template slot-scope="scope">
  32. <span>{{ parseTime(scope.row.bindingTime,'{y}-{m}-{d} {h}:{i}') }}</span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
  36. <template slot-scope="scope">
  37. <div class="table-button-box">
  38. <p class="table-button-null"></p>
  39. <p class="table-button-p"
  40. @click="tableButton(1,scope.row)"
  41. v-hasPermi="['db:stock:query']"
  42. >打印二维码</p>
  43. <p class="table-button-p"
  44. @click="tableButton(2,scope.row)"
  45. v-hasPermi="['db:stock:remove']"
  46. >删除</p>
  47. <p class="table-button-null"></p>
  48. </div>
  49. </template>
  50. </el-table-column>
  51. </el-table>
  52. <pagination :page-sizes="[20, 30, 40, 50]"
  53. v-show="total>0"
  54. :total="total"
  55. :page.sync="queryParams.pageNum"
  56. :limit.sync="queryParams.pageSize"
  57. @pagination="getList"
  58. />
  59. </div>
  60. </div>
  61. <el-dialog class="beaconList-dialog-box"
  62. :title="dialogTitle" :visible.sync="dialogType" v-if="dialogType"
  63. :close-on-click-modal="false" width="500px" append-to-body>
  64. <div v-if="!dialogAddType">
  65. <div v-if="dialogForm.state">
  66. <div class="text-box">
  67. <p>学院:</p>
  68. <p>{{dialogForm.collegeName}}</p>
  69. </div>
  70. <div class="text-box">
  71. <p>实验室:</p>
  72. <p>{{dialogForm.subjectName}}{{dialogForm.roomNum}}</p>
  73. </div>
  74. <!--<div class="text-box">-->
  75. <!--<p>气瓶编号:</p>-->
  76. <!--<p>{{dialogForm.roomNum}}</p>-->
  77. <!--</div>-->
  78. <div class="text-box">
  79. <p>气瓶:</p>
  80. <p>{{dialogForm.gasName}}</p>
  81. </div>
  82. </div>
  83. <div class="text-box" v-if="dialogForm.state">
  84. <p>最后一次绑定时间:</p>
  85. <p>{{ parseTime(dialogForm.bindingTime,'{y}-{m}-{d} {h}:{i}') }}</p>
  86. </div>
  87. <vue-qr style="display: block;height:100px;width:100px;margin:auto;" text="dialogForm.qrCodeUrl" :size="300"></vue-qr>
  88. <p class="text-p">{{dialogForm.beaconTag}}</p>
  89. <p class="text-p">信标</p>
  90. </div>
  91. <div v-if="dialogAddType">
  92. <el-form ref="dialogForm" :model="dialogForm" :rules="rules" label-width="120px">
  93. <el-form-item label="信标编号:" prop="beaconTag" style="margin-top:20px;">
  94. <el-input
  95. maxLength="20"
  96. v-model="dialogForm.beaconTag"
  97. placeholder="请输入名称"
  98. style="width: 280px"
  99. />
  100. </el-form-item>
  101. </el-form>
  102. </div>
  103. <div slot="footer" class="dialog-footer">
  104. <p class="dialog-footer-null-p"></p>
  105. <el-button @click="cancel">取 消</el-button>
  106. <el-button type="primary" @click="submit" :style="dialogAddType?'width:150px;':''">{{dialogAddType?'确认并打印二维码':'打 印'}}</el-button>
  107. <p class="dialog-footer-null-p"></p>
  108. </div>
  109. </el-dialog>
  110. </div>
  111. </template>
  112. <script>
  113. import vueQr from 'vue-qr'
  114. import { getLodop } from "@/utils/LodopFuncs";
  115. import { airbottleBeaconList,airbottleBeaconAdd,airbottleBeaconFindById,airbottleBeaconDelete } from "@/api/gasBottleManage/index";
  116. //import { getDicts } from "@/api/commonality/noPermission";
  117. //import { systemUserSelect } from "@/api/commonality/permission";
  118. //import { getInfo } from "@/api/basicsModules/index";
  119. export default {
  120. name: 'index',
  121. components: {
  122. vueQr
  123. },
  124. data () {
  125. return {
  126. tableButtonType:this.hasPermiDom(['db:stock:remove','db:stock:query',]),
  127. //页面遮罩
  128. loading:false,
  129. //下拉列表数据
  130. optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
  131. //查询条件
  132. queryParams:{
  133. pageNum:1,
  134. pageSize:20,
  135. searchValue:"",
  136. },
  137. //列表数据
  138. dataList:[],
  139. //数据数量
  140. total:0,
  141. //弹窗开关
  142. dialogType:false,
  143. dialogTitle:"",
  144. dialogForm:null,
  145. //打印/新增状态
  146. dialogAddType:false,
  147. //校验
  148. rules:{
  149. beaconTag:[
  150. { required: true, message: '请输入信标编号', trigger: 'blur' },
  151. { required: true, message: "请输入信标编号", validator: this.spaceJudgment, trigger: "blur" }
  152. ],
  153. },
  154. }
  155. },
  156. created () {
  157. },
  158. mounted () {
  159. this.getList();
  160. },
  161. methods: {
  162. //弹窗相关
  163. cancel(){
  164. this.$set(this,'dialogType',false);
  165. },
  166. //打印二维码
  167. submit(){
  168. let _this=this;
  169. if(!this.dialogAddType){
  170. if(this.needCLodop()){
  171. //打印
  172. if(this.dialogForm.beaconTag[0]){
  173. let data = JSON.parse(JSON.stringify({code:this.dialogForm.beaconTag}))
  174. let num = parseInt((20 - data.code.length)/2);
  175. for(let i=0;i<num;i++){
  176. data.code = ' '+data.code+' ';
  177. }
  178. this.CreateOneFormPage(data.code);
  179. this.$set(this,'dialogType',false);
  180. }else{
  181. this.msgError('参数异常')
  182. }
  183. }else{
  184. //提示驱动缺失
  185. this.$set(this,'dialogType',false);
  186. this.$confirm('未检测到打印服务,请联系管理员.', "警告", {
  187. confirmButtonText: "确定",
  188. cancelButtonText: "取消",
  189. type: "warning"
  190. }).then(function() {
  191. }).then(() => {
  192. }).catch(() => {});
  193. }
  194. }else{
  195. this.$refs["dialogForm"].validate(valid => {
  196. if (valid) {
  197. let obj = JSON.parse(JSON.stringify(this.dialogForm))
  198. airbottleBeaconAdd(obj).then(response => {
  199. this.$set(this,'dialogType',false);
  200. this.msgSuccess(response.msg)
  201. this.getList();
  202. if(this.needCLodop()){
  203. //打印
  204. if(obj.beaconTag[0]){
  205. let data = JSON.parse(JSON.stringify({code:obj.beaconTag}))
  206. let num = parseInt((20 - data.code.length)/2);
  207. for(let i=0;i<num;i++){
  208. data.code = ' '+data.code+' ';
  209. }
  210. this.CreateOneFormPage(data.code);
  211. this.$set(this,'dialogType',false);
  212. }else{
  213. this.msgError('参数异常')
  214. }
  215. }else{
  216. //提示驱动缺失
  217. this.$set(this,'dialogType',false);
  218. this.$confirm('未检测到打印服务,请联系管理员.', "警告", {
  219. confirmButtonText: "确定",
  220. cancelButtonText: "取消",
  221. type: "warning"
  222. }).then(function() {
  223. }).then(() => {
  224. }).catch(() => {});
  225. }
  226. });
  227. }
  228. })
  229. }
  230. },
  231. //查询按钮
  232. handleQuery(){
  233. this.$set(this.queryParams,'pageNum',1);
  234. this.getList();
  235. },
  236. //重置按钮
  237. resetQuery(){
  238. this.$set(this,'dateRange',[])
  239. this.$set(this,'queryParams',{
  240. pageNum:1,
  241. pageSize:20,
  242. searchValue:"",
  243. });
  244. this.getList();
  245. },
  246. //获取数据列表
  247. getList(){
  248. this.$set(this,'loading',true);
  249. let obj = JSON.parse(JSON.stringify(this.queryParams))
  250. airbottleBeaconList(obj).then(response => {
  251. this.$set(this,'loading',false);
  252. this.$set(this,'dataList',response.data.records);
  253. this.$set(this,'total',response.data.total);
  254. });
  255. },
  256. //操作按钮
  257. tableButton(type,row){
  258. let self = this;
  259. if(type == 1){
  260. //打印二维码
  261. airbottleBeaconFindById({id:row.id}).then(response => {
  262. this.$set(this,'dialogTitle','标签信息');
  263. this.$set(this,'dialogForm',response.data);
  264. this.$set(this,'dialogAddType',false);
  265. this.$set(this,'dialogType',true);
  266. });
  267. }else if(type == 2){
  268. //删除
  269. this.$confirm('是否确认删除?', "警告", {
  270. confirmButtonText: "确定",
  271. cancelButtonText: "取消",
  272. type: "warning"
  273. }).then(function() {
  274. }).then(() => {
  275. airbottleBeaconDelete({id:row.id}).then(response => {
  276. self.msgSuccess(response.msg)
  277. self.getList();
  278. });
  279. }).catch(() => {});
  280. }else if(type == 3){
  281. //新增
  282. this.$set(this,'dialogTitle','新增');
  283. this.$set(this,'dialogForm',{beaconTag:""});
  284. this.$set(this,'dialogAddType',true);
  285. this.$set(this,'dialogType',true);
  286. }
  287. },
  288. },
  289. }
  290. </script>
  291. <style scoped lang="scss">
  292. .beaconList{
  293. display: flex;
  294. flex-direction: column;
  295. .beaconListPage{
  296. }
  297. }
  298. </style>
  299. <style lang="scss">
  300. .beaconList-dialog-box{
  301. .el-dialog__body{
  302. padding:10px 20px;
  303. .text-box{
  304. display: flex;
  305. p{
  306. font-size:16px;
  307. line-height:40px;
  308. }
  309. p:nth-child(1){
  310. margin-left:60px;
  311. }
  312. p:nth-child(2){
  313. }
  314. }
  315. .text-p{
  316. line-height:30px;
  317. font-size:16px;
  318. text-align: center;
  319. }
  320. }
  321. .dialog-footer{
  322. display: flex;
  323. .dialog-footer-null-p{
  324. flex:1;
  325. }
  326. }
  327. }
  328. </style>