wjt
2024-07-23 c3b2d6d35b77d11ff86d45926501493b7fc8886e
新功能添加
13个文件已添加
14个文件已修改
1816 ■■■■■ 已修改文件
api/index.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/policy.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/qiye.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/config.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
components/canvasOwn.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/index/index.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/visitiorRegis/visitiorRegis.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/applyLook/applyLook.scss 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/applyLook/applyLook.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/components/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/dataLook/dataLook.scss 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
policy/dataLook/dataLook.vue 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/complaint/complaint.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/complaint/details.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/complaint/details1.vue 418 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/my/my.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/proposal/proposal.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/proposal1/proposal1.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/proprsalRecord/proprsalRecord.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/record/details.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qiye/record/record.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
readme.md 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/index-1.png 补丁 | 查看 | 原始文档 | blame | 历史
static/policy/jianyi-record.png 补丁 | 查看 | 原始文档 | blame | 历史
static/policy/jianyi.png 补丁 | 查看 | 原始文档 | blame | 历史
static/policy/personal.png 补丁 | 查看 | 原始文档 | blame | 历史
api/index.js
@@ -21,3 +21,15 @@
export function companyRegister(data) {
    return http.post('/system/company/add', {params: data}, { custom: { loading: true }});
}
// /system/dept/list
export function deptList(data) {
    return http.get('/system/dept/allList', {params: data}, { custom: { loading: true }});
}
// /enforce/company/log/add
export function addLog(data) {
    return http.post('/enforce/company/log/add', data, { custom: { loading: true }});
}
// enforce/complaint/log/add
export function complaintAdd(data) {
    return http.post('/enforce/complaint/log/add', data, { custom: { loading: true }});
}
api/policy.js
@@ -62,3 +62,8 @@
export function orderUpd(data) {
    return http.post(`/enforce/order/doResultOrder`, data, { custom: { loading: true }});
}
// /commonList
export function commonList(data) {
    return http.get(`/enforce/order/commonList`, {params: data}, { custom: { loading: true }});
}
api/qiye.js
@@ -27,7 +27,15 @@
export function logList(data){
    return http.get('/enforce/complaint/log/list', {params: data}, { custom: { loading: true }});
}
// complaintList
// 投诉列表
export function complaintList(data){
    return http.get('/enforce/complaint/log/complaintList', {params: data}, { custom: { loading: true }});
}
// 建议列表
export function pleaseList(data){
    return http.get('/enforce/complaint/log/pleaseList', {params: data}, { custom: { loading: true }});
}
// 投诉详情
export function complaint(id){
    return http.get('/enforce/complaint/'+id, { custom: { loading: true }});
@@ -51,3 +59,8 @@
// export function getCompanyList(data){
//     return http.get('/system/company/list',{params: data}, { custom: { loading: true }});
// }
// /enforce/order/confirm/{orderId}
export function confirmOrderId(data){
    return http.post(`/enforce/order/confirm/${data.orderId}`,{params: data}, { custom: { loading: true }});
}
common/config.js
@@ -3,14 +3,14 @@
    hasHead: true,
    authCallBackUrl: 'https://wxbank.hnnx.com/mer/payOut/getAuthCode.do?authCallBackUrl=',
    webURL: 'https://jmy.jinmingyuan.com/ecosphere-user',
    serverTempl:"http://172.16.61.11:8089",
    serverTempl:"http://172.16.60.184:8089",
    socketTempl:"wss://yqzx.jinmingyuan.com/wsPerCode",
    h5Temp:"https://yqzx.jinmingyuan.com/ecosphere-h5",
    serverUrl: 'http://172.16.61.11:8089',
    h5Url: 'http://172.16.61.11:8089/service-merchant',
    serverUrl: 'http://172.16.60.184:8089',
    h5Url: 'http://172.16.60.184:8089/service-merchant',
    ftpUrl: 'https://yqzx.jinmingyuan.com/file',
    // ftpUrl: 'https://echftp.jinmingyuan.com',
    baseUrl: 'http://172.16.61.11:8089',
    baseUrl: 'http://172.16.60.184:8089',
    wx_appid: 'wxad8cc511da676bd4',
    ali_appid: '2021003199690698'
}
@@ -21,11 +21,11 @@
    serverTempl:"https://jmy.jinmingyuan.com",
    socketTempl:"wss://yqzx.jinmingyuan.com/wsPerCode",
    h5Temp:"https://jmy.jinmingyuan.com/ecosphere-h5",
    serverUrl: 'https://jmy.jinmingyuan.com/prod-api',
    serverUrl: 'https://jmy.jinmingyuan.com/sqys-prod-api',
    h5Url: 'https://jmy.jinmingyuan.com/service-merchant',
    ftpUrl: 'https://jmy.jinmingyuan.com/file',
    // ftpUrl: 'https://echftp.jinmingyuan.com',
    baseUrl: 'https://jmy.jinmingyuan.com/prod-api',
    baseUrl: 'https://jmy.jinmingyuan.com/sqys-prod-api',
    wx_appid: 'wxad8cc511da676bd4',
    ali_appid: '2021003199690698'
}
components/canvasOwn.vue
New file
@@ -0,0 +1,58 @@
<template>
  <view>
    <canvas canvas-id="bar-chart" style="width: 300px; height: 200px;"></canvas>
  </view>
</template>
<script>
export default {
  data() {
    return {
      data: [50, 120, 200, 150, 50], // 示例数据
      barWidth: 20, // 条形的宽度
      barGap: 5, // 条形之间的间隔
      maxData: 200, // 数据的最大值,用于Y轴刻度
    };
  },
  mounted() {
    this.drawBarChart();
  },
  methods: {
    drawBarChart() {
      const ctx = uni.createCanvasContext('bar-chart', this);
      const canvasWidth = 300;
      const canvasHeight = 200;
      const xScale = this.barWidth + this.barGap; // x轴的比例
      const yScale = canvasHeight / this.maxData; // y轴的比例
      // 绘制背景
      ctx.fillStyle = '#f3f3f3';
      ctx.fillRect(0, 0, canvasWidth, canvasHeight);
      // 绘制边框
      ctx.strokeStyle = '#000';
      ctx.setLineWidth(1);
      for (let i = 0; i < this.data.length; i++) {
        const x = i * xScale;
        const y = canvasHeight - this.data[i] * yScale;
        const width = this.barWidth;
        const height = this.data[i] * yScale;
        // 绘制条形
        ctx.setFillStyle('#1890ff');
        ctx.fillRect(x, y, width, height);
        // 绘制边框
        ctx.strokeRect(x, y, width, height);
        // 可以添加数据标签
        ctx.fillStyle = '#000';
        ctx.font = '12px Arial';
        ctx.fillText(this.data[i], x, y - 10);
      }
      ctx.draw();
    }
  }
};
</script>
pages.json
@@ -67,6 +67,13 @@
                "navigationBarTitleText" : "信息公示详情",
                "navigationStyle": "custom"
            }
        },
        {
            "path" : "pages/visitiorRegis/visitiorRegis",
            "style" :
            {
                "navigationBarTitleText" : "来访人员登记"
            }
        }
    ],
    "subPackages": [
@@ -168,6 +175,13 @@
                        "navigationBarTitleText" : "审批详情",
                        "navigationStyle": "custom"
                    }
                },
                {
                    "path" : "applyLook/applyLook",
                    "style" :
                    {
                        "navigationBarTitleText" : ""
                    }
                }
            ]
        },
