jiangping
2025-03-26 4ecdc50ae3deea4714b4638936ff8244f9839aff
Merge remote-tracking branch 'origin/master'
已修改9个文件
574 ■■■■■ 文件已修改
admin/src/components/business/OperaPlatformGroupWindow.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/visitor.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/appointmentDetails/appointmentDetails.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/reserved.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/visitorApprove.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/visitorApplication/visitorApplication.vue 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/PlatformCall.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/TaskEfficiency.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/vite.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPlatformGroupWindow.vue
@@ -17,6 +17,18 @@
          <el-radio  :label="2"  >市公司卸货</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="选择签到通知人员" prop="signInNoticeUsers">
        <el-select v-model="form.signInNoticeUsers" filterable multiple clearable @change="changeSignInNoticeUsers" placeholder="请选择">
          <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="选择作业未完成通知人员" prop="unFinishNoticeUsers">
        <el-select v-model="form.unFinishNoticeUsers" filterable multiple clearable @change="changeUnFinishNoticeUsers" placeholder="请选择">
          <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="工作时间:" prop="startTime">
        <div style=" display: inline-block">
          <el-time-picker
@@ -49,7 +61,7 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { numRuleGtZero } from '@/utils/form'
import { allList } from '@/api/platform/platformGroup'
import { allList } from '@/api/business/member'
import { getList as deviceList } from '@/api/business/device'
export default {
  name: 'OperaPlatformWindow',
@@ -67,13 +79,18 @@
        type: 0,
        startTime: '',
        endTime: '',
        waitCallTime: ''
        waitCallTime: '',
        signInNoticeUsers: [],
        unFinishNoticeUsers: []
      },
      // 验证规则
      rules: {
        name: [{ required: true, message: '请输入分组名称 ', trigger: 'blur' }],
        type: [{ required: true, message: '请选择业务类型 '}]
      }
        type: [{ required: true, message: '请选择业务类型 '}],
        signInNoticeUsers: [{ required: true, message: '请选择签到通知人员', trigger: 'blur' }],
        unFinishNoticeUsers: [{ required: true, message: '请选择作业未完成通知人员', trigger: 'blur' }]
      },
      memberList: []
    }
  },
  created () {
@@ -83,6 +100,75 @@
    })
  },
  methods: {
    changeSignInNoticeUsers(e) {
      if (this.form.signInNoticeUsers.length > 5) {
        this.form.signInNoticeUsers.splice(this.form.signInNoticeUsers.length - 1, 1)
        this.$message.warning('最多只能选择五个人员!')
      }
    },
    changeUnFinishNoticeUsers(e) {
      if (this.form.unFinishNoticeUsers.length > 5) {
        this.form.unFinishNoticeUsers.splice(this.form.unFinishNoticeUsers.length - 1, 1)
        this.$message.warning('最多只能选择五个人员!')
      }
    },
    // 确认新建
    __confirmCreate () {
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        let obj = JSON.parse(JSON.stringify(this.form))
        obj.signInNoticeUsers = obj.signInNoticeUsers.join(',')
        obj.unFinishNoticeUsers = obj.unFinishNoticeUsers.join(',')
        // 调用新建接口
        this.isWorking = true
        this.api.create(obj)
          .then(() => {
            this.visible = false
            this.$tip.apiSuccess('新建成功')
            this.$emit('success')
          })
          .catch(e => {
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    },
    __confirmEdit () {
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        let obj = JSON.parse(JSON.stringify(this.form))
        obj.signInNoticeUsers = obj.signInNoticeUsers.join(',')
        obj.unFinishNoticeUsers = obj.unFinishNoticeUsers.join(',')
        // 调用新建接口
        this.isWorking = true
        this.api.updateById(obj)
          .then(() => {
            this.visible = false
            this.$tip.apiSuccess('修改成功')
            this.$emit('success')
          })
          .catch(e => {
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    },
    loadMember() {
      allList({
        type: 2,
        companyType: 1
      }).then(res => {
        this.memberList = res
      })
    },
    seleTime(){},
    /**
     * 打开窗口
@@ -91,6 +177,7 @@
     */
    open (title, target) {
      this.title = title
      this.loadMember()
      this.visible = true
      // 新建
      if (target == null) {
@@ -105,6 +192,12 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        if (this.form.signInNoticeUsers) {
          this.form.signInNoticeUsers = this.form.signInNoticeUsers.split(',').map(item => Number(item))
        }
        if (this.form.unFinishNoticeUsers) {
          this.form.unFinishNoticeUsers = this.form.unFinishNoticeUsers.split(',').map(item => Number(item))
        }
      })
    }
  }
h5/api/visitor.js
@@ -80,6 +80,13 @@
    method: 'get'
  })
}
// 取消预约
export const visitsCancel = (id) => {
  return http({
    url: 'visitsAdmin/cloudService/business/visits/visitsCancel?visitId=' + id,
    method: 'get'
  })
}
// 来访事由
export const getVisitReason = (data) => {
  return http({
h5/pages/appointmentDetails/appointmentDetails.vue
@@ -85,11 +85,26 @@
        <view class="box_list_item_val">{{ info.carNos }}</view>
      </view>
    </view>
    <view class="footer">
        <u-button
        text="取消预约"
        size="mini"
        v-if="[0,1,2,5].includes(info.status)"
        @click="cancelShow = true" />
    </view>
    <u-popup :show="show" mode="center" @close="close">
      <view class="qrocde">
        <canvas class="qrcode_img" canvas-id="img1"></canvas>
      </view>
    </u-popup>
    <!-- 取消预约弹窗 -->
    <u-modal
        :show="cancelShow"
        :showCancelButton="true"
        title="系统提示"
        content='确定取消当前预约吗?'
        @cancel="cancelShow = false"
        @confirm="cancel" />
  </view>
</template>
@@ -100,9 +115,11 @@
export default {
  data() {
    return {
        id: null,
      info: {},
      show: false,
      detail: ''
      detail: '',
      cancelShow: false
    }
  },
  onBackPress(options) {
@@ -121,6 +138,7 @@
  onLoad(option) {
        uni.setStorageSync('ywinfo',{})
    this.detail = option.detail || ''
    this.id = option.id
    this.getDetail(option.id)
    // visitorSubDetail({ id: option.id })
    //     .then(res => {
@@ -136,6 +154,12 @@
  },
  methods: {
    // 取消预约
    cancel() {
        visitsCancel(this.id).then(res => {
            this.getDetail(this.id)
        })
    },
    close() {
      this.show = false
    },
@@ -170,6 +194,16 @@
<style lang="scss" scoped>
.box {
  width: 100%;
  .footer {
      position: fixed;
      left: 0;
      bottom: 0;
      width: 100%;
      height: 100rpx;
      text-align: right;
      background-color: #ffffff;
      padding-bottom: calc(30rpx + env(safe-area-inset-bottom));
  }
  .qrocde {
    width: 300rpx;
    height: 300rpx;
h5/pages/driver/reserved.vue
@@ -15,9 +15,9 @@
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>合同号</text>
                    <text>合同/单据编号</text>
                </view>
                <view class="value"><input type="text" placeholder="请输入您的合同号" v-model="param.contractNum" placeholder-style="color: #999999;" /></view>
                <view class="value"><input type="text" placeholder="请输入您的合同/单据编号" v-model="param.contractNum" placeholder-style="color: #999999;" /></view>
            </view>
            <!--  -->
            <view class="line">
@@ -33,7 +33,7 @@
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>入库类型</text>
                    <text>作业类型</text>
                </view>
                <view class="value">
                    <view class="btns">
@@ -55,7 +55,7 @@
            <view class="line">
                <view class="label">
                    <text>*</text>
                    <text>准运证照片</text>
                    <text>准运证/运单照片</text>
                </view>
                <view class="value" @click="handleUpload">
                    <image v-if="param.transportImgFull" class="upload_wrap" :src="param.transportImgFull" alt="">
@@ -175,14 +175,14 @@
        onSubmit() {
            const param = { ...this.param }
            if (!param.arriveDate) return this.showToast('请选择到场时间')
            if (!param.inType && param.inType != 0) return this.showToast('请选择入库类型')
            if (!param.contractNum) return this.showToast('请输入合同号')
            if (!param.inType && param.inType != 0) return this.showToast('请选择作业类型')
            if (!param.contractNum) return this.showToast('请输入合同/单据编号')
            if (!param.totalNum) return this.showToast('请输入总运输量')
            if (!param.driverName) return this.showToast('请输入司机姓名')
            if (!param.driverPhone) return this.showToast('请输入手机号')
            if (!param.carCodeFront) return this.showToast('请输入车前牌号')
            if (!param.carCodeBack) return this.showToast('请输入车后牌号')
            if (!param.transportImgFull) return this.showToast('请上传准运证照片')
            if (!param.transportImgFull) return this.showToast('请上传准运证/运单照片')
            param.arriveDate = param.arriveDate + ':00'
            let fn = param.id ? driverCarApplyEdit : driverCarApply
            fn({...param}).then(res => {
h5/pages/staff/task/visitorApprove.vue
@@ -106,7 +106,10 @@
        info.approveDateVO.canBeApproved != null &&
        info.approveDateVO.canBeApproved == 1
      " class="main_footer">
            <view class="btn" @click="cancelShow = true" v-if="checkAuth('business:visits:cancel') && [0,1,2,5].includes(info.status)">取消预约</view>
            <view style="width: 30rpx; height: 100%;"></view>
            <view class="btn" @click="handleSub(3)">拒绝</view>
            <view style="width: 30rpx; height: 100%;"></view>
            <view class="btn agree" @click="handleSub(2)">同意</view>
        </view>
@@ -118,10 +121,19 @@
          " placeholder-class="placeholder9" />
                <view class="main_footer">
                    <view class="btn" @click="showApprModal = false">取消</view>
                    <view style="width: 30rpx; height: 100%;"></view>
                    <view class="btn agree" @click="onSubmit">提交</view>
                </view>
            </view>
        </u-popup>
        <!-- 取消预约弹窗 -->
        <u-modal
            :show="cancelShow"
            :showCancelButton="true"
            title="系统提示"
            content='确定取消当前预约吗?'
            @cancel="cancelShow = false"
            @confirm="cancel" />
    </view>
</template>
@@ -133,6 +145,9 @@
    export default {
        data() {
            return {
                userInfo: uni.getStorageSync('userInfo') || {
                    permissions: []
                },
                showApprModal: false,
                param: {},
                info: {},
@@ -167,7 +182,8 @@
                    2: '已通过',
                    3: '已拒绝',
                    4: '已取消',
                }
                },
                cancelShow: false
            }
        },
        onLoad(op) {
@@ -176,6 +192,16 @@
            this.getDetail()
        },
        methods: {
            // 取消预约
            cancel() {
                visitsCancel(this.id).then(res => {
                    this.getDetail()
                })
            },
            checkAuth(str) {
                const permissions = this.userInfo.permissions || []
                return permissions.indexOf(str) > -1
            },
            getDetail() {
                const {
                    id
@@ -503,7 +529,8 @@
            background: #ffffff;
            .btn {
                width: 336rpx;
                // width: 336rpx;
                flex: 1;
                height: 88rpx;
                line-height: 88rpx;
                background: #ffffff;
h5/pages/visitorApplication/visitorApplication.vue
@@ -61,17 +61,12 @@
                    <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
                </view>
            </view>
            <view class="list_item">
            <!-- <view class="list_item">
                <view class="list_item_label">
                    <text></text>
                    <text>是否施工作业</text>
                </view>
                <view class="list_item_content">
                    <!-- <switch color="#4e99a9" style="transform: scale(0.8)" @change="constructionChange" /> -->
<!--                     <u-radio-group v-model="form1.type">
                        <u-radio label="是" :name="1" activeColor="#4d99a8" class="mr24" />
                        <u-radio label="否" :name="0" activeColor="#4d99a8" />
                    </u-radio-group> -->
                    <view class="checkbox_wrap">
                        <view class="check_item" @click="constructionChange(1)">
                            <text>是</text>
@@ -86,7 +81,7 @@
                        
                    </view>
                </view>
            </view>
            </view> -->
            <view v-if="form1.type == '1'" class="list_item">
                <view class="list_item_label">
                    <text></text>
@@ -430,7 +425,7 @@
                if (type === 'day') {
                    return `${value}日`
                }
<<<<<<< HEAD
// <<<<<<< HEAD
                this.$forceUpdate()
                this.closeInput()
            },
@@ -555,10 +550,9 @@
                        title: '证件号码格式错误',
                        icon: 'none'
                    })
=======
                }
                if (type === 'hour') {
                    return `${value}时`
>>>>>>> f0f08cc1ff84d45de32d8bff4a40e6a7d0d7a9e6
                }
                if (type === 'minute') {
                    return `${value}分`
@@ -791,7 +785,9 @@
            },
            selectedReason(e) {
                this.form1.reason = e.value[0].title
                this.form1.type = e.value[0].constructionType
                console.log(e.value[0].title)
                console.log(e.value[0].constructionType)
                this.showReason = false
            },
            submitCart() {
@@ -1442,329 +1438,6 @@
                        color: #222222;
                    }
                }
<<<<<<< HEAD
                let arr = JSON.parse(JSON.stringify(this.withUserList))
                this.personnel.push(arr)
                this.show3 = false
                this.withUserList.name = ''
                this.withUserList.phone = ''
                this.withUserList.idcardType = ''
                this.withUserList.idcardTypeName = ''
                this.withUserList.companyName = ''
                this.withUserList.idcardNo = ''
                this.withUserList.faceImg = ''
                this.withUserList.faceImgUrl = ''
                this.withUserList.imgurl = ''
                this.withUserList.imgurlUrl = ''
            },
            upload(type) {
                this.type = type
                if (type === 'faceImg') {
                    this.$refs.cropper.open()
                    return
                }
                uni.chooseImage({
                    success: (chooseImageRes) => {
                        // if (type === 'faceImg') {
                        //     this.photoSrc = chooseImageRes.tempFilePaths[0];
                        //     this.$refs.tlyPictureCut.showPop();
                        //     return
                        // }
                        uni.showLoading({ title: '上传中', mask: true });
                        for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
                            uni.uploadFile({
                                url: `${this.$baseUrl}public/api/uploadFtp.do`,
                                filePath: chooseImageRes.tempFilePaths[i],
                                name: 'file',
                                formData: {
                                    folderCode: 'MEMBER_IMG'
                                },
                                success: (uploadFileRes) => {
                                    let res = JSON.parse(uploadFileRes.data)
                                    if (type === 'faceImg') {
                                        this.withUserList.faceImg = res.data.halfPath
                                        this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    } else {
                                        this.withUserList.imgurl = res.data.halfPath
                                        this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                                    }
                                },
                                complete() {
                                    if (i === chooseImageRes.tempFilePaths.length - 1) {
                                        uni.hideLoading();
                                    }
                                }
                            });
                        }
                    }
                });
            },
            seleIdcard(e) {
                this.withUserList.idcardType = e.value[0].id
                this.withUserList.idcardTypeName = e.value[0].name
                this.show6 = false
            },
            submitCart() {
                if (!this.carName) return uni.showToast({
                    title: '请输入车牌号码',
                    icon: 'none'
                })
                this.cars.push(this.carName)
                this.form1.carNos = this.cars.join(',')
                this.carName = ''
                this.show2 = false
            },
            deleCars(i) {
                this.cars.splice(i, 1)
                this.form1.carNos = this.cars.join(',')
            },
            submitMJ() {
                let arr = []
                let names = []
                this.columns.forEach(item => {
                    if (item.active) {
                        arr.push(item.id)
                        names.push(item.name)
                    }
                })
                if (arr.length === 0) return uni.showToast({
                    title: '请选择门禁',
                    icon: 'none'
                })
                this.form1.doorSelectName = names.join(',')
                this.form1.doors = arr.join(',')
                this.show = false
            },
            seleMJ(i) {
                this.columns.forEach((item,index) => {
                    if (index === i) {
                        item.active = !item.active
                    }
                })
            },
            openLC() {
                if (!this.form1.starttime) return uni.showToast({
                    title: '请先选择入厂时间',
                    icon: 'none'
                })
                this.show5 = true
            },
            setinDate(e) {
                this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
                this.maxTime = getDaysAfterDate(uni.$u.timeFormat(e.value, 'yyyy-mm-dd'), this.day - 1)
                this.show4 = false
            },
            setoutDate(e) {
                this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
                this.show5 = false
            },
            formatTimeStamp(date) {
                return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g,'/')}`))
            },
            // 查询用户
            getUser() {
                if (this.verify === '0') {
                    if (this.form1.phone1) {
                        this.$u.api.getVisitedMember({
                            mobile: this.form1.phone1
                        }).then(res => {
                            if (res.code === 200) {
                                this.form1.receptMemberId = res.data.id
                                this.form1.receptMemberName = res.data.name
                            }
                        })
                    }
                } else {
                    if (this.form1.phone1 && this.form1.receptMemberName) {
                        this.$u.api.getVisitedMember({
                            mobile: this.form1.phone1,
                            name: this.form1.receptMemberName
                        }).then(res => {
                            if (res.code === 200) {
                                this.form1.receptMemberId = res.data.id
                                this.form1.receptMemberName = res.data.name
                            }
                        })
                    }
                }
            },
            // 被拜访人信息校验方式(0手机号单独校验 1手机号和姓名组合校验)
            getUserValid() {
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'BEVISITED_USER_VALID'
                }).then(res => {
                    if (res.code === 200) {
                        this.verify = res.data.code
                    }
                })
            },
            // 获取是否需要选择门禁/门禁列表
            getvisit() {
                this.$u.api.getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'SELECT_DOORS_VISIT_REQUIRED'
                }).then(res => {
                    if (res.code === 200) {
                        this.accessControl = res.data.code
                        if (res.data.code === '1') {
                            this.$u.api.deviceRoleList({ type: 1 })
                                .then(device => {
                                    if (device.code === 200) {
                                        if (device.data.length > 0) {
                                            device.data.forEach(item => {
                                                item.active = false
                                            })
                                            this.columns = device.data
                                        }
                                    }
                                })
                        }
                    }
                })
            },
            confirm(e) {
                this.show = false
            }
        }
    }
</script>
<style>
    page {
        background-color: #F7F7F7 !important;
    }
    .u-upload__button {
        margin: 0 !important;
    }
</style>
<style lang="scss" scoped>
    .visit {
        width: 100%;
        .menjin {
            width: 100%;
            .respondent-title {
                width: 100%;
                height: 100rpx;
                line-height: 100rpx;
                text-align: center;
                font-size: 32rpx;
                font-weight: 500;
                color: #222222;
            }
            .list {
                width: 100%;
                height: 400rpx;
                display: flex;
                flex-direction: column;
                .list_item {
                    width: 100%;
=======
                .checkbox_wrap{
>>>>>>> f0f08cc1ff84d45de32d8bff4a40e6a7d0d7a9e6
                    display: flex;
                    align-items: center;
                    .check_item{
                        display: flex;
                        align-items: center;
                        margin-left: 20rpx;
                    }
                    image{
                        width: 42rpx;
                        height: 42rpx;
                        margin-left: 10rpx;
                    }
                }
            }
        }
        .cate {
            width: 100%;
            padding: 30rpx;
            box-sizing: border-box;
            background-color: #ffffff;
            .cate_head {
                font-size: 32rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 600;
                color: #222222;
            }
            .cate_list {
                width: 100%;
                display: flex;
                align-items: center;
                flex-wrap: wrap;
                margin-top: 30rpx;
                .cate_list_item {
                    height: 64rpx;
                    padding: 0 20rpx;
                    box-sizing: border-box;
                    background-color: #eeeeee;
                    border-radius: 4rpx;
                    margin-right: 20rpx;
                    margin-bottom: 20rpx;
                    display: flex;
                    align-items: center;
                    &:last-child {
                        margin-right: 0 !important;
                    }
                    text {
                        font-size: 26rpx;
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                        margin-right: 30rpx;
                    }
                }
            }
            .cate_add {
                width: 200rpx;
                height: 50rpx;
                display: flex;
                align-items: center;
                justify-content: center;
                background: rgba(2, 94, 239, 0);
                border-radius: 25rpx;
                border: 1rpx solid #4c99a8;
                font-size: 22rpx;
                font-family: PingFangSC, PingFang SC;
                font-weight: 400;
                margin-top: 20rpx;
                color: #4c99a8;
                margin: 0 auto;
            }
        }
        .zw {
            width: 100%;
            height: calc(env(safe-area-inset-bottom) + 118rpx);
        }
        .footer {
            width: 100%;
            padding: 0 30rpx;
            padding-bottom: env(safe-area-inset-bottom);
            box-sizing: border-box;
            margin-top: 80rpx;
            // position: fixed;
            // left: 0;
            // bottom: 30rpx;
            .footer_btn {
                width: 100%;
                height: 88rpx;
                line-height: 88rpx;
                text-align: center;
                background: #4c99a8;
                border-radius: 44rpx;
                font-size: 32rpx;
                font-weight: 600;
                color: #ffffff;
            }
        }
    }
screen/src/views/PlatformCall.vue
@@ -21,7 +21,8 @@
const initData = () => {
  getLargeScreenData().then(res => {
    if (res.data && res.data.allList) {
      contentList.value = res.data.allList.map(item => {
      contentList.value = res.data.allList.map((item, index) => {
        item.index = index + 1
        if (item.optTime) {
          item.optTimeTemp = dayjs(item.optTime).format('HH:mm')
          if(item.status == 4){
@@ -160,7 +161,7 @@
const handler = () => {
  isFullscreen.value = document.fullscreenElement !== null
  if (!isFullscreen) {
    // 退出全屏时候解除监听,不然每次监听都会添加一次绑定
    // 退出全屏时候解除监听,不然每次监听都会添加一次绑定
    document.removeEventListener("fullscreenchange", handler)
  }
}
@@ -214,8 +215,8 @@
            <div class="item">停靠月台</div>
            <div class="item">时间</div>
          </div>
          <div class="line" v-for="item in contentTempList" :key="item.id">
            <div class="item no">{{ item.signNum }}</div>
          <div class="line" v-for="(item, index) in contentTempList" :key="index">
            <div class="item no">{{ item.index }}</div>
            <div class="item">{{ item.carCodeFront }}</div>
            <div class="item">
              <div :class="{
@@ -545,4 +546,4 @@
  }
}
</style>
</style>
screen/src/views/TaskEfficiency.vue
@@ -498,47 +498,36 @@
    series: [
      {
        name: '分时作业量',
        type: 'line',
        smooth: true,
        showAllSymbol: true,
        symbol: 'circle',
        symbolSize: 0,
        lineStyle: {
          color: '#2355f5',
          borderColor: '#2355f5'
        },
        type: 'bar',
        barWidth: 15,
        label: {
          show: false,
          position: 'top',
          color: '#fff',
        },
        itemStyle: {
          color: "#2355f5",
          lineStyle: {
            width: 0,
            type: 'solid'
          }
        },
        areaStyle: {
          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
            {
              offset: 0,
              color: '#2355f5'
              color: '#63d6fa'
            },
            {
              offset: 1,
              color: 'rgba(14, 31, 65,0.1)'
              color: '#32718d'
            }
          ], false),
          shadowColor: 'rgba(124,248,255, 0)',
          shadowBlur: 20
          lineStyle: {
            width: 1,
            type: 'solid'
          },
          barBorderRadius: [30, 30, 0, 0],
        },
        data: dataList3.value.map(i => i.workNum || 0)
      },
      {
        name: '累计作业量',
        type: 'bar',
        barWidth: 6,
        barWidth: 15,
        label: {
          show: false,
          position: 'top',
screen/vite.config.js
@@ -26,8 +26,8 @@
    proxy: {
      "/gateway_interface": {
        // target: "http://192.168.0.104:10010",
        // target: "http://10.50.250.253:8088/gateway_interface",
        target: "https://atwl.ahzyssl.com/zhyq_interface",
        target: "http://10.50.250.253:8088/gateway_interface",
        // target: "https://atwl.ahzyssl.com/zhyq_interface",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/gateway_interface/, ""),
      },