页面逻辑调整

test
zhangdi 1 year ago
parent 39d12797ca
commit 78dcc7cac9
  1. 78
      api/api.js
  2. 6
      common/betone_components/betone-input-picker.vue
  3. 11
      common/betone_components/betone-list.vue
  4. 21
      common/betone_components/betone-new-input.vue
  5. 101
      pages.json
  6. 69
      pages/home/components/alarm.vue
  7. 54
      pages/home/components/eacharts.vue
  8. 37
      pages/home/components/swiper.vue
  9. 18
      pages/home/index.vue
  10. 252
      pages/inspection/components/detailsCollapse.vue
  11. 372
      pages/inspection/components/plan-list.vue
  12. 167
      pages/inspection/plan.vue
  13. 349
      pages/inspection/quest.vue
  14. 99
      pages/inspection/questDetails.vue
  15. 291
      pages/inspection/records.vue
  16. 25
      pages/my/my.vue
  17. 148
      pages/my/records.vue
  18. 97
      pages/order/location.vue
  19. 2
      pages/submission/components/subForm.vue
  20. 2
      pages/submission/recordsdetails.vue
  21. 110
      store/index.js
  22. 2
      uni_modules/jp-signature/components/jp-signature-popup/jp-signature-popup.vue
  23. 79
      utils/tabbar.js