@@ -230,11 +244,40 @@
                }
            },
            {
                "path" : "complaint/details1",
                "style" :
                {
                    "navigationBarTitleText" : "",
                    "navigationStyle": "custom"
                }
            },
            {
                "path" : "switchPhone/switchPhone",
                "style" : 
                {
                    "navigationBarTitleText" : "切换企业"
                }
            },
            {
                "path" : "proposal/proposal",
                "style" :
                {
                    "navigationBarTitleText" : "投诉"
                }
            },
            {
                "path" : "proposal1/proposal1",
                "style" :
                {
                    "navigationBarTitleText" : "建议"
                }
            },
            {
                "path" : "proprsalRecord/proprsalRecord",
                "style" :
                {
                    "navigationBarTitleText" : "建议记录"
                }
            }
                
            ]
pages/index/index.vue
@@ -12,13 +12,16 @@
            <img src="/static/i06.png" class="more"  alt="" style="width: 46rpx;height: 46rpx;"/>
        </view>
        <view class="btnbox">
            <img src="/static/i01.png" class="more" alt="" style="margin-right: 18rpx;" @click="goMyCompany('01')"/>
            <img src="/static/i02.png" class="more" alt="" @click="goMyCompany('02')"/>
            <img src="/static/i03.png" class="more" alt="" style="margin-right: 18rpx;" @click="goMyCompany('01')"/>
            <img src="/static/i04.png" class="more" alt="" @click="goMyCompany('00')"/>
            <image mode="widthFix" src="/static/i01.png" class="more" alt="" style="margin-right: 18rpx;" @click="goMyCompany('01')"/>
            <image mode="widthFix" src="/static/i02.png" class="more" alt="" @click="goMyCompany('02')"/>
            <image mode="widthFix" src="/static/i03.png" class="more" alt="" style="margin-right: 18rpx;" @click="goMyCompany('01')"/>
            <image mode="widthFix" src="/static/i04.png" class="more" alt="" @click="goMyCompany('00')"/>
                <!-- <u-button @click="goMyCompany('01')">我是执法人员</u-button>
                <u-button @click="goMyCompany('02')">我是企业</u-button>
                <u-button @click="goMyCompany('00')">运营管理</u-button> -->
        </view>
        <view class="login-news" @click="goLogin">
            <image src="/static/index-1.png" mode="widthFix" @click="goLogin"></image>
        </view>
        <view class="msgbox">
            <view class="tit">
@@ -189,6 +192,15 @@
                uni.navigateTo({
                    url: `/pages/companyLogin/companyLogin?code=${item}`
                })
            },
            goLogin() {
                uni.scanCode({
                    success: (val) =>{
                        uni.navigateTo({
                            url: `/pages/visitiorRegis/visitiorRegis?value=${val.result}`
                        })
                    }
                })
            }
        }
    };
@@ -240,7 +252,7 @@
        margin-top: 110rpx;
        margin-left: 32rpx;
        margin-right: 32rpx;
        img{
        image{
            width: 334rpx;
            height: 208rpx;
        }
@@ -314,4 +326,10 @@
        width: 100%;
        height: 518rpx;
    }
    .login-news{
        margin: 20rpx 32rpx;
        image{
            width: 100%;
        }
    }
</style>
pages/visitiorRegis/visitiorRegis.vue
New file
@@ -0,0 +1,173 @@
<template>
    <view class="page-box">
        <u-form label-width="80" ref="uForm"  labelPosition="top" :model="form" :rules="rules">
            <u-form-item label="访问企业" prop="companyName">
                <u-input placeholder="请输入" disabled v-model="form.companyName"></u-input>
            </u-form-item>
            <u-form-item label="来访时间" prop="comeTime">
                <u-input placeholder="请输入" disabled v-model="form.comeTime"></u-input>
            </u-form-item>
            <u-form-item label="来访单位" @click="selectValue" prop="comeDeptName">
                <u-input placeholder="请输入" readonly :value="form.comeDeptName"></u-input>
            </u-form-item>
            <u-form-item label="来访人员" prop="comeUser">
                <u-input placeholder="请输入" v-model="form.comeUser"></u-input>
            </u-form-item>
            <u-form-item label="来访事项" prop="comeContent">
                <u-textarea  placeholder="请输入" v-model="form.comeContent"></u-textarea>
            </u-form-item>
            <u-form-item label="随行人数" prop="userNum">
                <u-input placeholder="请输入" v-model="form.userNum" type="number"></u-input>
            </u-form-item>
            <u-form-item label="备注" prop="remark">
                <u-textarea  placeholder="请输入" v-model="form.remark"></u-textarea>
            </u-form-item>
        </u-form>
        <view class="down-options-button">
            <view class="options">
                <u-button type="primary" @click="addLog">提交</u-button>
            </view>
            <view class="options">
                <u-button type="info " @click="reset">重置</u-button>
            </view>
        </view>
        <u-picker :show="show" @close="show = false" @confirm="confirm" @cancel="show = false" keyName="deptName" :columns="columns"></u-picker>
    </view>
</template>
<script>
    import { companyList } from '@/api/policy.js'
    import { deptList,addLog } from '@/api/index.js'
    export default {
        data() {
            return {
                code: '',
                form: {
                    companyName: "",
                    comeTime: "",
                    comeDeptName: ""
                },
                show: false,
                columns: [],
                rules:{
                    'companyName': {
                        required: true,
                        message: '请选择访问企业',
                        trigger: ['blur', 'change']
                    },
                    comeTime: {
                        required: true,
                        message: '请选择来访时间',
                        trigger: ['blur', 'change']
                    },
                    comeDeptName: {
                        required: true,
                        message: '请选择来访单位',
                        trigger: ['blur', 'change']
                    },
                    comeUser: {
                        required: true,
                        message: '请输入来访人员',
                        trigger: ['blur', 'change']
                    },
                    comeContent: {
                        required: true,
                        message: '请输入来访事项',
                        trigger: ['blur', 'change']
                    }
                }
            }
        },
        onLoad(options) {
            this.code = options.value
            this.companyList()
            this.deptList()
        },
        methods: {
            reset() {
                const { companyName, comeTime, companyId, companyUser, companyPhone } = this.form
                this.form = {
                    companyName: companyName,
                    companyId: companyId,
                    comeTime: comeTime,
                    companyUser: companyUser,
                    companyPhone: companyPhone,
                    comeDeptName: ""
                }
            },
            addLog() {
                this.$refs.uForm.validate().then(val => {
                    addLog(this.form).then(val => {
                        // console.log(val)
                        if(val.data.code == 200) {
                            uni.showToast({
                                title: '登记成功',
                                icon: 'none',
                                duration: 5000
                            })
                            setTimeout(() => {
                                uni.navigateBack()
                            }, 500)
                        }
                    })
                }).catch(err => {
                    console.log(err)
                })
            },
            confirm(e) {
                this.form.comeDeptName = e.value[0].deptName
                this.form.comeDeptId = e.value[0].deptId
                this.show = false
            },
            deptList(){
                deptList({parentId: 100}).then(val => {
                    // console.log(val.data.data)
                    this.columns = [val.data.data]
                })
            },
            companyList() {
                companyList({companyCode: this.code}).then(val => {
                    if(val.data.rows.length) {
                        const details = val.data.rows[0]
                        this.form.companyName = details.companyName
                        this.form.companyId = details.companyId
                        this.form.companyUser = details.companyUser
                        this.form.companyPhone = details.companyPhone
                        // this.form.
                        this.form.comeTime = this.$u.timeFormat(new Date(), 'yyyy-mm-dd')
                    }
                })
            },
            selectValue() {
                this.show = true
            }
        }
    }
