guanqb
2024-02-22 ab701df859cd79ae036f8cc86268137d2c8da8ee
src/views/publicSecurity/positionManage/TransactRegist.vue
@@ -5,36 +5,69 @@
            :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset"
            @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
            @refresh-change="refreshChange" @on-load="onLoad">
            <template slot-scope="{row, size}" slot="principalIdCard">
                <el-button :size="size" type="text" @click="showStringDispose(row, 'principalIdCardflag')">
                    {{ textDispose(row, 'principalIdCardflag', 'principalIdCard') }}
            <template slot-scope="{row, size}" slot="menu">
                <!-- <el-button type="text" :size="size" icon="el-icon-view" v-if="permission.place_view" plain
                    @click="lookDetail(row, 0)">查 看
                </el-button> -->
                <el-button type="text" :size="size" icon="el-icon-delete" v-if="permission.place_del" plain
                    @click="rowDel(row)">删 除
                </el-button>
                <el-button type="text" :size="size" icon="el-icon-s-check" plain @click="goAudit(row)"
                    v-if="row.confirmFlag == 1" :disabled="row.confirmFlag != 1">审 核
                </el-button>
            </template>
            <template slot-scope="{row, size}" slot="principalPhone">
                <el-button :size="size" type="text" @click="showStringDispose(row, 'principalPhoneflag')"
                    v-text="textDispose(row, 'principalPhoneflag', 'principalPhone')">
                </el-button>
            <template slot="confirmFlag" slot-scope="{row, size}">
                <el-tag :size="size" :type="showStatus(row.confirmFlag).type">
                    {{ showStatus(row.confirmFlag).text }}
                </el-tag>
            </template>
            <template slot-scope="{row, size}" slot="policePhone">
                <el-button :size="size" type="text" @click="showStringDispose(row, 'policePhoneflag')"
                    v-text="textDispose(row, 'policePhoneflag', 'policePhone')">
                </el-button>
            </template>
            <template slot="menuLeft">
                <el-button type="warning" size="small" plain icon="el-icon-download" @click="handleExport">导出
                </el-button>
            </template>
            <template slot-scope="{row, size}" slot="phoneNumber">
                <el-button :size="size" type="text" @click="showStringDispose(row, 'phoneNumberflag')"
                    v-text="textDispose(row, 'phoneNumberflag', 'phoneNumber')">
                </el-button>
            </template>
            <template slot-scope="{row, size}" slot="transactionObjectTel">
                <el-button :size="size" type="text" @click="showStringDispose(row, 'transactionObjectTelflag')"
                    v-text="textDispose(row, 'transactionObjectTelflag', 'transactionObjectTel')">
                </el-button>
            </template>
            <template slot-scope="{row, size}" slot="idCard">
                <el-button :size="size" type="text" @click="showStringDispose(row, 'idCardflag')"
                    v-text="textDispose(row, 'idCardflag', 'idCard')">
                </el-button>
            </template>
        </avue-crud>
        <el-dialog title="" append-to-body :visible.sync="auditBasePopup" width="60%">
            <campusReporting @colseDetail="colseDetail" v-if="taskType == 6" ref="campusReporting"></campusReporting>
            <hotelReporting @colseDetail="colseDetail" v-if="taskType == 2" ref="hotelReporting"></hotelReporting>
            <labelReporting @colseDetail="colseDetail" v-if="taskType == 3" ref="labelReporting"></labelReporting>
        </el-dialog>
        <el-dialog :visible.sync="visible" append-to-body destroy-on-close title="审核" width="30%"
            custom-class="flow-design-dialog" :before-close="handleClose">
            <audit-base @handleSubmit="submitAudit"></audit-base>
        </el-dialog>
    </basic-container>