@ -5,9 +5,9 @@ const http = uni.$u.http
const install = (Vue, vm) => {
// 此处没有使用传入的params参数
let getTenantInfo = (params, config = {}) => http.get('/blade-system/tenant/info', params, config)
// 此处使用了传入的params参数,一切自定义即可
// 此处使用了传入的params参数,一切自定义即可
let login = (params) => http.post('/blade-auth/oauth/token?' + params)
// 退出
// 退出
let logout = () => http.get('/blade-auth/oauth/logout')
let register = (params, config = {}) => http.post('/blade-auth/oauth/token', params, config)
@ -15,36 +15,39 @@ const install = (Vue, vm) => {
let getworkbench = () => http.post('/blade-auth/oauth/token', params, config)
// 登录记录
let getLoginRecords = () => http.post('/blade-auth/oauth/token', params, config)
// 修改记录
let getEditRecords = () => http.post('/blade-auth/oauth/token', params, config)
// 意见反馈提交
let getLoginRecords = (params) => http.get('/blade-log/api/logOnList', params, {
authorization: false,
isparams: true
})
// 修改记录
let getEditRecords = () => http.get('/blade-auth/oauth/token', params, config)
// 意见反馈提交
let subEditRecords = (params) => http.post('/feedback/save', params)
// 获取意见反馈类型
// 获取意见反馈类型
// 业务类型查询
let getChildList = (params) => http.get('/blade-system/dict-biz/child-list', {...params }, {
authorization: false,
isparams: true
})
// 获取设备列表
let getDeviceList = (params) => http.get('/device/list', {...params }, {
let getChildList = (params) => http.get('/blade-system/dict-biz/child-list', { ...params }, {
authorization: false,
isparams: true
})
// 获取设备列表
let getDeviceList = (params) => http.get('/device/list', { ...params }, {
authorization: false,
isparams: true
})
// 需求提报 提交接口
let workOrderSave = (params) => http.post('/workOrder/save', params, {
authorization: false,
isparams: false
})
// 需求提报 列表 /lab/workOrder/list
let getWorkOrderRecords = (params) => http.get('/workOrder/list', {...params }, {
let getWorkOrderRecords = (params) => http.get('/workOrder/list', { ...params }, {
authorization: false,
isparams: false
})
// 根据id查询故障详情
let getBreakdownInfo = (params) => http.get('/workOrder/detail', {...params }, {
let getBreakdownInfo = (params) => http.get('/workOrder/detail', { ...params }, {
authorization: false,
isparams: false
})
@ -61,27 +64,58 @@ const install = (Vue, vm) => {
})
// 获取维修人员 /
let getRepairPersons = (params) => http.get('/blade-system/user/repairPersons', {...params }, {
let getRepairPersons = (params) => http.get('/blade-system/user/repairPersons', { ...params }, {
authorization: false,
isparams: false
})
// 客服派单接口
// 获取物料列表数据 goods/list
let getGoodsList = (params) => http.get('/goods/list', params , {
let getGoodsList = (params) => http.get('/goods/list', params, {
authorization: false,
isparams: false
})
// 巡检计划列表 /
let getDictionaryList = (params) => http.get('/blade-system/dict/dictionary?code=flow', params , {
let getDictionaryList = (params) => http.get('/blade-system/dict/dictionary?code=flow', params, {
authorization: false,
isparams: false
})
// 获取人员列表
let getUserList = (params) => http.get('/blade-system/user/page', { ...params }, {
authorization: false,
isparams: true
})
// 工作台
// 实验室巡检 /workBenches/workList
let workList = (params) => http.get('/workBenches/workList', { ...params }, {
authorization: false,
isparams: true
})
// 设备报警
let deviceList = (params) => http.get('/workBenches/deviceList', { ...params }, {
authorization: false,
isparams: true
})
// 维修柱状图
let upkeepStat = (params) => http.get('/workBenches/upkeepStat', { ...params }, {
authorization: false,
isparams: true
})
// 故障现象分类 workBenches/pieStat
let pieStat = (params) => http.get('/workBenches/pieStat', { ...params }, {
authorization: false,
isparams: true
})
// 获取用户信息 /
let getUserInfo = (params) => http.get('/blade-system/user/info', { ...params }, {
authorization: false,
isparams: true
})
// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
vm.$u.api = { getTenantInfo, login, logout, register, getworkbench, getLoginRecords, getEditRecords, subEditRecords, getChildList, getDeviceList,workOrderSave,getWorkOrderRecords,getBreakdownInfo,workOrderupdate,evaluateSign,getRepairPersons,getGoodsList,getDictionaryList };
vm.$u.api = { getTenantInfo, login, logout, register, getworkbench, getLoginRecords, getEditRecords, subEditRecords, getChildList, getDeviceList, workOrderSave, getWorkOrderRecords, getBreakdownInfo, workOrderupdate, evaluateSign, getRepairPersons, getGoodsList, getDictionaryList, getUserList, workList, deviceList,upkeepStat,pieStat,getUserInfo };
}
export default {

@ -2,7 +2,7 @@
<view class="country-box">
<betone-new-input
:label="label"
placeholder="请选择"
:placeholder="placeholder"
type="select"
@arrow="selectFun"
v-model="areaName"
@ -67,6 +67,10 @@ export default {
type: String,
default: "",
},
placeholder:{
type: String,
default: "请选择",
}
},
watch: {
value(name) {

@ -62,8 +62,9 @@
<!-- 待维修 -- 查看位置-->
<block v-if="(dataTypes==1)&&(item.status == 1 || item.status == 2 || item.status == 3)">
<u-button size="mini" :plain="true" style="margin-right: 32rpx" :hair-line="true"
type="primary">查看位置</u-button>
type="primary" @click="goPage(item,'location')">查看位置</u-button>
</block>
<block v-if="item.status == 5&& dataTypes == 1">
<u-button size="mini" :plain="true" style="margin-right: 32rpx" :hair-line="true"
@ -111,7 +112,7 @@ export default {
已完成: "#CECECE",
待维修: '#E99D42'
},
current: 0,
loadingState: "loadmore",
isNomore: false,
@ -307,6 +308,11 @@ export default {
url: `/pages/submission/evaluate${this.$u.queryParams(param)}`,
});
}
if(type == 'location'){//
uni.navigateTo({
url: `/pages/order/location`,
})
}
},
},
@ -318,7 +324,6 @@ export default {
padding: 0;
.page-search-top {
height: 210rpx;
background-color: rgba(248, 248, 248, 1);
padding: 0 40rpx 0;
}

@ -6,6 +6,7 @@
<view class="label">
<text v-if="isRequire" class="is-require">*</text>
{{ label }}
</view>
<view class="sp-new-input" v-if="type == 'textarea'" style="padding:16rpx">
<u-input
@ -17,6 +18,7 @@
:height="height"
:disabled="disabled"
></u-input>
</view>
<view class="sp-new-input" v-else>
@ -38,6 +40,7 @@
:maxlength="maxlength"
:disabled="disabled"
></u-input>
<u-icon style="padding-right:12rpx" @click="scanCode" v-if="endIcon" size="60" :name="endIcon"></u-icon>
<view class="wrap sms" v-if="isSms">
<u-toast ref="uToast"></u-toast>
<u-verification-code
@ -56,6 +59,7 @@
class="arrow"
@click="$emit('arrow', true)"
></view>
<view class="sub">
<slot name="sub"></slot>
</view>
@ -108,6 +112,10 @@ export default {
type: Number,
default: 100,
},
endIcon:{//icon
type: String,
default: "",
}
},
data() {
return {
@ -162,6 +170,19 @@ export default {
ch(e) {
this.$emit("changevalue", e);
},
//
scanCode(){
uni.scanCode({
success: (res) => {
console.log('扫码结果:' + res.result);
//
// this.handleScanResult(res.result);
},
fail: (err) => {
console.error('扫码失败:' + err);
}
});
}
},
model: {
prop: "value",

@ -2,7 +2,8 @@
"easycom": {
"^betone-(.*)": "@/common/betone_components/betone-$1.vue"
},
"pages": [{
"pages": [
{
"path": "pages/home/index",
"style": {
"navigationStyle": "custom",
@ -12,8 +13,8 @@
{
"path": "pages/my/my",
"style": {
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
@ -54,16 +55,16 @@
},
{
"path": "pages/submission/records",
"style" : {
"navigationStyle" : "custom",
"navigationBarTitleText" : "",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "",
"enablePullDownRefresh": true,
"h5" : {
"titleNView" : false
"h5": {
"titleNView": false
},
"app-plus" : {
"titleNView" : false,
"scrollIndicator" : "none"
"app-plus": {
"titleNView": false,
"scrollIndicator": "none"
}
}
},
@ -75,10 +76,8 @@
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "rgba(248,248,248,1)",
"app-plus": {
"titleNView": {
}
}
"titleNView": {}
}
}
},
{
@ -88,53 +87,88 @@
"enablePullDownRefresh": false,
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "rgba(248,248,248,1)",
"app-plus": {
"titleNView": {
}
}
"app-plus": {
"titleNView": {}
}
}
},
{
"path": "pages/order/tasking",
"style": {
"navigationStyle": "custom",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/order/location",
"style": {
"navigationBarTitleText": "查看位置",
"enablePullDownRefresh": false,
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "rgba(248,248,248,1)",
"app-plus": {
"titleNView": {}
}
}
},
{
"path": "pages/login/login",
"style": {
"navigationStyle": "custom",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/register/index",
"style": {
"navigationStyle": "custom",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/register/registerSuccess",
"style": {
"navigationStyle": "custom",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/inspection/quest",
"style": {
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/inspection/questDetails",
"style": {
"navigationBarTitleText": "巡检任务单",
"enablePullDownRefresh": false,
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "rgba(248,248,248,1)",
"app-plus": {
"titleNView": {}
}
}
},
{
"path": "pages/inspection/plan",
"style": {
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/inspection/records",
"style": {
"navigationBarTitleText": "巡检计划",
"navigationBarTitleText": "巡检计划",
"enablePullDownRefresh": false,
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "rgba(248,248,248,1)",
"app-plus": {
"titleNView": {
}
}
"titleNView": {}
}
}
}
],
@ -146,7 +180,8 @@
"backgroundColor": "#fff"
},
"tabBar": {
"list": [{
"list": [
{
"pagePath": "pages/home/index"
},
{
@ -157,6 +192,12 @@
},
{
"pagePath": "pages/my/my"
},
{
"pagePath": "pages/inspection/quest"
},
{
"pagePath": "pages/inspection/plan"
}
]
}

@ -3,16 +3,16 @@
<view v-for="(item, index) in list" :key="index" class="alarm-box">
<view
class="alarm-left"
:style="`borderColor: ${colorList[item.title6]} `"
:style="`borderColor: ${colorList[item.alarmName]} `"
>
<i>{{ item.title5 }}</i>
<i>{{ item.title6 }}</i>
<i>{{ item.alarmName }}</i>
<i>{{ item.levelNanme }}</i>
</view>
<view class="alarm-center">
<text>{{ item.title1 }}</text>
<text>品牌:{{ item.title2 }}</text>
<text>型号:{{ item.title3 }}</text>
<text>报警时间:{{ item.title4 }}</text>
<text>{{ item.deviceName }}</text>
<text>品牌:{{ item.brand }}</text>
<text>型号:{{ item.model }}</text>
<text>报警时间:{{ item.alarmTime }}</text>
<view class="alarm-center-btn">一键报送</view>
</view>
<view class="alarm-right"></view>
@ -28,25 +28,48 @@ export default {
严重: "rgba(233,157,66,1)",
},
list: [
{
title1: "通风柜",
title2: "德力西",
title3: "FSAJ",
title4: "2024-08-09",
title5: "一级",
title6: "特别严重",
},
{
title1: "通风柜",
title2: "德力西",
title3: "FSAJ",
title4: "2024-08-09",
title5: "一级",
title6: "严重",
},
// {
// title1: "",
// title2: "西",
// title3: "FSAJ",
// title4: "2024-08-09",
// title5: "",
// title6: "",
// },
// {
// title1: "",
// title2: "西",
// title3: "FSAJ",
// title4: "2024-08-09",
// title5: "",
// title6: "",
// },
],
};
},
mounted(){
this.deviceList()
},
methods:{
deviceList(){
this.$u.api.deviceList().then(res=>{
if(res.code ==200){
let data_ =res.data
data_.forEach(v => {
if(v.alarmLevel==1){
v.alarmName = '一级'
v.levelNanme = '超级严重'
}
if(v.alarmLevel==2){
v.alarmName = '二级'
v.levelNanme = '严重'
}
});
this.list = res.data
}
})
}
}
};
</script>
<style lang="scss" scoped>

@ -56,19 +56,43 @@ export default {
},
calendarShow: false,
mode: "range",
upkeepStatInfo:{},
pieInfo:{},//
};
},
mounted() {
//
if (this.type == "maintenanceStatistics") {
this.maintenanceInit();
this.upkeepStat()
}
if (this.type == "maintenanceStatisticsPie") {
this.maintenancePieLeftInit();
this.maintenancePieRightInit();
this.pieStat()
}
},
methods: {
//
upkeepStat(){
this.$u.api.upkeepStat().then(res=>{
if(res.code== 200){
this.upkeepStatInfo = JSON.parse(JSON.stringify(res.data))
this.maintenanceInit();
}
})
},
//
pieStat(){
this.$u.api.pieStat().then(res=>{
if(res.code == 200){
this.pieInfo = res.data
this.maintenancePieLeftInit();
this.maintenancePieRightInit();
}
})
},
selectFun() {
this.calendarShow = true;
},
@ -79,6 +103,7 @@ export default {
this.form.searchTime = e.startDate + "-" + e.endDate;
//
},
//
maintenanceInit() {
let opts = {
tooltip: {},
@ -87,7 +112,7 @@ export default {
data: ["总计", "已完成", "未完成"],
},
xAxis: {
data: ["报送维修", "巡检维修"],
data: this.upkeepStatInfo.xData,
},
grid: {
top: "15%",
@ -100,7 +125,7 @@ export default {
{
name: "总计",
type: "bar",
data: [15, 30],
data: this.upkeepStatInfo.total,
barWidth: 30, //
barGap: "0", // 0
itemStyle: {
@ -110,7 +135,7 @@ export default {
{
name: "已完成",
type: "bar",
data: [10, 20],
data: this.upkeepStatInfo.completed,
barWidth: 30, //
barGap: "0", // 0
itemStyle: {
@ -120,7 +145,7 @@ export default {
{
name: "未完成",
type: "bar",
data: [5, 10],
data: this.upkeepStatInfo.unCompleted,
barWidth: 30, //
barGap: "0", // 0
itemStyle: {
@ -137,6 +162,7 @@ export default {
return chart;
});
},
//
maintenancePieLeftInit() {
let opts = {
series: [
@ -155,13 +181,7 @@ export default {
},
},
data: [
{ value: 248, name: "空调" },
{ value: 135, name: "装修类" },
{ value: 180, name: "智能设备" },
{ value: 654, name: "暖通、自控" },
{ value: 300, name: "电气" },
],
data: this.pieInfo.fault,
emphasis: {
itemStyle: {
shadowBlur: 10,
@ -210,11 +230,7 @@ export default {
color:'#000'
},
},
data: [
{ value: 148, name: "空调" },
{ value: 735, name: "通风柜" },
{ value: 580, name: "设备1" },
],
data: this.pieInfo.device,
labelLine: {
// 线, label 'outside'线
normal: {

@ -14,13 +14,13 @@
:key="index"
class="swiper-item"
>
<view class="title">{{ item.articleTitle }}</view>
<view class="time">巡检计划时间:{{ item.title2 }}</view>
<view class="name">巡检人:{{ item.title3 }}</view>
<view class="title">{{ item.inspectionName }}</view>
<view class="time">巡检计划时间:{{ item.inspectionTime }}</view>
<view class="name">巡检人:{{ item.inspectionPerson }}</view>
<view class="status">
<i class="status-name">未开始</i><i>预约时间2024/8/31 14:00</i>
<i class="status-name">{{ item.isStart==1?'已开始':'未开始' }}</i><i>预约时间{{ item.appointTime }}</i>
</view>
<view class="type">{{ item.type }}</view>
<view class="type">{{ item.taskType==1?'周期任务':'单次任务' }}</view>
</swiper-item>
</swiper>
</view>
@ -30,28 +30,27 @@ export default {
data() {
return {
list: [
{
articleTitle: "实验室设备巡检",
title2: "2024-04-06",
title3: "张三1",
type: "周期任务",
id: "36",
},
{
articleTitle: "文章标题002",
title2: "2024-04-06",
title3: "张三2",
type: "周期任务",
id: "37",
},
],
};
},
mounted(){
this.workList()
},
methods: {
//
click(id) {
console.log(id, "======>id");
},
workList(){
this.$u.api.workList().then(res=>{
console.log(1111111111111,res)
if(res.code == 200){
this.list = res.data
}
})
}
},
};
</script>

@ -47,7 +47,7 @@ export default {
},
data() {
return {
swiperList: [require("@/static/images/home/lab.png")],
swiperList: [],
workList: [
{
name: "实验室巡检",
@ -85,9 +85,23 @@ export default {
}, 1000);
});
//
this.getworkbench();
this.getUserInfo()
},
methods: {
getUserInfo(){
this.$u.api.getUserInfo().then(res=>{
if(res.code == 200){
console.log(1111111,res.data)
if(res.data.backGroundPic!=''){
this.swiperList.push(res.data.backGroundPic)
}else{
this.swiperList.push(require("@/static/images/home/lab.png"))
}
}else{
this.swiperList.push(require("@/static/images/home/lab.png"))
}
})
},
getworkbench() {
console.log(55);
// this.$u.api.getworkbench().then(res=>{

@ -0,0 +1,252 @@
<template>
<view>
<u-collapse :accordion="false">
<u-collapse-item v-for="(item, index) in itemList" :key="index" >
<view slot="title">
<text class="collapse-title">实验室楼层{{ item.title }}</text>
</view>
<view v-for="(v, vindex) in item.fangjian" :key="vindex" class="collapse-room">
<view>房间名称{{ v.fangjianmingcheng }}</view>
<view v-for="(s, sindex) in v.neirong" :key="sindex" class="collapse-major">
<view>专业分类{{ s.xitong }}</view>
<view v-for="(n, nindex) in s.detection" :key="nindex" class="n-box">
<u-tag :text="nindex + 1" type="info" class="left-tag" />
<u-tag text="已检" type="success" class="right-tag" />
<view class="n-box-title"> 各排/出水口通水顺畅</view>
<view class="n-box-info"> 工艺内容工艺内容工艺内容工艺内容工艺内容工艺内容工艺内容</view>
<view class="info_item">
<text class="item_left_txt">状态</text>
<text class="item_right_txt">
<u-radio-group v-model="n.radioValue">
<u-radio name="1">正常</u-radio>
<u-radio name="0">异常</u-radio>
</u-radio-group>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">现场照片</text>
<text class="item_right_txt">
<view class="btn">上传照片</view>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">使用人签字</text>
<text class="item_right_txt">
<image v-if="n.qianzi" :src="n.qianzi" style="width: 144px;height: 77rpx;" mode="widthFix" @click="toPop1(index,vindex,sindex,nindex)"></image>
<view v-else class="btn" @click="toPop1(index,vindex,sindex,nindex)">签字</view>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">备注</text>
<text class="item_right_txt">
<betone-new-input type="textarea" :placeholder="'请输入'"></betone-new-input>
</text>
</view>
</view>
</view>
</view>
</u-collapse-item>
</u-collapse>
<jp-signature-popup ref="signature1" popup v-model="image2" @change="signChange" />
</view>
</template>
<script>
export default {
data() {
return {
image2:'',//
signIndex:[],
satisfactionList: [
{
text: '正常',
value: 1
},
{
text: '异常',
value: 0
}
],
itemList: [
{
title: '三层',
fangjian: [
{
fangjianmingcheng: '房间一',
neirong: [{
xitong: '水系统',
detection: [
{
title1: '水量水压满足用水要求1',
radioValue: null,
qianzi:'',//
},
{
title1: '水量水压满足用水要求2',
radioValue: null,
qianzi:'',//
}
]
}]
},
{
fangjianmingcheng: '房间二',
neirong: [{
xitong: '水系统',
detection: [
{
title1: '水量水压满足用水要求1',
radioValue: 0
},
{
title1: '水量水压满足用水要求2',
radioValue: 1
}
]
}, {
xitong: '水系统2',
detection: [
{
title1: '水量水压满足用水要求1',
radioValue: 0
},
{
title1: '水量水压满足用水要求2',
radioValue: 1
}
]
}]
}
]
},
{
title: '四层',
fangjian: [
{
fangjianmingcheng: '房间一',
neirong: [{
xitong: '水系统'
}]
}
]
}
],
}
},
methods:{
toPop1(index,vindex,sindex,nindex){
this.signIndex=[index,vindex,sindex,nindex]
this.$refs.signature1.toPop()
},
signChange(e){
console.log(11111,e)
this.itemList[this.signIndex[0]].fangjian[this.signIndex[1]].neirong[this.signIndex[2]].detection[this.signIndex[3]].qianzi = e
}
}
}
</script>
<style lang="scss" scoped>
.collapse-title {
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 32rpx;
text-align: left;
font-family: SourceHanSansSC-bold;
margin: 18rpx 0 0rpx 20rpx;
}
.collapse-room {
margin: 0 32rpx 20rpx;
color: rgba(0, 0, 0, 1);
}
.collapse-major {
margin: 0 32rpx 20rpx;
color: rgba(0, 0, 0, 1);
margin: 12rpx 24rpx 12rpx;
.n-box {
border: 1px solid rgba(239, 239, 239, 1);
padding: 32rpx 54rpx 0;
margin-top: 24rpx;
margin-bottom: 24rpx;
position: relative;
.right-tag {
position: absolute;
right: 0;
top: 0;
}
.left-tag {
position: absolute;
left: 0;
top: 0;
padding-left: 10rpx;
padding-right: 10rpx;
}
.n-box-title {
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
text-align: left;
}
.n-box-info {
line-height: 32rpx;
color: rgba(154, 154, 154, 1);
font-size: 24rpx;
padding-top: 12rpx;
padding-bottom: 12rpx;
}
.info_item {
width: 100%;
display: flex;
flex-direction: row;
margin: 24rpx 0 24rpx;
.item_left_txt {
color: rgba(108, 108, 108, 1);
font-size: 28rpx;
text-align: left;
width: 170rpx;
margin-right: 20rpx;
line-height: 60rpx;
}
.item_right_txt {
flex: 1;
max-width: calc(100% - 220rpx);
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
// text-align: left;
text-align: justify;
font-family: SourceHanSansSC-regular;
/deep/.u-radio-group {
flex-wrap: nowrap;
padding-right: 48rpx;
}
.btn {
width: 260rpx;
height: 60rpx;
line-height: 60rpx;
border-radius: 8rpx;
background-color: rgba(255, 255, 255, 1);
color: rgba(58, 98, 215, 1);
font-size: 28rpx;
text-align: center;
border: 2rpx dashed rgba(58, 98, 215, 1);
}
}
}
}
}
</style>

@ -0,0 +1,372 @@
<template>
<view class="page-css">
<view class="page-search-top">
<betone-new-input v-model="searchInfo.requirementCode" placeholder='搜索巡检单单号' icon="search"
style="margin-bottom: 32rpx" @changevalue="searchData()" />
<u-tabs :list="tabList" :is-scroll="false" :current="current" @change="changeTab"
bg-color="rgba(248, 248, 248, 1)"></u-tabs>
</view>
<view class="order-box">
<!-- @click="goPage(item, 'details')" -->
<view class="order-item" v-for="(item, index) in orderData" :key="index">
<view class="item-top">
<view class="item-left">
<text class="item-orderNo">{{ item.unitName }}</text>
<text class="item-time"> 单号{{ item.inspectionNo }}</text>
</view>
<view class="item-right">
<u-tag :text="statusName(item.status)" type="success" mode="dark" shape="circle"
:bg-color="tagColor[statusName(item.status)]" />
</view>
</view>
<view class="item-con">
<view class="con-right">
<text class="con-title">提报类型{{ item.faultType }}</text>
<text class="con-title">巡检项目名称{{ item.inspectionName }}</text>
<text class="con-title">项目地址{{ item.projectAddr }}</text>
<text class="con-title">巡检周期{{ item.cycle }}</text>
<text class="con-title">巡检时间{{ item.startTime }}-{{ item.nextDate }} </text>
<!-- <view class="con-btn">
</view> -->
</view>
</view>
</view>
</view>
<betone-loading ref="BetLoading" />
</view>
</template>
<script>
export default {
props: {
},
data() {
return {
searchInfo: {
requirementCode: "",
type: '',//
},
tabList: [
{
name: "全部",
key: "9999",
},
{
name: "启用",
key: "1",
},
{
name: "停用",
key: "0",
},
],
tagColor: {
停用: "#909399",
启用: "#67c23a",
},
current: 0,
orderData: [],
};
},
computed: {
dataTypes() {
return this.$store.state.dataType
},
},
mounted() {
this.$nextTick(() => {
this.getRecordsList()
});
},
methods: {
//
getRecordsList() {
// this.$refs.BetLoading.show();
// this.$u.api.getDictionaryList().then(res => {
// if (res.code == 200) {
// this.orderData = res.data;
// this.$refs.BetLoading.hide();
// }
// }).catch(err => {
// })
this.orderData = [
{
inspectionNo: 'WX-20240820-01',
unitName: '济南安池实验室',
inspectionName: '实验室设备巡检',
projectAddr: '济南市钢城区',
team: '巡检班组一,巡检班组二',
startTime: '2024-05-21',
cycle: '季度',
nextDate: '2024-07-21',
status: 0,
tableData: [
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求1' },
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求2' },
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求2' },
{ majorName: '电气系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求3' },
{ majorName: '电气系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求3' },
]
},
{
inspectionNo: 'WX-20240820-01',
unitName: '济南安池实验室',
inspectionName: '实验室设备巡检',
projectAddr: '济南市钢城区',
team: '巡检班组一,巡检班组二',
startTime: '2024-09-21',
cycle: '季度',
nextDate: '2024-12-21',
status: 1,
tableData: [
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求1' },
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求2' },
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求2' },
{ majorName: '电气系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求3' },
{ majorName: '电气系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求3' },
]
},
{
inspectionNo: 'WX-20240820-01',
unitName: '济南安池实验室',
inspectionName: '实验室设备巡检',
projectAddr: '济南市钢城区',
team: '巡检班组一,巡检班组二',
startTime: '2024-09-21',
cycle: '季度',
nextDate: '2024-12-21',
status: 1,
tableData: [
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求1' },
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求2' },
{ majorName: '水系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求2' },
{ majorName: '电气系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求3' },
{ majorName: '电气系统', inspectionCon: '1、水量水压满足用水要求', techRequire: '工艺要求3' },
]
},
]
},
//
searchData() {
if (this.dataTypes != 1) {
//
this.searchInfo.reportUnit = this.searchInfo.requirementCode
} else {
this.searchInfo.reportUnit = ''
}
this.isNomore = false
// this.page.currentPage = 1;
this.getRecordsList()
},
// tab
changeTab(index) {
this.current = index;
this.searchInfo.type = this.tabList[index].key == '9999' ? '' : this.tabList[index].key
this.isNomore = false
// this.page.currentPage = 1;
this.getRecordsList()
},
//
statusName(item) {
if (item == 0) {
return '停用'
}
if (item == 1) {
return '启用'
}
},
//
goPage(item, type) {
if (type == 'details') {
uni.navigateTo({
url: "/pages/submission/recordsdetails?id=" + item.id,
});
}
if (type == 'breakdownView') {
let param = {
id: item.id,
type: type
}
uni.navigateTo({
url: `/pages/submission/submissionDetails${this.$u.queryParams(param)}`,
});
}
if (type == 'breakdownUpdate') {
let param = {
id: item.id,
type: type
}
uni.navigateTo({
url: `/pages/submission/submissionDetails${this.$u.queryParams(param)}`,
});
}
if (type == 'evaluate') {
let param = {
id: item.id,
}
uni.navigateTo({
url: `/pages/submission/evaluate${this.$u.queryParams(param)}`,
});
}
},
},
};
</script>
<style lang="scss" scoped>
.page-css {
padding: 0;
.page-search-top {
height: 210rpx;
background-color: rgba(248, 248, 248, 1);
padding: 0 40rpx 0;
}
.order-box {
margin-top: 20rpx;
.order-item {
min-height: 414rpx;
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background: #fff;
display: flex;
flex-direction: column;
.item-top {
height: 114rpx;
border-bottom: 1px solid rgba(239, 239, 239, 1);
display: flex;
flex-direction: row;
width: 100%;
.item-left {
flex: 1;
text {
display: block;
}
.item-orderNo {
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
padding: 12rpx 0 0 26rpx;
}
.item-time {
color: rgba(190, 190, 190, 1);
font-size: 24rpx;
padding: 12rpx 0 0 26rpx;
}
}
.item-right {
width: 132rpx;
height: 48rpx;
margin: 36rpx 24rpx 0 0;
}
}
.item-con {
flex: 1;
display: flex;
flex-direction: row;
margin-bottom: 32rpx;
.con-left {
width: 150rpx;
height: 150rpx;
margin: 24rpx 28rpx 0 28rpx;
image {
width: 100%;
height: 100%;
}
}
.con-right {
flex: 1;
margin-right: 24rpx;
display: flex;
flex-direction: column;
margin-left: 32rpx;
text {
display: block;
}
.con-title {
margin-top: 12rpx;
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
}
.con-content {
color: rgba(108, 108, 108, 1);
font-size: 24rpx;
// line-height: 36rpx;
margin-top: 14rpx;
flex: 1;
text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.5em;
/* 这个值根据你的需求调整,这里假设为1.5倍行高 */
max-height: 3em;
/* 3行的高度 */
width: 100%;
/* 根据需要设置宽度 */
word-wrap: break-word;
/* 允许在单词内换行 */
word-break: break-all;
/* 允许在任意字符处换行 */
}
}
.con-btn {
margin-top: 56rpx;
margin-bottom: 32rpx;
display: inline-block;
text-align: right;
}
}
}
}
}
}
</style>

@ -0,0 +1,167 @@
<template>
<view class="page-css">
<view class="page-header-txt">科研医疗建筑运维平台</view>
<planList></planList>
<betone-tabbar ref="tabbarRef" />
</view>
</template>
<script>
import planList from './components/plan-list.vue'
export default {
components: {
planList,
},
props: {
},
data() {
return {
};
},
computed: {
},
onShow() {
this.$nextTick(() => {
this.$refs.tabbarRef.getPermission();
});
},
methods: {
},
};
</script>
<style lang="scss" scoped>
.page-css {
padding: 0;
.page-search-top {
height: 210rpx;
background-color: rgba(248, 248, 248, 1);
padding: 0 40rpx 0;
}
.order-box {
margin-top: 20rpx;
.order-item {
min-height: 414rpx;
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background: #fff;
display: flex;
flex-direction: column;
.item-top {
height: 114rpx;
border-bottom: 1px solid rgba(239, 239, 239, 1);
display: flex;
flex-direction: row;
width: 100%;
.item-left {
flex: 1;
text {
display: block;
}
.item-orderNo {
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
padding: 12rpx 0 0 26rpx;
}
.item-time {
color: rgba(190, 190, 190, 1);
font-size: 24rpx;
padding: 12rpx 0 0 26rpx;
}
}
.item-right {
width: 132rpx;
height: 48rpx;
margin: 36rpx 24rpx 0 0;
}
}
.item-con {
flex: 1;
display: flex;
flex-direction: row;
margin-bottom: 24rpx;
.con-left {
width: 150rpx;
height: 150rpx;
margin: 24rpx 28rpx 0 28rpx;
image {
width: 100%;
height: 100%;
}
}
.con-right {
flex: 1;
margin-right: 24rpx;
display: flex;
flex-direction: column;
margin-left: 32rpx;
text {
display: block;
}
.con-title {
margin-top: 12rpx;
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
}
.con-content {
color: rgba(108, 108, 108, 1);
font-size: 24rpx;
// line-height: 36rpx;
margin-top: 14rpx;
flex: 1;
text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.5em;
/* 这个值根据你的需求调整,这里假设为1.5倍行高 */
max-height: 3em;
/* 3行的高度 */
width: 100%;
/* 根据需要设置宽度 */
word-wrap: break-word;
/* 允许在单词内换行 */
word-break: break-all;
/* 允许在任意字符处换行 */
}
}
.con-btn {
margin-top: 56rpx;
margin-bottom: 32rpx;
display: inline-block;
text-align: right;
}
}
}
}
}
}
</style>

@ -0,0 +1,349 @@
<template>
<view class="page-css">
<view class="page-header-txt">科研医疗建筑运维平台</view>
<view class="page-search-top">
<betone-new-input v-model="searchInfo.requirementCode" placeholder="搜索巡检单单号" icon="search"
style="margin-bottom: 32rpx" @changevalue="searchData()" />
<u-tabs :list="tabList" :is-scroll="false" :current="current" @change="changeTab"
bg-color="rgba(248, 248, 248, 1)"></u-tabs>
</view>
<view class="order-box">
<view class="order-item" v-for="(item, index) in orderData" :key="index"
@click="goPage(item, '/pages/inspection/questDetails')">
<view class="item-top">
<view class="item-left">
<text class="item-orderNo">{{ item.reportUnit }}</text>
<text class="item-time"> 单号{{ item.requirementCode }} {{ item.fillingTime }}</text>
</view>
<view class="item-right">
<u-tag :text="statusName(item.status)" type="success" mode="dark" shape="circle"
:bg-color="tagColor[statusName(item.status)]" />
</view>
</view>
<view class="item-con">
<view class="con-left">
<image src="@/static/images/pic-default.png" alt="" />
</view>
<view class="con-right">
<text class="con-title">提报类型{{ item.faultType }}</text>
<view class="con-content">
<text>{{ item.faultDescribe }}</text>
</view>
<view class="con-btn">
</view>
</view>
</view>
</view>
</view>
<u-loadmore margin-top="10" margin-bottom="40" :status="loadingState" />
<betone-loading ref="BetLoading" />
<betone-tabbar ref="tabbarRef" />
</view>
</template>
<script>
export default {
props: {
},
data() {
return {
searchInfo: {
requirementCode: "",
type: '',//
reportUnit: '',//
},
tagColor: {
维修中: "#3A62D7",
待确认: "#81B337",
待维修: "#3A62D7",
待提报: "#81B337",
已完成: "#CECECE",
待维修: '#E99D42'
},
tabList: [
{
name: "全部",
key: "9999",
},
{
name: "待提报",
key: "-1",
},
{
name: "维修中",
key: "1,2,3",
},
{
name: "已完成",
key: "4,5,6",
},
],
current: 0,
loadingState: "loadmore",
isNomore: false,
noDataFlag: false,
orderData: [],
page: {
currentPage: 1,
pageSize: 10,
},
};
},
computed: {
noData() {
return this.orderData && this.orderData.length == 0;
},
dataTypes() {
return this.$store.state.dataType
},
},
onShow() {
this.$nextTick(() => {
this.$refs.tabbarRef.getPermission();
this.$refs.BetLoading.show();
setTimeout(() => {
this.$refs.BetLoading.hide();
}, 1000);
});
},
onReachBottom() {
if (this.isNomore) {
return;
}
this.page.currentPage++;
this.getRecordsList();
},
onPullDownRefresh() {
this.isNomore = false
this.page.currentPage = 1;
this.getRecordsList();
uni.stopPullDownRefresh();
},
mounted() {
this.$nextTick(() => {
this.getRecordsList()
});
},
methods: {
//
getRecordsList() {
this.$refs.BetLoading.show();
this.loadingState = "loading";
let query = {
current: this.page.currentPage, //
size: this.page.pageSize, //
dataType: this.dataTypes,//
// ...this.searchInfo
// reportUnit: this.searchInfo.reportUnit
}
this.$u.api.getWorkOrderRecords(query).then(res => {
if (res.code == 200) {
var totalPage = res.data.total;
var newOrders = res.data.records;
if (this.page.currentPage == 1) {
this.orderData = [];
}
this.orderData = [...this.orderData, ...(res.data.records || [])];
if (newOrders.length == 0) {
this.loadingState = "nomore";
this.isNomore = true;
}
if (totalPage == this.orderData.length) {
this.loadingState = "nomore";
this.isNomore = true;
}
this.$refs.BetLoading.hide();
}
}).catch(err => {
})
},
//
searchData() {
if (this.dataTypes != 1) {
//
this.searchInfo.reportUnit = this.searchInfo.requirementCode
} else {
this.searchInfo.reportUnit = ''
}
this.isNomore = false
this.page.currentPage = 1;
this.getRecordsList()
},
// tab
changeTab(index) {
this.current = index;
this.searchInfo.type = this.tabList[index].key == '9999' ? '' : this.tabList[index].key
this.isNomore = false
this.page.currentPage = 1;
this.getRecordsList()
},
//
statusName(item) {
if (item == -1) {
return '待提报'
}
if (item == 0) {
return '待接单'
}
if (item == 1 || item == 2 || item == 3) {
return '待维修'
}
if (item == 4 || item == 5 || item == 6) {
return '已完成'
}
},
//
goPage(item, path) {
uni.navigateTo({
url: path,
});
},
},
};
</script>
<style lang="scss" scoped>
.page-css {
padding: 0;
.page-search-top {
height: 210rpx;
background-color: rgba(248, 248, 248, 1);
padding: 0 40rpx 0;
}
.order-box {
margin-top: 20rpx;
.order-item {
height: 414rpx;
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background: #fff;
display: flex;
flex-direction: column;
.item-top {
height: 114rpx;
border-bottom: 1px solid rgba(239, 239, 239, 1);
display: flex;
flex-direction: row;
width: 100%;
.item-left {
flex: 1;
text {
display: block;
}
.item-orderNo {
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
padding: 12rpx 0 0 26rpx;
}
.item-time {
color: rgba(190, 190, 190, 1);
font-size: 24rpx;
padding: 12rpx 0 0 26rpx;
}
}
.item-right {
width: 132rpx;
height: 48rpx;
margin: 36rpx 24rpx 0 0;
}
}
.item-con {
flex: 1;
display: flex;
flex-direction: row;
.con-left {
width: 150rpx;
height: 150rpx;
margin: 24rpx 28rpx 0 28rpx;
image {
width: 100%;
height: 100%;
}
}
.con-right {
flex: 1;
margin-right: 24rpx;
display: flex;
flex-direction: column;
text {
display: block;
}
.con-title {
margin-top: 12rpx;
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
}
.con-content {
color: rgba(108, 108, 108, 1);
font-size: 24rpx;
// line-height: 36rpx;
margin-top: 14rpx;
flex: 1;
text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.5em;
/* 这个值根据你的需求调整,这里假设为1.5倍行高 */
max-height: 3em;
/* 3行的高度 */
width: 100%;
/* 根据需要设置宽度 */
word-wrap: break-word;
/* 允许在单词内换行 */
word-break: break-all;
/* 允许在任意字符处换行 */
}
}
.con-btn {
margin-top: 56rpx;
margin-bottom: 32rpx;
display: inline-block;
text-align: right;
}
}
}
}
}
}
</style>

@ -0,0 +1,99 @@
<template>
<view class="page-css">
<view class="info">
<view class="info_title">基本信息</view>
<view class="info_item">
<text class="item_left_txt">单位名称</text>
<text class="item_right_txt">张三</text>
</view>
<view class="info_item">
<text class="item_left_txt">巡检项目名称</text>
<text class="item_right_txt">张三</text>
</view>
<view class="info_item">
<text class="item_left_txt">项目地址</text>
<text class="item_right_txt">张三</text>
</view>
</view>
<view class="info">
<view class="info_title">巡检配置</view>
<view class="info_item">
<text class="item_left_txt">巡检内容</text>
<text class="item_right_txt">张三</text>
</view>
<view class="info_item">
<text class="item_left_txt">任务开始时间</text>
<text class="item_right_txt">张三</text>
</view>
<view class="info_item">
<text class="item_left_txt">预约上门时间</text>
<text class="item_right_txt">张三</text>
</view>
</view>
<view class="info">
<view class="info_title">巡检任务</view>
<detailsCollapse></detailsCollapse>
</view>
</view>
</template>
<script>
import detailsCollapse from './components/detailsCollapse.vue'
export default {
components: {
detailsCollapse,
},
}
</script>
<style lang="scss" scoped>
.page-css {
width: 100%;
padding: 0;
padding-top: 26rpx;
padding-bottom: 180rpx;
.info {
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background-color: rgba(255, 255, 255, 1);
padding: 6rpx 0 34rpx;
.info_title {
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 32rpx;
text-align: left;
font-family: SourceHanSansSC-bold;
margin: 18rpx 0 0rpx 20rpx;
font-weight: bold;
}
.info_item {
padding: 4rpx 20rpx 0;
display: flex;
align-items: center;
justify-content: space-between;
.item_left_txt {
color: rgba(108, 108, 108, 1);
font-size: 28rpx;
text-align: left;
font-family: SourceHanSansSC-regular;
width: 210rpx;
margin-right: 20rpx;
line-height: 60rpx;
}
.item_right_txt {
max-width: calc(100% - 220rpx);
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
// text-align: left;
text-align: justify;
font-family: SourceHanSansSC-regular;
}
}
}
}
</style>

@ -1,40 +1,6 @@
<template>
<view class="page-css">
<view class="page-search-top">
<betone-new-input v-model="searchInfo.requirementCode" placeholder='搜索巡检单单号' icon="search"
style="margin-bottom: 32rpx" @changevalue="searchData()" />
<u-tabs :list="tabList" :is-scroll="false" :current="current" @change="changeTab"
bg-color="rgba(248, 248, 248, 1)"></u-tabs>
</view>
<view class="order-box">
<view class="order-item" v-for="(item, index) in orderData" :key="index" @click="goPage(item, 'details')">
<view class="item-top">
<view class="item-left">
<text class="item-orderNo">{{ item.unitName }}</text>
<text class="item-time"> 单号{{ item.taskNo }}</text>
</view>
<view class="item-right">
<u-tag :text="statusName(item.status)" type="success" mode="dark" shape="circle"
:bg-color="tagColor[statusName(item.status)]" />
</view>
</view>
<view class="item-con">
<view class="con-left">
<image src="@/static/images/pic-default.png" alt="" />
</view>
<view class="con-right">
<text class="con-title">提报类型{{ item.faultType }}</text>
<view class="con-content">
<text>{{ item.faultDescribe }}</text>
</view>
<view class="con-btn">
</view>
</view>
</view>
</view>
</view>
<planList></planList>
<betone-loading ref="BetLoading" />
@ -44,283 +10,36 @@
</template>
<script>
import planList from './components/plan-list.vue'
export default {
components: {
planList,
},
props: {
},
data() {
return {
searchInfo: {
requirementCode: "",
type: '',//
},
tabList: [
{
name: "全部",
key: "9999",
},
{
name: "待提报",
key: "-1",
},
{
name: "维修中",
key: "1,2,3",
},
{
name: "已完成",
key: "4,5,6",
},
],
tagColor: {
维修中: "#3A62D7",
待确认: "#81B337",
待维修: "#3A62D7",
待提报: "#81B337",
已完成: "#CECECE",
待维修: '#E99D42'
},
current: 0,
orderData: [],
};
},
computed: {
dataTypes() {
return this.$store.state.dataType
},
},
mounted() {
this.$nextTick(() => {
this.getRecordsList()
});
},
methods: {
//
getRecordsList() {
this.$refs.BetLoading.show();
this.$u.api.getDictionaryList().then(res => {
if (res.code == 200) {
this.orderData = res.data;
this.$refs.BetLoading.hide();
}
}).catch(err => {
})
},
//
searchData() {
if (this.dataTypes != 1) {
//
this.searchInfo.reportUnit = this.searchInfo.requirementCode
} else {
this.searchInfo.reportUnit = ''
}
this.isNomore = false
this.page.currentPage = 1;
this.getRecordsList()
},
// tab
changeTab(index) {
this.current = index;
this.searchInfo.type = this.tabList[index].key == '9999' ? '' : this.tabList[index].key
this.isNomore = false
this.page.currentPage = 1;
this.getRecordsList()
},
//
statusName(item) {
if (item == -1) {
return '待提报'
}
if (item == 0) {
return '待接单'
}
if (item == 1 || item == 2 || item == 3) {
return '待维修'
}
if (item == 4 || item == 5 || item == 6) {
return '已完成'
}
},
//
goPage(item, type) {
if (type == 'details') {
uni.navigateTo({
url: "/pages/submission/recordsdetails?id=" + item.id,
});
}
if (type == 'breakdownView') {
let param = {
id: item.id,
type: type
}
uni.navigateTo({
url: `/pages/submission/submissionDetails${this.$u.queryParams(param)}`,
});
}
if (type == 'breakdownUpdate') {
let param = {
id: item.id,
type: type
}
uni.navigateTo({
url: `/pages/submission/submissionDetails${this.$u.queryParams(param)}`,
});
}
if (type == 'evaluate') {
let param = {
id: item.id,
}
uni.navigateTo({
url: `/pages/submission/evaluate${this.$u.queryParams(param)}`,
});
}
},
},
};
</script>
<style lang="scss" scoped>
.page-css {
padding: 0;
.page-search-top {
height: 210rpx;
background-color: rgba(248, 248, 248, 1);
padding: 0 40rpx 0;
}
.order-box {
margin-top: 20rpx;
.order-item {
height: 414rpx;
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background: #fff;
display: flex;
flex-direction: column;
.item-top {
height: 114rpx;
border-bottom: 1px solid rgba(239, 239, 239, 1);
display: flex;
flex-direction: row;
width: 100%;
.item-left {
flex: 1;
text {
display: block;
}
.item-orderNo {
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
padding: 12rpx 0 0 26rpx;
}
.item-time {
color: rgba(190, 190, 190, 1);
font-size: 24rpx;
padding: 12rpx 0 0 26rpx;
}
}
.item-right {
width: 132rpx;
height: 48rpx;
margin: 36rpx 24rpx 0 0;
}
}
.item-con {
flex: 1;
display: flex;
flex-direction: row;
.con-left {
width: 150rpx;
height: 150rpx;
margin: 24rpx 28rpx 0 28rpx;
image {
width: 100%;
height: 100%;
}
}
.con-right {
flex: 1;
margin-right: 24rpx;
display: flex;
flex-direction: column;
text {
display: block;
}
.con-title {
margin-top: 12rpx;
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
}
.con-content {
color: rgba(108, 108, 108, 1);
font-size: 24rpx;
// line-height: 36rpx;
margin-top: 14rpx;
flex: 1;
text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.5em;
/* 这个值根据你的需求调整,这里假设为1.5倍行高 */
max-height: 3em;
/* 3行的高度 */
width: 100%;
/* 根据需要设置宽度 */
word-wrap: break-word;
/* 允许在单词内换行 */
word-break: break-all;
/* 允许在任意字符处换行 */
}
}
.con-btn {
margin-top: 56rpx;
margin-bottom: 32rpx;
display: inline-block;
text-align: right;
}
}
}
}
}
}
</style>

@ -19,7 +19,6 @@
<text>客户功能</text>
<view class="feature-list clearfix">
<view v-for="(item, index) in featureData" :key="index" class="list-item" @click="pageTo(item)">
<!-- <img :src="item.icon" alt=""> -->
<u-image width="60rpx" height="60rpx" :src="item.icon"></u-image>
<view class="list-item-txt">{{ item.title }}</view>
</view>
@ -32,6 +31,12 @@
</template>
<script>
export default {
computed: {
dataTypes() {
return this.$store.state.dataType
},
},
data() {
return {
userIfo: {}, //
@ -42,20 +47,24 @@ export default {
pagePath: "/pages/my/records?type=login",
},
{
title: "修改日志",
title: "操作记录",
icon: require("@/static/images/my/edit.svg"),
pagePath: "/pages/my/records?type=edit",
},
{
title: "意见反馈",
icon: require("@/static/images/my/rmark.svg"),
pagePath: "/pages/my/feedback",
},
],
};
},
mounted() {
if (this.dataTypes == 1) {
this.featureData.push(
{
title: "意见反馈",
icon: require("@/static/images/my/rmark.svg"),
pagePath: "/pages/my/feedback",
}
)
}
},
onShow() {
this.$nextTick(() => {

@ -1,36 +1,33 @@
<template>
<view class="page-css">
<view class="search-box">
<betone-new-input
v-model="searchInfo.name"
:placeholder="placeholderTxt"
icon="search"
style="margin-bottom: 32rpx"
@changevalue="searchData()"
/>
<view class="search-box" v-if="getUserData.length>0">
<betone-input-picker v-model="searchInfo.name" :pickerData="getUserData" :mode="'selector'" :keyName="'name'"
@changeSelect="changeSelect" :placeholder="'请选择人员信息'" />
</view>
<view class="noData" v-if="recordData.length <= 0">
<betone-no-data :nullText="'暂无数据'" />
</view>
<view class="records-box" v-else>
<view v-for="(item, index) in recordData" :key="index">
<view class="records-month">{{ item.month }}</view>
<u-time-line v-if="item.arr.length > 0">
<u-time-line-item v-for="(itemline, inx) in item.arr" :key="inx">
<view class="records-month">{{ item.time }}</view>
<u-time-line v-if="item.logs.length > 0">
<u-time-line-item v-for="(itemline, inx) in item.logs" :key="inx">
<template v-slot:content>
<view class="u-order-desc">
<i>{{ itemline.time }}</i>
<i>{{ itemline.content }}</i>
<i>{{ itemline.title }}</i>
</view>
</template>
</u-time-line-item>
</u-time-line>
</view>
</view>
<betone-loading ref="BetLoading"></betone-loading>
</view>
</template>
<script>
<script>
export default {
data() {
return {
@ -38,37 +35,10 @@ export default {
placeholderTxt: "",
searchInfo: {
name: "",
id: ''
},
recordData: [
{
month: "2024年8月",
arr: [
{ time: "20日 15:30:58", content: "质量部张三登录成功" },
{ time: "17日 15:30:58", content: "质量部张三登录成功" },
{ time: "16日 15:30:58", content: "质量部张三登录成功" },
{ time: "12日 15:30:58", content: "质量部张三登录成功" },
{ time: "10日 15:30:58", content: "质量部张三登录成功" },
{ time: "8日 15:30:58", content: "质量部张三登录成功" },
{ time: "7日 15:30:58", content: "质量部张三登录成功" },
{ time: "5日 15:30:58", content: "质量部张三登录成功" },
{ time: "2日 15:30:58", content: "质量部张三登录成功" },
],
},
{
month: "2024年8月",
arr: [
{ time: "20日 15:30:58", content: "质量部张三登录成功" },
{ time: "17日 15:30:58", content: "质量部张三登录成功" },
{ time: "16日 15:30:58", content: "质量部张三登录成功" },
{ time: "12日 15:30:58", content: "质量部张三登录成功" },
{ time: "10日 15:30:58", content: "质量部张三登录成功" },
{ time: "8日 15:30:58", content: "质量部张三登录成功" },
{ time: "7日 15:30:58", content: "质量部张三登录成功" },
{ time: "5日 15:30:58", content: "质量部张三登录成功" },
{ time: "2日 15:30:58", content: "质量部张三登录成功" },
],
},
],
recordData: [],
getUserData: [],//
};
},
onLoad(option) {
@ -80,37 +50,86 @@ export default {
});
},
onShow() {
//
if (this.type == "login") {
this.placeholderTxt = "搜索登录时间或人员角色信息";
// this.getLoginRcords()
}
//
if (this.type == "edit") {
this.placeholderTxt = "搜索修改时间或人员角色信息";
// this.getEditRcords();
}
this.$nextTick(() => {
this.getUserLists()
//
if (this.type == "login") {
this.placeholderTxt = "搜索人员角色信息";
this.getLoginRcords()
}
//
if (this.type == "edit") {
this.placeholderTxt = "搜索人员角色信息";
this.getEditRcords();
}
})
},
methods: {
// getUserList
getUserLists() {
this.$refs.BetLoading.show()
let query_ = {
current: 1,
size: 10
}
this.$u.api.getUserList(query_).then((res) => {
if (res.code == 200) {
this.getUserData = res.data.records
}
this.$refs.BetLoading.hide()
});
},
//
changeSelect(e) {
console.log(11111, e)
this.searchInfo.name = this.getUserData[e].name
this.searchInfo.id = this.getUserData[e].id
if (this.type == "login") {
this.getLoginRcords()
}
//
if (this.type == "edit") {
this.getEditRcords();
}
},
//
getLoginRcords() {
this.$u.api.getLoginRecords(this.searchInfo).then((res) => {
console.log(222222, res);
this.$refs.BetLoading.show()
let query_ = {
logType: 1,
userId: this.searchInfo.id
}
this.$u.api.getLoginRecords(query_).then((res) => {
if (res.code == 200) {
this.recordData = res.data
}
this.$refs.BetLoading.hide()
});
},
//
getEditRcords() {
this.$u.api.getEditRecords(this.searchInfo).then((res) => {
console.log(222222, res);
this.$refs.BetLoading.show()
let query_ = {
logType: 2, //1 2
userId: this.searchInfo.name
}
this.$u.api.getLoginRecords(query_).then((res) => {
if (res.code == 200) {
this.recordData = res.data
}
this.$refs.BetLoading.hide()
});
},
searchData() {
if (this.type == "login") {
// this.getLoginRcords()
this.getLoginRcords()
}
//
if (this.type == "edit") {
// this.getEditRcords();
this.getEditRcords();
}
},
},
@ -123,14 +142,17 @@ export default {
padding: 0 0 0 0;
display: flex;
flex-direction: column;
.search-box {
background: rgba(248, 248, 248, 1);
height: 140rpx;
padding: 0 32rpx 0;
}
.noData {
margin-top: 60rpx;
}
.records-box {
flex: 1;
margin: 40rpx 32rpx 0;
@ -138,18 +160,22 @@ export default {
border-radius: 20rpx;
padding: 16rpx 32rpx 0;
overflow: auto;
.records-month {
color: rgba(108, 108, 108, 1);
font-size: 32rpx;
font-weight: 550;
margin-bottom: 20rpx;
}
/deep/.u-dot {
background-color: rgba(58, 98, 215, 1);
}
.u-order-desc {
i {
font-size: 28rpx;
&:nth-child(1) {
color: rgba(154, 154, 154, 1);
padding-right: 20rpx;
@ -157,5 +183,9 @@ export default {
}
}
}
/deep/.arrow {
top: 12rpx;
}
}
</style>

@ -0,0 +1,97 @@
<template>
<view style="width: 100%;height: 100vh;">
<map :scale="scale" style="width: 100%; height: 100%;" :show-compass="true"
:enable-overlooking="false" :enable-satellite="false" :enable-traffic="true" :show-location="true"
:latitude="latitude" :longitude="longitude" :markers="markers" >
</map>
</view>
</template>
<script>
export default {
data() {
return {
scale: 12,// 5-18
latitude: 30.64525,//---
longitude: 114.17240, //
markers: [{
id: 1,
latitude: 30.51242,//
longitude: 114.18055,//
height: 80,//
width: 80,
callout: {
color: '#007AFF', //
bgColor: '#fff', //
display: "ALWAYS", // 'BYCLICK':; 'ALWAYS':
fontSize: 15,
textAlign: 'left', // : left, right, center
padding: 10, //
borderRadius: 5,
content: '距离5km',
},
iconPath: 'https://zpkoss.oss-cn-shenzhen.aliyuncs.com/newsys/dms_app/logo/house.jpg'//
}, ]
};
},
methods: {
//
rad(d) {
return d * Math.PI / 180.0;
},
//
getDistances(lat1, lng1, lat2, lng2) {
var radLat1 = this.rad(lat1);
var radLat2 = this.rad(lat2);
var a = radLat1 - radLat2;
var b = this.rad(lng1) - this.rad(lng2);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378.137;
s = Math.round(s * 10000) / 10000;
var distance = s;
var distance_str = "";
if (parseInt(distance) >= 1) {
distance_str = distance.toFixed(2) + "km";
} else {
distance_str = (distance * 1000).toFixed(2) + "m";
}
let objData = {
distance: distance,
distance_str: distance_str
}
this.markers[0].callout.content = '距离您' + objData.distance_str
}
},
mounted() {
let that = this
//
uni.getLocation({
type: 'wgs84',
geocode: true, //true
success: function(res) {
console.log(res)
that.latitude = res.latitude//
that.longitude = res.longitude
that.markers[0].latitude = 30.51242//
that.markers[0].longitude = 114.18055
},
fail: function() {
uni.showToast({
title: '获取地址失败,将导致部分功能不可用',
icon: 'none'
});
}
});
//
this.getDistances(30.64525, 114.17240, 30.51242, 114.18055)
},
};
</script>
<style scoped>
</style>

@ -8,7 +8,7 @@
<view @click="itemIndexFn(index)" style="width: 100%">
<betone-new-input :disabled="formDisabled" label="设备名称:" v-model="item.deviceName"
placeholder="请输入" />
placeholder="请输入" endIcon="scan" />
</view>
</u-form-item>
<u-form-item label="" prop="businessName" :border-bottom="false">

@ -550,7 +550,7 @@ export default {
.item_left_txt {
color: rgba(108, 108, 108, 1);
font-size: 14px;
font-size: 28rpx;
text-align: left;
font-family: SourceHanSansSC-regular;
width: 210rpx;

@ -4,62 +4,66 @@ Vue.use(Vuex)
import tabBar from "@/utils/tabbar.js"; // 引入刚刚创建的tabBar.js
const store = new Vuex.Store({
state: {
dynamicTabbar: [], // 动态tabbar
tabBarList: [],
dataType:null,//数据标识权限
state: {
dynamicTabbar: [], // 动态tabbar
tabBarList: [],
dataType: null,//数据标识权限
},
getters: {},
actions: {
changeTabbar({ commit }, role_id) {
/*
admin 超管 1123598816738675201
客户 1846419477876510721
客服 1839536982874193922
维修负责人 1839537055389515777
维修人员 1839552581620793346
*/
// console.log(66666666666,role_id)
if (role_id == "1123598816738675201" || role_id == "1846419477876510721") {
commit('updateDatatype', 1) //客户
commit('updateTabbar', tabBar.member)
uni.reLaunch({
url: "/pages/home/index",
});
}
if (role_id == "1839536982874193922") {
commit('updateDatatype', 2) //客服
commit('updateTabbar', tabBar.ordinary)
uni.reLaunch({
url: "/pages/order/tasking",
});
}
if (role_id == "1839537055389515777") {
commit('updateDatatype', 3) //维修负责人
commit('updateTabbar', tabBar.manage)
uni.reLaunch({
url: "/pages/order/tasking",
});
}
if (role_id == "1839552581620793346") {
commit('updateDatatype', 4) //维修人员
commit('updateTabbar', tabBar.repair)
uni.reLaunch({
url: "/pages/order/tasking",
});
}
},
getters: {},
actions: {
changeTabbar({ commit }, role_id) {
/*
admin 超管 1123598816738675201
客户 1846419477876510721
客服 1839536982874193922
维修负责人 1839537055389515777
维修人员 1839552581620793346
*/
// console.log(66666666666,role_id)
if(role_id == "1123598816738675201"||role_id == "1846419477876510721"){
commit('updateDatatype', 1) //客户
}
if(role_id == "1839536982874193922"){
commit('updateDatatype', 2) //客服
}
if(role_id == "1839537055389515777"){
commit('updateDatatype', 3) //维修负责人
}
if(role_id == "1839552581620793346"){
commit('updateDatatype', 4) //维修人员
}
if (role_id == "1123598816738675201" || role_id == '1846419477876510721' || role_id == '1839537055389515777') {
commit('updateTabbar', tabBar.member)
uni.switchTab({
url: "/pages/home/index",
});
} else {
commit('updateTabbar', tabBar.ordinary)
uni.switchTab({
url: "/pages/order/tasking",
});
}
},
changeDatatype({ commit }, type){
commit('updateTabbar', payload)
}
changeDatatype({ commit }, type) {
commit('updateTabbar', payload)
}
},
mutations: {
updateTabbar(state, list) {
uni.setStorageSync('tabBarList', list) // 根据登录时传过来的值,存储对应的tabbarlist
state.dynamicTabbar = list
},
mutations: {
updateTabbar(state, list) {
uni.setStorageSync('tabBarList', list) // 根据登录时传过来的值,存储对应的tabbarlist
state.dynamicTabbar = list
},
updateDatatype(state, data){
state.dataType = data
}
updateDatatype(state, data) {
state.dataType = data
}
}
})
export default store

@ -33,7 +33,7 @@
<div v-if="!isHeight" class="appBut" >
<div class="buts" @click="undo" >撤销</div>
<div class="buts" @click="deleteImg" >清除</div>
<div class="buts" style="background-color: #55aaff;color: #fff;" @click="Tomagnify" >全屏</div>
<!-- <div class="buts" style="background-color: #55aaff;color: #fff;" @click="Tomagnify" >全屏</div> -->
</div>
<div v-else class="appBut" style="height: 80px;">
<div class="butx" @click="undo" >撤销</div>

@ -1,35 +1,76 @@
// 工作台
// 工作台 客服看到的菜单
const ordinary = [{
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "接单记录",
pagePath: "pages/order/tasking",
}, {
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "巡检计划",
pagePath: "pages/inspection/plan",
}, {
iconPath: "account",
selectedIconPath: "account-fill",
text: "我的",
pagePath: "pages/my/my",
}]
// 客户看到的页面
const member = [{
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "工作台",
pagePath: "pages/home/index",
},
{
iconPath: "https://cdn.uviewui.com/uview/common/min_button.png",
selectedIconPath: "https://cdn.uviewui.com/uview/common/min_button_select.png",
text: "一键报送",
pagePath: "pages/submission/index",
}, {
iconPath: "account",
selectedIconPath: "account-fill",
text: "我的",
pagePath: "pages/my/my",
},
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "工作台",
pagePath: "pages/home/index",
},
{
iconPath: "https://cdn.uviewui.com/uview/common/min_button.png",
selectedIconPath: "https://cdn.uviewui.com/uview/common/min_button_select.png",
text: "一键报送",
pagePath: "pages/submission/index",
}, {
iconPath: "account",
selectedIconPath: "account-fill",
text: "我的",
pagePath: "pages/my/my",
},
]
// 维修负责人看到的页面
const manage = [{
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "接单记录",
pagePath: "pages/order/tasking",
}, {
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "巡检计划",
pagePath: "pages/inspection/plan",
}, {
iconPath: "account",
selectedIconPath: "account-fill",
text: "我的",
pagePath: "pages/my/my",
}]
// 维修人员 看到的菜单
const repair = [{
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "接单记录",
pagePath: "pages/order/tasking",
}, {
iconPath: "photo",
selectedIconPath: "photo-fill",
text: "维修任务",
pagePath: "pages/inspection/quest",
}, {
iconPath: "account",
selectedIconPath: "account-fill",
text: "我的",
pagePath: "pages/my/my",
}]
export default {
ordinary,
member
member,
manage,
repair
}
Loading…
Cancel
Save