</script>
<style>
    page{
        padding: 20rpx;
        box-sizing: border-box;
    }
</style>
<style lang="scss" scoped>
    .page-box{
        padding-bottom: 220rpx;
    }
.down-options-button{
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: fixed;
    bottom: 0;
    width:  100%;
    background-color: white;
    padding: 20rpx 20rpx 40rpx;
    box-sizing: border-box;
    left: 0;
    .options{
        width: 48%;
    }
}
</style>
policy/applyLook/applyLook.scss
New file
@@ -0,0 +1,104 @@
.page-box{
    padding-bottom: 40rpx;
    .list{
        margin: 20rpx 32rpx;
        .list-item{
            padding: 24rpx;
            background-color: white;
            border-radius: 10rpx;
            margin-bottom: 20rpx;
            .top-title{
                display: flex;
                justify-content: space-between;
                align-items: center;
                font-size: 32rpx;
                margin-bottom: 28rpx;
                .status{
                    font-size: 28rpx;
                    color: #B4B9BF;
                }
                .status1{
                    color: #FE7B32;
                }
                .status2{
                    color: #3EB47A;
                }
                .status3{
                    color: #1171E0;
                }
                .status4{
                    color: #EB4746;
                }
            }
            .user-info{
                font-size: 28rpx;
                color: #4A4E60;
                display: flex;
                justify-content: flex-start;
                align-items: center;
                .driver{
                    width: 2rpx;
                    height: 20rpx;
                    background: #F1F1F1;
                    margin: 0 20rpx;
                }
            }
            .set-line{
                font-size: 26rpx;
                color: #4A4E60;
                margin-top: 12rpx;
                text{
                    color: #C3C6CD;
                }
            }
            .line{
                border-bottom: 3rpx dashed  #F4F4F4;
                margin: 24rpx 0;
            }
            .set-line1{
                font-size: 24rpx;
                color: #4A4E60;
                margin-top: 12rpx;
                text{
                    color: #C3C6CD;
                }
            }
            .button{
                background-color: #1171E0;
                display: inline-block;
                color: white;
                padding: 10rpx 36rpx;
                border-radius: 10rpx;
            }
            .set-start{
                align-items: flex-end;
            }
        }
    }
    .down{
        position: fixed;
        background: white;
        width: 100%;
        bottom: 0;
        padding: 32rpx 22rpx 40rpx;
        text-align: center;
        box-sizing: border-box;
        .button{
            border-radius: 20rpx;
            border: 2rpx solid #ABD2FF;
            background: #F0F8FF;
            color: #1171E0;
            padding: 20rpx 0;
        }
    }
    .set-search{
        margin: 0 32rpx 0;
        padding-top: 26rpx;
    }
    .border{
        border-bottom: 2rpx solid #F6F6F6;
        margin: 20rpx 0 0;
    }
}
policy/applyLook/applyLook.vue
New file
@@ -0,0 +1,141 @@
<template>
    <view class="page-box">
        <u-sticky bgColor="white"  :offsetTop="0" style="    position: -webkit-sticky;">
            <view class="set-search">
                <u-search placeholder="请输入申请记录关键词 " @search="search" @blur="search" shape="square" :showAction="false"></u-search>
            </view>
            <view class="border"></view>
            <u-tabs :list="list1" @click="click" :current="current" :scrollable="false" bgColor="white"></u-tabs>
        </u-sticky>
        <view class="list">
            <view class="list-item" @click="goReport(item.orderId)" v-for="(item,index) in dataList" :key="index">
                <view class="top-title">
                    <text>{{item.enforceReason}}</text>
                    <text class="status" v-if="item.checkStatus != -1" :class="{status1: item.orderStatus == 1,status2: item.orderStatus == 2,status3: item.orderStatus == 3,status4: item.orderStatus == 4}">{{mapStatus[item.orderStatus]}}</text>
                    <text class="status status4" v-else >已拒绝</text>
                </view>
                <view class="user-info">
                    <text>{{item.applyUser}}</text>
                    <!-- <view class="driver"></view> -->
                </view>
                <view class="user-info">
                    <text>{{item.applyDeptName}}</text>
                </view>
                <view class="set-line">
                    <text>执法对象:</text>{{item.companyName}}
                </view>
                <view class="line"></view>
                <view class="set-flex set-start set-flex-content-between">
                    <view>
                        <view class="set-line1">
                            <text>执法时间:</text>{{item.planTime}}
                        </view>
                        <view class="set-line1">
                            <text>申请时间:</text>{{item.applyTime}}
                        </view>
                    </view>
                </view>
            </view>
             <u-empty v-if="!dataList.length"></u-empty>
        </view>
    </view>
</template>
<script>
    import { commonList } from '@/api/policy.js'
    export default {
        data() {
            return {
                current: 0,
                list1: [{
                    name: '全部',
                    value: {}
                }, {
                    name: '待审批',
                    value: {
                        orderStatus: 1,
                        checkStatus: 0
                    }
                }, {
                    name: '待执行',
                    value: {
                        orderStatus: 2
                    }
                }, {
                    name: '已执行',
                    value: {
                        orderStatus: 3
                    }
                }, {
                    name: '已结束',
                    value: {
                        orderStatus: 4
                    }
                }],
                queryParams: {
                    pageNum: 1,
                    pageSize: 10,
                    isAsc: "desc",
                    orderByColumn: "apply_time"
                },
                total: 1,
                dataList: [],
                mapStatus: {
                    1: '待审批',
                    2: "待执行",
                    3: "待上报",
                    '-1':"已拒绝",
                    4: "已结束"
                }
            }
        },
        onLoad() {
            this.orderList()
        },
        onReachBottom() {
            if(this.dataList.length == this.total) {
                return
            }
            this.queryParams.pageNum++
            this.orderList()
        },
        methods: {
            goReport(id) {
                uni.navigateTo({
                    url: `/policy/applyRecordDetails/applyRecordDetails?id=${id}`
                })
            },
            click(e) {
                this.dataList = []
                this.queryParams.pageNum = 1
                this.current = e.index
                this.orderList()
            },
            orderList() {
                const userInfo = uni.getStorageSync('userInfo')
                commonList({...this.queryParams, ...this.list1[this.current].value, checkDeptId: userInfo.dept.parentId}).then(val => {
                    this.total = val.data.total
                    this.dataList = [...this.dataList,...val.data.rows]
                })
            },
            search(e){
                this.dataList = []
                this.queryParams.pageNum =1
                this.queryParams.companyName = e
                this.orderList()
            }
        }
    }
</script>
<style>
    page {
        background-color: #F4F4F4;
    }
</style>
<style lang="scss" scoped>
    @import "./applyLook.scss";
    /deep/ .u-sticky{
            position: -webkit-sticky;
    }
