From f07b70558d5b84f1070470229037629bc1ace006 Mon Sep 17 00:00:00 2001 From: wjt <1797368093@qq.com> Date: 星期六, 22 六月 2024 14:39:30 +0800 Subject: [PATCH] 接口对接 --- policy/reportRecord/reportRecord.vue | 169 +++--- policy/translateRecord/translateRecord.vue | 77 ++ static/policy/rank3.png | 0 static/policy/loginHeader.png | 0 policy/reportRecord/reportRecord.scss | 3 policy/components/tabs.vue | 3 uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js | 17 policy/reportDetails/reportDetails.vue | 128 +++-- common/upload.js | 27 + policy/dataLook/dataLook.scss | 25 policy/policyApply/policyApply.vue | 41 + policy/components/popup.vue | 27 policy/applyRecordDetails/applyRecordDetails.vue | 144 ++++-- policy/applyRecord/applyRecord.vue | 37 + api/policy.js | 40 + pages.json | 2 policy/dataLook/dataLook.vue | 268 ++++++++--- policy/translate/translate.vue | 38 + policy/scodePage/scodePage.vue | 114 +++- static/policy/rank1.png | 0 api/data.js | 19 policy/components/mine.vue | 4 policy/reportPage/reportPage.vue | 106 +-- static/policy/rank2.png | 0 policy/applyRecordDetails/applyRecordDetails.scss | 5 manifest.json | 2 static/policy/loginHeaer1.png | 0 uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js | 3 policy/components/upload.vue | 27 + policy/scodePage/scodePage.scss | 10 30 files changed, 898 insertions(+), 438 deletions(-) diff --git a/api/data.js b/api/data.js index 3438f47..0fdef00 100644 --- a/api/data.js +++ b/api/data.js @@ -4,4 +4,23 @@ export function getDicts(dictType){ return http.get('/system/dict/data/type/' + dictType, {}, { custom: { loading: true }}); +} + +// 鏁版嵁鍒嗘瀽鎺ュ彛 +// 鎵ф硶鏁版嵁姹囨�� /report/team/getTotalInfo +export function getTotalInfo(data){ + return http.get('/report/team/getTotalInfo', {params: data}, { custom: { loading: true }}); +} +// 鎵ф硶娆℃暟閮ㄩ棬鍒嗘瀽 /report/team/getDeptCount +export function getDeptCount(data){ + return http.get('/report/team/getDeptCount', {params: data}, { custom: { loading: true }}); +} +// 浼佷笟琚墽娉曟鏁� /report/team/getCompanyCount +export function getCompanyCount(data) { + return http.get(`/report/team/getCompanyCount`, {params: data}, { custom: { loading: true }}); +} +// 鎵ф硶绫诲瀷 + +export function getEnforceTypeCount(data) { + return http.get(`/report/team/getEnforceTypeCount`, {params: data}, { custom: { loading: true }}); } \ No newline at end of file diff --git a/api/policy.js b/api/policy.js index 7f62732..c1a8d96 100644 --- a/api/policy.js +++ b/api/policy.js @@ -26,9 +26,43 @@ // 鎵ф硶瀹℃壒鍒楄〃 export function checkLogList(data) { + return http.get(`/enforce/order/checkList`, {params: data}, { custom: { loading: true }}); +} +// 鎵ф硶瀹℃壒 +export function checkUpd(data) { + return http.post(`/tool/check/checkOrder`, data, { custom: { loading: true }}); +} + +// 鎵ф硶鍗曡妭鐐� +export function orderNodeList(data) { + return http.get(`/enforce/order/orderNodeList`, {params: data}, { custom: { loading: true }}); +} +// 鎵ф硶瀹℃壒璁板綍 /enforce/check/log/list +export function enforceLogList(data) { return http.get(`/enforce/check/log/list`, {params: data}, { custom: { loading: true }}); } -// 鎵ф硶瀹℃壒 /enforce/check/log/upd -export function checkUpd(data) { - return http.get(`/enforce/check/log/upd`, {params: data}, { custom: { loading: true }}); +// 瀹℃壒浜哄鎵硅褰� /enforce/order/checkedList + +export function checkedList(data) { + return http.get(`/enforce/order/checkedList`, {params: data}, { custom: { loading: true }}); } +// 鎵爜鎺ュ彛 +export function getScanList(data) { + return http.get(`/enforce/order/getScanList`, {params: data}, { custom: { loading: true }}); +} +// 纭鎵ф硶 /enforce/order/doScanOrder/{orderId} +export function doScanOrder(data) { + return http.post(`/enforce/order/doScanOrder/${data}`, {}, { custom: { loading: true }}); +} +// 甯︿笂鎶ユ墽娉曞垪琛� /enforce/order/execute/list +export function executeList(data) { + return http.get(`/enforce/order/execute/list`, {params: data}, { custom: { loading: true }}); +} +// 淇敼鎵ф硶鍗� /enforce/order/upd +export function orderUpd(data) { + return http.post(`/enforce/order/doResultOrder`, data, { custom: { loading: true }}); +} +// 浼佷笟琚墽娉曟鏁� /report/team/getCompanyCount +export function getCompanyCount(data) { + return http.get(`/report/team/getCompanyCount`, data, { custom: { loading: true }}); +} \ No newline at end of file diff --git a/common/upload.js b/common/upload.js new file mode 100644 index 0000000..4d44e33 --- /dev/null +++ b/common/upload.js @@ -0,0 +1,27 @@ +import { config } from './config.js' +export const upload = (file) => { + return new Promise((resolve,refject) => { + uni.uploadFile({ + url: config.baseUrl + '/tool/file/upload', + filePath: file, + name: 'file', + success: val => { + const info = JSON.parse(val.data) + if(info.code == 200) { + resolve(info) + } else { + refject(info.msg) + } + + }, + fail: err => { + // uni.showToast({ + // title: '鏂囦欢涓婁紶澶辫触锛岃绋嶅悗閲嶈瘯', + // icon: 'none' + // }) + // console.log(err) + refject(err) + } + }) + }) +} \ No newline at end of file diff --git a/manifest.json b/manifest.json index 61a4ef1..99b67bf 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name" : "娌堜笜鎯犱紒鎵ф硶", - "appid" : "__UNI__B26A980", + "appid" : "__UNI__0113FBA", "description" : "娌堜笜鎯犱紒鎵ф硶", "versionName" : "1.0.0", "versionCode" : "100", diff --git a/pages.json b/pages.json index 11a6fb0..43fc58a 100644 --- a/pages.json +++ b/pages.json @@ -150,7 +150,7 @@ "path" : "translateRecord/translateRecord", "style" : { - "navigationBarTitleText" : "" + "navigationBarTitleText" : "瀹℃壒璁板綍" } }, { diff --git a/policy/applyRecord/applyRecord.vue b/policy/applyRecord/applyRecord.vue index 41a70c4..39f515a 100644 --- a/policy/applyRecord/applyRecord.vue +++ b/policy/applyRecord/applyRecord.vue @@ -8,27 +8,27 @@ <u-tabs :list="list1" @click="click" :current="current" :scrollable="false" bgColor="white"></u-tabs> </u-sticky> <view class="list"> - <view class="list-item" @click="goReport" v-for="(item,index) in dataList" :key="index"> + <view class="list-item" @click="goReport(item.orderId)" v-for="(item,index) in dataList" :key="index"> <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> - <text class="status">宸茬粨鏉�</text> + <text>{{item.enforceReason}}</text> + <text class="status">{{mapStatus[item.orderStatus]}}</text> </view> <view class="user-info"> - <text>鐜嬫�濋洦</text> + <text>{{item.applyUser}}</text> <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> + <text>{{item.applyDeptName}}</text> </view> <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 + <text>鎵ф硶瀵硅薄锛�</text>{{item.companyName}} </view> <view class="line"></view> <view class="set-flex set-start set-flex-content-between"> <view> <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 + <text>鎵ф硶鏃堕棿锛�</text>{{item.planTime}} </view> <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 + <text>鐢宠鏃堕棿锛�</text>{{item.applyTime}} </view> </view> @@ -69,37 +69,46 @@ pageSize: 10 }, total: 1, - dataList: [] + dataList: [], + mapStatus: { + 1: '寰呭鎵�', + 2: "寰呮墽琛�", + 3: "寰呬笂鎶�", + '-1':"宸叉嫆缁�", + 4: "宸茬粨鏉�" + } } }, - onShow() { + onLoad() { this.orderList() }, onReachBottom() { - if(this.list.length == this.total) { + if(this.dataList.length == this.total) { return } this.queryParams.pageNum++ this.orderList() }, methods: { - goReport() { + goReport(id) { uni.navigateTo({ - url: `/policy/applyRecordDetails/applyRecordDetails` + url: `/policy/applyRecordDetails/applyRecordDetails?id=${id}` }) }, click(e) { + this.dataList = [] this.queryParams.pageNum = 1 this.current = e.index + this.orderList() }, orderList() { orderList({...this.queryParams, orderStatus: this.list1[this.current].value}).then(val => { - // console.log(val.data) this.total = val.data.total this.dataList = [...this.dataList,...val.data.rows] }) }, search(e){ + this.dataList = [] this.queryParams.pageNum =1 this.queryParams.companyName = e this.orderList() diff --git a/policy/applyRecordDetails/applyRecordDetails.scss b/policy/applyRecordDetails/applyRecordDetails.scss index c9475f9..8d98922 100644 --- a/policy/applyRecordDetails/applyRecordDetails.scss +++ b/policy/applyRecordDetails/applyRecordDetails.scss @@ -56,6 +56,7 @@ display: grid; grid-template-columns: 1fr 1fr 1fr; grid-gap: 22rpx; + padding: 0 32rpx; image{ width: 100%; height: 220rpx; @@ -96,6 +97,10 @@ align-items: center; .time{ margin-left: 32rpx; + width: 58%; + } + .submit-per{ + width: 42%; } text{ color: #4A4E60; diff --git a/policy/applyRecordDetails/applyRecordDetails.vue b/policy/applyRecordDetails/applyRecordDetails.vue index 95516ee..45668b8 100644 --- a/policy/applyRecordDetails/applyRecordDetails.vue +++ b/policy/applyRecordDetails/applyRecordDetails.vue @@ -25,23 +25,40 @@ </view> <view class="view-form-item"> <view class="label">鎵ф硶鏃堕棿</view> - <view>{{details.executeTime}}</view> + <view>{{details.planTime}}</view> </view> <view class="view-form-item"> <view class="label">鎵ф硶绫诲瀷</view> - <view>{{details.enforceTypeName}}</view> + <view>{{typeList}}</view> </view> - <view class="view-form-item"> - <view class="label">鎵ф硶浜哄憳</view> - <view>{{details.executeUser}}</view> + + <view v-if="!details.executeUser"> + <view class="view-form-item"> + <view class="label">鎵ф硶浜哄憳</view> + <view>{{details.applyUser}}</view> + </view> + <view class="view-form-item"> + <view class="label">鎵ф硶閮ㄩ棬</view> + <view>{{details.applyDeptName}}</view> + </view> </view> - <view class="view-form-item"> - <view class="label">鎵ф硶閮ㄩ棬</view> - <view>{{details.executeDeptName}}</view> + <view v-else> + <view class="view-form-item"> + <view class="label">鎵ф硶浜哄憳</view> + <view>{{details.executeUser}}</view> + </view> + <view class="view-form-item"> + <view class="label">鎵ф硶閮ㄩ棬</view> + <view>{{details.executeDeptName}}</view> + </view> </view> - <view class="view-form-item"> + <view class="view-form-item" style="margin-top: 20rpx;"> <view class="label">闅忚浜哄憳</view> - <view>闅忚浜哄憳</view> + <view> + <view style="margin-bottom: 20rpx;"v-for="(item,index) in details.peers" :key="index"> + {{item.peerUser}}({{item.peerDeptName}}) + </view> + </view> </view> <view class="view-form-item"> <view class="label">鏄惁閫氱煡浼佷笟</view> @@ -65,40 +82,39 @@ {{ details.regionReason }} </view> </view> - <view class="base-card"> + <view class="base-card" v-if="judgeDetails.length"> <view class="title"> <text>瀹℃壒鎯呭喌</text> </view> <view class="view-form"> - <view class="view-form-item"> - <view class="label">瀹℃壒缁撴灉</view> - <view>24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> - </view> - <view class="view-form-item"> - <view class="label">瀹℃壒浜�</view> - <view>24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> - </view> - <view class="view-form-item"> - <view class="label">瀹℃壒閮ㄩ棬</view> - <view>24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> - </view> - <view class="view-form-item"> - <view class="label">瀹℃壒鏃堕棿</view> - <view>24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> + <view v-for="(item,index) in judgeDetails" :key="index"> + <view class="view-form-item"> + <view class="label">瀹℃壒缁撴灉</view> + <view v-if="item.checkStatus == 1" style="color: #3EB47A;">閫氳繃</view> + <view v-else style="color: red">鎷掔粷</view> + </view> + <view class="view-form-item"> + <view class="label">瀹℃壒浜�</view> + <view>{{item.checkUser}}</view> + </view> + <view class="view-form-item"> + <view class="label">瀹℃壒閮ㄩ棬</view> + <view>{{item.checkDeptName}}</view> + </view> + <view class="view-form-item"> + <view class="label">瀹℃壒鏃堕棿</view> + <view>{{item.checkTime}}</view> + </view> </view> </view> </view> - <view class="base-card"> + <view class="base-card" v-if="details.orderStatus == 3 || details.orderStatus == 4"> <view class="title"> <text>鎵ф硶鍥剧墖</text> </view> <view class="view-image"> - <image src="https://picsum.photos/200/300" mode="widthFix"></image> - <image src="https://picsum.photos/200/300" mode="widthFix"></image> - <image src="https://picsum.photos/200/300" mode="widthFix"></image> - <image src="https://picsum.photos/200/300" mode="widthFix"></image> - <image src="https://picsum.photos/200/300" mode="widthFix"></image> - <!-- {{regionImgs}} --> + <image :src="baseUrl+item" mode="widthFix" v-for="(item,index) in details.regionImgs" :key="index"></image> + </view> </view> <view class="base-card"> @@ -106,20 +122,22 @@ <text>鎵ф硶杩涘害</text> </view> <view class="view-step"> - <view class="step-content"> - <image class="icon" src="/static/policy/icon.png" mode="widthFix"></image> + <view class="step-content" :class="{none: index == nodeList.length - 1}" v-for="(item,index) in nodeList" :key="index"> + <image class="icon" src="/static/policy/icon.png" mode="widthFix" v-if="!item.nodeReason"></image> + <image src="/static/policy/refject.png" mode="widthFix" class="icon" v-else></image> <view class="top-title"> - 鎻愪氦鐢宠 + {{item.nodeName}} </view> <view class="down-tips"> - <view>鎻愪氦浜猴細<text>鏋楀皬闆�</text></view> - <view class="time">2024-06-07 12:14</view> + <view class="u-line-1 submit-per">鎻愪氦浜猴細<text>{{item.nodeUser}}</text></view> + <view class="time">{{item.nodeTime}}</view> </view> + </view> - <view class="step-content"> + <!-- <view class="step-content"> <image class="icon" src="/static/policy/icon.png" mode="widthFix"></image> <view class="top-title"> - 鎻愪氦鐢宠 + 瀹℃壒閫氳繃 </view> <view class="down-tips"> <view>鎻愪氦浜猴細<text>鏋楀皬闆�</text></view> @@ -127,7 +145,7 @@ </view> </view> <view class="step-content none"> - <!-- <image class="icon" src="/static/policy/icon.png" mode="widthFix"></image> --> + <image class="icon" src="/static/policy/icon.png" mode="widthFix"></image> <image src="/static/policy/refject.png" mode="widthFix" class="icon"></image> <view class="top-title"> 鎻愪氦鐢宠 @@ -136,7 +154,7 @@ <view>鎻愪氦浜猴細<text>鏋楀皬闆�</text></view> <view class="time">2024-06-07 12:14</view> </view> - </view> + </view> --> </view> </view> </view> @@ -145,30 +163,64 @@ <script> import { - orderDetails + orderDetails, + orderNodeList, + enforceLogList } from '@/api/policy.js' + import { getDicts } from '@/api/data.js' + import { config } from '@/common/config' export default { data() { return { details: {}, + nodeList: [], mapStatus: { 1: '寰呭鎵�', 2: "寰呮墽琛�", 3: "寰呬笂鎶�", '-1':"宸叉嫆缁�", 4: "宸茬粨鏉�" - } + }, + typeList: '', + judgeDetails: [], + baseUrl: config.baseUrl } }, onLoad(options) { - this.orderDetails(options.id) + this.getDetails(options.id) + this.orderNodeList(options.id) + this.enforceLogList(options.id) + }, methods: { getDetails(orderId) { orderDetails({ orderId }).then(val => { - this.details = val.data + this.details = val.data.data + if(this.details.regionImgs){ + this.details.regionImgs = this.details.regionImgs.split(",") + } + this.getDicts() + }) + }, + // 鑺傜偣 + orderNodeList(orderId) { + orderNodeList({orderId}).then(val => { + this.nodeList = val.data.data + }) + }, + // 鐢宠璁板綍 + enforceLogList(orderId) { + enforceLogList({orderId}).then(val => { + // console.log(val.data.rows) + this.judgeDetails = val.data.rows + }) + }, + getDicts() { + getDicts('enforce_type').then(val => { + const value = val.data.data.find(item => item.dictCode == this.details.enforceType) + this.typeList = value.dictLabel }) } } diff --git a/policy/components/mine.vue b/policy/components/mine.vue index 1fab1b4..587effb 100644 --- a/policy/components/mine.vue +++ b/policy/components/mine.vue @@ -11,7 +11,7 @@ <view class="dept-per">鎵ф硶浜哄憳</view> </view> <view class="dept-name"> - {{userInfo.data.dept.parentName}} + {{userInfo.data.dept.deptName}} </view> </view> </view> @@ -19,7 +19,7 @@ <view class="main-box"> <view class="show-phone-number"> <text class="label">鑱旂郴鐢佃瘽</text> - <text v-if="userInfo.phonenumber">{{userInfo.data.phonenumber.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2")}}</text> + <text v-if="userInfo.data.phonenumber">{{userInfo.data.phonenumber.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2")}}</text> <text v-else>鏆傛棤鎵嬫満鍙�</text> </view> <view class="show-phone-number" @click="goChangePhone"> diff --git a/policy/components/popup.vue b/policy/components/popup.vue index 8c34dc4..f4114b8 100644 --- a/policy/components/popup.vue +++ b/policy/components/popup.vue @@ -7,32 +7,36 @@ <view class="border"></view> <view class="padding"> <view> - <u-radio-group placement="row"> - <u-radio active-color="#3EB47A" label="閫氳繃" name="3"></u-radio> - <u-radio active-color="#3EB47A" label="鎷掔粷" name="3"></u-radio> + <u-radio-group placement="row" v-model="form.checkStatus"> + <u-radio active-color="#3EB47A" label="閫氳繃" name="1"></u-radio> + <u-radio active-color="#3EB47A" label="鎷掔粷" name="-1"></u-radio> </u-radio-group> </view> <view class="margin-top"> - <u-textarea placeholder="璇疯緭鍏ユ嫆缁濈悊鐢�..."></u-textarea> + <u-textarea placeholder="璇疯緭鍏ユ嫆缁濈悊鐢�..." v-model="form.checkReason"></u-textarea> </view> </view> <view class="down"> <view class="cancel button" @click="close">鍙栨秷</view> - <view class="enter" @entery="entery">纭</view> + <view class="enter" @click="entery">纭</view> </view> </view> </u-popup> </template> <script> + export default { data() { return { - show: false + show: false, + id: '', + form: {} } }, methods: { - open() { + open(id) { + this.form = {} this.show = true }, close(){ @@ -40,7 +44,14 @@ this.$emit('cancel') }, entery(){ - this.$emit('entery') + if(this.form.checkStatus == -1 && !this.form.checkReason) { + uni.showToast({ + title: '璇疯緭鍏ユ嫆缁濈悊鐢�', + icon: 'none' + }) + return + } + this.$emit('entery', this.form) } } } diff --git a/policy/components/tabs.vue b/policy/components/tabs.vue index 84ebf76..db70f0b 100644 --- a/policy/components/tabs.vue +++ b/policy/components/tabs.vue @@ -29,6 +29,9 @@ success: val => { if(val.errMsg === 'scanCode:ok'){ console.log(val.result) + uni.navigateTo({ + url: `/policy/scodePage/scodePage?code=${val.result}` + }) } } }) diff --git a/policy/components/upload.vue b/policy/components/upload.vue index 8538aa7..d421f03 100644 --- a/policy/components/upload.vue +++ b/policy/components/upload.vue @@ -2,7 +2,7 @@ <view> <view class="grid-box"> <view class="image-box" v-for="(item,index) in imageList" :key="index"> - <image :src="item" mode="aspectFit"></image> + <image :src="baseUrl+item" mode="aspectFit"></image> <image src="/static/policy/close.png" mode="widthFix" @click="delImage(index)" class="close"></image> </view> <view class="cam-box" @click="upload" v-if="imageList.length < max"> @@ -13,6 +13,8 @@ </template> <script> + import { upload } from '@/common/upload.js' + import { config } from '@/common/config.js' export default { props: { max: { @@ -21,12 +23,13 @@ }, maxSize: { type: Number, - default: 2 * 1024 * 1024 + default: 10 * 1024 * 1024 } }, data() { return { - imageList: [] + imageList: [], + baseUrl: config.baseUrl } }, methods: { @@ -42,10 +45,26 @@ }) return } - this.imageList.push(val.tempFilePaths[0]) + // console.log(val.tempFilePaths) + // this.imageList.push(...val.tempFilePaths) + val.tempFilePaths.forEach(async item => { + await this.uploadImage(item) + }) } }) }, + async uploadImage(file) { + try{ + const code = await upload(file) + this.imageList.push(code.fileName) + } catch(err) { + uni.showToast({ + title: '鏂囦欢涓婁紶澶辫触锛岃绋嶅悗閲嶈瘯', + icon: 'none' + }) + console.log(err) + } + }, delImage(index) { this.imageList.splice(index,1) } diff --git a/policy/dataLook/dataLook.scss b/policy/dataLook/dataLook.scss index 0444d58..dbf5ca5 100644 --- a/policy/dataLook/dataLook.scss +++ b/policy/dataLook/dataLook.scss @@ -3,10 +3,14 @@ height: 380rpx; flex-shrink: 0; background: linear-gradient(180deg, #1171E0 42.5%, #F4F4F4 100%); + position: fixed; + top: 50px; + z-index: -1; } .page-main{ - position: relative; - top: -380rpx; + // position: relative; + // top: -380rpx; + padding-bottom: 140rpx; .box{ margin: 32rpx 32rpx 20rpx; background-color: white; @@ -61,12 +65,24 @@ } .value{ font-weight: 500; + font-size: 32rpx; } .width-set{ width: 80%; display: flex; justify-content: flex-start;align-items: center; - + image{ + width: 48rpx; + height: 48rpx; + margin-right: 36rpx; + } + .set-index{ + width: 48rpx; + height: 48rpx; + line-height: 48rpx; + text-align: center; + display: inline-block; + } } } @@ -82,4 +98,7 @@ margin: 0 5rpx; } } + .origin{ + color: #FE7B32; + } } \ No newline at end of file diff --git a/policy/dataLook/dataLook.vue b/policy/dataLook/dataLook.vue index 4023b29..d5d6813 100644 --- a/policy/dataLook/dataLook.vue +++ b/policy/dataLook/dataLook.vue @@ -14,58 +14,63 @@ <view class="grid-box"> <view class="grid-item"> <view class="label">浼佷笟鎬绘暟</view> - <view>5,400</view> + <view>{{infoData.companyNum || 0}}</view> </view> <view class="grid-item"> <view class="label">鎵ф硶鍗曚綅</view> - <view>5,400</view> + <view>{{infoData.enforceCompanyNum || 0}}</view> </view> <view class="grid-item"> <view class="label">鎵ф硶浜哄憳</view> - <view>5,400</view> + <view>{{infoData.enforceUserNum || 0}}</view> </view> <view class="grid-item"> <view class="label">鎵ф硶鐢宠</view> - <view>5,400</view> + <view>{{infoData.enforceOrderNum || 0}}</view> </view> <view class="grid-item"> <view class="label">宸插鎵�</view> - <view>5,400</view> + <view>{{infoData.enforceOrderCheckedNum || 0}}</view> </view> <view class="grid-item"> <view class="label">宸茬粨鏉�</view> - <view>5,400</view> + <view>{{infoData.enforceOrderCompleteNum || 0}}</view> </view> </view> </view> <view class="box"> <view class="title set-flex-content-between set-flex"> <text>鎵ф硶鍗曚綅鎵ф硶娆℃暟</text> - <u-icon name="calendar" size="24"></u-icon> + <u-icon name="calendar" size="24" @click="openDate(1)"></u-icon> </view> <view class="number"> - <view class="date">2024-04-05 <text class="margin-text">鑷�</text> 2024-06-14</view> + <view class="date">{{pageQuerm.beginTimeStr1}} <text class="margin-text">鑷�</text> {{pageQuerm.endTimeStr1}}</view> <view class="progress-box"> - <qiun-data-charts key="11" type="bar" :opts="opts" :chartData="chartData" /> + <qiun-data-charts key="11" type="bar" + :opts="opts" :chartData="chartData" /> </view> </view> </view> <view class="box"> <view class="title set-flex-content-between set-flex"> <text>浼佷笟琚墽娉曟鏁版帓琛�</text> - <u-icon name="calendar" size="24"></u-icon> + <u-icon name="calendar" size="24" @click="openDate(2)"></u-icon> </view> <view class="number"> - <view class="date" style="margin-bottom: 36rpx;">2024-04-05 <text class="margin-text">鑷�</text> 2024-06-14</view> + <view class="date" style="margin-bottom: 36rpx;">{{pageQuerm.beginTimeStr2}} <text class="margin-text">鑷�</text> + {{pageQuerm.endTimeStr2}}</view> <view class="list-box"> <view class="list-item" v-for="(item,index) in listData" :key="index"> <view class="width-set"> - <text style="margin-right: 10rpx;">{{index+1}}</text> - <text class="company u-line-1">鍖椾含涓滄柟鐩堣仈绉戞妧鏈夐檺鍏徃</text> + <image src="/static/policy/rank1.png" mode="widthFix" v-if="index == 0"></image> + <image src="/static/policy/rank2.png" mode="widthFix" v-if="index == 1"></image> + <image src="/static/policy/rank3.png" mode="widthFix" v-if="index == 2"></image> + <text class="set-index" style="margin-right: 36rpx;color: #7E8596;" v-if="index > 2">{{index+1}}</text> + <text class="company u-line-1" style="color: #202D44;">{{item.k}}</text> </view> - <text class="value">54</text> + <text class="value" :class="{origin: index <= 2}">{{item.v}}</text> </view> - <view class="look-more"> + <view class="look-more" @click="lookMore" v-if="showMore"> <text>鏌ョ湅鏇村</text> <u-icon name="arrow-right" color="#7E8596"></u-icon> </view> @@ -75,46 +80,54 @@ <view class="box"> <view class="title set-flex-content-between set-flex"> <text>鎵ф硶绫诲瀷鍗犳瘮</text> - <u-icon name="calendar" size="24"></u-icon> + <u-icon name="calendar" size="24" @click="openDate(3)"></u-icon> </view> <view class="number"> - <view class="date">2024-04-05 <text class="margin-text">鑷�</text> 2024-06-14</view> + <view class="date" style="margin-bottom: 20rpx;">{{pageQuerm.beginTimeStr3}} <text class="margin-text">鑷�</text> {{pageQuerm.endTimeStr3}}</view> <view class="progress-box"> - <qiun-data-charts - type="rose" - key="22" - :opts="opts1" - :chartData="chartData1" - /> </view> + <qiun-data-charts type="rose" tooltipFormat="tooltipDemo1" + + key="22" :opts="opts1" :chartData="chartData1" /> + </view> </view> </view> </view> + <u-datetime-picker + :show="show" + :maxDate="new Date().getTime()" + v-model="currentValue" + mode="year-month" + @confirm="confirmDate" + ></u-datetime-picker> </view> </template> <script> + import { + getTotalInfo, + getDeptCount, + getCompanyCount, + getEnforceTypeCount + } from '@/api/data.js' export default { data() { return { + typeItem: '', + currentValue: '', + show: false, + infoData: [], listData: [ - { - name: '鍖椾含涓滄柟鐩堣仈绉戞妧鏈夐檺鍏徃', - value: 54 - }, - { - name: '鍖椾含涓滄柟鐩堣仈绉戞妧鏈夐檺鍏徃', - value: 54 - }, - { - name: '鍖椾含涓滄柟鐩堣仈绉戞妧鏈夐檺鍏徃', - value: 54 - }, - { - name: '鍖椾含涓滄柟鐩堣仈绉戞妧鏈夐檺鍏徃', - value: 54 - } ], chartData: {}, + pageQuerm: { + pageNum: 1, + pageSize: 10, + total: 1, + beginTimeStr: '', + endTimeStr: '', + }, + originData: [], + showMore: true, //鎮ㄥ彲浠ラ�氳繃淇敼 config-ucharts.js 鏂囦欢涓笅鏍囦负 ['bar'] 鐨勮妭鐐规潵閰嶇疆鍏ㄥ眬榛樿鍙傛暟锛屽閮芥槸榛樿鍙傛暟锛屾澶勫彲浠ヤ笉浼� opts 銆傚疄闄呭簲鐢ㄨ繃绋嬩腑 opts 鍙渶浼犲叆涓庡叏灞�榛樿鍙傛暟涓笉涓�鑷寸殑銆愭煇涓�涓睘鎬с�戝嵆鍙疄鐜板悓绫诲瀷鐨勫浘琛ㄦ樉绀轰笉鍚岀殑鏍峰紡锛岃揪鍒伴〉闈㈢畝娲佺殑闇�姹傘�� opts: { color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", @@ -149,65 +162,154 @@ } }, chartData1: {}, + tooltipCustom: {}, opts1: { - color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"], - padding: [5,5,5,5], - enableScroll: false, - legend: { - show: true, - position: "left", - lineHeight: 25 - }, - extra: { - rose: { - type: "area", - minRadius: 50, - activeOpacity: 0.5, - activeRadius: 10, - offsetAngle: 0, - labelWidth: 15, - border: false, - borderWidth: 2, - borderColor: "#FFFFFF" - } - } - } + color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", + "#ea7ccc" + ], + tooltipFormat: function (item) { + return "456" + }, + padding: [5, 5, 5, 5], + enableScroll: false, + legend: { + show: false, + }, + extra: { + rose: { + type: "area", + minRadius: 50, + activeOpacity: 0.5, + activeRadius: 10, + offsetAngle: 0, + labelWidth: 15, + border: false, + borderWidth: 2, + borderColor: "#FFFFFF" + }, + tooltip: { + // bgColor: "#fff", + // showArrow: false, + // fontColor: "#202D44", + // bgOpacity: 1, + } + } + } } }, onReady() { + // console.log(new Date().getMonth() + 1, new Date().getDate()) + let date = new Date() + date.setMonth(date.getMonth() - 1); // 鍑忓幓1涓湀 + date.setDate(1); // 璁剧疆鏃ヤ负鏈堜唤鐨勭涓�澶� + this.pageQuerm.beginTime = this.$u.timeFormat(date, "yyyy-mm-dd") + " " + "00:00:00" + this.pageQuerm.endTime = this.$u.timeFormat(new Date(), "yyyy-mm-dd") + " " +"23:59:59" + this.pageQuerm.beginTimeStr1 = this.pageQuerm.beginTimeStr2 = this.pageQuerm.beginTimeStr3 = this.$u.timeFormat(date, "yyyy-mm-dd") + this.pageQuerm.endTimeStr1 = this.pageQuerm.endTimeStr2 = this.pageQuerm.endTimeStr3 = this.$u.timeFormat(new Date(), "yyyy-mm-dd") + this.getTotalInfo() + this.getCompanyCount() this.getServerData(); this.getServerData1() }, methods: { + confirmDate(e) { + if(new Date().getMonth() == new Date(e.value).getMonth()){ + this.pageQuerm[`beginTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + this.pageQuerm[`endTimeStr${this.typeItem}`] = this.$u.timeFormat(e.value, 'yyyy-mm-dd') + this.pageQuerm.beginTime = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + " " + "00:00:00" + this.pageQuerm.endTime = this.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss') + } else { + this.pageQuerm[`beginTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + this.pageQuerm.beginTime = this.$u.timeFormat(new Date(e.value).setDate(1), 'yyyy-mm-dd') + " " + "00:00:00" + const date = new Date(e.value); + const year = date.getFullYear(); + const month = date.getMonth() + 1; // 鏈堜唤浠�0寮�濮嬭绠楋紝闇�瑕佸姞1 + const lastDay = new Date(year, month, 0) + + this.pageQuerm.endTime = this.$u.timeFormat(new Date(lastDay), 'yyyy-mm-dd') + " " + "23:59:59" + this.pageQuerm[`endTimeStr${this.typeItem}`] = this.$u.timeFormat(new Date(lastDay), 'yyyy-mm-dd') + } + + if(this.typeItem == 1) { + this.getServerData() + } + if(this.typeItem == 2) { + this.getCompanyCount() + } + if(this.typeItem == 3) { + this.getServerData1() + } + this.show = false + }, + openDate(item) { + this.typeItem = item + this.currentValue = new Date().getTime() + this.show = true + }, + lookMore() { + this.pageQuerm.pageNum++ + const value = this.pageQuerm.pageNum * this.pageQuerm.pageSize + const data = this.originData.slice((this.pageQuerm.pageNum - 1) * this.pageQuerm.pageSize, value) + this.listData.push(...data) + if(value >= this.pageQuerm.total) { + this.showMore = false + } + }, + // 鑾峰彇鎵ф硶淇℃伅 + getTotalInfo() { + getTotalInfo(this.pageQuerm).then(val => { + // console.log(val) + this.infoData = val.data.data + }) + }, + // 鎵ф硶娆℃暟閮ㄩ棬 getServerData() { - //妯℃嫙浠庢湇鍔″櫒鑾峰彇鏁版嵁鏃剁殑寤舵椂 - setTimeout(() => { - //妯℃嫙鏈嶅姟鍣ㄨ繑鍥炴暟鎹紝濡傛灉鏁版嵁鏍煎紡鍜屾爣鍑嗘牸寮忎笉鍚岋紝闇�鑷鎸変笅闈㈢殑鏍煎紡鎷兼帴 + getDeptCount(this.pageQuerm).then(val => { + const value = val.data.data + const label = value.map(item => item.k) + const data = value.map(item => item.v) let res = { - categories: ["宸ュ晢绠$悊灞�", "鍩庡競绠$悊灞�", "鍩庡競绠$悊灞�", "鍩庡競绠$悊灞�", "鍩庡競绠$悊灞�", "鍩庡競绠$悊灞�"], + categories: label, series: [{ - name: "鐩爣鍊�", - data: [35, 36, 31, 33, 13, 34] - } - ] + name: "鎵ф硶娆℃暟", + data: data, + + }] }; this.chartData = JSON.parse(JSON.stringify(res)); - }, 500); + }) + }, + // 浼佷笟琚墽娉曟鏁版帓琛� + getCompanyCount() { + getCompanyCount(this.pageQuerm).then(val => { + this.listData = val.data.data.slice(0, this.pageQuerm.pageSize) + this.originData = val.data.data + this.pageQuerm.total = val.data.data.length + if(this.pageQuerm.total <= this.pageQuerm.pageSize) { + this.showMore = false + } + }) + }, + getServerData1() { - //妯℃嫙浠庢湇鍔″櫒鑾峰彇鏁版嵁鏃剁殑寤舵椂 - setTimeout(() => { - //妯℃嫙鏈嶅姟鍣ㄨ繑鍥炴暟鎹紝濡傛灉鏁版嵁鏍煎紡鍜屾爣鍑嗘牸寮忎笉鍚岋紝闇�鑷鎸変笅闈㈢殑鏍煎紡鎷兼帴 - let res = { - series: [ - { - data: [{"name":"涓�鐝�","value":50},{"name":"浜岀彮","value":30},{"name":"涓夌彮","value":20},{"name":"鍥涚彮","value":18},{"name":"浜旂彮","value":8}] - } - ] - }; - this.chartData1 = JSON.parse(JSON.stringify(res)); - }, 500); - }, + getEnforceTypeCount(this.pageQuerm).then(val => { + const data = val.data.data.map(item => { + return { + name: item.k, + value: item.v, + "labelText": item.k + } + }) + let res = { + series: [{ + data: data, + }] + }; + this.chartData1 = JSON.parse(JSON.stringify(res)); + + }) + }, } } </script> diff --git a/policy/policyApply/policyApply.vue b/policy/policyApply/policyApply.vue index 49ff902..2144073 100644 --- a/policy/policyApply/policyApply.vue +++ b/policy/policyApply/policyApply.vue @@ -41,7 +41,7 @@ 鎵ф硶鍐呭 </view> <view class="back"> - <u--textarea :height="120" v-model="form.regionReason" placeholder="璇疯緭鍏�" count maxlength="500"></u--textarea> + <u--textarea :height="120" v-model="form.enforceContent" placeholder="璇疯緭鍏�" count maxlength="500"></u--textarea> </view> </view> </view> @@ -166,9 +166,10 @@ applyDeptName: '', enforceType: 1, isNoticeCompany: 0, - regionReason: '', + regionReason: 0, planTimeStr: '', - peers: [] + peers: [], + orderStatus: 1 }, show: false, columns: [], @@ -227,7 +228,39 @@ } return options; }, + authFile() { + if(!this.form.enforceReason){ + return '璇峰~鍐欎富棰�' + } + if(!this.form.companyName){ + return '璇峰~鍐欑‘璁ゆ墽娉曞璞�' + } + if(!this.form.companyId) { + return '璇风偣鍑绘悳绱㈢‘璁ゆ墽娉曞璞�' + } + if(!this.form.planTimeStr) { + return '璇峰~鍐欐墽娉曟椂闂�' + } + if(!this.form.enforceTypeName){ + return '璇烽�夋嫨鎵ф硶绫诲瀷' + } + if(!this.form.regionReason) { + return '璇峰~鍐欐墽娉曞唴瀹�' + } + if(!this.form.peers.length){ + return '璇锋坊鍔犲悓琛屼汉' + } + return '' + }, submitApply(){ + const res = this.authFile() + if(res){ + uni.showToast({ + title: res, + icon: 'none' + }) + return + } orderAdd(this.form).then(val => { if(val.data.code == 200) { uni.showToast({ @@ -303,7 +336,7 @@ peerDeptName: item.dept.deptName, peerId: item.userId, peerPhone: item.phonenumber, - peerType: 3, + peerType: 2, peerUser: item.nickName }) } diff --git a/policy/reportDetails/reportDetails.vue b/policy/reportDetails/reportDetails.vue index cb8dd39..2115ae8 100644 --- a/policy/reportDetails/reportDetails.vue +++ b/policy/reportDetails/reportDetails.vue @@ -4,35 +4,44 @@ <view class="form"> <view class="form-item"> <view class="label">鎵ф硶涓婚</view> - <view class="input">24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> + <view class="input">{{details.enforceReason}}</view> </view> <view class="form-item"> <view class="label">鎵ф硶瀵硅薄</view> - <view class="input">24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> + <view class="input">{{details.companyName}}</view> </view> <view class="form-item"> <view class="label">鎵ф硶鏃堕棿</view> - <view class="input">24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> + <view class="input">{{details.planTime}}</view> </view> <view class="form-item"> <view class="label">鎵ф硶绫诲瀷</view> - <view class="input">24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> + <view class="input">{{enforceType}}</view> </view> <view class="form-item"> <view class="label">鎵ф硶浜哄憳</view> - <view class="input">24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> + <view class="input">{{details.executeUser}}</view> </view> <view class="form-item"> <view class="label">鎵ф硶閮ㄩ棬</view> - <view class="input">24骞�5鏈堜唤娑堥槻绐佸嚮妫�鏌�</view> + <view class="input">{{details.executeDeptName}}</view> </view> </view> </view> <view class="box"> <view class="form-input"> + <view class="form-input-item" style="margin-bottom: 40rpx;"> + <view class="form-label require" style="margin-bottom: 40rpx;">鎵ф硶缁撴灉</view> + <view> + <u-radio-group v-model="form.regionStatus"> + <u-radio shape="circle" label="姝e父" name="0"></u-radio> + <u-radio shape="circle" label="寰呮暣鏀�" name="1"></u-radio> + </u-radio-group> + </view> + </view> <view class="form-input-item"> - <view class="form-label require">鎵ф硶缁撴灉</view> - <u-textarea placeholder="璇疯緭鍏�..." count v-model="form.reasoon" maxlength="500"></u-textarea> + <view class="form-label require">鎵ф硶缁撴灉璇存槑</view> + <u-textarea placeholder="璇疯緭鍏�..." count v-model="form.regionReason" maxlength="500"></u-textarea> </view> <view class="form-input-item"> @@ -41,13 +50,13 @@ <view class="show-hint">鍙笂浼�9寮犲浘锛屽崟寮犱笉寰楄秴杩�10m</view> </view> <view> - <uploadImage></uploadImage> + <uploadImage ref="uploadImage"></uploadImage> </view> </view> </view> </view> <view class="down"> - <view class="button"> + <view class="button" @click="startReport"> 涓婃姤缁撴灉 </view> </view> @@ -56,6 +65,8 @@ <script> import uploadImage from '@/policy/components/upload.vue' + import { orderDetails,orderUpd } from '@/api/policy.js' + import { getDicts } from '@/api/data.js' export default { components: { uploadImage @@ -63,57 +74,65 @@ data() { return { form: { - reasoon: '' + regionReason: '', + regionStatus: '0' }, - fileList1: [] + fileList1: [], + details: {}, + enforceType: "" } }, + onLoad(options) { + this.orderDetails(options.id) + }, methods: { - // 鍒犻櫎鍥剧墖 - deletePic(event) { - this[`fileList${event.name}`].splice(event.index, 1) + // 鑾峰彇鎵ф硶绫诲瀷鏋氫妇 + getDicts() { + getDicts('enforce_type').then(val => { + if(val.data.data) { + this.enforceType = val.data.data.find(item => item.dictCode == this.details.enforceType).dictLabel + } + }) }, - // 鏂板鍥剧墖 - async afterRead(event) { - // 褰撹缃� multiple 涓� true 鏃�, file 涓烘暟缁勬牸寮忥紝鍚﹀垯涓哄璞℃牸寮� - let lists = [].concat(event.file) - let fileListLen = this[`fileList${event.name}`].length - lists.map((item) => { - this[`fileList${event.name}`].push({ - ...item, - status: 'uploading', - message: '涓婁紶涓�' + // 鑾峰彇鎵ф硶鍗曡鎯� + orderDetails(id) { + orderDetails({orderId: id}).then(val => { + this.details = val.data.data + this.getDicts() + }) + }, + // 涓婃姤鎵ц缁撴灉 + startReport() { + if(!this.form.regionReason){ + uni.showToast({ + title: '璇峰~鍐欐墽娉曠粨鏋�', + icon: 'none' }) - }) - for (let i = 0; i < lists.length; i++) { - const result = await this.uploadFilePromise(lists[i].url) - let item = this[`fileList${event.name}`][fileListLen] - this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, { - status: 'success', - message: '', - url: result - })) - fileListLen++ + return } - }, - uploadFilePromise(url) { - return new Promise((resolve, reject) => { - let a = uni.uploadFile({ - url: 'http://192.168.2.21:7001/upload', // 浠呬负绀轰緥锛岄潪鐪熷疄鐨勬帴鍙e湴鍧� - filePath: url, - name: 'file', - formData: { - user: 'test' - }, - success: (res) => { - setTimeout(() => { - resolve(res.data.data) - }, 1000) - } - }); + const image = this.$refs.uploadImage.imageList + if(!image.length){ + uni.showToast({ + title: '璇蜂笂浼犳墽娉曞浘鐗�', + icon: 'none' + }) + return + } + this.details.regionReason = this.form.regionReason + this.form.regionImgs = image.join() + this.form.orderId = this.details.orderId + orderUpd(this.form).then(val =>{ + if(val.data.code == 200) { + uni.showToast({ + title: '涓婃姤鎴愬姛', + icon: 'none' + }) + setTimeout(() => { + uni.navigateBack() + }, 500) + } }) - }, - + } } } </script> @@ -124,4 +143,7 @@ </style> <style lang="scss" scoped> @import "./reportDetails.scss"; + /deep/ .u-radio{ + margin-right: 80rpx; + } </style> \ No newline at end of file diff --git a/policy/reportPage/reportPage.vue b/policy/reportPage/reportPage.vue index 9e1e614..40f92aa 100644 --- a/policy/reportPage/reportPage.vue +++ b/policy/reportPage/reportPage.vue @@ -1,90 +1,36 @@ <template> <view class="page-box"> <view class="list"> - <view class="list-item" @click="goReport"> + <view class="list-item" v-for="(item,index) in list" :key="index"> <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> + <text>{{item.enforceReason}}</text> <text class="status">寰呬笂鎶�</text> </view> <view class="user-info"> - <text>鐜嬫�濋洦</text> + <text>{{item.executeUser}}</text> <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> + <text>{{item.executeDeptName}}</text> </view> <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 + <text>鎵ф硶瀵硅薄锛�</text>{{item.companyName}} </view> <view class="line"></view> <view class="set-flex set-start set-flex-content-between"> <view> <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 + <text>鎵ф硶鏃堕棿锛�</text>{{item.planTime}} </view> <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 + <text>鐢宠鏃堕棿锛�</text>{{item.applyTime}} </view> </view> - <view class="button"> + <view class="button" @click="goReport(item.orderId)" > 涓婃姤 </view> </view> </view> - <view class="list-item"> - <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> - <text class="status">寰呬笂鎶�</text> - </view> - <view class="user-info"> - <text>鐜嬫�濋洦</text> - <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> - </view> - <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 - </view> - <view class="line"></view> - <view class="set-flex set-start set-flex-content-between"> - <view> - <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 - </view> - <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 - </view> - </view> - <view class="button"> - 涓婃姤 - </view> - </view> - </view> - <view class="list-item"> - <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> - <text class="status">寰呬笂鎶�</text> - </view> - <view class="user-info"> - <text>鐜嬫�濋洦</text> - <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> - </view> - <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 - </view> - <view class="line"></view> - <view class="set-flex set-start set-flex-content-between"> - <view> - <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 - </view> - <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 - </view> - </view> - <view class="button"> - 涓婃姤 - </view> - </view> - </view> + <u-empty v-if="!list.length" mode="data"></u-empty> + </view> <view class="down"> <view class="button" @click="goRecord"> @@ -95,22 +41,48 @@ </template> <script> + import { executeList } from '@/api/policy.js' export default { data() { return { - + list: [], + total: 1, + queryParams: { + pageNum: 1, + pageSize: 10, + orderStatus: 3 + } } }, + onShow() { + this.queryParams.pageNum = 1 + this.list = [] + this.executeList() + }, + onReachBottom() { + if(this.list.length == this.list.length) { + return + } + this.queryParams.pageNum++ + this.executeList() + }, methods: { - goReport() { + goReport(id) { uni.navigateTo({ - url: `/policy/reportDetails/reportDetails` + url: `/policy/reportDetails/reportDetails?id=${id}` }) }, goRecord() { uni.navigateTo({ url: `/policy/reportRecord/reportRecord` }) + }, + // 鑾峰彇寰呮墽娉曞垪琛� + executeList() { + executeList(this.queryParams).then(val => { + this.list = [...this.list, ...val.data.rows] + this.total = val.data.total + }) } } } diff --git a/policy/reportRecord/reportRecord.scss b/policy/reportRecord/reportRecord.scss index e3fbbf3..60d7083 100644 --- a/policy/reportRecord/reportRecord.scss +++ b/policy/reportRecord/reportRecord.scss @@ -1,4 +1,7 @@ .page-box{ + .padding{ + padding: 20rpx 32rpx; + } .list{ margin: 20rpx 32rpx; .list-item{ diff --git a/policy/reportRecord/reportRecord.vue b/policy/reportRecord/reportRecord.vue index b0da701..3b9eb91 100644 --- a/policy/reportRecord/reportRecord.vue +++ b/policy/reportRecord/reportRecord.vue @@ -1,119 +1,108 @@ <template> <view class="page-box"> <u-sticky bgColor="white"> - <u-tabs :list="list1" @click="click" :scrollable="false" bgColor="white"></u-tabs> + <view class="padding"> + <u-search placeholder="璇疯緭鍏ョ敵璇疯褰曞叧閿瘝" v-model="queryParams.enforceReason" @clear="clean" shape="square" @confirm="search" :showAction="false"></u-search> + </view> </u-sticky> <view class="list"> - <view class="list-item" @click="goReport"> - <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> - <text class="status">宸茬粨鏉�</text> - </view> - <view class="user-info"> - <text>鐜嬫�濋洦</text> - <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> - </view> - <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 - </view> - <view class="line"></view> - <view class="set-flex set-start set-flex-content-between"> - <view> - <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 - </view> - <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 - </view> - </view> - - </view> - </view> - <view class="list-item"> - <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> - <text class="status">宸茬粨鏉�</text> - </view> - <view class="user-info"> - <text>鐜嬫�濋洦</text> - <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> - </view> - <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 - </view> - <view class="line"></view> - <view class="set-flex set-start set-flex-content-between"> - <view> - <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 - </view> - <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 - </view> - </view> - - </view> - </view> - <view class="list-item"> - <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> - <text class="status">宸茬粨鏉�</text> - </view> - <view class="user-info"> - <text>鐜嬫�濋洦</text> - <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> - </view> - <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 - </view> - <view class="line"></view> - <view class="set-flex set-start set-flex-content-between"> - <view> - <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 - </view> - <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 - </view> - </view> - - </view> - </view> + <view class="list-item" @click="goReport(item.orderId)" v-for="(item,index) in list" :key="index"> + <view class="top-title"> + <text>{{item.enforceReason}}</text> + <text class="status">宸茬粨鏉�</text> + </view> + <view class="user-info"> + <text>{{item.executeUser}}</text> + <view class="driver"></view> + <text>{{item.executeDeptName}}</text> + </view> + <view class="set-line"> + <text>鎵ф硶瀵硅薄锛�</text>{{item.companyName}} + </view> + <view class="line"></view> + <view class="set-flex set-start set-flex-content-between"> + <view> + <view class="set-line1"> + <text>鎵ф硶鏃堕棿锛�</text>{{item.planTime}} + </view> + <view class="set-line1"> + <text>鐢宠鏃堕棿锛�</text>{{item.applyTime}} + </view> + </view> + <!-- <view class="button" @click="goReport(item.orderId)" > + 涓婃姤 + </view> --> + </view> + </view> + <u-empty v-if="!list.length" mode="data"></u-empty> + + </view> </view> </template> <script> + import { + executeList + } from '@/api/policy.js' export default { data() { return { - list1: [{ - name: '寰呬笂鎶�', - }, { - name: '宸蹭笂鎶�', - }] + list: [], + total: 1, + queryParams: { + pageNum: 1, + pageSize: 10, + orderStatus: 4 + }, + searchContent: '' } }, + onShow() { + this.queryParams.pageNum = 1 + this.list = [] + this.executeList() + }, + onReachBottom() { + if(this.list.length == this.total) { + return + } + this.queryParams.pageNum++ + this.orderList() + }, methods: { - goReport() { + clean() { + this.queryParams.enforceReason = "" + this.list = [] + this.executeList() + }, + search() { + this.queryParams.pageNum = 1 + this.list = [] + this.executeList() + }, + goReport(order) { uni.navigateTo({ - url: `/policy/reportDetails/reportDetails` + url: `/policy/applyRecordDetails/applyRecordDetails?id=${order}` }) }, click() { - + + }, + executeList() { + executeList(this.queryParams).then(val => { + this.list = [...this.list, ...val.data.rows] + this.total = val.data.total + }) } } } </script> <style> - page{ + page { background-color: #F4F4F4; } </style> <style lang="scss" scoped> -@import "./reportRecord.scss"; -</style> + @import "./reportRecord.scss"; +</style> \ No newline at end of file diff --git a/policy/scodePage/scodePage.scss b/policy/scodePage/scodePage.scss index 7659470..4dc32cf 100644 --- a/policy/scodePage/scodePage.scss +++ b/policy/scodePage/scodePage.scss @@ -158,4 +158,14 @@ } .hide-canvas{ display: none; +} +.button-entery{ + text-align: right; + .button{ + background-color: #4F86F3; + color: white; + padding: 20rpx 32rpx; + border-radius: 10rpx; + display: inline-block; + } } \ No newline at end of file diff --git a/policy/scodePage/scodePage.vue b/policy/scodePage/scodePage.vue index 6ca01de..813ed64 100644 --- a/policy/scodePage/scodePage.vue +++ b/policy/scodePage/scodePage.vue @@ -29,66 +29,118 @@ <image src="/static/policy/qrcode-border.png" class="border" mode="widthFix"></image> <image :src="uqrcodeImage" mode="widthFix" class="qrcode-1"></image> <view class="code-time"> - <text>鎵爜鏃堕棿锛�</text>2024-05-12 12:00 + <text>鎵爜鏃堕棿锛�</text>{{$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM:ss')}} </view> </view> <view class="code"> <view class="item"> <text class="label">鎵ф硶浜哄憳</text> - <text class="value">鐜嬪皬涓�</text> + <text class="value">{{userInfo.nickName}}</text> </view> <view class="write-border"></view> <view class="item"> <text class="label">鎵ф硶閮ㄩ棬</text> - <text class="value">宸ュ晢绠$悊灞�</text> + <text class="value">{{userInfo.dept.deptName}}</text> </view> </view> <view class="hint-text"> - 褰撳墠浼佷笟瀛樺湪<text>1</text>鏉℃湭瀹屾垚鐨勬墽娉曚换鍔� + 褰撳墠浼佷笟瀛樺湪<text>{{list.length}}</text>鏉℃湭瀹屾垚鐨勬墽娉曚换鍔� </view> + <!-- <view class="hint-text"> + 褰撳墠浼佷笟鏈畬鎴愮殑鎵ф硶浠诲姟 + </view> --> <view class="down-block"> - <view class="box"> - <view class="title">24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</view> - <view class="user-news"> - <text>鐜嬫�濋洦</text> - <view class="driver"></view> - <text>宸ュ晢绠$悊灞�</text> - </view> - <view class="font-13"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 - </view> - <view class="border"></view> - <view class="font-12 margin-bottom"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 - </view> - <view class="font-12"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 - </view> - </view> + <swiper style="height: 500rpx;" :indicator-dots="false" :interval="3000" :duration="1000"> + <swiper-item v-for="(item,index) in list" :key="index"> + <view class="box"> + <view class="title">{{item.enforceReason}}</view> + <view class="user-news"> + <text>{{item.applyUser}}</text> + <view class="driver"></view> + <text>{{item.applyDeptName}}</text> + </view> + <view class="font-13"> + <text>鎵ф硶瀵硅薄锛�</text>{{item.companyName}} + </view> + <view class="border"></view> + <view class="font-12 margin-bottom"> + <text>鎵ф硶鏃堕棿锛�</text>{{item.planTime}} + </view> + <view class="font-12"> + <text>鐢宠鏃堕棿锛�</text>{{item.applyTime}} + </view> + <view class="button-entery"> + <view class="button" @click="doScanOrder(item.orderId)">纭鎵ф硶</view> + </view> + </view> + </swiper-item> + </swiper> </view> </view> - <uqrcode class="hide-canvas" :size="470" sizeUnit="rpx" v-if="companyCode" ref="uqrcode" canvas-id="qrcode" :value="companyCode" :options="{ backgroundColor: 'green',useDynamicSize: true, areaColor: '#ffffff', foregroundColor: '#ffffff' }"></uqrcode> + <uqrcode class="hide-canvas" :size="470" sizeUnit="rpx" v-if="companyCode" ref="uqrcode" canvas-id="qrcode" :value="companyCode" :options="{ backgroundColor: color,useDynamicSize: true, areaColor: '#ffffff', foregroundColor: '#ffffff' }"></uqrcode> </view> </template> <script> + import { getScanList, doScanOrder } from '@/api/policy.js' + import { getInfo } from '@/api/auth.js' export default { data() { return { - companyCode: 'code===', - uqrcodeImage: '' + companyCode: '', + uqrcodeImage: '', + list: [], + userInfo: {}, + color: '' } }, onReady() { - this.$refs.uqrcode.toTempFilePath({ - success: res => { - this.uqrcodeImage = res.tempFilePath - } - }); + + }, + onLoad(options) { + this.getScanList(options.code) + + this.getInfo() + }, + onShow() { + }, methods: { - + getScanList(companyCode){ + getScanList({companyCode}).then(val => { + this.list = val.data.data + if(this.list.length) { + this.color = 'green' + } else { + this.color = 'red' + } + this.companyCode = companyCode + setTimeout(() => { + this.$refs.uqrcode.toTempFilePath({ + success: res => { + this.uqrcodeImage = res.tempFilePath + } + }); + }, 500) + }) + }, + getInfo() { + getInfo().then(val => { + console.log(val.data.data) + this.userInfo = val.data.data + }) + }, + doScanOrder(item) { + doScanOrder(item).then(val => { + if(val.data.code == 200) { + uni.showToast({ + title: '纭鎵ф硶鎴愬姛', + icon: 'none' + }) + } + }) + } } } </script> diff --git a/policy/translate/translate.vue b/policy/translate/translate.vue index f463722..6058099 100644 --- a/policy/translate/translate.vue +++ b/policy/translate/translate.vue @@ -8,28 +8,28 @@ </view> <view class="list-item"> <view class="top-title"> - <text>{{item.checkReason}}</text> + <text>{{item.enforceReason}}</text> <text class="status">寰呭鎵�</text> </view> <view class="user-info"> - <text>鐜嬫�濋洦</text> + <text>{{item.applyUser}}</text> <view class="driver"></view> <text>{{item.checkDeptName}}</text> </view> <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 + <text>鎵ф硶瀵硅薄锛�</text>{{item.companyName}} </view> <view class="line"></view> <view class="set-flex set-start set-flex-content-between"> <view> <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 + <text>鎵ф硶鏃堕棿锛�</text>{{item.planTime}} </view> <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 + <text>鐢宠鏃堕棿锛�</text>{{item.applyTime}} </view> </view> - <view class="button" v-if="!isJudege" @click="goStartJudeg"> + <view class="button" v-if="!isJudege" @click="goStartJudeg(item.orderId)"> 瀹℃壒 </view> </view> @@ -55,7 +55,7 @@ <script> import popupCom from '@/policy/components/popup.vue' - import { checkLogList,checkUpd } from '@/api/policy.js' + import { checkLogList, checkUpd } from '@/api/policy.js' export default { components: { popupCom @@ -71,7 +71,8 @@ pageNum: 1, pageSize: 10, checkStatus: 0 - } + }, + recordList: [] } }, computed: { @@ -103,7 +104,8 @@ click() { }, - goStartJudeg() { + goStartJudeg(id) { + this.recordList = id this.$refs.popup.open() }, // 鎵归噺瀹℃壒 @@ -130,8 +132,22 @@ }) } }, - entery() { - this.isJudege = false + entery(form) { + // 1浼佷笟瀹℃壒锛�2鎵ф硶鍗曞鎵� + checkUpd({...form, id: this.recordList, checkType: 2}).then(val => { + if(val.data.code == 200) { + uni.showToast({ + title: '瀹℃壒鎴愬姛', + icon: 'none' + }) + } + this.list = [] + this.queryms.pageNum = 1 + this.checkLogList() + this.$refs.popup.close() + this.isJudege = false + }) + }, cancelSelect() { this.isJudege = false diff --git a/policy/translateRecord/translateRecord.vue b/policy/translateRecord/translateRecord.vue index 7ba1ee2..5c62dc0 100644 --- a/policy/translateRecord/translateRecord.vue +++ b/policy/translateRecord/translateRecord.vue @@ -2,58 +2,101 @@ <view class="page-box"> <u-sticky bgColor="white"> <view class="set-search"> - <u-search placeholder="璇疯緭鍏ユ墽娉曚富棰� " shape="square" :showAction="false"></u-search> + <u-search placeholder="璇疯緭鍏ユ墽娉曚富棰� " v-model="value" @clear="value = '';search()" @search="search" @blur="search" shape="square" :showAction="false"></u-search> </view> <view class="border"></view> - <u-tabs :list="list1" @click="click" :scrollable="false" bgColor="white"></u-tabs> + <u-tabs :list="list1" @click="click" :current="current" :scrollable="false" bgColor="white"></u-tabs> </u-sticky> <view class="list"> - <view class="list-item" @click="goReport"> + <view class="list-item" @click="goReport" v-for="(item,index) in list" :key="index"> <view class="top-title"> - <text>24骞�5鏈堢獊鍑绘鏌ユ秷闃插畨鍏�</text> - <text class="status status2">閫氳繃</text> - <text class="status status4">鎷掔粷</text> + <text>{{item.enforceReason}}</text> + <text class="status status2" v-if="item.checkStatus == 2">閫氳繃</text> + <text class="status status4" v-else>鎷掔粷</text> </view> <view class="user-info"> - <text>鐜嬫�濋洦</text> + <text>{{item.applyUser}}</text> <view class="driver"></view> - <text>鎵ф硶涓�澶ч槦</text> + <text>{{item.applyDeptName}}</text> </view> <view class="set-line"> - <text>鎵ф硶瀵硅薄锛�</text>娌冲崡瑙夐啋绉戞妧鏈夐檺鍏徃 + <text>鎵ф硶瀵硅薄锛�</text>{{item.companyName}} </view> <view class="line"></view> <view class="set-flex set-start set-flex-content-between"> <view> <view class="set-line1"> - <text>鎵ф硶鏃堕棿锛�</text>2024-05-12 12:00 + <text>鎵ф硶鏃堕棿锛�</text>{{item.planTime}} </view> <view class="set-line1"> - <text>鐢宠鏃堕棿锛�</text>2024-05-12 12:00:12 + <text>鐢宠鏃堕棿锛�</text>{{item.applyTime}} </view> </view> - </view> </view> - - + <u-empty v-if="!list.length"></u-empty> </view> </view> </template> <script> + import { checkedList } from '@/api/policy.js' export default { data() { return { - + current: 0, + queryParams: { + pageNum: 1, + pageSize: 10 + }, + list1: [{ + name: '鍏ㄩ儴', + value: '' + }, { + name: '閫氳繃', + value: 2 + }, { + name: '鎷掔粷', + value: -1 + }], + list: [ + + ], + total: 1, + value: '' } }, + onLoad() { + this.enforceLogList() + }, + onReachBottom() { + if(this.total == this.list.length) { + return + } + this.queryParams.pageNum++ + this.enforceLogList() + }, methods: { + search(e) { + this.list = [] + this.queryParams.enforceReason = e + this.queryParams.pageNum = 1 + this.enforceLogList() + }, goReport() { }, - click() { - + click(e) { + this.list = [] + this.queryParams.pageNum = 1 + this.current = e.index + this.enforceLogList() + }, + enforceLogList() { + checkedList({...this.queryParams, checkStatus: this.list1[this.current].value}).then(val => { + this.list = [...this.list,...val.data.rows] + this.total = val.data.total + }) } } } diff --git a/static/policy/loginHeader.png b/static/policy/loginHeader.png new file mode 100644 index 0000000..dc7c6b3 --- /dev/null +++ b/static/policy/loginHeader.png Binary files differ diff --git a/static/policy/loginHeaer1.png b/static/policy/loginHeaer1.png new file mode 100644 index 0000000..e3cd20f --- /dev/null +++ b/static/policy/loginHeaer1.png Binary files differ diff --git a/static/policy/rank1.png b/static/policy/rank1.png new file mode 100644 index 0000000..71dc432 --- /dev/null +++ b/static/policy/rank1.png Binary files differ diff --git a/static/policy/rank2.png b/static/policy/rank2.png new file mode 100644 index 0000000..ffbb330 --- /dev/null +++ b/static/policy/rank2.png Binary files differ diff --git a/static/policy/rank3.png b/static/policy/rank3.png new file mode 100644 index 0000000..b134b8b --- /dev/null +++ b/static/policy/rank3.png Binary files differ diff --git a/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js b/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js index 17b28b3..2c685ad 100644 --- a/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js +++ b/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js @@ -71,6 +71,9 @@ return series[index].name+'锛�'+series[index].data+'鍏�' } }, + tooltipDemo1:function(val, index, series, opts) { + return "鎹㈣/" + val.name + "/" + "鏁伴噺:" + val.data + "/" +"鍗犳瘮:" + (val._proportion_ * 100).toFixed(2) + "%" + } }, //杩欓噷婕旂ず浜嗚嚜瀹氫箟鎮ㄧ殑鍥捐〃绫诲瀷鐨刼ption锛屽彲浠ラ殢鎰忓懡鍚嶏紝涔嬪悗鍦ㄧ粍浠朵笂 type="demotype" 鍚庯紝缁勪欢浼氳皟鐢ㄨ繖涓姳鎷彿閲岀殑option锛屽鏋滅粍浠朵笂杩樺瓨鍦╫pts鍙傛暟锛屼細灏哾emotype涓巓pts涓璷ption鍚堝苟鍚庢覆鏌撳浘琛ㄣ�� "demotype":{ diff --git a/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js b/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js index f78bde5..8704dae 100644 --- a/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js +++ b/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js @@ -2806,6 +2806,23 @@ if(toolTipOption.showCategory==true && opts.categories){ textList.unshift({text:opts.categories[opts.tooltip.index],color:null}) } + if (textList[0].text.split("/")[0] == "鎹㈣") { + let newTextList = [{ + "color": "#FCDB66", + "legendShape": "circle", + "text": textList[0].text.split("/")[1] + }, + { + "color": "transparent", + "text": textList[0].text.split("/")[2] + }, + { + "color": "transparent", + "text": textList[0].text.split("/")[3] + }, + ] + textList = newTextList + } var fontSize = toolTipOption.fontSize * opts.pix; var lineHeight = toolTipOption.lineHeight * opts.pix; var boxPadding = toolTipOption.boxPadding * opts.pix; -- Gitblit v1.9.1