监管场景信息管理
1. 新增场景设备信息管理;
2. 新增场景设备位置变更信息管理;
| | |
| | | |
| | | _fetch() { |
| | | if (typeof this._fetchData === 'function') { |
| | | this._fetchData(this.data.cPage) |
| | | const promise = this._fetchData(this.data.cPage); |
| | | if (!promise) return; |
| | | promise |
| | | .then(head => { |
| | | if (head) { |
| | | let cPage = head.currentPage |
| | | ? parseInt(head.currentPage) |
| | | : parseInt(head.page); |
| | | let cPage = head.currentPage ? parseInt(head.currentPage) : parseInt(head.page); |
| | | let tPage = parseInt(head.totalPage); |
| | | let totalCount = head.totalCount ? parseInt(head.totalCount) : 0; |
| | | this._setPagination(cPage, tPage, totalCount); |
| | |
| | | */ |
| | | function transSceneType(value) { |
| | | const s = sceneMap[value] |
| | | return s == undefined ? '-1' : s; |
| | | return s |
| | | // return s == undefined ? '-1' : s; |
| | | } |
| | | |
| | | export { transSceneType }; |
| | |
| | | const changes = []; |
| | | const xAxisMonth = this.getXAxisMonth(); |
| | | xAxisMonth.forEach(m => { |
| | | problems.push('0'); |
| | | changes.push('0'); |
| | | problems.push(0); |
| | | changes.push(0); |
| | | }); |
| | | this.data.subtaskSummary.forEach(s => { |
| | | const month = dayjs(s.stPlanTime).month() + 1 + 'æ'; |
| | |
| | | return month == value; |
| | | }); |
| | | if (index) { |
| | | problems[index] = s.proNum; |
| | | changes[index] = s.changeNum; |
| | | problems[index] += s.proNum; |
| | | changes[index] += s.changeNum; |
| | | } |
| | | }); |
| | | const datas = [problems, changes]; |
| | |
| | | |
| | | _fetchData(page) { |
| | | const { area, onlineValue, sceneValue } = this.data; |
| | | if (!onlineValue || !sceneValue) return; |
| | | area.scensetypeid = sceneValue[0]; |
| | | area.online = onlineValue; |
| | | area.online = onlineValue[0]; |
| | | return searchScene(area, page).then(res => { |
| | | if (res.success) { |
| | | this.setData({ |
| | |
| | | |
| | | onLocationChange(e) { |
| | | const { area } = this.data; |
| | | area.provinceName = e.detail.provinceText; |
| | | area.cityName = e.detail.cityText; |
| | | area.districtName = e.detail.districtText; |
| | | area.townName = e.detail.townText; |
| | | area.provinceCode = e.detail.provinceValue; |
| | | area.cityCode = e.detail.cityValue; |
| | | area.districtCode = e.detail.districtValue; |
| | | area.townCode = e.detail.townValue; |
| | | area.provincename = e.detail.provinceText; |
| | | area.cityname = e.detail.cityText; |
| | | area.districtname = e.detail.districtText; |
| | | area.townname = e.detail.townText; |
| | | area.provincecode = e.detail.provinceValue; |
| | | area.citycode = e.detail.cityValue; |
| | | area.districtcode = e.detail.districtValue; |
| | | area.towncode = e.detail.townValue; |
| | | area.locationValue = e.detail.locationValue; |
| | | this.setData({ area }); |
| | | this._startLoad(); |
| | |
| | | color="var(--td-font-white-1)" |
| | | style-mode="picker" |
| | | picker-class="picker-location" |
| | | bind:onChange="onOnlineChange" |
| | | bind:onlinePickerChange="onOnlineChange" |
| | | bind:onlineInitValue="onOnlineChange" |
| | | ></online-picker> |
| | | <location-picker |
| | | color="var(--td-font-white-1)" |
| | |
| | | ></location-picker> |
| | | </view> |
| | | <view class="filter-wrap-2"> |
| | | <scene-picker sceneMode="{{1}}" bind:scenePickerChange="onScenePickerConfirm" /> |
| | | <scene-picker sceneMode="{{1}}" bind:scenePickerChange="onScenePickerConfirm" bind:sceneInitValue="onScenePickerConfirm"/> |
| | | </view> |
| | | </view> |
| | | </t-sticky> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import dayjs from 'dayjs'; |
| | | |
| | | Component({ |
| | | options: { |
| | | addGlobalClass: true, |
| | | multipleSlots: true, |
| | | }, |
| | | properties: { |
| | | index: { |
| | | type: Number, |
| | | value: 0, |
| | | }, |
| | | readOnly: { |
| | | type: Boolean, |
| | | value: false, |
| | | }, |
| | | // 设å¤ä½ç½®ä¿¡æ¯ |
| | | location: { |
| | | type: Object, |
| | | value: {}, |
| | | observer(value) { |
| | | this.setData({ ...value }); |
| | | }, |
| | | }, |
| | | }, |
| | | |
| | | data: {}, |
| | | |
| | | methods: { |
| | | onStandardChange(e) { |
| | | if (!e) { |
| | | this.setData({ dlUnstandardReason: '' }); |
| | | } |
| | | }, |
| | | changeEdit() { |
| | | this.setData({ readOnly: false, isUpdate: true }); |
| | | }, |
| | | cancel() { |
| | | this.setData({ readOnly: true }); |
| | | this.triggerEvent('cancel'); |
| | | }, |
| | | confirm() { |
| | | const date = this.data.dlUpdateTime ? dayjs(this.data.dlUpdateTime) : dayjs(); |
| | | const time = date.format('YYYYå¹´MMæDDæ¥'); |
| | | this.setData({ time, readOnly: true }); |
| | | const { readOnly, location, ...rest } = this.data; |
| | | this.triggerEvent('confirm', rest); |
| | | }, |
| | | update() {}, |
| | | }, |
| | | }); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "component": true, |
| | | "usingComponents": {} |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <view wx:if="{{time}}" class="flex-h"> |
| | | <!-- <t-divider content="åæ´æ¶é´: {{time}}" align="left" /> --> |
| | | <view>{{index}}. åæ´æ¶é´: {{time}}</view> |
| | | <view wx:if="{{readOnly}}"> |
| | | <t-button theme="primary" size="extra-small" bind:tap="changeEdit">ä¿®æ¹</t-button> |
| | | </view> |
| | | </view> |
| | | <t-input |
| | | label="å®è£
ä½ç½®" |
| | | placeholder="请è¾å
¥å®è£
ä½ç½®" |
| | | model:value="{{dlLocation}}" |
| | | disabled="{{readOnly}}" |
| | | /> |
| | | <t-input |
| | | label="ç»åº¦" |
| | | placeholder="请è¾å
¥ç»åº¦" |
| | | model:value="{{dlLongitude}}" |
| | | disabled="{{readOnly}}" |
| | | /> |
| | | <t-input |
| | | label="维度" |
| | | placeholder="请è¾å
¥ç»´åº¦" |
| | | model:value="{{dlLatitude}}" |
| | | disabled="{{readOnly}}" |
| | | /> |
| | | <t-cell title="æ¯å¦è§è"> |
| | | <t-switch |
| | | model:value="{{dlStandard}}" |
| | | defaultValue="{{true}}" |
| | | label="{{['æ¯', 'å¦']}}" |
| | | slot="note" |
| | | disabled="{{readOnly}}" |
| | | bind:change="onStandardChange" |
| | | /> |
| | | </t-cell> |
| | | <t-input |
| | | wx:if="{{!dlStandard}}" |
| | | label="ä¸è§è说æ" |
| | | placeholder="请è¾å
¥è¯´æ" |
| | | model:value="{{dlUnstandardReason}}" |
| | | disabled="{{readOnly}}" |
| | | /> |
| | | <view wx:if="{{!readOnly}}" style="display: flex; gap: 4"> |
| | | <t-button theme="light" block size="small" bind:tap="cancel">åæ¶</t-button> |
| | | <t-button wx:if="{{!isUpdate}}" theme="primary" block block size="small" bind:tap="confirm" |
| | | >ä¿å</t-button |
| | | > |
| | | <t-button wx:else theme="primary" block block size="small" bind:tap="update">æ´æ°</t-button> |
| | | </view> |
| | | <!-- <t-divider /> --> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /* pages/inspection/scene/info/components/device-location/index.wxss */ |
| | | .flex-h { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | /* background-color: blanchedalmond; */ |
| | | padding: 0 16px; |
| | | margin-top: 8px; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export const menuData = [ |
| | | { |
| | | label: 'ç«ç¹åç§°', |
| | | placeholder: '请è¾å
¥ç«ç¹åç§°', |
| | | name: 'diName', |
| | | value: '', |
| | | status: 'success', |
| | | tips: 'ç«ç¹åç§°ä¸è½ä¸ºç©º', |
| | | onChange:(v)=>{ |
| | | this.value = v |
| | | } |
| | | }, |
| | | { |
| | | label: 'MNç¼å·', |
| | | placeholder: '请è¾å
¥MNç¼å·', |
| | | name: 'diMnCode', |
| | | value: '', |
| | | status: 'success', |
| | | tips: 'MNç¼å·ä¸è½ä¸ºç©º', |
| | | onChange:(v)=>{ |
| | | this.value = v |
| | | } |
| | | }, |
| | | { |
| | | label: '设å¤ç±»å', |
| | | placeholder: '请è¾å
¥è®¾å¤ç±»å', |
| | | name: 'diType', |
| | | value: '', |
| | | status: 'success', |
| | | tips: '设å¤ç±»åä¸è½ä¸ºç©º', |
| | | onChange:(v)=>{ |
| | | this.value = v |
| | | } |
| | | }, |
| | | ]; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * 设å¤å®è£
ä½ç½®ä¿¡æ¯ç®¡ç |
| | | */ |
| | | export const useDeviceLocation = Behavior({ |
| | | data: { |
| | | showNewLocation: false, |
| | | newLocation: {}, |
| | | deviceLocationList: [], |
| | | }, |
| | | methods: { |
| | | onAddLocation() { |
| | | this.setData({ |
| | | showNewLocation: true, |
| | | newLocation: {}, |
| | | }); |
| | | }, |
| | | |
| | | saveNewLocation(e) { |
| | | const { deviceLocationList } = this.data; |
| | | deviceLocationList.push(e.detail); |
| | | debugger |
| | | this.setData({ |
| | | showNewLocation: false, |
| | | deviceLocationList, |
| | | }); |
| | | }, |
| | | cancelNewLocation() { |
| | | this.setData({ |
| | | showNewLocation: false, |
| | | }); |
| | | }, |
| | | }, |
| | | }); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <block wx:for="{{deviceLocationList}}"> |
| | | <device-location index="{{index + 1}}" read-only="{{true}}" location="{{item}}"></device-location> |
| | | </block> |
| | | <t-button wx:if="{{!showNewLocation}}" theme="light" size="small" bind:tap="onAddLocation" |
| | | >æ°å¢ä½ç½®åæ´ä¿¡æ¯</t-button |
| | | > |
| | | <device-location |
| | | wx:if="{{showNewLocation}}" |
| | | location="{{newLocation}}" |
| | | bind:cancel="cancelNewLocation" |
| | | bind:confirm="saveNewLocation" |
| | | ></device-location> |
| | |
| | | /** |
| | | * 设å¤ä¿¡æ¯ç®¡ç |
| | | */ |
| | | export const useDeviceInfo = Behavior({ |
| | | data: { |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | }, |
| | | }); |
| | |
| | | <t-input label="ç«ç¹åç§°" placeholder="请è¾å
¥ç«ç¹åç§°" model:value="{{diName}}" /> |
| | | <t-input label="MNç¼å·" placeholder="请è¾å
¥MNç¼å·" model:value="{{diMnCode}}" /> |
| | | <t-input label="设å¤ç±»å" placeholder="请è¾å
¥è®¾å¤ç±»å" model:value="{{diType}}" /> |
| | | <t-input label="ä¾åºå" placeholder="请è¾å
¥ä¾åºå" model:value="{{diSupplier}}" /> |
| | | <t-input label="è¿ç»´å" placeholder="请è¾å
¥è¿ç»´å" model:value="{{diMaintainer}}" /> |
| | | <t-cell title="æ¯å¦ä¸çº¿"> |
| | | <t-switch |
| | | model:value="{{diRunningStatus}}" |
| | | defaultValue="{{true}}" |
| | | label="{{['æ¯', 'å¦']}}" |
| | | slot="note" |
| | | /> |
| | | </t-cell> |
| | | <t-cell title="æ¯å¦æé¤"> |
| | | <t-switch |
| | | model:value="{{diRemoved}}" |
| | | defaultValue="{{false}}" |
| | | label="{{['æ¯', 'å¦']}}" |
| | | slot="note" |
| | | /> |
| | | </t-cell> |
| | |
| | | // pages/inspection/scene/info/index.js |
| | | import { useDeviceInfo } from './deviceinfo-proxy.js'; |
| | | import { useDeviceLocation } from './device-location-proxy.js'; |
| | | |
| | | Page({ |
| | | /** |
| | | * 页é¢çåå§æ°æ® |
| | | */ |
| | | behaviors: [useDeviceInfo, useDeviceLocation], |
| | | data: {}, |
| | | |
| | | /** |
| | | * çå½å¨æå½æ°--çå¬é¡µé¢å è½½ |
| | | */ |
| | | onLoad(options) { |
| | | this.getOpenerEventChannel().on('acceptSceneData', data => { |
| | | if (data) { |
| | |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * çå½å¨æå½æ°--çå¬é¡µé¢å次渲æå®æ |
| | | */ |
| | | onReady() {}, |
| | | |
| | | /** |
| | | * çå½å¨æå½æ°--çå¬é¡µé¢æ¾ç¤º |
| | | */ |
| | | onShow() {}, |
| | | |
| | | /** |
| | | * çå½å¨æå½æ°--çå¬é¡µé¢éè |
| | | */ |
| | | onHide() {}, |
| | | |
| | | /** |
| | | * çå½å¨æå½æ°--çå¬é¡µé¢å¸è½½ |
| | | */ |
| | | onUnload() {}, |
| | | |
| | | /** |
| | | * 页é¢ç¸å
³äºä»¶å¤ç彿°--çå¬ç¨æ·ä¸æå¨ä½ |
| | | */ |
| | | onPullDownRefresh() {}, |
| | | |
| | | /** |
| | | * 页é¢ä¸æè§¦åºäºä»¶çå¤ç彿° |
| | | */ |
| | | onReachBottom() {}, |
| | | |
| | | /** |
| | | * ç¨æ·ç¹å»å³ä¸è§å享 |
| | | */ |
| | | onShareAppMessage() {}, |
| | | }); |
| | |
| | | "backgroundTextStyle": "light", |
| | | "navigationBarTextStyle": "white", |
| | | "navigationBarBackgroundColor": "#389AFF", |
| | | "usingComponents": {} |
| | | "usingComponents": { |
| | | "device-location": "./components/device-location/index" |
| | | } |
| | | } |
| | |
| | | <t-tabs |
| | | theme="card" |
| | | defaultValue="{{0}}" |
| | | space-evenly="{{true}}" |
| | | t-class="custom-tabs" |
| | | t-class-content="custom-panel" |
| | | > |
| | | <t-tab-panel label="åºæ¬ä¿¡æ¯" value="{{0}}" class="custom-tab-panel"> |
| | | <view>åºæ¬ä¿¡æ¯</view> |
| | | </t-tab-panel> |
| | | <t-tab-panel label="设å¤ä¿¡æ¯" value="{{1}}" class="custom-tab-panel"> |
| | | <view>设å¤ä¿¡æ¯</view> |
| | | <include src="./deviceinfo.wxml" /> |
| | | </t-tab-panel> |
| | | </t-tabs> |
| | | <view class="page"> |
| | | <view class="page-header"> </view> |
| | | <view class="page-container"> |
| | | <t-tabs |
| | | theme="card" |
| | | defaultValue="{{0}}" |
| | | space-evenly="{{true}}" |
| | | t-class="custom-tabs" |
| | | t-class-content="custom-panel" |
| | | > |
| | | <t-tab-panel label="åºæ¬ä¿¡æ¯" value="{{0}}" class="custom-tab-panel"> |
| | | <view>åºæ¬ä¿¡æ¯</view> |
| | | </t-tab-panel> |
| | | <t-tab-panel label="设å¤ä¿¡æ¯" value="{{1}}" class="custom-tab-panel"> |
| | | <include src="./deviceinfo.wxml" /> |
| | | </t-tab-panel> |
| | | <t-tab-panel label="设å¤ä½ç½®" value="{{3}}" class="custom-tab-panel"> |
| | | <include src="./device-location.wxml" /> |
| | | </t-tab-panel> |
| | | </t-tabs> |
| | | </view> |
| | | <view class="page-footer"></view> |
| | | </view> |
| | |
| | | .page .page-container { |
| | | padding: 0; |
| | | } |
| | | |
| | | .chart-panel { |
| | | width: 100%; |
| | | height: 550rpx; |
| | |
| | | * æ¥æ¾åºæ¯ |
| | | */ |
| | | function searchScene(area, page = 1, perPage = 20) { |
| | | area.scensetypeid = transSceneType(area.scensetypeid); |
| | | return post( |
| | | { |
| | | url: `/scense/find`, |