index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. <!--协议管理-->
  2. <template>
  3. <div class="app-container protocolManagement">
  4. <div class="page-container protocolManagementPage">
  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 ">
  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-submit-common-style-button"
  20. style="float: right;"
  21. @click="dialogOpen"
  22. v-hasPermiRouter="['demo:demo: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="名称" prop="name" />
  29. <el-table-column label="类型" prop="type" width="200" show-overflow-tooltip>
  30. <template slot-scope="scope">
  31. <span>{{scope.row.type == 1 ? 'jar文件' : (scope.row.type == 2 ? '存放地址' : '')}}</span>
  32. </template>
  33. </el-table-column>
  34. <el-table-column label="文件地址" prop="addr" width="500" show-overflow-tooltip>
  35. <template slot-scope="scope">
  36. <span class="clickCopy" @click="clickCopy(scope.row.addr)">{{scope.row.addr}}</span>
  37. </template>
  38. </el-table-column>
  39. <!--<el-table-column label="状态" prop="data4" show-overflow-tooltip/>-->
  40. <el-table-column label="创建时间" prop="createTime" width="200" show-overflow-tooltip>
  41. <template slot-scope="scope">
  42. <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="操作" class-name="small-padding fixed-width" width="160">
  46. <template slot-scope="scope">
  47. <div class="table-button-box">
  48. <p class="table-button-null"></p>
  49. <p class="table-button-p"
  50. @click="tableButton(1,scope.row)"
  51. >编辑</p>
  52. <p class="table-button-p"
  53. @click="tableButton(2,scope.row)"
  54. >删除</p>
  55. <p class="table-button-null"></p>
  56. </div>
  57. </template>
  58. </el-table-column>
  59. </el-table>
  60. <pagination :page-sizes="[20, 30, 40, 50]"
  61. v-show="total>0"
  62. :total="total"
  63. :page.sync="queryParams.page"
  64. :limit.sync="queryParams.pageSize"
  65. @pagination="getList"
  66. />
  67. </div>
  68. </div>
  69. <!--新增弹窗-->
  70. <el-dialog class="protocolManagement-dialog" :title='dialogTitle' width="540px" append-to-body
  71. :visible.sync="dialogType" v-if="dialogType" @close="dialogOff()"
  72. :close-on-click-modal="false" :close-on-press-escape="false">
  73. <div class="protocolManagement-dialog-box">
  74. <el-form :model="dialogForm" class="dialogForm" ref="dialogForm"
  75. :rules="rules" style="width:100%;" label-width="90px">
  76. <el-form-item label="名称:" prop="name">
  77. <el-input
  78. maxLength="30"
  79. v-model="dialogForm.name"
  80. placeholder="请输入名称"
  81. clearable
  82. style="width: 360px"
  83. />
  84. </el-form-item>
  85. <el-form-item label="类型:" prop="type">
  86. <el-radio-group v-model="dialogForm.type">
  87. <el-radio :label="1">jar文件</el-radio>
  88. <el-radio :label="2">存放地址</el-radio>
  89. </el-radio-group>
  90. </el-form-item>
  91. <el-form-item label="文件:" prop="addr">
  92. <div v-if="dialogForm.type == 1">
  93. <el-upload
  94. class="certificate-avatar-uploader"
  95. :action="uploadImgUrl"
  96. :show-file-list="false"
  97. :on-success="handleAvatarSuccess"
  98. :headers="headers"
  99. :before-upload="beforeAvatarUpload">
  100. <p class="dialog-up-button-p">{{dialogForm.addr?dialogForm.addr:'上传'}}</p>
  101. </el-upload>
  102. </div>
  103. <div v-if="dialogForm.type == 2">
  104. <el-input
  105. maxLength="200"
  106. v-model="dialogForm.addr"
  107. placeholder="请输入存放地址"
  108. style="width: 360px"
  109. />
  110. </div>
  111. </el-form-item>
  112. <el-form-item label="说明:" prop="remark">
  113. <el-input
  114. v-model="dialogForm.remark"
  115. maxLength="200"
  116. placeholder="请输入说明"
  117. :show-word-limit="true"
  118. style="width:360px;"
  119. type="textarea"
  120. resize="none"
  121. :rows="2"
  122. />
  123. </el-form-item>
  124. </el-form>
  125. </div>
  126. <div slot="footer" class="dialog-footer dialog-footer-box">
  127. <p class="dialog-footer-button-null"></p>
  128. <p class="dialog-footer-button-info" @click="dialogOff()">取消</p>
  129. <p class="dialog-footer-button-primary" @click="dialogSubmit">提交</p>
  130. <p class="dialog-footer-button-null"></p>
  131. </div>
  132. </el-dialog>
  133. </div>
  134. </template>
  135. <script>
  136. import { getToken } from "@/utils/auth";
  137. import { iotProtocolList,iotProtocolAdd,iotProtocolUpdate,iotProtocolDelete } from "@/api/iotDevice/index";
  138. export default {
  139. name: 'index',
  140. data(){
  141. return{
  142. uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
  143. headers: {
  144. Authorization:getToken(),
  145. },
  146. loading:false,
  147. typeOptionList:[],
  148. queryParams:{
  149. page:1,
  150. pageSize:20,
  151. searchValue:"",
  152. },
  153. dataList:[],
  154. total:0,
  155. dialogTitle:null,
  156. dialogType:false,
  157. dialogForm:{},
  158. rules:{
  159. name:[
  160. { required: true, message: '请输入名称', trigger: 'blur' },
  161. { required: true, message: "请输入名称", validator: this.spaceJudgment, trigger: "blur" }
  162. ],
  163. type:[
  164. { required: true, message: '请选择类型', trigger: 'blur' },
  165. { required: true, message: "请选择类型", validator: this.spaceJudgment, trigger: "blur" }
  166. ],
  167. addr:[
  168. { required: true, message: '请选择文件或输入文件地址', trigger: 'blur' },
  169. { required: true, message: "请选择文件或输入文件地址", validator: this.spaceJudgment, trigger: "blur" }
  170. ],
  171. },
  172. }
  173. },
  174. created(){
  175. },
  176. mounted(){
  177. this.handleQuery();
  178. },
  179. methods:{
  180. //弹层关闭
  181. dialogOff(){
  182. this.$set(this,'dialogType',false);
  183. },
  184. //弹层开启
  185. dialogOpen(){
  186. this.dialogFormReset();
  187. this.$set(this,'dialogTitle','新增');
  188. this.$set(this,'dialogType',true);
  189. },
  190. //弹层确定
  191. dialogSubmit(){
  192. // let obj = JSON.parse(JSON.stringify(this.dialogForm))
  193. let obj = {
  194. name:this.dialogForm.name,
  195. type:this.dialogForm.type,
  196. addr:this.dialogForm.addr,
  197. remark:this.dialogForm.remark,
  198. }
  199. if(this.dialogForm.id){
  200. obj.id = this.dialogForm.id;
  201. iotProtocolUpdate(obj).then(response => {
  202. this.msgSuccess(response.message);
  203. this.getList();
  204. });
  205. }else{
  206. iotProtocolAdd(obj).then(response => {
  207. this.msgSuccess(response.message);
  208. this.getList();
  209. });
  210. }
  211. this.$set(this,'dialogType',false);
  212. },
  213. handleQuery(){
  214. this.$set(this.queryParams,'page',1);
  215. this.getList();
  216. },
  217. resetQuery(){
  218. this.$set(this,'queryParams',{
  219. page:1,
  220. pageSize:20,
  221. searchValue:"",
  222. });
  223. this.getList();
  224. },
  225. dialogFormReset(){
  226. this.$set(this,'dialogForm',{
  227. name:'',
  228. type:1,
  229. addr:'',
  230. remark:'',
  231. });
  232. },
  233. //获取数据列表
  234. getList(){
  235. this.$set(this,'loading',true);
  236. iotProtocolList(this.queryParams).then(response => {
  237. this.$set(this,'loading',false);
  238. this.$set(this,'dataList',response.data.records);
  239. this.$set(this,'total',response.data.total);
  240. });
  241. },
  242. tableButton(type,row){
  243. let self = this;
  244. if(type == 1){
  245. this.$set(this,'dialogTitle','编辑');
  246. this.$set(this,'dialogForm',JSON.parse(JSON.stringify(row)));
  247. this.$set(this,'dialogType',true);
  248. }else if(type == 2){
  249. this.$confirm('是否确认删除?', "警告", {
  250. confirmButtonText: "确定",
  251. cancelButtonText: "取消",
  252. type: "warning"
  253. }).then(function() {
  254. iotProtocolDelete({id:row.id}).then(response => {
  255. self.msgSuccess(response.message);
  256. self.getList();
  257. });
  258. }).then(() => {
  259. }).catch(() => {});
  260. }
  261. },
  262. //上传
  263. handleAvatarSuccess(res) {
  264. this.$set(this.dialogForm,'addr',res.data.url);
  265. this.$forceUpdate()
  266. },
  267. beforeAvatarUpload(file) {
  268. let fileNameList = file.name.split(".");
  269. let type = false;
  270. if (fileNameList[fileNameList.length-1] == 'jar') {
  271. type = true;
  272. }else{
  273. this.$message.error('只能上传jar文件');
  274. type = false;
  275. }
  276. return type;
  277. },
  278. },
  279. }
  280. </script>
  281. <style scoped lang="scss">
  282. .protocolManagement{
  283. flex:1;
  284. display: flex;
  285. flex-direction: column;
  286. .title-box{
  287. padding-top:20px;
  288. border-bottom:1px solid #dedede;
  289. display: flex;
  290. }
  291. .content-box{
  292. flex: 1;
  293. display: flex;
  294. flex-direction: column;
  295. padding:20px;
  296. overflow: hidden;
  297. }
  298. }
  299. </style>
  300. <style lang="scss">
  301. .protocolManagement-dialog{
  302. .dialog-up-button-p{
  303. padding:0 20px;
  304. width:360px;
  305. border:1px solid #dedede;
  306. text-align: center;
  307. line-height:40px;
  308. height:40px;
  309. border-radius:4px;
  310. color:#999;
  311. /*单行省略号*/
  312. display:block;
  313. overflow:hidden;
  314. text-overflow:ellipsis;
  315. white-space:nowrap;
  316. }
  317. }
  318. </style>