</template>
<script>
import {
    mapGetters
} from "vuex"
import {
    getDAGLList
} from "@/api/publicSecurity/ninePlaceManage"
    getList,
    getDetail,
    removeTask,
    update,
    add,
} from "@/api/task/labelReporting"
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import Qs from "qs"
@@ -50,10 +83,42 @@
import {
    dateNow
} from "@/util/date"
import {
    mapGetters
} from "vuex"
import {
    applyTaskExamine
} from "@/api/publicSecurity/keynoteManage"
import website from '@/config/website'
import campusReporting from '../components/campusReporting'
import hotelReporting from '../components/hotelReporting'
import labelReporting from '../components/labelReporting'
export default {
    data () {
        //手机号格式校验
        let validatorPhone = function (rule, value, callback) {
            if (value) {
                if (!/^1[3456789]\d{9}$/.test(value)) {
                    callback(new Error('手机号格式有误!'))
                } else {
                    callback()
                }
            }
            callback()
        }
        return {
            auditRules: {
                status: [{ required: true, message: "必填" }],
                remark: [{ required: true, message: "必填" }],
            },
            visible: false,
            taskType: 0,
            curRow: {},
            roleBox: false,
            form: {},
            query: {},
            loading: true,
@@ -66,109 +131,258 @@
            datetime: "",
            selectionList: [],
            option: {
                labelWidth: 96,
                searchLabelWidth: 96,
                searchShow: true,
                searchMenuSpan: 3,
                menuWidth: 190,
                height: "auto",
                calcHeight: 54,
                dialogWidth: 950,
                tip: false,
                searchShow: true,
                searchMenuSpan: 3,
                menu: false,
                // menu: false,
                border: true,
                //stripe:true,
                index: true,
                viewBtn: true,
                addBtn: false,
                editBtn: false,
                delBtn: false,
                addBtn: false,
                refreshBtn: false,
                searchShowBtn: false,
                columnBtn: false,
                selection: true,
                dialogClickModal: false,
                column: [{
                    label: "地区",
                    prop: "townStreetName",
                    align: 'center',
                    search: true,
                    searchSpan: 3,
                    searchLabelWidth: 46,
                    labelWidth: 120,
                    width: 156
                }, {
                    label: "场所名称",
                    prop: "placeName",
                    align: 'center',
                    search: true,
                    searchSpan: 3,
                    // searchLabelWidth: 96,
                    width: 156
                }, {
                    label: "场所地址",
                    prop: "location",
                    align: 'center',
                },
                {
                    label: "场所类别",
                    prop: "nineType",
                    align: 'center',
                    dicUrl: "/api/blade-system/dict-biz/tree?code=nineType",
                    props: {
                        label: "title",
                        value: "key",
                column: [
                    {
                        width: 110,
                        span: 12,
                        label: "场所名称",
                        prop: "districtName",
                        searchSpan: 4,
                        searchLabelWidth: 100,
                        search: true,
                        align: 'center',
                        labelWidth: 110,
                    },
                    type: 'select',
                    search: true,
                    searchSpan: 3,
                    // searchLabelWidth: 96
                }, {
                    label: "场所负责人",
                    prop: "principal",
                    align: 'center',
                    search: true,
                    searchSpan: 4,
                    searchLabelWidth: 96,
                    width: 110
                }, {
                    label: "身份证信息",
                    prop: "principalIdCard",
                    align: 'center',
                    slot: true,
                    width: 160
                }, {
                    label: "联系方式",
                    prop: "principalPhone",
                    align: 'center',
                    slot: true,
                    width: 120
                }, {
                    label: "辖区派出所",
                    prop: "deptName",
                    align: 'center',
                    search: true,
                    searchSpan: 4,
                    searchLabelWidth: 96
                }, {
                    label: "责任民警",
                    prop: "policeName",
                    align: 'center',
                    search: true,
                    searchSpan: 4,
                    // searchLabelWidth: 96,
                    width: 110
                }, {
                    label: "责任民警联系方式",
                    prop: "policePhone",
                    align: 'center',
                    slot: true,
                    width: 120
                }],
                    {
                        span: 12,
                        label: "场所地址",
                        prop: "localtion",
                        searchSpan: 4,
                        minWidth: 220,
                        overHidden: true,
                        // search: true,
                        rules: [{
                            required: true,
                            message: "请输入地址",
                            trigger: "blur",
                        },],
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        label: "阵地类型",
                        prop: "frontType",
                        dicUrl: "/api/blade-system/dict-biz/tree?code=frontType",
                        props: {
                            label: "title",
                            value: "key",
                        },
                        type: 'select',
                        search: true,
                        searchSpan: 4,
                        align: 'center',
                        width: 120,
                        labelWidth: 110,
                    },
                    {
                        width: 110,
                        span: 12,
                        label: "场所负责人",
                        prop: "owner",
                        searchSpan: 4,
                        searchLabelWidth: 110,
                        search: true,
                        align: 'center',
                        labelWidth: 110,
                    }, {
                        width: 120,
                        span: 12,
                        label: "联系方式",
                        prop: "phoneNumber",
                        searchSpan: 4,
                        search: true,
                        searchLabelWidth: 96,
                        rules: [{
                            validator: validatorPhone,
                            trigger: 'blur'
                        }],
                        align: 'center',
                        slot: true,
                        labelWidth: 110,
                    },
                    {
                        width: 110,
                        span: 12,
                        label: "交易对象",
                        prop: "transactionObject",
                        searchSpan: 4,
                        searchLabelWidth: 96,
                        search: true,
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        width: 110,
                        span: 12,
                        label: "交易对象电话",
                        prop: "transactionObjectTel",
                        searchSpan: 4,
                        searchLabelWidth: 120,
                        searchPlaceholder: '请输入交易电话',
                        search: true,
                        align: 'center',
                        labelWidth: 110,
                        slot: true
                    },
                    {
                        width: 160,
                        span: 12,
                        label: "身份证号",
                        prop: "idCard",
                        searchSpan: 4,
                        searchLabelWidth: 100,
                        search: true,
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        width: 110,
                        span: 12,
                        label: "交易数量",
                        prop: "goodsNums",
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        width: 110,
                        span: 12,
                        label: "交易金额",
                        prop: "transactionMoney",
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        width: 110,
                        span: 12,
                        label: "交易过程",
                        prop: "transactionProcess",
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        width: 140,
                        span: 12,
                        label: "发生时间",
                        prop: "createTime",
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        width: 110,
                        label: "所属街道",
                        // hide: true,
                        // search: true,
                        parent: false,
                        searchSpan: 4,
                        prop: "streetName",
                        align: 'center',
                        labelWidth: 110,
                    }, {
                        width: 156,
                        parent: false,
                        searchSpan: 4,
                        label: "所属社区",
                        prop: "communityName",
                        align: 'center',
                        labelWidth: 110,
                    },
                    {
                        width: 100,
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                        label: '审核状态',
                        prop: 'confirmFlag',
                        type: 'radio',
                        slot: true,
                        dicData: [{
                            label: '待审核',
                            value: 1
                        }, {
                            label: '已审核',
                            value: 2
                        }, {
                            label: '未通过',
                            value: 3
                        }, {
                            label: '待接收',
                            value: 4
                        }],
                        align: 'center',
                        labelWidth: 110,
                    }, {
                        width: 110,
                        label: '物品图片',
                        prop: 'goodsImageUrls',
                        fileType: 'img',
                        type: "upload",
                        listType: "picture-card",
                        dataType: "string",
                        disabled: true,
                        span: 12,
                        labelWidth: 110,
                    }, {
                        width: 110,
                        label: '身份证照片',
                        prop: 'imageUrls',
                        fileType: 'img',
                        type: "upload",
                        listType: "picture-card",
                        dataType: "string",
                        disabled: true,
                        span: 12,
                        labelWidth: 110,
                    },],
            },
            data: []
            data: [],
            auditBasePopup: false,
        }
    },
    provide () {
        return {
            placeElement: this,
        }
    },
    components: {
        campusReporting,
        hotelReporting,
        labelReporting,
    },
    watch: {},
    computed: {
        ...mapGetters(["permission", "userInfo"]),
        permissionList () {
            return {
                addBtn: this.vaildData(this.permission.place_add, true),
                addBtn: this.vaildData(this.permission.place_add, false),
                viewBtn: this.vaildData(this.permission.place_view, true),
                delBtn: this.vaildData(this.permission.place_delete, true),
                editBtn: this.vaildData(this.permission.place_edit, true),
                delBtn: this.vaildData(this.permission.place_del, true),
                // editBtn: this.vaildData(this.permission.place_edit, true),
            }
        },
        ids () {
@@ -178,13 +392,41 @@
            })
            return ids.join(",")
        },
        showStatus () {
            return (data) => {
                let tags = {}
                if (data == 1) {
                    tags = {
                        type: 'warning',
                        text: '待审核'
                    }
                } else if (data == 2) {
                    tags = {
                        type: 'success',
                        text: '已审核'
                    }
                } else if (data == 3) {
                    tags = {
                        type: 'danger',
                        text: '未通过'
                    }
                } else if (data == 4) {
                    tags = {
                        type: 'warning',
                        text: '待接收'
                    }
                }
                return tags
            }
        },
        textDispose () {
            return (row, flag, type) => {
                if (row[flag] || row[type] == null) {
                    return row[type]
                } else {
                    if (type == 'principalIdCard') {
                    if (type == 'idCardflag') {
                        return row[type].replace(/^(.{6})(?:\d+)(.{4})$/, "$1******$2")
                    } else {
                        return row[type].replace(/^(.{3})(?:\d+)(.{4})$/, "$1****$2")
@@ -194,8 +436,12 @@
        }
    },
    methods: {
        showStringDispose (row, type) {
            row[type] = !row[type]
        },
        handleExport () {
            this.$confirm("是否导出档案管理数据?", "提示", {
            this.$confirm("是否导出交易登记数据?", "提示", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning"
@@ -204,19 +450,92 @@
                var data = {
                    ...this.query
                }
                // data.isNine = 1
                data = Qs.stringify(data)
                exportBlob(
                    `/api/blade-place/place/exportNineType?${this.website.tokenHeader}=${getToken()}&` + data
                    `/api/blade-taskLabelReportingEvent/taskLabelReportingEvent/export-taskLabelReportingEvent?${this.website.tokenHeader}=${getToken()}&` + data
                ).then(res => {
                    console.log('exportBlob', res)
                    downloadXls(res.data, `档案管理${dateNow()}.xlsx`)
                    downloadXls(res.data, `交易登记${dateNow()}.xlsx`)
                    NProgress.done()
                })
            })
        },
        // 弹窗关闭回调
        handleClose () {
            this.cancelAudit()
        },
        showStringDispose (row, type) {
            row[type] = !row[type]
        // 取消审核
        cancelAudit () {
            this.visible = false
        },
        // 确认提交审核
        submitAudit (form) {
            let auditForm = {
                status: form.status == '1' ? '2' : '3',
                remark: form.confirmNotion,
                reportType: 5
            }
            applyTaskExamine(Object.assign(this.auditParams, auditForm)).then(res => {
                if (res.data.code == 200) {
                    this.$message.warning("审核成功")
                    this.onLoad(this.page)
                    this.cancelAudit()
                }
            })
        },
        // 审核按钮
        goAudit (row) {
            this.auditParams = {
                id: row.taskId,
                reportType: 5
            }
            this.visible = true
        },
        colseDetail () {
            this.auditBasePopup = false
            this.onLoad(this.page)
        },
        lookDetail (row, applyType) {
            this.auditBasePopup = true
            var that = this
            if (row.reportType == 6) {
                this.taskType = 6
                this.$nextTick(() => {
                    that.$refs.campusReporting.init(row, applyType)
                })
            }
            if (row.reportType == 2) {
                this.taskType = 2
                this.$nextTick(() => {
                    that.$refs.hotelReporting.init(row, applyType)
                })
            }
            if (row.reportType == 3 || row.reportType == 4 || row.reportType == 5) {
                this.taskType = 3
                this.$nextTick(() => {
                    that.$refs.labelReporting.init(row, applyType)
                })
            }
        },
        auditCur (row) {
            this.curAuditRow = row
            this.auditBasePopup = true
        },
        roleBoxClose () {
            this.curRow = {}
        },
        ManageTenants (item) {
            this.curRow = item
            this.roleBox = true
        },
        rowSave (row, done, loading) {
@@ -314,30 +633,26 @@
                    })
                })
        },
        searchReset () {
            this.query = {}
            this.page.currentPage = 1
            this.onLoad(this.page)
        },
        searchChange (params, done) {
            this.query = params
            this.page.currentPage = 1
            this.onLoad(this.page, params)
            done()
        },
        selectionChange (list) {
            this.selectionList = list
        },
        selectionClear () {
            this.selectionList = []
            this.$nextTick(() => {
                this.$refs.crud && this.$refs.crud.toggleSelection()
            })
        },
        handleDelete () {
            if (this.selectionList.length === 0) {
                this.$message.warning("请选择至少一条数据")
@@ -362,42 +677,71 @@
        },
        beforeOpen (done, type) {
            // if (["edit", "view"].includes(type)) {
            // } else {
            //     done()
            // }
            if (["edit"].includes(type)) {
                getDetail(this.form.id).then((res) => {
                    this.form = res.data.data
                    done()
                })
            } else {
                done()
            }
        },
        currentChange (currentPage) {
            this.page.currentPage = currentPage
            this.onLoad(this.page, this.query)
        },
        sizeChange (pageSize) {
            this.page.pageSize = pageSize
            this.onLoad(this.page, this.query)
        },
        refreshChange () {
            // this.onLoad(this.page, this.query)
            this.page.currentPage = 1
            this.onLoad(this.page, this.query)
        },
        onLoad (page, params = {}) {
            const {
                dateTime
            } = this.query
            let values = {
                ...params,
            }
            // if (dateTime) {
            //   values = {
            //     ...params,
            //     startTime: dateTime[0],
            //     endTime: dateTime[1],
            //     ...this.query,
            //   }
            //   values.dateTime = null
            // }
            values.reportType = 5
            this.loading = true
            getDAGLList(page.currentPage, page.pageSize, { ...Object.assign(params, this.query), isNine: 1 }).then(res => {
                console.log('getDAGLList', res.data.data.records)
                const data = {
                    ...res.data.data,
                    records: res.data.data.records.map(item => {
                        return {
                            ...item,
                            'principalIdCardflag': false,
                            'principalPhoneflag': false,
                            'policePhoneflag': false
                        }
                    })
                }
            getList(page.currentPage, page.pageSize, values).then((res) => {
                const data = res.data.data
                this.page.total = data.total
                this.data = data.records
                this.data.forEach(item => {
                    this.$set(item, 'phoneNumberflag', false)
                    this.$set(item, 'transactionObjectTelflag', false)
                    this.$set(item, 'idCardflag', false)
                    if (item.imageUrls && item.imageUrls != '' && item.imageUrls != null && item.imageUrls.length) {
                        var urls = []
                        var names = item.imageUrls.split(",").filter(item => item != '')
                        names.forEach(name => {
                            urls.push(website.minioUrl + name)
                        })
                        item.imageUrls = urls.join(",")
                    }
                    if (item.goodsImageUrls && item.goodsImageUrls != '' && item.goodsImageUrls != null && item.goodsImageUrls.length) {
                        var urls = []
                        var names = item.goodsImageUrls.split(",").filter(item => item != '')
                        names.forEach(name => {
                            urls.push(website.minioUrl + name)
                        })
                        item.goodsImageUrls = urls.join(",")
                    }
                })
                this.loading = false
                this.selectionClear()
            })
@@ -407,15 +751,38 @@
</script>
<style lang="scss" scoped>
:deep(.cur-container-box) {
    padding: 0 !important;
}
:deep(.el-button--text) {
    border: 0 !important;
}
.avue-upload__icon {
    line-height: 6;
}
// :deep(.el-form-item__content) {
//     text-align: left !important;
// }
.cur-container-box {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100%;
    overflow: hidden;
// :deep(.avue-form__menu--center .el-button) {
//     margin: 0 5px 0 0;
// }
</style>
    .content-box {
        margin: 0 4px;
        padding: 0 16px;
        height: 0;
        flex: 1;
        overflow: hidden;
        overflow-y: auto;
    }
    .footer-btn-box {
        margin-top: 10px;
        display: flex;
        justify-content: center;
    }
}
</style>