From 67726760ca5cfe7659a425cf1dfeb9ef624eb73c Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Thu, 25 Nov 2021 20:09:59 +0800
Subject: [PATCH] Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/zhba_app
---
api/mock/dispatch.js | 32 +
static/images/message/unit.png | 0
pages/dispatch/index.vue | 85 +++
static/images/message/security.png | 0
api/mock/home.js | 152 ++++++
pages/dispatch/send.vue | 374 +++++++++++++++++
pages/dispatch/text.vue | 261 +++++++++++
static/images/message/send.png | 0
pages/dispatch/receive.vue | 372 ++++++++++++++++
static/images/dispatch/up-down.png | 0
10 files changed, 1,276 insertions(+), 0 deletions(-)
diff --git a/api/mock/dispatch.js b/api/mock/dispatch.js
new file mode 100644
index 0000000..afd04a8
--- /dev/null
+++ b/api/mock/dispatch.js
@@ -0,0 +1,32 @@
+// 获取服务按钮数据
+export function fakeServiceButton() {
+ return new Promise((resolute, reject) => {
+ try {
+ const list = [{
+ name: '下发指令查询',
+ img: '/static/images/dispatch/up-down.png',
+ url: '../dispatch/send'
+ },
+ {
+ name: '接收指令查询',
+ img: '/static/images/dispatch/look.png',
+ url: '../dispatch/receive'
+ },
+ {
+ name: '文字指令下发',
+ img: '/static/images/dispatch/issue.png',
+ url: '../dispatch/text'
+ },
+ {
+ name: '图片指令下发',
+ img: '/static/images/dispatch/imgissue.png',
+ url: '../dispatch/imgissue'
+ }
+ ];
+ resolute(list);
+ } catch (e) {
+ //模拟接口请求失败
+ reject(e);
+ }
+ })
+}
diff --git a/api/mock/home.js b/api/mock/home.js
new file mode 100644
index 0000000..908cd55
--- /dev/null
+++ b/api/mock/home.js
@@ -0,0 +1,152 @@
+// 获取部门数据
+export function fakePosition() {
+ return new Promise((resolute, reject) => {
+ try {
+ const detail = {
+ position: "保安",
+ positionArr: ['保安', '民警']
+ }
+ resolute(detail);
+ } catch (e) {
+ //模拟接口请求失败
+ reject(e);
+ }
+ })
+}
+
+// 获取公告数据
+export function fakeBannerList() {
+ return new Promise((resolute, reject) => {
+ try {
+ const list = [{
+ id: '1',
+ img: '/static/images/home/banner.png',
+ url: ''
+ }, {
+ id: '2',
+ img: '/static/images/home/banner.png',
+ url: ''
+ }, {
+ id: '3',
+ img: '/static/images/home/banner.png',
+ url: ''
+ }];
+ resolute(list);
+ } catch (e) {
+ //模拟接口请求失败
+ reject(e);
+ }
+ })
+}
+
+// 获取公告数据
+export function fakeNoticeList() {
+ return new Promise((resolute, reject) => {
+ try {
+ const list = [{
+ id: '1',
+ img: '/static/images/home/focus.png',
+ title: '神舟十二号载人发射任务取得圆满成功'
+ }, {
+ id: '2',
+ img: '/static/images/home/service.png',
+ title: '全国累计报告接种新冠疫苗超9亿剂次'
+ }];
+ resolute(list);
+ } catch (e) {
+ //模拟接口请求失败
+ reject(e);
+ }
+ })
+}
+
+// 获取顶部按钮数据
+export function fakeNavButton() {
+ return new Promise((resolute, reject) => {
+ try {
+ const list = [{
+ name: '公积金',
+ img: '/static/images/home/n1.png',
+ url: ''
+ },
+ {
+ name: '社保',
+ img: '/static/images/home/n2.png',
+ url: ''
+ },
+ {
+ name: '医保',
+ img: '/static/images/home/n3.png',
+ url: ''
+ },
+ {
+ name: '企业',
+ img: '/static/images/home/n4.png',
+ url: ''
+ },
+ {
+ name: '教育',
+ img: '/static/images/home/n5.png',
+ url: ''
+ }
+ ];
+ resolute(list);
+ } catch (e) {
+ //模拟接口请求失败
+ reject(e);
+ }
+ })
+}
+
+// 获取服务按钮数据
+export function fakeServiceButton() {
+ return new Promise((resolute, reject) => {
+ try {
+ const list = [{
+ name: '保安单位',
+ img: '/static/images/home/s1.png',
+ url: '../company/company'
+ },
+ {
+ name: '保安管理',
+ img: '/static/images/home/s2.png',
+ url: '../securityStaff/exhibition'
+ },
+ // {
+ // name: '调度指令',
+ // img: '/static/images/home/s4.png',
+ // url: ''
+ // },
+ {
+ name: '工作汇报',
+ img: '/static/images/home/report001.png',
+ url: '../report/report'
+ },
+ {
+ name: '调度指令',
+ img: '/static/images/home/s11.png',
+ url: '../dispatch/index'
+ },
+ {
+ name: '通知通告',
+ img: '/static/images/home/s10.png',
+ url: '../message/message'
+ },
+ {
+ name: '现场检查',
+ img: '/static/images/home/s5.png',
+ url: '../examine/examine'
+ },
+ {
+ name: '保安员位置',
+ img: '/static/images/wz.png',
+ url: '../map/map'
+ }
+ ];
+ resolute(list);
+ } catch (e) {
+ //模拟接口请求失败
+ reject(e);
+ }
+ })
+}
diff --git a/pages/dispatch/index.vue b/pages/dispatch/index.vue
new file mode 100644
index 0000000..2e793af
--- /dev/null
+++ b/pages/dispatch/index.vue
@@ -0,0 +1,85 @@
+<template>
+ <view class="container">
+ <view class="service-box">
+ <u-grid :col="3" :border="false">
+ <u-grid-item bg-color="transparent" v-for="(item, index) in serviceButton" :key="index"
+ @click="goBusinessPage(item.url,index)">
+ <view class="service-item">
+ <image :src="item.img" mode="widthFix" class="img"></image>
+ <view class="name">{{ item.name }}</view>
+ </view>
+ </u-grid-item>
+ </u-grid>
+ </view>
+ </view>
+</template>
+
+<script>
+ import {
+ fakeServiceButton
+ } from "@/api/mock/dispatch.js";
+
+ export default {
+ data() {
+ return {
+ dataList: [],
+ serviceButton: []
+ };
+ },
+ onLoad() {
+
+ },
+ onReachBottom() {
+
+ },
+ mounted() {},
+ methods: {
+ onLoad() {
+ // 加载服务按钮数据
+ fakeServiceButton().then(data => {
+ this.serviceButton = data;
+ });
+ },
+ //页面跳转
+ goBusinessPage(url, index) {
+ uni.navigateTo({
+ url: url
+ })
+ },
+ }
+ };
+</script>
+
+
+<style lang="scss">
+ .container {
+ background-color: #f7f7f7;
+ min-height: 100%;
+ overflow: hidden;
+ }
+
+ .service-box {
+ background: #ffffff;
+ border-radius: 20px 20px 20px 20px;
+ margin: 30rpx 20rpx 0;
+ padding: 0rpx 20rpx;
+
+ .service-item {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ height: 120rpx;
+ font-size: 26rpx;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: #585b61;
+
+ .img {
+ width: 70rpx;
+ height: auto;
+ }
+ }
+ }
+</style>
diff --git a/pages/dispatch/receive.vue b/pages/dispatch/receive.vue
new file mode 100644
index 0000000..773b5a7
--- /dev/null
+++ b/pages/dispatch/receive.vue
@@ -0,0 +1,372 @@
+<template>
+
+ <view class="page-container" style="height: 100%; position: relative;">
+
+ <view class="wrapper">
+
+ <view class="body">
+
+ <view class="body-content">
+
+ <u-search v-model='keyValue' placeholder='请输入指令内容' shape="round" class="u-search"
+ input-align="center" height="70" @search='searchValue' @custom='searchValue' @clear='clearValue'
+ @change='changeValue'>
+ </u-search>
+
+ <view v-show="newsList.length > 0">
+ <view class="inTmain" v-for="(item,index) in newsList" :key="index">
+ <u-card :title="item.content" @click="goDetail(item)">
+ <view class="" slot="body">
+ <view>
+ <view style="margin-bottom: 10px;" class="u-body-item-title u-line-2">
+ 发送指令人:{{item.sendName}}</view>
+ </view>
+ <view>
+ <view class="u-body-item-title u-line-2">接受指令人:{{item.receiveName}}</view>
+ </view>
+ </view>
+ <view class="" slot="foot">
+ </u-icon>发送指令时间:{{item.sendTime}}</view>
+ </u-card>
+ </view>
+ <u-loadmore class='msg' :status="status" />
+ </view>
+
+ <view class="msg" v-show='newsList.length == 0'>
+ 暂无数据
+ </view>
+
+ </view>
+
+ </view>
+
+ </view>
+ </view>
+
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+
+ dataList: [],
+ newsList: [],
+
+ status: 'loadmore',
+ keyValue: '',
+
+ dataList: [],
+ newsList: [],
+ pagelist: 0,
+ pages: 0,
+ flag: true,
+
+ pullDown: false
+
+ };
+ },
+ onLoad() {
+
+ this.getSend();
+
+ },
+ onReachBottom() {
+ var that = this;
+
+ if (that.flag == false) {
+ that.status = 'nomore';
+ return
+ }
+ // 后续将改为与后端联动
+ that.status = 'loading';
+
+ setTimeout(() => {
+
+ that.getSend();
+
+ }, 1000);
+ },
+
+ onPullDownRefresh: function() {
+ var that = this;
+
+ this.pullDown = true;
+ this.pagelist = 0;
+ this.pages = 0;
+ this.flag = true;
+ this.dataList = [];
+ this.newsList = [];
+ this.status = 'loading';
+ this.keyValue = '';
+ setTimeout(() => {
+
+ that.getSend();
+
+ }, 1000)
+
+ },
+ mounted() {},
+ methods: {
+
+ getSend() {
+ var that = this;
+
+ if (that.pagelist < that.pages || that.pagelist == 0) {
+ that.pagelist++
+ } else if (that.pagelist == that.pages) {
+ that.flag = false
+ that.status = 'nomore';
+ return
+ }
+
+ uni.request({
+ url: this.$store.state.piAPI + "/directive/page?sendDirectiveId=" + this.$store.state
+ .puserID,
+ method: "get",
+ data: {
+ current: that.pagelist,
+ size: 10
+ },
+ success: (res) => {
+ that.pages = res.data.data.pages;
+
+ var resdata = res.data.data.records;
+
+ if (this.pullDown == true) {
+ this.pullDown = false;
+ uni.stopPullDownRefresh();
+ }
+
+ if (resdata.length == 0) {
+ that.flag = false
+ that.status = 'nomore';
+ return
+ } else {
+ resdata.forEach(item => {
+ that.newsList.push(item)
+ that.dataList.push(item)
+ })
+ }
+
+ if (that.pagelist == that.pages) {
+ that.flag = false
+ that.status = 'nomore';
+ return
+ }
+
+ }
+ });
+ },
+ goDetail(item) {
+ uni.navigateTo({
+ url: './lookDetail?detailData=' + JSON.stringify(item)
+ });
+ },
+ searchValue(value) {
+ var that = this;
+ var str = value.replace(/\s*/g, "");
+ if (str == '') {
+ return
+ } else {
+ that.newsList = [];
+
+ uni.request({
+ url: this.$store.state.piAPI + "/directive/page?receiveDirectiveIds=" + this.$store
+ .state
+ .puserID,
+ method: "get",
+ data: {
+ current: 1,
+ size: 999999,
+ content: str
+ },
+ success: (res) => {
+ var resdata = res.data.data.records;
+
+ resdata.forEach(item => {
+ that.newsList.push(item)
+ })
+
+ }
+ });
+
+ that.flag = false
+ that.status = 'nomore';
+ }
+ },
+ clearValue() {
+ this.keyValue = ''
+ this.newsList = [];
+
+ this.dataList.forEach(item => {
+ this.newsList.push(item)
+ })
+
+ if (this.pagelist < this.pages) {
+ this.flag = true;
+ this.status = 'loading';
+ } else {
+ this.flag = false;
+ this.status = 'nomore';
+ }
+ },
+ changeValue(value) {
+ if (value == '') {
+ this.newsList = [];
+
+ this.dataList.forEach(item => {
+ this.newsList.push(item)
+ })
+
+ if (this.pagelist < this.pages) {
+ this.flag = true;
+ this.status = 'loading';
+ } else {
+ this.flag = false;
+ this.status = 'nomore';
+ }
+ }
+ }
+ }
+ };
+</script>
+
+<style lang="scss">
+ .page-container {
+ position: fixed;
+ display: block;
+ width: 100%;
+ max-height: 100vh;
+
+
+
+ .head {
+ position: relative;
+
+
+ width: 100%;
+
+
+ .nav-wrap {
+ width: 100%;
+ height: 44px;
+ line-height: 30px;
+ padding: 7px 3px;
+ height: calc(44px + constant(safe-area-inset-top));
+ height: calc(44px + env(safe-area-inset-top));
+ color: rgb(255, 255, 255);
+
+ .btn-return-box {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ box-sizing: border-box;
+
+ .btn-return {
+ position: relative;
+ width: auto;
+ margin: 0 2px;
+ word-break: keep-all;
+ white-space: pre;
+ cursor: pointer;
+ }
+ }
+
+ .header-title {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ width: 60%;
+ font-weight: 700;
+ line-height: 30px;
+ font-size: 16px;
+ opacity: 1;
+ text-overflow: ellipsis;
+ text-align: center;
+ min-width: 1em;
+ }
+
+ .header-add {
+ position: absolute;
+ top: 0;
+ left: auto;
+ right: 10px;
+ bottom: 0;
+ margin: auto;
+ display: inline-block;
+ font: normal normal normal 14px/1 unibtn;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ font-size: 24px;
+ }
+ }
+
+ }
+
+ .top-absolute {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 101;
+ }
+
+ .wrapper {
+
+ width: 100%;
+ display: block;
+ height: calc(100% - 44px);
+ height: calc(100% - 44px - constant(safe-area-inset-top));
+ height: calc(100% - 44px - env(safe-area-inset-top));
+
+ .body {
+ width: 100%;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ .body-content {
+ height: auto;
+
+ }
+
+ }
+
+ }
+ }
+
+ .u-card-wrap {
+ background-color: $u-bg-color;
+ padding: 1px;
+ }
+
+ .u-body-item {
+ font-size: 32rpx;
+ color: #333;
+ padding: 20rpx 10rpx;
+ }
+
+ .u-body-item image {
+ width: 120rpx;
+ flex: 0 0 120rpx;
+ height: 120rpx;
+ border-radius: 8rpx;
+ margin-left: 12rpx;
+ }
+
+ .u-search {
+ padding: 20rpx 30rpx 0 30rpx;
+ }
+
+ .inTmain {}
+
+ .msg {
+ height: 72rpx;
+ line-height: 72rpx;
+ text-align: center;
+ color: #999;
+ }
+</style>
diff --git a/pages/dispatch/send.vue b/pages/dispatch/send.vue
new file mode 100644
index 0000000..a4fc99e
--- /dev/null
+++ b/pages/dispatch/send.vue
@@ -0,0 +1,374 @@
+<template>
+
+ <view class="page-container" style="height: 100%; position: relative;">
+
+ <view class="wrapper">
+
+ <view class="body">
+
+ <view class="body-content">
+
+ <u-search v-model='keyValue' placeholder='请输入指令内容' shape="round" class="u-search"
+ input-align="center" height="70" @search='searchValue' @custom='searchValue' @clear='clearValue'
+ @change='changeValue'>
+ </u-search>
+
+ <view v-show="newsList.length > 0">
+ <view class="inTmain" v-for="(item,index) in newsList">
+ <u-card :title="item.content" @click="goDetail(item)">
+ <view class="" slot="body">
+ <view>
+ <view style="margin-bottom: 10px;" class="u-body-item-title u-line-2">
+ 发送指令人:{{item.sendName}}</view>
+ </view>
+ <view>
+ <view class="u-body-item-title u-line-2">接受指令人:{{item.receiveName}}</view>
+ </view>
+ </view>
+ <view class="" slot="foot">
+ </u-icon>发送指令时间:{{item.sendTime}}</view>
+ </u-card>
+ </view>
+ <u-loadmore class='msg' :status="status" />
+ </view>
+
+ <view class="msg" v-show='newsList.length == 0'>
+ 暂无数据
+ </view>
+
+ </view>
+
+ </view>
+
+ </view>
+
+ </view>
+
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+
+ dataList: [],
+ newsList: [],
+
+ status: 'loadmore',
+ keyValue: '',
+
+ dataList: [],
+ newsList: [],
+ pagelist: 0,
+ pages: 0,
+ flag: true,
+
+ pullDown: false
+
+ };
+ },
+ onLoad() {
+
+ this.getReceive()
+
+ },
+ onReachBottom() {
+ var that = this;
+
+ if (that.flag == false) {
+ that.status = 'nomore';
+ return
+ }
+ // 后续将改为与后端联动
+ that.status = 'loading';
+
+ setTimeout(() => {
+
+ that.getReceive();
+
+ }, 1000);
+ },
+
+ onPullDownRefresh: function() {
+ var that = this;
+
+ this.pullDown = true;
+ this.pagelist = 0;
+ this.pages = 0;
+ this.flag = true;
+ this.dataList = [];
+ this.newsList = [];
+ this.status = 'loading';
+ this.keyValue = '';
+ setTimeout(() => {
+
+ that.getReceive();
+
+ }, 1000)
+
+ },
+ mounted() {},
+ methods: {
+ getReceive() {
+ var that = this;
+
+ if (that.pagelist < that.pages || that.pagelist == 0) {
+ that.pagelist++
+ } else if (that.pagelist == that.pages) {
+ that.flag = false
+ that.status = 'nomore';
+ return
+ }
+
+ uni.request({
+ url: this.$store.state.piAPI + "/directive/page?sendDirectiveId=" + this.$store.state
+ .puserID,
+ method: "get",
+ data: {
+ current: that.pagelist,
+ size: 10
+ },
+ success: (res) => {
+ that.pages = res.data.data.pages;
+
+ var resdata = res.data.data.records;
+
+ if (this.pullDown == true) {
+ this.pullDown = false;
+ uni.stopPullDownRefresh();
+ }
+
+ if (resdata.length == 0) {
+ that.flag = false
+ that.status = 'nomore';
+ return
+ } else {
+ resdata.forEach(item => {
+ that.newsList.push(item)
+ that.dataList.push(item)
+ })
+ }
+
+ if (that.pagelist == that.pages) {
+ that.flag = false
+ that.status = 'nomore';
+ return
+ }
+
+ }
+ });
+ },
+
+ goDetail(item) {
+ uni.navigateTo({
+ url: './lookDetail?detailData=' + JSON.stringify(item)
+ });
+ },
+
+ searchValue(value) {
+ var that = this;
+ var str = value.replace(/\s*/g, "");
+ if (str == '') {
+ return
+ } else {
+ that.newsList = [];
+
+ uni.request({
+ url: this.$store.state.piAPI + "/directive/page?sendDirectiveId=" + this.$store.state
+ .puserID,
+ method: "get",
+ data: {
+ current: 1,
+ size: 999999,
+ content: str
+ },
+ success: (res) => {
+ var resdata = res.data.data.records;
+
+ resdata.forEach(item => {
+ that.newsList.push(item)
+ })
+
+ }
+ });
+
+ that.flag = false
+ that.status = 'nomore';
+ }
+ },
+ clearValue() {
+ this.keyValue = ''
+ this.newsList = [];
+
+ this.dataList.forEach(item => {
+ this.newsList.push(item)
+ })
+
+ if (this.pagelist < this.pages) {
+ this.flag = true;
+ this.status = 'loading';
+ } else {
+ this.flag = false;
+ this.status = 'nomore';
+ }
+ },
+ changeValue(value) {
+ if (value == '') {
+ this.newsList = [];
+
+ this.dataList.forEach(item => {
+ this.newsList.push(item)
+ })
+
+ if (this.pagelist < this.pages) {
+ this.flag = true;
+ this.status = 'loading';
+ } else {
+ this.flag = false;
+ this.status = 'nomore';
+ }
+ }
+ },
+
+ }
+ };
+</script>
+
+<style lang="scss">
+ .page-container {
+ position: fixed;
+ display: block;
+ width: 100%;
+ max-height: 100vh;
+
+
+
+ .head {
+ position: relative;
+
+
+ width: 100%;
+
+
+ .nav-wrap {
+ width: 100%;
+ height: 44px;
+ line-height: 30px;
+ padding: 7px 3px;
+ height: calc(44px + constant(safe-area-inset-top));
+ height: calc(44px + env(safe-area-inset-top));
+ color: rgb(255, 255, 255);
+
+ .btn-return-box {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ box-sizing: border-box;
+
+ .btn-return {
+ position: relative;
+ width: auto;
+ margin: 0 2px;
+ word-break: keep-all;
+ white-space: pre;
+ cursor: pointer;
+ }
+ }
+
+ .header-title {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ width: 60%;
+ font-weight: 700;
+ line-height: 30px;
+ font-size: 16px;
+ opacity: 1;
+ text-overflow: ellipsis;
+ text-align: center;
+ min-width: 1em;
+ }
+
+ .header-add {
+ position: absolute;
+ top: 0;
+ left: auto;
+ right: 10px;
+ bottom: 0;
+ margin: auto;
+ display: inline-block;
+ font: normal normal normal 14px/1 unibtn;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ font-size: 24px;
+ }
+ }
+
+ }
+
+ .top-absolute {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 101;
+ }
+
+ .wrapper {
+
+ width: 100%;
+ display: block;
+ height: calc(100% - 44px);
+ height: calc(100% - 44px - constant(safe-area-inset-top));
+ height: calc(100% - 44px - env(safe-area-inset-top));
+
+ .body {
+ width: 100%;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ .body-content {
+ height: auto;
+
+ }
+
+ }
+
+ }
+ }
+
+ .u-card-wrap {
+ background-color: $u-bg-color;
+ padding: 1px;
+ }
+
+ .u-body-item {
+ font-size: 32rpx;
+ color: #333;
+ padding: 20rpx 10rpx;
+ }
+
+ .u-body-item image {
+ width: 120rpx;
+ flex: 0 0 120rpx;
+ height: 120rpx;
+ border-radius: 8rpx;
+ margin-left: 12rpx;
+ }
+
+ .u-search {
+ padding: 20rpx 30rpx 0 30rpx;
+ }
+
+ .inTmain {}
+
+ .msg {
+ height: 72rpx;
+ line-height: 72rpx;
+ text-align: center;
+ color: #999;
+ }
+</style>
diff --git a/pages/dispatch/text.vue b/pages/dispatch/text.vue
new file mode 100644
index 0000000..c546552
--- /dev/null
+++ b/pages/dispatch/text.vue
@@ -0,0 +1,261 @@
+<template>
+ <view class="container">
+
+ <view class="group-chat-box">
+
+ <u-form :model="form" ref="uForm">
+
+ <u-form-item label-width='132' prop="content" label="指令内容" :required="true">
+ <u-input type='textarea' v-model="form.content" placeholder="请输入指令内容" />
+ </u-form-item>
+
+ <u-form-item label-width='158' prop="recipientText" label="指令接收人" :required="true">
+
+ <u-input type='textarea' v-model="form.recipientPeople" placeholder="请选择指令接收人"
+ @click="recipientClick" autoHeight />
+
+ <u-popup :closeable="true" v-model="recipientShow" mode="bottom" height="50%" border-radius="14">
+
+ <view>
+
+ <u-checkbox-group v-show="recipientList.length > 0" @change="checkboxGroupChange"
+ :wrap='true' :size="40">
+
+ <u-checkbox v-model="item.checked" v-for="(item, index) in recipientList" :key="index"
+ :name="item.id" shape="circle"
+ style="padding: 0 40rpx; height: 92rpx; position: relative; box-sizing: border-box;">
+
+ <view style="margin-left: 22rpx">
+ {{item.real_name}}
+ </view>
+
+ </u-checkbox>
+
+ </u-checkbox-group>
+
+ <view style=" height: 92rpx; padding: 0 40rpx;" v-show="recipientList.length == 0">
+
+ 暂无数据
+
+ </view>
+
+ </view>
+
+ </u-popup>
+
+ </u-form-item>
+
+ </u-form>
+
+ </view>
+
+ <view class="establish-box">
+
+ <u-button class="submit" type="primary" @click="initiateClick">发送</u-button>
+
+ </view>
+
+ <view>
+ <u-toast ref="uToast" />
+ </view>
+
+ </view>
+</template>
+
+<script>
+ export default {
+
+ data() {
+ return {
+ recipientShow: false,
+ recipientList: [],
+
+ form: {
+ content: '',
+ recipient: '',
+ recipientData: [],
+ recipientPeople: ''
+ },
+ rules: {
+
+ content: [{
+ min: 5,
+ required: true,
+ message: '指令内容不能少于5个字',
+ trigger: ['change', 'blur'],
+ }],
+
+ },
+ };
+ },
+ onLoad() {},
+ onReachBottom() {
+
+ },
+ mounted() {},
+ onReady() {
+ this.$refs.uForm.setRules(this.rules);
+ },
+ methods: {
+ recipientClick() {
+ if (this.recipientList.length > 0) {
+ this.recipientShow = true;
+ return;
+ }
+ uni.request({
+ url: this.$store.state.piAPI + "/blade-user/seleL",
+ method: "get",
+ data: {
+ type: 1,
+ jurisdiction: this.$store.state
+ .UserData.jurisdiction,
+ },
+ success: (res) => {
+ this.recipientList = []
+
+ res.data.data.forEach(item => {
+ var flag = true
+
+ if (this.recipientList.length > 0) {
+ this.recipientList.forEach(it => {
+ if (item.id == it.id) flag = false
+ })
+ }
+
+ if (flag == true) {
+ if (item.id != this.$store.state
+ .UserData.user_id
+ ) {
+ item.checked = false;
+ this.recipientList.push(item)
+ }
+ }
+ })
+
+ this.recipientShow = true;
+ }
+ });
+
+ },
+
+ initiateClick() {
+
+ this.$refs.uForm.validate(valid => {
+ if (valid) {
+
+ if (this.form.recipientData.length == 0) {
+ this.$refs.uToast.show({
+ title: '请最少选择一个接收人',
+ })
+ return
+ }
+
+ var str = '';
+
+ this.form.recipientData.forEach(item => {
+ str += item + ','
+ })
+
+ str = str.substr(0, str.length - 1);
+
+ uni.request({
+ url: this.$store.state.piAPI + "/directive/saveDirectiveAndFile",
+ method: "post",
+ data: {
+ // 接收
+ receiveDirectiveIds: str,
+ // 发送
+ sendDirectiveId: this.$store.state
+ .UserData.user_id,
+ content: this.form.content
+ },
+ success: (res) => {
+ if (res.data.msg.indexOf('成功') != -1) {
+ this.$refs.uToast.show({
+ title: '指令下发成功',
+ type: 'success',
+ url: '/pages/dispatch/dispatch'
+ })
+ }
+ }
+ });
+ } else {
+ console.log('验证失败');
+ }
+ });
+ },
+
+ checkboxGroupChange(e) {
+ var that = this
+
+ this.form.recipientData = e
+
+ var str = ""
+ var num = 0
+
+ that.form.recipientData.forEach((item, index) => {
+ that.recipientList.forEach((it, index) => {
+ if (item == it.id) {
+ if (num > 0) {
+ str += '、';
+ str += it.real_name;
+ } else {
+ str += it.real_name
+ }
+ num += 1
+ return
+ }
+ })
+ })
+
+ this.form.recipientPeople = str
+ },
+
+ }
+ };
+</script>
+
+
+<style lang="scss">
+ .submit {
+ border: none;
+ width: 94%;
+ height: 86rpx;
+ line-height: 86rpx;
+ box-sizing: border-box;
+ border-radius: 15rpx;
+ color: #ffffff;
+ font-size: 38rpx;
+
+ }
+
+ .container {
+ height: 100%;
+
+ .group-chat-box {
+ height: calc(100% - 116rpx);
+ padding: 0 36rpx;
+ box-sizing: border-box;
+ overflow-y: auto;
+ }
+
+ .establish-box {
+ position: relative;
+ height: 116rpx;
+ background: #fff;
+ text-align: center;
+
+ uni-button {
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ }
+
+ }
+
+ }
+</style>
diff --git a/static/images/dispatch/up-down.png b/static/images/dispatch/up-down.png
new file mode 100644
index 0000000..02277f8
--- /dev/null
+++ b/static/images/dispatch/up-down.png
Binary files differ
diff --git a/static/images/message/security.png b/static/images/message/security.png
new file mode 100644
index 0000000..dd6ab60
--- /dev/null
+++ b/static/images/message/security.png
Binary files differ
diff --git a/static/images/message/send.png b/static/images/message/send.png
new file mode 100644
index 0000000..fc9808a
--- /dev/null
+++ b/static/images/message/send.png
Binary files differ
diff --git a/static/images/message/unit.png b/static/images/message/unit.png
new file mode 100644
index 0000000..720abe2
--- /dev/null
+++ b/static/images/message/unit.png
Binary files differ
--
Gitblit v1.9.3