Commit 6e2bc13832be7495f865dc2e970063584c944049

Authored by xp.Huang
2 parents 431b4f84 2bfbcd19

Merge branch 'local_dev_ft' into 'main'

pref:修改设备分页请求方式

See merge request yunteng/thingskit-app!99
1   -//获取设备分页API
2   -const getDeviceApi = (params = {}) => {
3   - return uni.$u.http.get('/yt/device', params);
  1 +//获取设备分页API 修改为post
  2 +/**
  3 + * params ((page,pageSize))
  4 + * data ((deviceProfileIds))
  5 + */
  6 +const getDeviceApi = (urlParams, data) => {
  7 + const {
  8 + page,
  9 + pageSize,
  10 + } = urlParams
  11 + return uni.$u.http.post(`/yt/device?page=${page}&pageSize=${pageSize}`, data);
4 12 };
5 13
6 14 export default {
... ...
... ... @@ -9,10 +9,10 @@ import {
9 9 * socketPrefix websocket前缀 ((https, wss),( http, ws))
10 10 */
11 11
12   -const baseUrl = "http://222.180.200.114:48080/api";
13   -const baseDrawioUrl = "http://222.180.200.114:9527/thingskit-scada";
14   -const baseWebSocketUrl = "222.180.200.114:48080";
15   -const socketPrefix = "ws";
  12 +const baseUrl = "https://demo.thingskit.com/api";
  13 +const baseDrawioUrl = "https://demo.thingskit.com/thingskit-scada";
  14 +const baseWebSocketUrl = "demo.thingskit.com";
  15 +const socketPrefix = "wss";
16 16
17 17 let systemInfo = {
18 18 ...getTabbarHeight(),
... ...
... ... @@ -33,97 +33,125 @@
33 33 </view>
34 34 <u-line length="90%" margin="0 auto"></u-line>
35 35 <view class="detail-item">
36   - <view class="detail-label">下发结果</view>
37   - <view class="detail-value">{{ commandDetail.status === 'SUCCESSFUL' ? '成功' : '失败' }}</view>
  36 + <view class="detail-label">命令状态</view>
  37 + <view class="detail-value">{{ commandDetail.statusName }}</view>
38 38 </view>
39 39 <u-line length="90%" margin="0 auto"></u-line>
40   - <view class="detail-item">
  40 + <view class="detail-item" v-if="!commandDetail.request.oneway">
41 41 <view class="detail-label">响应结果</view>
42   - <view class="detail-value">{{ commandDetail.response ? '成功' : '失败' }}</view>
  42 + <view class="detail-value">{{ commandDetail.response.status==='SUCCESS' ? '成功' : '失败' }}</view>
  43 + </view>
  44 + <view class="detail-item" v-if="!commandDetail.request.oneway">
  45 + <view class="detail-label">响应失败内容</view>
  46 + <view class="detail-value" style="width: 400rpx;" v-if="commandDetail.response.status!=='SUCCESS'">
  47 + <u--textarea placeholder="响应失败内容" v-model="failContent" />
  48 + </view>
43 49 </view>
44 50 </view>
45 51 <view class="command">命令内容</view>
46 52 <u-textarea :value="formatValue(commandDetail.request.body)" disabled></u-textarea>
  53 + <view style="height: 50rpx;"></view>
47 54 </view>
48 55 </template>
49 56
50 57 <script>
51   -import { formatToDate } from '@/plugins/utils.js';
52   -export default {
53   - data() {
54   - return {
55   - commandDetail: {}
56   - };
57   - },
58   - computed: {
59   - deviceType() {
60   - return this.commandDetail.deviceType === 'DIRECT_CONNECTION'
61   - ? '直连设备'
62   - : this.commandDetail.deviceType === 'GATEWAY'
63   - ? '网关设备'
64   - : this.commandDetail.deviceType === 'SENSOR'
65   - ? '网关子设备'
66   - : '';
67   - }
68   - },
69   - methods: {
70   - format(date) {
71   - return formatToDate(date, 'YYYY-MM-DD HH:mm:ss');
  58 + import {
  59 + formatToDate
  60 + } from '@/plugins/utils.js';
  61 + export default {
  62 + data() {
  63 + return {
  64 + commandDetail: {},
  65 + failContent: ""
  66 + };
72 67 },
73   - formatValue(value) {
74   - const val = JSON.stringify(value);
75   - return val
76   - .replace(/\\"/g, '"')
77   - .replace(/]"/g, ']')
78   - .replace(/"\[/g, '[');
  68 + computed: {
  69 + deviceType() {
  70 + return this.commandDetail.deviceType === 'DIRECT_CONNECTION' ?
  71 + '直连设备' :
  72 + this.commandDetail.deviceType === 'GATEWAY' ?
  73 + '网关设备' :
  74 + this.commandDetail.deviceType === 'SENSOR' ?
  75 + '网关子设备' :
  76 + '';
  77 + }
  78 + },
  79 + methods: {
  80 + format(date) {
  81 + return formatToDate(date, 'YYYY-MM-DD HH:mm:ss');
  82 + },
  83 + formatValue(value) {
  84 + try {
  85 + const val = JSON.parse(value['params']);
  86 + //微信小程序端object无法显示,格式化为字符串
  87 + const stringifyVal = JSON.stringify(val['params'])
  88 + const formatVal = stringifyVal
  89 + .replace(/\\"/g, '"')
  90 + .replace(/]"/g, ']')
  91 + .replace(/"\[/g, '[');
  92 + return formatVal
  93 + } catch (e) {
  94 + console.error("命令记录页面格式化无返回值", e);
  95 + return value['params']
  96 + }
  97 + }
  98 + },
  99 + onLoad(options) {
  100 + const {
  101 + data
  102 + } = options;
  103 + this.commandDetail = JSON.parse(data);
  104 + if (this.commandDetail.response.status === 'SUCCESS') return
  105 + this.failContent = JSON.stringify(this.commandDetail.response.error)
79 106 }
80   - },
81   - onLoad(options) {
82   - const { data } = options;
83   - this.commandDetail = JSON.parse(data);
84   - }
85   -};
  107 + };
86 108 </script>
87 109
88 110 <style lang="scss" scoped>
89   -.command-detail {
90   - padding: 0 30rpx;
91   - height: 100vh;
92   - background-color: #f8f9fa;
93   - .detail-top {
94   - height: 118rpx;
95   - width: 690rpx;
96   - display: flex;
97   - align-items: center;
98   - background-color: #fff;
99   - color: #333;
100   - border-radius: 20rpx;
101   - font-size: 15px;
102   - margin-top: 30rpx;
103   - padding: 30rpx;
104   - }
105   - .detail {
106   - background-color: #fff;
107   - margin-top: 30rpx;
108   - border-radius: 20rpx;
109   - width: 690rpx;
110   - .detail-item {
111   - padding: 30rpx;
  111 + .command-detail {
  112 + padding: 0 30rpx;
  113 + height: 100vh;
  114 + background-color: #f8f9fa;
  115 +
  116 + .detail-top {
  117 + height: 118rpx;
  118 + width: 690rpx;
112 119 display: flex;
113 120 align-items: center;
114   - .detail-label {
115   - color: #333;
116   - font-size: 15px;
117   - }
118   - .detail-value {
119   - color: #666;
120   - font-size: 14px;
121   - margin-left: 30rpx;
  121 + background-color: #fff;
  122 + color: #333;
  123 + border-radius: 20rpx;
  124 + font-size: 15px;
  125 + margin-top: 30rpx;
  126 + padding: 30rpx;
  127 + }
  128 +
  129 + .detail {
  130 + background-color: #fff;
  131 + margin-top: 30rpx;
  132 + border-radius: 20rpx;
  133 + width: 690rpx;
  134 +
  135 + .detail-item {
  136 + padding: 30rpx;
  137 + display: flex;
  138 + align-items: center;
  139 +
  140 + .detail-label {
  141 + color: #333;
  142 + font-size: 15px;
  143 + }
  144 +
  145 + .detail-value {
  146 + color: #666;
  147 + font-size: 14px;
  148 + margin-left: 30rpx;
  149 + }
122 150 }
123 151 }
  152 +
  153 + .command {
  154 + margin: 30rpx 0;
  155 + }
124 156 }
125   - .command {
126   - margin: 30rpx 0;
127   - }
128   -}
129 157 </style>
... ...
1 1 <template>
  2 + <!-- 单向没有响应失败状态 -->
  3 + <!-- 响应类型 -->
2 4 <view class="command-record">
3 5 <view class="filter-button" @click="openSearchDialog">
4 6 <text>筛选</text>
5 7 <image src="../../../static/shaixuan.png" />
6 8 </view>
7 9
8   - <mescroll-uni ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" @up="upCallback" height="700px">
  10 + <mescroll-uni ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" @up="upCallback"
  11 + height="700px">
9 12 <view @click="openCommandDetail(item)" class="list-item" v-for="(item, index) in list" :key="index">
10 13 <view class="item">
11 14 <view class="item-first">
12 15 <text>{{ item.deviceName }}</text>
13   - <view class="item-right item-success" v-if="item.response">响应成功</view>
14   - <view class="item-right item-fail" v-else>响应失败</view>
  16 + <view v-if="!item.request.oneway">
  17 + <view class="item-right item-success" v-if="item.response.status==='SUCCESS'">响应成功</view>
  18 + <view class="item-right item-fail" v-else>响应失败</view>
  19 + </view>
15 20 </view>
16 21 <view v-if="item.additionalInfo.cmdType">
17 22 命令类型:
... ... @@ -19,8 +24,7 @@
19 24 </view>
20 25 <view v-if="item.statusName">
21 26 命令状态:
22   - <text
23   - :style="{
  27 + <text :style="{
24 28 color:
25 29 item.status == 'EXPIRED'
26 30 ? 'red'
... ... @@ -33,271 +37,292 @@
33 37 : item.status == 'SENT'
34 38 ? '#00C9A7'
35 39 : ''
36   - }"
37   - style="margin-left: 16rpx;"
38   - >
  40 + }" style="margin-left: 16rpx;">
39 41 {{ item.statusName }}
40 42 </text>
41 43 </view>
42   - <view class="time">{{ format(item.createTime) }}</view>
  44 + <view class="item-first">
  45 + <view v-if="item.additionalInfo.cmdType">
  46 + 响应类型:
  47 + <text style="margin-left: 16rpx;">{{ !item.request.oneway?'双向':'单向' }}</text>
  48 + </view>
  49 + <view class="time">{{ format(item.createTime) }}</view>
  50 + </view>
43 51 </view>
44 52 </view>
45 53 </mescroll-uni>
46 54 <!-- 告警筛选 -->
47   - <u-popup @close="close" closeable bgColor="#fff" :show="show" mode="bottom" :round="20" @touchmove.stop.prevent="disabledScroll">
  55 + <u-popup @close="close" closeable bgColor="#fff" :show="show" mode="bottom" :round="20"
  56 + @touchmove.stop.prevent="disabledScroll">
48 57 <view class="filter" @touchmove.stop.prevent="disabledScroll">
49 58 <view class="filter-title"><text>筛选条件</text></view>
50   - <FilterItem :filterList="issueStatus" title="下发状态" @clickTag="currentIndex => handleClickTag(currentIndex, issueStatus)"></FilterItem>
  59 + <FilterItem :filterList="issueStatus" title="下发状态"
  60 + @clickTag="currentIndex => handleClickTag(currentIndex, issueStatus)"></FilterItem>
51 61 <view class="button-group">
52   - <view><u-button :customStyle="{ color: '#333' }" color="#e3e3e5" shape="circle" text="重置" @click="resetFilter"></u-button></view>
53   - <view><u-button color="#3388ff" shape="circle" text="确认" @click="confirmFilter"></u-button></view>
  62 + <view>
  63 + <u-button :customStyle="{ color: '#333' }" color="#e3e3e5" shape="circle" text="重置"
  64 + @click="resetFilter"></u-button>
  65 + </view>
  66 + <view>
  67 + <u-button color="#3388ff" shape="circle" text="确认" @click="confirmFilter"></u-button>
  68 + </view>
54 69 </view>
55 70 </view>
56 71 </u-popup>
57   - <u-calendar
58   - :show="showCalendar"
59   - mode="range"
60   - @confirm="calendarConfirm"
61   - @close="calendarClose"
62   - startText="开始时间"
63   - endText="结束时间"
64   - confirmDisabledText="请选择日期"
65   - :formatter="formatter"
66   - ></u-calendar>
  72 + <u-calendar :show="showCalendar" mode="range" @confirm="calendarConfirm" @close="calendarClose" startText="开始时间"
  73 + endText="结束时间" confirmDisabledText="请选择日期" :formatter="formatter"></u-calendar>
67 74 </view>
68 75 </template>
69 76 <script>
70   -import FilterItem from '@/pages/device/FilterItem.vue';
71   -import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js';
72   -import { formatToDate } from '@/plugins/utils.js';
73   -import { debounce } from '@/plugins/throttle.js';
74   -export default {
75   - mixins: [MescrollMixin],
76   - components: {
77   - FilterItem
78   - },
79   - props: {
80   - tbDeviceId: {
81   - type: String,
82   - default: ''
83   - }
84   - },
85   - data() {
86   - return {
87   - show: false,
88   - list: [],
89   - total: '',
90   - timeData: {
91   - selectTime: '',
92   - getTimeGap: ''
93   - },
94   - showCalendar: false,
95   - issueStatus: [
96   - {
97   - checked: true,
98   - name: '全部',
99   - type: ''
  77 + import FilterItem from '@/pages/device/FilterItem.vue';
  78 + import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js';
  79 + import {
  80 + formatToDate
  81 + } from '@/plugins/utils.js';
  82 + import {
  83 + debounce
  84 + } from '@/plugins/throttle.js';
  85 + export default {
  86 + mixins: [MescrollMixin],
  87 + components: {
  88 + FilterItem
  89 + },
  90 + props: {
  91 + tbDeviceId: {
  92 + type: String,
  93 + default: ''
  94 + }
  95 + },
  96 + data() {
  97 + return {
  98 + show: false,
  99 + list: [],
  100 + total: '',
  101 + timeData: {
  102 + selectTime: '',
  103 + getTimeGap: ''
100 104 },
101   - {
102   - checked: false,
103   - name: '成功',
104   - type: 'SUCCESSFUL'
  105 + showCalendar: false,
  106 + issueStatus: [{
  107 + checked: true,
  108 + name: '全部',
  109 + type: ''
  110 + },
  111 + {
  112 + checked: false,
  113 + name: '成功',
  114 + type: 'SUCCESSFUL'
  115 + },
  116 + {
  117 + checked: false,
  118 + name: '失败',
  119 + type: 'FAILED'
  120 + }
  121 + ],
  122 + downOption: {
  123 + auto: false //是否在初始化后,自动执行downCallback; 默认true
105 124 },
106   - {
107   - checked: false,
108   - name: '失败',
109   - type: 'FAILED'
  125 + page: {
  126 + num: 0,
  127 + size: 10
110 128 }
111   - ],
112   - downOption: {
113   - auto: false //是否在初始化后,自动执行downCallback; 默认true
114   - },
115   - page: {
116   - num: 0,
117   - size: 10
118   - }
119   - };
120   - },
121   - methods: {
122   - /*下拉刷新的回调 */
123   - downCallback() {
124   - //联网加载数据
125   - this.list = [];
126   - this.page.num = 1;
127   - this.loadData(this.page.num, {
128   - tbDeviceId: this.tbDeviceId
129   - });
130   - },
131   - format(date) {
132   - return formatToDate(date, 'YYYY-MM-DD HH:mm:ss');
133   - },
134   - disabledScroll() {
135   - return;
136   - },
137   - /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
138   - upCallback() {
139   - //联网加载数据
140   - this.page.num += 1;
141   - this.loadData(this.page.num, {
142   - tbDeviceId: this.tbDeviceId
143   - });
144   - },
145   - //获取告警数据
146   - loadData(pageNo, params = {}) {
147   - let httpData = {
148   - ...params,
149   - page: pageNo,
150   - pageSize: 10
151 129 };
152   - uni.$u.http
153   - .get('/yt/rpc', {
154   - params: httpData,
155   - custom: {
156   - load: false
157   - }
158   - })
159   - .then(res => {
160   - this.total = res.total;
161   - uni.stopPullDownRefresh();
162   - //方法一(推荐): 后台接口有返回列表的总页数 totalPage
163   - this.mescroll.endByPage(res.items.length, res.total); //必传参数(当前页的数据个数, 总页数)
164   - if (pageNo == 1) {
165   - this.list = res.items;
166   - } else {
167   - this.list = this.list.concat(res.items);
168   - }
169   - })
170   - .catch(() => {
171   - //联网失败, 结束加载
172   - this.mescroll.endErr();
173   - });
174   - },
175   - handleClickTag(currentIndex, list) {
176   - list.map((item, index) => {
177   - item.checked = index === currentIndex;
178   - });
179   - },
180   - resetFilter() {
181   - const { issueStatus } = this;
182   - issueStatus.forEach(item => item.map((item, index) => (item.checked = index === 0)));
183 130 },
184   - close() {
185   - this.show = false;
186   - },
187   - openSearchDialog() {
188   - this.show = true;
189   - },
190   - hideKeyboard() {
191   - uni.hideKeyboard();
192   - },
193   - calendarConfirm(e) {
194   - this.showCalendar = false;
195   - this.timeData.selectTime = `${e[0]} / ${e[e.length - 1]}`;
196   - },
197   - confirmFilter() {
198   - const issueStatus = this.issueStatus.find(item => item.checked);
199   - this.loadData(1, {
200   - status: issueStatus.type ? issueStatus.type : undefined,
201   - tbDeviceId: this.tbDeviceId
202   - });
203   - this.show = false;
204   - },
205   - calendarClose() {
206   - this.showCalendar = false;
207   - },
208   - openCommandDetail(item) {
209   - uni.navigateTo({
210   - url: '/deviceSubPage/deviceDetailPage/tabDetail/CommandDetail?data=' + JSON.stringify(item)
211   - });
  131 + methods: {
  132 + /*下拉刷新的回调 */
  133 + downCallback() {
  134 + //联网加载数据
  135 + this.list = [];
  136 + this.page.num = 1;
  137 + this.loadData(this.page.num, {
  138 + tbDeviceId: this.tbDeviceId
  139 + });
  140 + },
  141 + format(date) {
  142 + return formatToDate(date, 'YYYY-MM-DD HH:mm:ss');
  143 + },
  144 + disabledScroll() {
  145 + return;
  146 + },
  147 + /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  148 + upCallback() {
  149 + //联网加载数据
  150 + this.page.num += 1;
  151 + this.loadData(this.page.num, {
  152 + tbDeviceId: this.tbDeviceId
  153 + });
  154 + },
  155 + //获取告警数据
  156 + loadData(pageNo, params = {}) {
  157 + let httpData = {
  158 + ...params,
  159 + page: pageNo,
  160 + pageSize: 10
  161 + };
  162 + uni.$u.http
  163 + .get('/yt/rpc', {
  164 + params: httpData,
  165 + custom: {
  166 + load: false
  167 + }
  168 + })
  169 + .then(res => {
  170 + this.total = res.total;
  171 + uni.stopPullDownRefresh();
  172 + //方法一(推荐): 后台接口有返回列表的总页数 totalPage
  173 + this.mescroll.endByPage(res.items.length, res.total); //必传参数(当前页的数据个数, 总页数)
  174 + if (pageNo == 1) {
  175 + this.list = res.items;
  176 + } else {
  177 + this.list = this.list.concat(res.items);
  178 + }
  179 + })
  180 + .catch(() => {
  181 + //联网失败, 结束加载
  182 + this.mescroll.endErr();
  183 + });
  184 + },
  185 + handleClickTag(currentIndex, list) {
  186 + list.map((item, index) => {
  187 + item.checked = index === currentIndex;
  188 + });
  189 + },
  190 + resetFilter() {
  191 + const {
  192 + issueStatus
  193 + } = this;
  194 + issueStatus.forEach(item => item.map((item, index) => (item.checked = index === 0)));
  195 + },
  196 + close() {
  197 + this.show = false;
  198 + },
  199 + openSearchDialog() {
  200 + this.show = true;
  201 + },
  202 + hideKeyboard() {
  203 + uni.hideKeyboard();
  204 + },
  205 + calendarConfirm(e) {
  206 + this.showCalendar = false;
  207 + this.timeData.selectTime = `${e[0]} / ${e[e.length - 1]}`;
  208 + },
  209 + confirmFilter() {
  210 + const issueStatus = this.issueStatus.find(item => item.checked);
  211 + this.loadData(1, {
  212 + status: issueStatus.type ? issueStatus.type : undefined,
  213 + tbDeviceId: this.tbDeviceId
  214 + });
  215 + this.show = false;
  216 + },
  217 + calendarClose() {
  218 + this.showCalendar = false;
  219 + },
  220 + openCommandDetail(item) {
  221 + uni.navigateTo({
  222 + url: '/deviceSubPage/deviceDetailPage/tabDetail/CommandDetail?data=' + JSON.stringify(item)
  223 + });
  224 + }
212 225 }
213   - }
214   -};
  226 + };
215 227 </script>
216 228
217 229 <style lang="scss" scoped>
218   -.command-record {
219   - padding: 0 30rpx;
220   - background: #f8f9fa;
221   - .filter-button {
222   - font-size: 12px;
223   - width: 160rpx;
224   - height: 64rpx;
225   - border-radius: 32rpx;
226   - display: flex;
227   - justify-content: center;
228   - align-items: center;
229   - background: #f0f1f2;
230   - color: #666;
231   - image {
232   - width: 28rpx;
233   - height: 28rpx;
234   - margin-left: 4rpx;
235   - }
236   - }
237   -}
  230 + .command-record {
  231 + padding: 0 30rpx;
  232 + background: #f8f9fa;
238 233
239   -.list-item {
240   - width: 690rpx;
241   - background-color: #fff;
242   - border-radius: 20rpx;
243   - margin: 20rpx auto;
244   - color: #333;
245   - .item {
246   - .delivered-color {
247   - color: blue;
248   - }
249   - padding: 30rpx;
250   - view {
251   - font-size: 14px;
252   - margin-bottom: 10rpx;
253   - }
254   - .time {
255   - margin-top: 20rpx;
256   - color: #999;
257   - }
258   - .item-first {
  234 + .filter-button {
  235 + font-size: 12px;
  236 + width: 160rpx;
  237 + height: 64rpx;
  238 + border-radius: 32rpx;
259 239 display: flex;
260   - justify-content: space-between;
  240 + justify-content: center;
261 241 align-items: center;
262   - font-size: 15px;
263   - font-weight: 500;
264   - align-items: center;
265   - .item-right {
266   - display: flex;
267   - justify-content: center;
268   - align-items: center;
269   - width: 104rpx;
270   - height: 36rpx;
271   - font-size: 10px;
272   - border-radius: 20rpx;
  242 + background: #f0f1f2;
  243 + color: #666;
  244 +
  245 + image {
  246 + width: 28rpx;
  247 + height: 28rpx;
  248 + margin-left: 4rpx;
  249 + }
  250 + }
  251 + }
  252 +
  253 + .list-item {
  254 + width: 690rpx;
  255 + background-color: #fff;
  256 + border-radius: 20rpx;
  257 + margin: 20rpx auto;
  258 + color: #333;
  259 +
  260 + .item {
  261 + .delivered-color {
  262 + color: blue;
  263 + }
  264 +
  265 + padding: 30rpx;
  266 +
  267 + view {
  268 + font-size: 14px;
  269 + margin-bottom: 10rpx;
273 270 }
274   - .item-fail {
275   - color: #848383;
276   - background-color: #84838325;
  271 +
  272 + .time {
  273 + margin-top: 20rpx;
  274 + color: #999;
277 275 }
278   - .item.success {
279   - color: #00c9a7;
280   - background-color: #00c9a725;
  276 +
  277 + .item-first {
  278 + display: flex;
  279 + justify-content: space-between;
  280 + align-items: center;
  281 + font-size: 15px;
  282 + font-weight: 500;
  283 + align-items: center;
  284 +
  285 + .item-right {
  286 + display: flex;
  287 + justify-content: center;
  288 + align-items: center;
  289 + width: 104rpx;
  290 + height: 36rpx;
  291 + font-size: 10px;
  292 + border-radius: 20rpx;
  293 + }
  294 +
  295 + .item-fail {
  296 + color: #848383;
  297 + background-color: #84838325;
  298 + }
  299 +
  300 + .item.success {
  301 + color: #00c9a7;
  302 + background-color: #00c9a725;
  303 + }
281 304 }
282 305 }
283 306 }
284   -}
285 307
286   -.filter {
287   - padding: 0 30rpx;
288   - .filter-title {
289   - text-align: center;
290   - margin-top: 14px;
291   - font-size: 16px;
292   - font-weight: 700;
293   - }
294   - .button-group {
295   - display: flex;
296   - margin-top: 40rpx;
297   - justify-content: space-between;
298   - view {
299   - width: 330rpx;
  308 + .filter {
  309 + padding: 0 30rpx;
  310 +
  311 + .filter-title {
  312 + text-align: center;
  313 + margin-top: 14px;
  314 + font-size: 16px;
  315 + font-weight: 700;
  316 + }
  317 +
  318 + .button-group {
  319 + display: flex;
  320 + margin-top: 40rpx;
  321 + justify-content: space-between;
  322 +
  323 + view {
  324 + width: 330rpx;
  325 + }
300 326 }
301 327 }
302   -}
303 328 </style>
... ...
... ... @@ -8,7 +8,9 @@
8 8 <u-icon v-if="deviceDetail.deviceInfo.longitude !== ''" @click="handleClick" name="map-fill">
9 9 </u-icon>
10 10 </view>
11   - <view class="text-clip" style="margin-left: 20rpx;width:370rpx">{{ deviceDetail.alias? deviceDetail.alias: deviceDetail.name }}</view>
  11 + <view class="text-clip" style="margin-left: 20rpx;width:370rpx">
  12 + {{ deviceDetail.alias? deviceDetail.alias: deviceDetail.name }}
  13 + </view>
12 14 <view style="margin-left: 20rpx; font-size: 14px;"
13 15 :style="{ color: deviceDetail.deviceState === 'INACTIVE' ? '#666' : deviceDetail.deviceState === 'ONLINE' ? '#377DFF' : '#DE4437' }">
14 16 {{ deviceDetail.deviceState === 'INACTIVE' ? '待激活' : deviceDetail.deviceState === 'ONLINE' ? '在线' : '离线' }}
... ... @@ -123,7 +125,12 @@
123 125 </u-radio-group>
124 126 </view>
125 127 <view style="margin-top: 28rpx;width: 100%;">
126   - <u--textarea placeholder="请输入下发内容(json格式)" v-model="inputCommandVal" />
  128 + <div class="u-flex u-row-between">
  129 + <u--textarea placeholder="请输入下发内容(json格式)" v-model="inputCommandVal" />
  130 + <u-icon @click="handleCopy(copyTextValue)" name="question-circle" color="#2979ff" size="28"
  131 + class="ml-10">
  132 + </u-icon>
  133 + </div>
127 134 </view>
128 135
129 136 <view class="button-group">
... ... @@ -157,6 +164,13 @@
157 164 },
158 165 data() {
159 166 return {
  167 + copyTextValue: {
  168 + "method": "methodThingskit",
  169 + "params": {
  170 + "pin": 7,
  171 + "value": 1
  172 + }
  173 + },
160 174 showNodal: false,
161 175 items: [{
162 176 value: 'OneWay',
... ... @@ -202,6 +216,22 @@
202 216 this.modalName = null
203 217 },
204 218 methods: {
  219 + handleCopy(value) {
  220 + uni.showModal({
  221 + content: JSON.stringify(value), //模板中提示的内容
  222 + confirmText: '复制内容',
  223 + success: () => { //点击复制内容的后调函数
  224 + uni.setClipboardData({
  225 + data: JSON.stringify(value), //要被复制的内容
  226 + success: () => { //复制成功的回调函数
  227 + uni.showToast({ //提示
  228 + title: '复制成功'
  229 + })
  230 + }
  231 + });
  232 + }
  233 + });
  234 + },
205 235 radioChange: function(evt) {
206 236 for (let i = 0; i < this.items.length; i++) {
207 237 if (this.items[i].value === evt.detail.value) {
... ... @@ -247,9 +277,7 @@
247 277 cmdType: 'API'
248 278 };
249 279 this.commandValue.method = 'methodThingskit';
250   - this.commandValue.params = {
251   - params: commandJsonValue
252   - };
  280 + this.commandValue.params = commandJsonValue
253 281 await issueCommand(this.commandType, this.deviceDetail.tbDeviceId, this.commandValue);
254 282 this.hiddenModal();
255 283 uni.$u.toast('下发成功~');
... ...
1 1 {
2   - "name": "ThingsKit",
3   - "appid": "__UNI__AD0D64F",
4   - "description": "thingskit",
5   - "versionName": "1.0.0",
6   - "versionCode": 100,
7   - "transformPx": false,
8   - "app-plus": {
9   - "usingComponents": true,
10   - "nvueStyleCompiler": "uni-app",
11   - "compilerVersion": 3,
12   - "splashscreen": {
13   - "alwaysShowBeforeRender": false,
14   - "waiting": false,
15   - "autoclose": true,
16   - "delay": 0
17   - },
18   - "modules": {
19   - "VideoPlayer": {},
20   - "Maps": {},
21   - "Contacts": {},
22   - "FaceID": {},
23   - "Messaging": {},
24   - "OAuth": {},
25   - "Camera": {}
26   - },
27   - "compatible": {
28   - "ignoreVersion": true
29   - },
30   - "distribute": {
31   - "android": {
32   - "permissions": [
33   - "<uses-feature android:name=\"android.hardware.camera\"/>",
34   - "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
35   - "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
36   - "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
37   - "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
38   - "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
39   - "<uses-permission android:name=\"android.permission.CAMERA\"/>",
40   - "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
41   - "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
42   - "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
43   - "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
44   - "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
45   - "<uses-permission android:name=\"android.permission.INTERNET\"/>",
46   - "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
47   - "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
48   - "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
49   - "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
50   - "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
51   - "<uses-permission android:name=\"android.permission.READ_SMS\"/>",
52   - "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
53   - "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
54   - "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
55   - "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
56   - "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
57   - "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
58   - "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
59   - "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>"
60   - ],
61   - "autoSdkPermissions": false
62   - },
63   - "ios": {
64   - "dSYMs": false
65   - },
66   - "sdkConfigs": {
67   - "ad": {},
68   - "geolocation": {
69   - "system": {
70   - "__platform__": ["ios", "android"]
71   - },
72   - "amap": {
73   - "__platform__": ["ios", "android"],
74   - "appkey_ios": "",
75   - "appkey_android": ""
76   - }
77   - },
78   - "maps": {
79   - "amap": {
80   - "appkey_ios": "5221d1373233c782efac82fb176f7f7d",
81   - "appkey_android": "5221d1373233c782efac82fb176f7f7d"
82   - }
83   - },
84   - "oauth": {
85   - "weixin": {
86   - "appid": "wx0ad61d7bf6808e02",
87   - "UniversalLinks": ""
88   - }
89   - }
90   - },
91   - "splashscreen": {
92   - "androidStyle": "default",
93   - "android": {},
94   - "useOriginalMsgbox": false
95   - },
96   - "icons": {
97   - "android": {
98   - "xxhdpi": "static/logo.png",
99   - "xhdpi": "static/logo.png",
100   - "hdpi": "static/logo.png",
101   - "xxxhdpi": "static/logo.png"
102   - }
103   - }
104   - }
105   - },
106   - "quickapp": {},
107   - "mp-weixin": {
108   - "appid": "wx99c411dc3c5571ef",
109   - "setting": {
110   - "urlCheck": false,
111   - "minified": true,
112   - "es6": false,
113   - "postcss": true
114   - },
115   - "usingComponents": true,
116   - "permission": {
117   - "scope.userLocation": {
118   - "desc": "你的位置信息将用于小程序位置接口的效果展示"
119   - }
120   - },
121   - "lazyCodeLoading": "requiredComponents",
122   - "optimization": {
123   - "subPackages": true
124   - }
125   - },
126   - "mp-alipay": {
127   - "usingComponents": true
128   - },
129   - "mp-baidu": {
130   - "usingComponents": true
131   - },
132   - "mp-toutiao": {
133   - "usingComponents": true
134   - },
135   - "uniStatistics": {
136   - "enable": false
137   - },
138   - "vueVersion": "2",
139   - "h5": {
140   - "sdkConfigs": {
141   - "maps": {}
142   - },
143   - "router": {
144   - "base": "minImage/h5/"
145   - }
146   - },
147   - "locale": "zh-Hans"
  2 + "name" : "ThingsKit",
  3 + "appid" : "__UNI__AD0D64F",
  4 + "description" : "thingskit",
  5 + "versionName" : "1.0.0",
  6 + "versionCode" : 100,
  7 + "transformPx" : false,
  8 + "app-plus" : {
  9 + "usingComponents" : true,
  10 + "nvueStyleCompiler" : "uni-app",
  11 + "compilerVersion" : 3,
  12 + "splashscreen" : {
  13 + "alwaysShowBeforeRender" : false,
  14 + "waiting" : false,
  15 + "autoclose" : true,
  16 + "delay" : 0
  17 + },
  18 + "modules" : {
  19 + "VideoPlayer" : {},
  20 + "Maps" : {},
  21 + "Contacts" : {},
  22 + "FaceID" : {},
  23 + "Messaging" : {},
  24 + "OAuth" : {},
  25 + "Camera" : {}
  26 + },
  27 + "compatible" : {
  28 + "ignoreVersion" : true
  29 + },
  30 + "distribute" : {
  31 + "android" : {
  32 + "permissions" : [
  33 + "<uses-feature android:name=\"android.hardware.camera\"/>",
  34 + "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
  35 + "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
  36 + "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
  37 + "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
  38 + "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
  39 + "<uses-permission android:name=\"android.permission.CAMERA\"/>",
  40 + "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
  41 + "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
  42 + "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
  43 + "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
  44 + "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
  45 + "<uses-permission android:name=\"android.permission.INTERNET\"/>",
  46 + "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
  47 + "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
  48 + "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
  49 + "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
  50 + "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
  51 + "<uses-permission android:name=\"android.permission.READ_SMS\"/>",
  52 + "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
  53 + "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
  54 + "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
  55 + "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
  56 + "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
  57 + "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
  58 + "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
  59 + "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>"
  60 + ],
  61 + "autoSdkPermissions" : false
  62 + },
  63 + "ios" : {
  64 + "dSYMs" : false
  65 + },
  66 + "sdkConfigs" : {
  67 + "ad" : {},
  68 + "geolocation" : {
  69 + "system" : {
  70 + "__platform__" : [ "ios", "android" ]
  71 + },
  72 + "amap" : {
  73 + "__platform__" : [ "ios", "android" ],
  74 + "appkey_ios" : "",
  75 + "appkey_android" : ""
  76 + }
  77 + },
  78 + "maps" : {
  79 + "amap" : {
  80 + "appkey_ios" : "5221d1373233c782efac82fb176f7f7d",
  81 + "appkey_android" : "5221d1373233c782efac82fb176f7f7d"
  82 + }
  83 + },
  84 + "oauth" : {
  85 + "weixin" : {
  86 + "appid" : "wx0ad61d7bf6808e02",
  87 + "UniversalLinks" : ""
  88 + }
  89 + }
  90 + },
  91 + "splashscreen" : {
  92 + "androidStyle" : "default",
  93 + "android" : {},
  94 + "useOriginalMsgbox" : false
  95 + },
  96 + "icons" : {
  97 + "android" : {
  98 + "xxhdpi" : "static/logo.png",
  99 + "xhdpi" : "static/logo.png",
  100 + "hdpi" : "static/logo.png",
  101 + "xxxhdpi" : "static/logo.png"
  102 + }
  103 + }
  104 + }
  105 + },
  106 + "quickapp" : {},
  107 + "mp-weixin" : {
  108 + "appid" : "wxd5d018355f38262b",
  109 + "setting" : {
  110 + "urlCheck" : false,
  111 + "minified" : true,
  112 + "es6" : false,
  113 + "postcss" : true
  114 + },
  115 + "usingComponents" : true,
  116 + "permission" : {
  117 + "scope.userLocation" : {
  118 + "desc" : "你的位置信息将用于小程序位置接口的效果展示"
  119 + }
  120 + },
  121 + "lazyCodeLoading" : "requiredComponents",
  122 + "optimization" : {
  123 + "subPackages" : true
  124 + }
  125 + },
  126 + "mp-alipay" : {
  127 + "usingComponents" : true
  128 + },
  129 + "mp-baidu" : {
  130 + "usingComponents" : true
  131 + },
  132 + "mp-toutiao" : {
  133 + "usingComponents" : true
  134 + },
  135 + "uniStatistics" : {
  136 + "enable" : false
  137 + },
  138 + "vueVersion" : "2",
  139 + "h5" : {
  140 + "sdkConfigs" : {
  141 + "maps" : {}
  142 + },
  143 + "router" : {
  144 + "base" : "minImage/h5/"
  145 + }
  146 + },
  147 + "locale" : "zh-Hans"
148 148 }
... ...
... ... @@ -168,12 +168,12 @@
168 168 {
169 169 checked: false,
170 170 name: '告警',
171   - type: '1'
  171 + type: 1
172 172 },
173 173 {
174 174 checked: false,
175 175 name: '正常',
176   - type: '0'
  176 + type: 0
177 177 }
178 178 ],
179 179 typeStatus: [{
... ... @@ -263,7 +263,7 @@
263 263 this.loadData(this.page.num, {
264 264 deviceState: deviceState.type ? deviceState.type : undefined,
265 265 deviceType: deviceType.type ? deviceType.type : undefined,
266   - alarmStatus: alarmStatus.type === '0' || alarmStatus.type === '1' ? alarmStatus.type :
  266 + alarmStatus: alarmStatus.type === 0 || alarmStatus.type === 1 ? alarmStatus.type :
267 267 undefined,
268 268 name: this.deviceName == null ? null : this.deviceName,
269 269 organizationId: this.orgId == null ? null : this.orgId
... ... @@ -276,17 +276,18 @@
276 276 let httpData = {
277 277 page: pageNo,
278 278 pageSize: 10,
279   - ...params
  279 + custom: {
  280 + load: false
  281 + },
280 282 };
  283 + const httpPostData = {
  284 + "deviceProfileIds": null,
  285 + ...params
  286 + }
281 287 const {
282 288 total,
283 289 items
284   - } = await api.deviceApi.getDeviceApi({
285   - params: httpData,
286   - custom: {
287   - load: false
288   - }
289   - })
  290 + } = await api.deviceApi.getDeviceApi(httpData, httpPostData)
290 291 this.total = total;
291 292 uni.stopPullDownRefresh();
292 293 this.mescroll.endByPage(items.length, total); //必传参数(当前页的数据个数, 总页数)
... ... @@ -336,7 +337,7 @@
336 337 this.loadData(1, {
337 338 deviceState: deviceState.type ? deviceState.type : undefined,
338 339 deviceType: deviceType.type ? deviceType.type : undefined,
339   - alarmStatus: alarmStatus.type === '0' || alarmStatus.type === '1' ? alarmStatus.type :
  340 + alarmStatus: alarmStatus.type === 0 || alarmStatus.type === 1 ? alarmStatus.type :
340 341 undefined
341 342 });
342 343 this.show = false;
... ...