</style>
policy/components/index.vue
@@ -89,9 +89,17 @@
                })
            },
            applyRecord() {
                console.log(this.userAuth)
                if(this.userAuth) {
                    uni.navigateTo({
                        url: '/policy/applyLook/applyLook'
                    })
                } else {
                uni.navigateTo({
                    url: '/policy/applyRecord/applyRecord'
                })
                }
            },
            recordZhifa() {
                uni.navigateTo({
policy/dataLook/dataLook.scss
@@ -104,3 +104,20 @@
        color: #FE7B32;
    }
}
.set-y{
}
.set-flex-progress{
    display: flex;
    justify-content: flex-start;
    align-items: flex-start;
    .name{
        text-align: right;
        width: 25%;
        font-size: 26rpx;
        margin-right: 20rpx;
    }
    .progress{
        width: calc(100% - 25% - 20rpx);
    }
}
policy/dataLook/dataLook.vue
@@ -43,11 +43,22 @@
                    <text>执法单位执法次数</text>
                    <u-icon name="calendar" size="24" @click="openDate(1)"></u-icon>
                </view>
                <view class="number">
                <view class="number set-height">
                    <view class="date">{{pageQuerm.beginTimeStr1}} <text class="margin-text">至</text> {{pageQuerm.endTimeStr1}}</view>
                    <view class="progress-box">
                        <qiun-data-charts v-if="!show" key="11" type="bar"
                            :opts="opts" :chartData="chartData" />
                    <view class="progress-box"  style="margin-top: 20rpx;">
                        <!-- <qiun-data-charts v-if="!show" key="11" type="bar"
                            :opts="opts" :chartData="chartData" /> -->
                            <view v-for="(item,index) in likeData" style="margin-bottom: 20rpx;" class="set-flex-progress">
                                <view class="name">{{item.k}}</view>
                                <view class="progress">
                                    <u-line-progress activeColor="#1890FF"  :percentage="item.progress" height="20">
                                        <template slot="default">
                                            {{item.v}}
                                        </template>
                                    </u-line-progress>
                                </view>
                            </view>
                            <!-- <echarts ref="echarts" :option="option" canvasId="echarts"></echarts> -->
                    </view>
                </view>
            </view>
@@ -110,9 +121,12 @@
        getCompanyCount,
        getEnforceTypeCount
    } from '@/api/data.js'
    export default {
        data() {
            return {
                likeData: {},
                option: {},
                typeItem: '',
                currentValue: '',
                show: false,
@@ -138,31 +152,29 @@
                    enableScroll: false,
                    legend: {
                        show: false,
                    },
                    xAxis: {
                        boundaryGap: "justify",
                        disableGrid: false,
                        min: 0,
                        axisLine: false,
                        max: 40,
                        gridColor: "#ededed"
                        gridColor: "#ededed",
                    },
                    yAxis: {
                        gridColor: "#ededed"
                        gridColor: "#ededed",
                    },
                    extra: {
                        bar: {
                            type: "group",
                            width: 10,
                            width: 15,
                            meterBorde: 1,
                            meterFillColor: "#FFFFFF",
                            activeBgColor: "#000000",
                            activeBgOpacity: 0.08,
                            linearType: "custom",
                            barBorderCircle: true,
                            seriesGap: 2,
                            categoryGap: 2
                            seriesGap: 20,
                            categoryGap: 20
                        }
                    }
                },
@@ -207,6 +219,7 @@
            this.getCompanyCount()
            this.getServerData();
            this.getServerData1()
        },
        methods: {
            confirmDate(e) {
@@ -262,8 +275,20 @@
            // 执法次数部门
            getServerData() {
                getDeptCount(this.pageQuerm).then(val => {
                    const value = val.data.data
                    const label = value.map(item => item.k)
                    const label = value.map(item => {
                        return item.k
                    })
                    const max = Math.max(value)
                    this.likeData = val.data.data.map(item => {
                        const progress = (item / max).toFixed(2)
                        return {
                            ...item,
                            progress
                        }
                    })
                    const data = value.map(item => item.v)
                    let res = {
                        categories: label,
qiye/complaint/complaint.vue
@@ -100,7 +100,7 @@
</template>
<script>
    import { logList } from '@/api/qiye.js'
    import { complaintList } from '@/api/qiye.js'
    
    export default {
        data() {
@@ -149,8 +149,7 @@
            getList() {
                let data = uni.getStorageSync("qiyedata")
                this.queryParams.companyId = data.companyId
                logList({...this.queryParams}).then(val => {
                    console.log(val.data)
                complaintList({...this.queryParams}).then(val => {
                    this.total = val.data.total
                    this.list1 = [...this.list1,...val.data.rows]
                })
qiye/complaint/details.vue
@@ -13,7 +13,7 @@
                <template v-if="msg.orderStatus==2">待执法</template>
            </view>
            <view class="wbox">
                <view class="item">
                <view class="item" v-if="dictLabel">
                    <view class="k">
                        执法类型
                    </view>
@@ -21,7 +21,7 @@
                        {{dictLabel}}
                    </view>
                </view>
                <view class="item">
                <view class="item" v-if="details.executeUser">
                    <view class="k">
                        执法人
                    </view>
@@ -91,7 +91,7 @@
                    投诉记录
                </view>
                <view class="jilu" :class="{start: item.nodeName == '发起投诉' || item.nodeName == '已办结', handler: item.nodeName == '处理中', nonde: index == nodeList.length - 1}" v-for="(item,index) in nodeList" :key="index">
                    <image src="/static/policy/icon.png" class="img" alt="" mode="widthFix" v-if="item.nodeName == '发起投诉'"/>
                    <image src="/static/policy/icon.png" class="img" alt="" mode="widthFix" v-if="item.nodeName == '发起投诉' || item.nodeName == '发起诉求'"/>
                    <image src="/static/guocheng.png" class="img" alt=""  mode="widthFix"  v-if="item.nodeName == '处理中'"/>
                    <image src="/static/policy/refject.png" class="img"  mode="widthFix" alt="" v-if="item.nodeName == '已驳回'"/>
                    <image src="/static/policy/icon.png" class="img" alt=""  mode="widthFix" v-if="item.nodeName == '已办结'"/>
@@ -188,7 +188,7 @@
<script>
    import { complaintDetails, orderNodeList, orderComplaintNodeList } from '@/api/qiye.js'
    import { orderDetails } from '@/api/policy.js'
    import { orderDetails, orderDetailsLog } from '@/api/policy.js'
    import { config } from '@/common/config.js'
    import { getDicts } from '@/api/data.js'
    export default {
@@ -205,7 +205,7 @@
        },
        onLoad(options) {
            this.complaint(options.id)
            if(options.orderId) {
            if(options.orderId && options.orderId !== 'null') {
                this.orderId = options.orderId
                this.orderDetails()
            } else {
@@ -222,7 +222,6 @@
            // 获取投诉类型
            getComtype() {
                getDicts('complaint_type').then(val => {
                    console.log(val)
                    this.dictLabel1 = val.data.data.find(item => item.dictCode == this.details.complaintType).dictLabel
                    
                })
@@ -252,7 +251,9 @@
                    // console.log(val.data.data)
                    val.data.data.regionImgs = val.data.data.regionImgs.split(",")
                    this.orderDetailsMsg = val.data.data
                    if(this.orderId) {
                    this.orderComplaintNodeList()
                    }
                    this.enforceType()
                })
            },
qiye/complaint/details1.vue
New file
@@ -0,0 +1,418 @@
<template>
    <view>
        <u-navbar placeholder bgColor="#1171E0FF" leftIconColor="white" :autoBack="true">
            <template slot="center">
                <view style="color: white;">建议记录</view>
            </template>
        </u-navbar>
        <view class="donw-box"></view>
        <view class="page-main">
            <view class="title">
                <template v-if="msg.orderStatus>2&&msg.isEva==0">已执法待评价</template>
                <template v-if="msg.orderStatus>2&&msg.isEva==1">已评价</template>
                <template v-if="msg.orderStatus==2">待执法</template>
            </view>
            <view class="wbox">
                <view class="item" v-if="dictLabel">
                    <view class="k">
                        执法类型
                    </view>
                    <view class="v">
                        {{dictLabel}}
                    </view>
                </view>
                <view class="item" v-if="details.executeUser">
                    <view class="k">
                        执法人
                    </view>
                    <view class="v">
                        {{details.executeUser}}
                    </view>
                </view>
                <view class="item">
                    <view class="k">
                        企业
                    </view>
                    <view class="v">
                        {{details.companyName}}
                    </view>
                </view>
            </view>
            <view style="height: 20rpx;"></view>
            <template v-if="orderId">
                <view class="wbox">
                    <view class="item">
                        <view class="k">
                            执法主题
                        </view>
                        <view class="v">
                            {{details.enforceReason}}
                        </view>
                    </view>
                    <view class="item">
                        <view class="k">
                            执法过程
                        </view>
                    </view>
                    <view class="imgbox">
                        <img :src="baseUrl+item" v-for="(item,index) in orderDetailsMsg.regionImgs" :key="index" class="more" @click="imgclick(item)" alt="" />
                    </view>
                    <view class="item">
                        <view class="k">
                            执法结果
                        </view>
                        <view class="v" style="color: #EB4746;">
                            <!-- {{details.regionStatus == 0? "正常" : "停业整顿" }} -->
                            {{orderDetailsMsg.regionReason}}
                        </view>
                    </view>
                    <view class="item">
                        <view class="k">
                            执法时间
                        </view>
                        <view class="v">
                            {{details.executeTime}}
                        </view>
                    </view>
                </view>
                <view style="height: 20rpx;"></view>
            </template>
            <view class="wbox2">
                <view class="t">
                    建议记录
                </view>
                <view class="jilu" :class="{start: item.nodeName == '发起诉求' || item.nodeName == '已办结', handler: item.nodeName == '处理中', nonde: index == nodeList.length - 1}" v-for="(item,index) in nodeList" :key="index">
                    <image src="/static/policy/icon.png" class="img" alt="" mode="widthFix" v-if="item.nodeName == '发起诉求'"/>
                    <image src="/static/guocheng.png" class="img" alt=""  mode="widthFix"  v-if="item.nodeName == '处理中'"/>
                    <image src="/static/policy/refject.png" class="img"  mode="widthFix" alt="" v-if="item.nodeName == '已驳回'"/>
                    <image src="/static/policy/icon.png" class="img" alt=""  mode="widthFix" v-if="item.nodeName == '已办结'"/>
                    <view class="font" style="width: calc(100% - 50rpx);">
                        <view class="h" >
                            <view class="s" >
                                {{item.nodeName}}
                            </view>
                            <view class="time">
                                {{item.nodeTime}}
                            </view>
                        </view>
                        <view class="b">
                            <view class="name" style="margin-bottom: 18rpx;">
                                {{item.nodeUser}}
                            </view>
                            <!-- <view class="p" style="margin-bottom: 18rpx;">
                                <span>申诉主题:</span>
                                {{dictLabel1}}
                            </view> -->
                            <view class="p" style="margin-bottom: 18rpx;">
                                <span>申诉内容:</span>
                                {{details.complaintReason}}
                            </view>
                            <view class="p"  v-if="item.nodeName == '已驳回'">
                                <span>驳回原因:</span>
                                {{item.nodeReason}}
                            </view>
                            <view class="p"  v-if="item.nodeName == '已办结' && item.nodeReason">
                                <span>办结结果:</span>
                                {{item.nodeReason}}
                            </view>
                        </view>
                    </view>
                </view>
                <!-- <view class="jilu">
                    <image src="/static/policy/refject.png" class="img" alt="" />
                    <view class="font">
                        <view class="h">
                            <view class="s">
                                {{item.nodeName}}
                            </view>
                            <view class="time">
                                {{item.nodeTime}}
                            </view>
                        </view>
                        <view class="b">
                            <view class="name">
                                {{details.companyUser}}
                            </view>
                            <view class="p">
                                <span>申诉主题:</span>
                                {{dictLabel1}}
                            </view>
                            <view class="p">
                                <span>申诉内容:</span>
                                {{details.complaintReason}}
                            </view>
                        </view>
                    </view>
                </view>
                <view class="jilu">
                    <image src="/static/guocheng.png" class="img" alt=""  />
                    <view class="font">
                        <view class="h">
                            <view class="s">
                                处理中
                            </view>
                            <view class="time">
                                2024-06-07 12:14
                            </view>
                        </view>
                        <view class="b">
                            <view class="name">
                                {{details.companyUser}}
                            </view>
                            <view class="p">
                                <span>申诉主题:</span>
                                {{dictLabel1}}
                            </view>
                            <view class="p">
                                <span>申诉内容:</span>
                                {{details.complaintReason}}
                            </view>
                        </view>
                    </view>
                </view>
             -->
            </view>
        </view>
    </view>
</template>
<script>
    import { complaintDetails, orderNodeList, orderComplaintNodeList } from '@/api/qiye.js'
    import { orderDetails, orderDetailsLog } from '@/api/policy.js'
    import { config } from '@/common/config.js'
    import { getDicts } from '@/api/data.js'
    export default {
        data() {
            return {
                details: {},
                orderId: "",
                orderDetailsMsg: {},
                baseUrl: config.baseUrl,
                dictLabel: "",
                dictLabel1: "",
                nodeList: []
            }
        },
        onLoad(options) {
            this.complaint(options.id)
            if(options.orderId && options.orderId !== 'null') {
                this.orderId = options.orderId
                this.orderDetails()
            } else {
                this.orderNodeList(options.id)
            }
        },
        methods: {
            orderNodeList(id) {
                orderNodeList({id}).then(val => {
                    // console.log(val)
                    this.nodeList = val.data.data
                })
            },
            enforceType() {
                getDicts('enforce_type').then(val => {
                    console.log(val)
                    this.dictLabel = val.data.data.find(item => item.dictCode == this.orderDetailsMsg.enforceType).dictLabel
                })
            },
            imgclick(url) {
                url = this.baseUrl + url
                uni.previewImage({
                    urls: [url]
                })
            },
            complaint(details) {
                complaintDetails(details).then(val => {
                    // console.log(val.data.data)
                    this.details = val.data.data
                    // this.getComtype()
                })
            },
            orderDetails() {
                orderDetails({ orderId: this.orderId}).then(val => {
                    // console.log(val.data.data)
                    val.data.data.regionImgs = val.data.data.regionImgs.split(",")
                    this.orderDetailsMsg = val.data.data
                    if(this.orderId) {
                        this.orderComplaintNodeList()
                    }
                    this.enforceType()
                })
            },
            orderComplaintNodeList() {
                orderComplaintNodeList({ orderId: this.orderId }).then(val => {
                    console.log(val.data.data, 'val===')
                    this.nodeList = val.data.data
                })
            }
        }
    }
</script>
<style>
    page {
        background: #F4F4F4;
    }
</style>
<style lang="scss" scoped>
    .page-main {
        position: relative;
        top: -380rpx;
    }
    .donw-box {
        width: 100%;
        height: 380rpx;
        flex-shrink: 0;
        background: linear-gradient(180deg, #1171E0 42.5%, #F4F4F4 100%);
    }
    .wbox {
        background: #fff;
        border-radius: 5px;
        padding: 24rpx;
        box-sizing: border-box;
        margin: 0 32rpx;
        .item {
            display: flex;
            margin-bottom: 20rpx;
            font-size: 30rpx;
            .k {
                color: #7E8596;
                width: 30%;
            }
            .v {
                color: #202D44;
                width: 70%;
            }
        }
        .item:last-child {
            margin-bottom: 0;
        }
        .imgbox {
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            border-radius: 10rpx;
            img {
                width: 198rpx;
                height: 198rpx;
                margin-bottom: 20rpx;
            }
        }
    }
    .title {
        color: #ffffff;
        font-size: 44rpx;
        font-weight: bold;
        padding-left: 32rpx;
        margin-top: 24rpx;
        margin-bottom: 24rpx;
    }
    .wbox2 {
        background: #fff;
        border-radius: 5px;
        box-sizing: border-box;
        margin: 0 32rpx;
        position: relative;
        z-index: 10;
        .t {
            padding: 24rpx;
            border-bottom: 1px solid #EEEEEE;
            color: #202d44;
            font-size: 36rpx;
            font-weight: bold;
        }
    }
    .jilu{
        display: flex;
        justify-content: space-between;
        padding: 24rpx;
        position: relative;
        &::before{
            content: '';
            display: inline-block;
            width: 2rpx;
            height: 100%;
            background: #eb47460d;
            position: absolute;
            left: 44rpx;
            top: 30rpx;
            z-index: 99;
        }
        .img{
            width: 50rpx;
            height: 50rpx;
            margin-right: 24rpx;
            position: relative;
            z-index: 100;
        }
        .font{
            width: calc(100% - 70rpx);
            .h{
                display: flex;
                justify-content: space-between;
                margin-bottom: 20rpx;
                .s{
                     color: #202d44;
                     font-size: 32rpx;
                }
                .time{
                    color: #7e8596;
                    font-size: 24rpx;
                }
            }
            .b{
                // width: 289px;
                // height: 111px;
                // flex-shrink: 0;
                border-radius: 4px;
                background: #F6F6F6;
                padding: 24rpx;
                .name{
                     color: #202d44;
                     font-size: 32rpx;
                }
                .p{
                    color: #202d44;
                    font-size: 26rpx;
                    span{
                        color: #666666;
                    }
                }
            }
        }
    }
    .handler{
        &::before {
            background: #fe7b320d;
        }
    }
    .start{
        &::before{
            background: #E7F8F0;
        }
    }
    .nonde{
        &::before{
            background: none;
        }
    }
</style>
qiye/my/my.vue
@@ -27,6 +27,13 @@
                    </view>
                    <u-icon name="arrow-right"></u-icon>
                </view>
                <view class="item" @click="jianyi()">
                    <view class="set-flex">
                        <image src="/static/policy/jianyi-record.png" mode="widthFix" style="border-radius: 50%;"></image>
                        <text class="change">建议记录</text>
                    </view>
                    <u-icon name="arrow-right"></u-icon>
                </view>
                <view class="item" @click="switchPhone()" v-if="isShowChange">
                    <view class="set-flex">
                        <image src="/static/qiye/qiehuan.png" mode="widthFix"></image>
@@ -38,6 +45,20 @@
                    <view class="set-flex">
                        <image src="/static/policy/phone.png" mode="widthFix"></image>
                        <text class="change">修改手机号</text>
                    </view>
                    <u-icon name="arrow-right"></u-icon>
                </view>
                <view class="item" @click="goProposal()">
                    <view class="set-flex">
                        <image src="/static/policy/personal.png" mode="widthFix"></image>
                        <text class="change">投诉</text>
                    </view>
                    <u-icon name="arrow-right"></u-icon>
                </view>
                <view class="item" @click="goProposal1()">
                    <view class="set-flex">
                        <image src="/static/policy/jianyi.png" mode="widthFix"></image>
                        <text class="change">建议</text>
                    </view>
                    <u-icon name="arrow-right"></u-icon>
                </view>
@@ -111,6 +132,11 @@
                    url: '/qiye/complaint/complaint'
                })
            },
            jianyi(){
                uni.navigateTo({
                    url: '/qiye/proprsalRecord/proprsalRecord'
                })
            },
            switchPhone(){
                uni.navigateTo({
                    url: "/qiye/switchPhone/switchPhone"
@@ -129,6 +155,16 @@
                      }
                     }
                    })
            },
            goProposal() {
                uni.navigateTo({
                    url: `/qiye/proposal/proposal`
                })
            },
            goProposal1() {
                uni.navigateTo({
                    url: `/qiye/proposal1/proposal1`
                })
            }
        }
    }
qiye/proposal/proposal.vue
New file
@@ -0,0 +1,183 @@
<template>
    <view>
        <view class="page-box">
            <view class="padding">
                <view class="font">
                    投诉部门
                </view>
                <view style="margin-top: 20rpx;" @click="show = true">
                    <u-input placeholder="请选择" readonly  :value="executeDeptName"     suffixIcon="arrow-right"></u-input>
                </view>
                <view class="font">
                    投诉主题
                </view>
                <view>
                    <u-radio-group v-model="complaintType">
                        <u-radio v-for="(aa, ii) in list" :key="ii" :name="aa.dictCode">
                            {{aa.dictLabel}}
                        </u-radio>
                    </u-radio-group>
                </view>
                <view class="font">
                    投诉
                </view>
                <view class="margin-top">
                    <u-textarea :cursorSpacing="70" v-model="complaintReason" placeholder="请输入..."></u-textarea>
                </view>
            </view>
            <view class="down">
                <view class="enter" @click="entery()">提交</view>
            </view>
        </view>
        <u-picker :show="show" @close="show = false" @confirm="confirm" @cancel="show = false" keyName="deptName" :columns="columns"></u-picker>
    </view>
</template>
<script>
    import { getDicts } from '@/api/data.js'
    import { deptList, complaintAdd } from '@/api/index'
    import { orderComplaint } from '@/api/qiye.js'
    export default {
        data() {
            return {
                list: [],
                show: false,
                columns: [],
                complaintReason: '',
                complaintType: '',
                executeDeptName: '',
                executeId: ''
            }
        },
        onLoad() {
            getDicts('complaint_type').then(val => {
                this.list = val.data.data
            })
            this.deptList()
        },
        methods: {
            confirm(e) {
                this.executeDeptName = e.value[0].deptName
                this.executeId = e.value[0].deptId
                this.show = false
            },
            deptList() {
                deptList({parentId: 100}).then(val => {
                    // console.log(val)
                    this.columns = [val.data.data]
                })
            },
            entery() {
                if(this.executeDeptName == '') {
                    uni.showToast({
                        title: '请选择投诉对象',
                        icon: 'none'
                    })
                    return
                }
                if(this.complaintType==''){
                    uni.showToast({
                        title: '请选择投诉主题',
                        icon: 'none'
                    })
                    return
                }
                if(this.complaintReason==''){
                    uni.showToast({
                        title: '请输入投诉内容',
                        icon: 'none'
                    })
                    return
                }
                const userInfo = uni.getStorageSync('qiyedata')
                const companyId = uni.getStorageSync('companyId')
                let data = {
                    complaintType:this.complaintType,
                    complaintReason:this.complaintReason,
                    executeDeptName: this.executeDeptName,
                    executeDeptId: this.executeId,
                    companyName: userInfo.companyName,
                    companyPhone: userInfo.companyPhone,
                    companyUser: userInfo.companyUser,
                    companyId: companyId
                }
                complaintAdd(data).then(val => {
                    if(val.data.code === 200) {
                        uni.showToast({
                            title: '提交成功',
                            icon: 'none'
                        })
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 500)
                    }
                })
            },
        }
    }
</script>
<style lang="scss" scoped>
    /deep/ .u-radio-group {
        margin-top: 20rpx;
        flex-wrap: wrap;
        .u-radio {
            margin-right: 20rpx;
            margin-bottom: 20rpx;
        }
    }
.page-box {
        padding: 24rpx 0;
        .font{
            color: #4a4e60;
            font-size: 32rpx;
            margin-top: 20rpx;
        }
        .title1 {
            font-size: 36rpx;
            font-weight: 700;
            padding: 0 32rpx;
            border-bottom: 2rpx solid #F4F4F4;
            padding-bottom: 24rpx;
        }
        .padding {
            padding: 0 24rpx;
        }
        .margin-top {
            margin-top: 20rpx;
        }
        .down {
            padding: 34rpx 30rpx 30rpx;
            display: flex;
            justify-content: space-between;
            >view {
                display: inline-block;
            }
            .button {
                padding: 20rpx 40rpx;
                background: #F7F7F7;
                border-radius: 20rpx;
            }
            .enter {
                width: 100%;
                background: #1171E0;
                color: white;
                border-radius: 20rpx;
                padding: 20rpx 40rpx;
                text-align: center;
            }
        }
    }
    /deep/ .u-textarea {
        background-color: #F4F4F4;
    }
</style>
qiye/proposal1/proposal1.vue
New file
@@ -0,0 +1,132 @@
<template>
    <view>
        <view class="page-box">
            <view class="padding">
                <view class="font">
                    建议
                </view>
                <view class="margin-top">
                    <u-textarea :cursorSpacing="70" v-model="complaintReason" placeholder="请输入..."></u-textarea>
                </view>
            </view>
            <view class="down">
                <view class="enter" @click="entery()">提交</view>
            </view>
        </view>
    </view>
</template>
<script>
    import { getDicts } from '@/api/data.js'
    import { orderComplaint, confirmOrderId } from '@/api/qiye.js'
    import {  complaintAdd } from '@/api/index'
    export default {
        data() {
            return {
                list: [],
                complaintReason: '',
                complaintType: ''
            }
        },
        onLoad() {
            getDicts('complaint_type').then(val => {
                this.list = val.data.data
            })
        },
        methods: {
            entery() {
                if(this.complaintReason==''){
                    uni.showToast({
                        title: '请输入投诉内容',
                        icon: 'none'
                    })
                    return
                }
                const userInfo = uni.getStorageSync('qiyedata')
                const companyId = uni.getStorageSync('companyId')
                let data = {
                    complaintType: -1,
                    complaintReason:this.complaintReason,
                    companyName: userInfo.companyName,
                    companyPhone: userInfo.companyPhone,
                    companyUser: userInfo.companyUser,
                    companyId: companyId
                }
                complaintAdd(data).then(val => {
                    if(val.data.code == 200) {
                        uni.showToast({
                            title: '提交成功',
                            icon: 'none'
                        })
                        setTimeout(() => {
                            uni.navigateBack()
                        }, 500)
                    }
                })
            },
        }
    }
</script>
<style lang="scss" scoped>
    /deep/ .u-radio-group {
        margin-top: 20rpx;
        flex-wrap: wrap;
        .u-radio {
            margin-right: 20rpx;
            margin-bottom: 20rpx;
        }
    }
.page-box {
        padding: 24rpx 0;
        .font{
            color: #4a4e60;
            font-size: 32rpx;
            margin-top: 20rpx;
        }
        .title1 {
            font-size: 36rpx;
            font-weight: 700;
            padding: 0 32rpx;
            border-bottom: 2rpx solid #F4F4F4;
            padding-bottom: 24rpx;
        }
        .padding {
            padding: 0 24rpx;
        }
        .margin-top {
            margin-top: 20rpx;
        }
        .down {
            padding: 34rpx 30rpx 30rpx;
            display: flex;
            justify-content: space-between;
            >view {
                display: inline-block;
            }
            .button {
                padding: 20rpx 40rpx;
                background: #F7F7F7;
                border-radius: 20rpx;
            }
            .enter {
                width: 100%;
                background: #1171E0;
                color: white;
                border-radius: 20rpx;
                padding: 20rpx 40rpx;
                text-align: center;
            }
        }
    }
    /deep/ .u-textarea {
        background-color: #F4F4F4;
    }
</style>
qiye/proprsalRecord/proprsalRecord.vue
New file
@@ -0,0 +1,256 @@
<template>
    <view>
        <u-sticky bgColor="white">
            <view class="set-search">
                <u-search placeholder="请输入" @search="search" @blur="search" shape="square" :showAction="false"></u-search>
            </view>
            <view class="border"></view>
            <u-tabs :list="list" @change="click" :current="current" :scrollable="false" bgColor="white"></u-tabs>
        </u-sticky>
        <view class="item" v-for="(item,index) in list1">
            <img src="/static/i05.png" class="img" alt="" />
            <view class="right">
                <view class="name">
                    <view class="l">
                        {{item.companyName}}
                    </view>
                    <template v-if="item.complaintStatus==0">
                        <view class="r color2">
                            待响应
                        </view>
                    </template>
                    <template v-if="item.complaintStatus==1">
                        <view class="r color1">
                            处理中
                        </view>
                    </template>
                    <template v-if="item.complaintStatus==2">
                        <view class="r color3">
                            已办结
                        </view>
                    </template>
                    <!-- <view class="r color1">
                        待评价
                    </view> -->
                    <template v-if="item.complaintStatus==-1">
                        <view class="r color4">
                            已驳回
                        </view>
                    </template>
                </view>
                <view class="box">
                    <view class="l">
                        <p style="align-items: flex-start;display: flex;justify-content: flex-start;"><text style="display: inline-block;width: 35%;">执法单位:</text> <text style="display: inline-block;width: 65%;">{{item.executeDeptName}}</text></p>
                        <p>投诉时间: {{item.complaintTime}}</p>
                    </view>
                    <view class="r" @click="chakan(item.id, item.orderId)">
                        去查看
                    </view>
                </view>
            </view>
        </view>
        <u-empty v-if="!list1.length"></u-empty>
        <!-- <view class="item">
            <img src="/static/i05.png" class="img" alt="" />
            <view class="right">
                <view class="name">
                    <view class="l">
                        北京尚策互动科技有限公司北京尚策互动科技有限公司北京尚策互动科技有限公司北京尚策互动科技有限公司北京尚策互动科技有限公司
                    </view>
                    <view class="r color2">
                        待评价
                    </view>
                </view>
                <view class="box">
                    <view class="l">
                        <p>执法单位:农业农村局农业农村局农业农村局农业农村局农业农村局农业农村局s</p>
                        <p>执法时间:2024-06-03 12:30:67</p>
                    </view>
                    <view class="r">
                        去查看
                    </view>
                </view>
            </view>
        </view>
        <view class="item">
            <img src="/static/i05.png" class="img" alt="" />
            <view class="right">
                <view class="name">
                    <view class="l">
                        北京尚策互动科技有限公司北京尚策互动科技有限公司北京尚策互动科技有限公司北京尚策互动科技有限公司北京尚策互动科技有限公司
                    </view>
                    <view class="r color3">
                        待评价
                    </view>
                </view>
                <view class="box">
                    <view class="l">
                        <p>执法单位:农业农村局</p>
                        <p>执法时间:2024-06-03 12:30:67</p>
                    </view>
                    <view class="r">
                        去查看
                    </view>
                </view>
            </view>
        </view> -->
        <view style="height: 50rpx;"></view>
    </view>
</template>
<script>
    import { pleaseList } from '@/api/qiye.js'
    export default {
        data() {
            return {
                current: 0,
                list: [{
                    name: '全部',
                    value: ''
                }, {
                    name: '待响应',
                    value: 0
                }, {
                    name: '处理中',
                    value: 1
                }, {
                    name: '已办结',
                    value: 2
                }],
                list1:[],
                queryParams: {
                    pageNum: 1,
                    pageSize: 10,
                    companyId:'',
                },
                total: 1,
            }
        },
        onLoad() {
            this.list1 = []
            this.queryParams.pageNum = 1
            this.getList()
        },
        onReachBottom() {
            if(this.list1.length == this.total) {
                return
            }
            this.queryParams.pageNum++
            this.getList()
        },
        methods: {
            chakan(id,orderId){
                uni.navigateTo({
                    url: `/qiye/complaint/details1?id=${id}&orderId=${orderId}`
                })
            },
            getList() {
                let data = uni.getStorageSync("qiyedata")
                this.queryParams.companyId = data.companyId
                pleaseList({...this.queryParams}).then(val => {
                    console.log(val.data)
                    this.total = val.data.total
                    this.list1 = [...this.list1,...val.data.rows]
                })
            },
            search(e){
                this.list1 = []
                this.queryParams.pageNum =1
                this.queryParams.companyName = e
                this.getList()
            },
            click(i) {
                this.list1 = []
                this.queryParams.pageNum = 1
                this.queryParams.complaintStatus = this.list[i.index].value
                this.getList()
            }
        }
    }
</script>
<style>
page {
        background-color: #F4F4F4;
    }
</style>
<style lang="scss" scoped>
    .set-search{
        margin: 0 32rpx 0;
        padding-top: 26rpx;
    }
    .border{
        border-bottom: 2rpx solid #F6F6F6;
        margin: 20rpx 0 0;
    }
    .item{
        background: #fff;
        border-radius: 5px;
        padding: 24rpx;
        box-sizing: border-box;
        margin: 20rpx 32rpx;
        display: flex;
        .img{
            width: 56rpx;
            height: 56rpx;
        }
        .right{
            width: 90%;
            .name{
                display: flex;
                justify-content: space-between;
                .l{
                    color: #202d44;
                    font-size: 32rpx;
                    line-height: 44rpx;
                    margin-bottom: 24rpx;
                    width: 80%;
                }
                .r{
                    font-size: 28rpx;
                    width: 20%;
                    text-align: right;
                }
            }
            .box{
                display: flex;
                justify-content: space-between;
                .l{
                    font-size: 26rpx;
                     color: #7e8593;
                     max-width: 80%;
                }
                .r{
                    width: 132rpx;
                    height: 64rpx;
                    line-height: 64rpx;
                    border-radius: 5px;
                    border: 1px solid #ABD2FF;
                    background: #F0F8FF;
                    color: #1171e0;
                    text-align: center;
                    font-size: 30rpx;
                }
            }
        }
    }
    .color1{
        color: #FE7B32;
    }
    .color2{
        color: #EB4746;
    }
    .color3{
        color: #3EB47A;
    }
    .color4{
        color: gray;
    }
</style>
qiye/record/details.vue
@@ -168,7 +168,7 @@
                </view>
            </view>
        </view>
        <view class="bottom" v-if="msg.orderStatus==3 || msg.orderStatus== 4">
        <view class="bottom" v-if=" msg.orderStatus== 5">
            <view class="one" v-if="msg.isComplaint != 1 && msg.isEva == 1">
                <view class="b1" @click="open()">
                    投诉
@@ -187,6 +187,15 @@
                    我要评价
                </view>
            </view>
        </view>
        <view class="bottom" v-if=" msg.orderStatus == 4">
            <view class="one" >
                <view class="b1" style="background-color: #1171E0;color: white;" @click="enterOrder()">
                    确认
                </view>
            </view>
        </view>
        <u-popup :show="show" @close="close" mode="bottom" round="10" closeable>
            <view class="page-box">
@@ -224,7 +233,7 @@
    import { order } from '@/api/index.js'
    import { getDicts } from '@/api/data.js'
    import { config } from '@/common/config'
    import { orderComplaint } from '@/api/qiye.js'
    import { orderComplaint, confirmOrderId } from '@/api/qiye.js'
    export default {
        data() {
            return {
@@ -259,6 +268,27 @@
            this.getdata()
        },
        methods: {
            enterOrder() {
                uni.showModal({
                    title: '提示',
                    content: '确认该订单?',
                    success: val => {
                        if(val.confirm) {
                            confirmOrderId({orderId: this.msg.orderId}).then(val => {
                                if(val.data.code == 200) {
                                    uni.showToast({
                                        title: '确认成功',
                                        icon: 'none'
                                    })
                                    this.getdata()
                                }
                            })
                        }
                    }
                })
            },
            getdata(){
                order(this.id).then(val => {
                    
qiye/record/record.vue
@@ -111,16 +111,22 @@
                    }
                }, {
                    name: '待评价',
                    value: {
                        isEva: 0
                    }
                }, {
                    name: '未执法',
                    value: {
                        orderStatus: 2
                    }
                }, {
                    name: '待确认',
                    value: {
                        orderStatus: 4
                    }
                }, {
                    name: '待评价',
                    value: {
                        isEva: 0,
                        orderStatus: 5
                    }
                },{
                    name: '已评价',
                    value: {
                        isEva: 1
readme.md
New file
@@ -0,0 +1,58 @@
## 简介
基于uni-app ts, 封装echarts库,适配H5端微信小程序端,其它端未测试,支持按需引入,支持导出为图片。
## 1、安装项目依赖
```
npm install echarts lodash -S
```
## 2、将下载插件中的com-echarts文件夹复制到项目components目录下
## 3、在需要用到的页面引入该组件
```
<script setup lang="ts">
  import { ref } from 'vue'
  <!-- 按需引入chart -->
  import { PieChart } from 'echarts/charts'
  <!-- 引入组件 -->
  import comEcharts from '[XXXXX]/components/com-echarts/com-echarts.vue'
  ...
  const chartsRef = ref()
  const refresh = () => {
    chartsRef.value?.reStore()
  }
  const saveImg = () => {
    chartsRef.value?.saveImage()
  }
<script setup lang="ts">
<template>
  <!-- 页面使用 -->
  <com-echarts ref="echartsRef" height="850rpx" :chartList="[PieChart]" :options="options"></com-echarts>
  ...
<template>
```
## 4、组件props 及事件说明
** props **
### canvasId: string - canvas id
### chartList: chart list - 从echarts/chart按需引入的chart列表
### options: any - 图表数据配置
### width: string - 图表宽度,默认:100% 代表充满屏幕
### height: string - 图表高度,默认:1000rpx
** 暴露的组件实例方法 **
### reStore 重绘图表
### saveImage 导出图片
static/index-1.png
static/policy/jianyi-record.png
static/policy/jianyi.png
static/policy/personal.png