Przeglądaj źródła

Merge branch 'master' of http://119.23.210.103:3000/wy/lh_firm_former

cfort 3 lat temu
rodzic
commit
8905a0f191

+ 7 - 7
src/views/infosManage/internalFiles/internalFiles.vue

@@ -49,13 +49,13 @@ export default {
             typeData: [
                 { id: '0', label: '质量管理手册(QM)' },
                 { id: '1', label: '程序文件(QP)' },
-                { id: '2', label: '生物安全手册(SWAQ)[限]' },
-                { id: '3', label: '行政管理制度(ZD)[限]' },
-                { id: '4', label: '检测类(JC-SOP)[限]' },
-                { id: '5', label: '仪器设备类(YQ-SOP)[限]' },
-                { id: '6', label: '期间核查类(HC-SOP)[限]' },
-                { id: '7', label: '环境设施类(HJ-SOP)[限]' },
-                { id: '8', label: '质量或技术管理类(ZQ-SOP)[限]' },
+                { id: '2', label: '[限] 生物安全手册(SWAQ)' },
+                { id: '3', label: '[限] 行政管理制度(ZD)' },
+                { id: '4', label: '[限] 检测类(JC-SOP)' },
+                { id: '5', label: '[限] 仪器设备类(YQ-SOP)' },
+                { id: '6', label: '[限] 期间核查类(HC-SOP)' },
+                { id: '7', label: '[限] 环境设施类(HJ-SOP)' },
+                { id: '8', label: '[限] 质量或技术管理类(ZQ-SOP)' },
                 { id: '9', label: '技术记录表(FQ)' },
                 { id: '10', label: '管理记录表(FQ)' }
             ],

+ 452 - 0
src/views/peopleManages/taskStatistics/index.vue

@@ -0,0 +1,452 @@
+<template>
+    <div>
+        <div class="jbd-title-cont"> 检测人员任务统计 </div>
+        <div class="contain">
+            <div class="date">
+                统计时间:
+                <el-date-picker v-model="monthValues" type="monthrange" align="right" unlink-panels range-separator="至"
+                    start-placeholder="开始月份" end-placeholder="结束月份" :picker-options="pickerOptions"
+                    @change="changeDate">
+                </el-date-picker>
+            </div>
+            <div class="chart">
+                <div id="echart-line" :style="{ width: '100%', height: '100%', paddingRight: '10px' }"></div>
+            </div>
+
+        </div>
+
+        <el-dialog :visible.sync="dialogTableVisible">
+            <div class="dialogbox">
+                <div class="jbd-title-cont"> {{ setParams.seriesName }}-{{ setParams.name }} </div>
+                <div class="ibps">
+                    <ibps-crud key="istree" ref="crud" :data="formDataFiiter" :toolbars="listConfig.toolbars"
+                        :search-form="listConfig.searchForm" :pk-key="pkKey" :columns="listConfig.columns"
+                        :loading="loading" @action-event="handleAction" :pagination="pagination"
+                        @pagination-change="handlePaginationChange">
+                        <template slot="jianceyuan"  slot-scope="scope">
+                            <ibps-user-selector :value="scope.row.jian_ce_yuan_" type="user" :multiple="true"
+                                :disabled="true" readonly-text="text" @callback="data => formId = data.id" />
+                        </template>
+                        <template slot="fuheyuan"  slot-scope="scope">
+                            <ibps-user-selector :value="scope.row.fu_he_yuan_" type="user" :multiple="true"
+                                :disabled="true" readonly-text="text" @callback="data => formId = data.id" />
+                        </template>
+                    </ibps-crud>
+                </div>
+            </div>
+
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import * as echarts from 'echarts';
+import curdPost from '@/business/platform/form/utils/custom/joinCURD.js'
+import IbpsUserSelector from '@/business/platform/org/selector'
+import ActionUtils from '@/utils/action'
+export default {
+    components: {
+        'ibps-user-selector': IbpsUserSelector
+    },
+    props: {},
+    data() {
+        return {
+            pkKey: 'id', // 主键  如果主键不是pk需要传主键
+            pickerOptions: {
+                shortcuts: [{
+                    text: '本月',
+                    onClick(picker) {
+                        const start = new Date();
+                        start.setDate(1);
+                        picker.$emit('pick', [start, new Date()]);
+                    }
+                }, {
+                    text: '今年至今',
+                    onClick(picker) {
+                        const end = new Date();
+                        const start = new Date(new Date().getFullYear(), 0);
+                        picker.$emit('pick', [start, end]);
+                    }
+                }, {
+                    text: '最近六个月',
+                    onClick(picker) {
+                        const end = new Date();
+                        const start = new Date();
+                        start.setMonth(start.getMonth() - 6);
+                        start.setDate(1);
+                        picker.$emit('pick', [start, end]);
+                    }
+                }]
+            },
+            monthValues: [],
+            dialogTableVisible: false,
+            getchart: null,
+            option: {
+                title: {
+                    text: ''
+                },
+                tooltip: {
+                    trigger: 'axis',
+                    axisPointer: {
+                        type: 'shadow'
+                    }
+                },
+                legend: {
+                    orient: 'vertical',
+                    right: '5',
+                    top: 'top'
+                },
+                grid: {
+                    left: '2%',
+                    right: '10%',
+                    bottom: '3%',
+                    containLabel: true
+                },
+                xAxis: {
+                    type: 'value',
+                    name: '任务数量(项)',
+                    axisLabel: {
+                        formatter: function (v) {
+                            return parseInt(v)//表示整数。其他数值类型以此类推
+                        }
+                    }
+                },
+                yAxis: {
+                    type: 'category',
+                    name: '检测人员',
+                    data: []
+                },
+                series: [
+                    {
+                        name: '检测未完成数',
+                        type: 'bar',
+                        data: [],
+                        label: {
+                            show: true,
+                            position: 'right',
+                            valueAnimation: true
+                        }
+                    },
+                    {
+                        name: '检测已完成数',
+                        type: 'bar',
+                        data: [],
+                        label: {
+                            show: true,
+                            position: 'right',
+                            valueAnimation: true
+                        }
+                    },
+                    {
+                        name: '复核未完成数',
+                        type: 'bar',
+                        data: [],
+                        label: {
+                            show: true,
+                            position: 'right',
+                            valueAnimation: true
+                        }
+                    },
+                    {
+                        name: '复核已完成数',
+                        type: 'bar',
+                        data: [],
+                        label: {
+                            show: true,
+                            position: 'right',
+                            valueAnimation: true
+                        }
+                    }
+                ],
+                dataZoom: [
+                    {
+                        type: 'inside',
+                        xAxisIndex: 0,
+                        filterMode: 'filter'
+                    },
+                    {
+                        type: 'inside',
+                        left: 'left',
+                        yAxisIndex: 0,
+                        filterMode: 'none'
+                    }
+                ]
+            },
+            setParams: {},
+            formData: [],
+            formDataFiiter: [],
+            listConfig: {
+                // 工具栏
+                toolbars: [
+                    { key: 'search' }
+                ],
+                // 查询条件
+                searchForm: {
+                    forms: [
+                        { prop: 'yang_pin_bian_hao', label: '样品编号' },
+                        { prop: 'yang_pin_ming_che', label: '样品名称' },
+                        { prop: 'yang_pin_lei_xing', label: '样品类型' },
+                        { prop: 'shi_fou_he_ge_', label: '是否合格' },
+                    ]
+                },
+                // 表格字段配置
+                columns: [
+                    { prop: 'wei_tuo_lei_xing_', label: '委托类型' },
+                    { prop: 'jian_ce_zhuang_ta', label: '检测状态' },
+                    { prop: 'yang_pin_lei_xing', label: '样品类型' },
+                    { prop: 'yang_pin_bian_hao', label: '样品编号' },
+                    { prop: 'yang_pin_ming_che', label: '样品名称' },
+                    { prop: 'ji_lu_bian_hao_', label: '记录编号' },
+                    { prop: 'shi_fou_he_ge_', label: '是否合格' },
+                    { prop: 'jian_ce_yuan_', label: '检测员', slotName: "jianceyuan" },
+                    { prop: 'fu_he_yuan_', label: '复核员', slotName: "fuheyuan" }
+                ]
+            },
+            startDate: '2022-1-1',
+            endDate: '',
+            chartData: [],
+            pagination: { limit: 20, page: 1 },
+            loading: false
+        };
+    },
+    computed: {},
+    methods: {
+        initChart() {
+            this.getchart = echarts.init(document.getElementById('echart-line'));
+            document.getElementById('echart-line').setAttribute('_echarts_instance_', '');
+            this.getchart.setOption(this.option, true);
+            //随着屏幕大小调节图表
+            window.addEventListener("resize", () => {
+                this.getchart.resize();
+            });
+            this.getchart.on('click', (params) => {
+                this.pagination = { limit: 20, page: 1 }
+                this.dialogTableVisible = true
+                this.setParams["dataIndex"] = params.dataIndex
+                this.setParams["name"] = params.name
+                switch (params.seriesName) {
+                    case "检测未完成数":
+                        this.setParams["seriesName"] = "未完成检测项目情况"
+                        break;
+                    case "检测已完成数":
+                        this.setParams["seriesName"] = "已完成检测项目情况"
+                        break;
+                    case "复核未完成数":
+                        this.setParams["seriesName"] = "未完成复核项目情况"
+                        break;
+                    case "复核已完成数":
+                        this.setParams["seriesName"] = "已完成复核项目情况"
+                        break;
+                    default:
+                        break;
+                }
+                this.formLoading()
+            });
+        },
+        /**
+        * 处理按钮事件
+        */
+        handleAction(command, position, selection, data) {
+            switch (command) {
+                case 'search':// 查询
+                    console.log("搜索")
+                    const params = this.$refs['crud'] ? this.$refs['crud'].getSearcFormData() : {}
+                    console.log("params:", params)
+                    this.formLoading()
+                    break
+                default:
+                    break
+            }
+        },
+        /**
+     * 处理分页事件
+     */
+        handlePaginationChange(page) {
+            this.pagination = page
+            this.paginationFunc(this.formData)
+        },
+        // 图表数据加载
+        chartLoading() {
+            // 获取所有检测人员任务统计
+            const sql = `select  *FROM (SELECT ie.ID_ AS jcId,ie.NAME_ AS jcName,COUNT(tj.zhuang_tai_ = '待数据输入' OR NULL) AS jianCeWeiWanCheng,COUNT(tj.zhuang_tai_ = '待数据校验' OR tj.zhuang_tai_ = '已完成' OR NULL) AS jianCeYiWanCheng FROM 
+                        t_lhjczb tj,ibps_party_employee ie 
+                        WHERE tj.jian_ce_yuan_ = ie.ID_ AND tj.update_time_ BETWEEN '${this.startDate}' AND '${this.endDate}' GROUP BY jian_ce_yuan_ 
+                        ) jc  LEFT JOIN 
+                        (
+                        SELECT ie.ID_ AS fhId,ie.NAME_ AS fhName,COUNT(tj.zhuang_tai_ = '待数据校验' OR NULL) AS fuHeWeiWanCheng,COUNT(tj.zhuang_tai_ = '已完成' OR NULL) AS fuHeYiWanCheng FROM 
+                        t_lhjczb tj,ibps_party_employee ie 
+                        WHERE tj.fu_he_yuan_ = ie.ID_ AND tj.update_time_ BETWEEN  '${this.startDate}' AND '${this.endDate}' GROUP BY fu_he_yuan_ 
+                        ) fh ON jc.jcName = fh.fhName
+                        UNION (
+                        SELECT  *FROM (SELECT ie.ID_ AS jcId, ie.NAME_ AS jcName,COUNT(tj.zhuang_tai_ = '待数据输入' OR NULL) AS jianCeWeiWanCheng,COUNT(tj.zhuang_tai_ = '待数据校验' OR tj.zhuang_tai_ = '已完成' OR NULL) AS jianCeYiWanCheng FROM 
+                        t_lhjczb tj,ibps_party_employee ie 
+                        WHERE tj.jian_ce_yuan_ = ie.ID_ AND tj.update_time_ BETWEEN  '${this.startDate}' AND '${this.endDate}' GROUP BY jian_ce_yuan_ 
+                        ) jc  RIGHT JOIN 
+                        (
+                        SELECT ie.ID_ AS fhId,ie.NAME_ AS fhName,COUNT(tj.zhuang_tai_ = '待数据校验' OR NULL) AS fuHeWeiWanCheng,COUNT(tj.zhuang_tai_ = '已完成' OR NULL) AS fuHeYiWanCheng FROM 
+                        t_lhjczb tj,ibps_party_employee ie 
+                        WHERE tj.fu_he_yuan_ = ie.ID_ AND tj.update_time_ BETWEEN  '${this.startDate}' AND '${this.endDate}' GROUP BY fu_he_yuan_ 
+                        ) fh ON jc.jcName = fh.fhName
+                        )`
+            this.option.yAxis.data = []
+            this.option.series[0].data = []
+            this.option.series[1].data = []
+            this.option.series[2].data = []
+            this.option.series[3].data = []
+            this.chartData = []
+            curdPost('sql', sql).then(res => {
+                const data = res.variables.data
+                for (let i of data) {
+                    this.option.yAxis.data.push(i.jcName ? i.jcName : i.fhName)
+                    // 检测未完成数
+                    this.option.series[0].data.push(i.jianCeWeiWanCheng ? i.jianCeWeiWanCheng : 0)
+                    // 检测已完成数
+                    this.option.series[1].data.push(i.jianCeYiWanCheng ? i.jianCeYiWanCheng : 0)
+                    // 复核未完成数
+                    this.option.series[2].data.push(i.fuHeWeiWanCheng ? i.fuHeWeiWanCheng : 0)
+                    // 复核已完成数
+                    this.option.series[3].data.push(i.fuHeYiWanCheng ? i.fuHeYiWanCheng : 0)
+                    this.chartData.push(i)
+                }
+                this.initChart()
+            }).catch(error => {
+                console.log(error)
+            })
+        },
+        formLoading() {
+            this.loading = true
+            let formsql = `select zhuang_tai_,fu_jian_,yang_pin_bian_hao,yang_pin_ming_che,shi_fou_he_ge_,
+                        ji_lu_bian_hao_,wei_tuo_lei_xing_,jian_ce_yuan_,fu_he_yuan_,yang_pin_lei_xing FROM t_lhjczb
+                        where update_time_ BETWEEN '${this.startDate}' AND '${this.endDate}' and `
+            let sql = ''
+
+            const params = this.$refs['crud'] ? this.$refs['crud'].getSearcFormData() : {}
+            // console.log("params:", params)
+
+            switch (this.setParams.seriesName) {
+                case "未完成检测项目情况":
+                    sql = formsql + `zhuang_tai_ = '待数据输入' and jian_ce_yuan_='${this.chartData[this.setParams.dataIndex].jcId}'`
+                    break;
+                case "已完成检测项目情况":
+                    sql = formsql + `(zhuang_tai_ = '待数据校验' or zhuang_tai_ = '已完成') and jian_ce_yuan_='${this.chartData[this.setParams.dataIndex].jcId}'`
+                    break;
+                case "未完成复核项目情况":
+                    sql = formsql + `zhuang_tai_ = '待数据校验' and fu_he_yuan_='${this.chartData[this.setParams.dataIndex].fhId}'`
+                    break;
+                case "已完成复核项目情况":
+                    sql = formsql + `zhuang_tai_ = '已完成' and fu_he_yuan_='${this.chartData[this.setParams.dataIndex].fhId}'`
+                    break;
+                default:
+                    break;
+            }
+            sql = sql + `${params.yang_pin_lei_xing ? ` and yang_pin_lei_xing like '%${params.yang_pin_lei_xing}%'` : ``}`
+            sql = sql + `${params.shi_fou_he_ge_ ? ` and shi_fou_he_ge_ like '%${params.shi_fou_he_ge_}%'` : ``}`
+            sql = sql + `${params.yang_pin_bian_hao ? ` and yang_pin_bian_hao like '%${params.yang_pin_bian_hao}%'` : ``}`
+            sql = sql + `${params.yang_pin_ming_che ? ` and yang_pin_ming_che like '%${params.yang_pin_ming_che}%'` : ``}`
+
+            curdPost('sql', sql).then(res => {
+                this.loading = false
+                const data = res.variables.data
+                this.formData = res.variables.data
+                document.getElementsByClassName("el-pagination__rightwrapper")[0].style.display = "none";
+                this.paginationFunc(res.variables.data)
+            }).catch(error => {
+                console.log(error)
+                this.loading = false
+            })
+        },
+        /**
+         * 数据分页
+         * par:[]
+         * pagination: { limit: 20, page: 1 },
+         */
+        paginationFunc(par) {
+            this.formDataFiiter = []
+            for (var i = (this.pagination.limit * this.pagination.page - this.pagination.limit); i < (this.pagination.limit * this.pagination.page); i++) {
+                if (i < this.formData.length) {
+                    this.formDataFiiter.push(this.formData[i])
+                }
+            }
+        },
+        changeDate(value) {
+            let year = value[1].getFullYear()
+            let month = value[1].getMonth() + 1
+            // 这里传入的是整数时间,返回的是下个月的第一天,因为月份是0-11
+            let nextMonthFirthDay = new Date(year, month, 1) // 下个月的第一天
+            let oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
+            let endDay = new Date(nextMonthFirthDay - oneDay)
+            let day = endDay.getDate() // 本月最后一天
+            this.endDate = value[1].getFullYear() + '-' + (value[1].getMonth() + 1) + '-' + day
+            this.startDate = value[0].getFullYear() + '-' + (value[0].getMonth() + 1) + '-' + value[0].getDate()
+            this.chartLoading()
+        }
+    },
+    created() {
+        const initendDate = new Date();
+        this.endDate = initendDate.getFullYear() + '-' + (initendDate.getMonth() + 1) + '-' + initendDate.getDate()
+        this.monthValues = [new Date(this.startDate), new Date(initendDate.getFullYear() + '-' + (initendDate.getMonth() + 1) + '-' + initendDate.getDate())]
+        this.chartLoading()
+    },
+    mounted() {
+        this.initChart()
+    }
+};
+</script>
+<style lang="less" scoped>
+.contain {
+    width: 100%;
+    height: 800px;
+    border-left: 1px solid #dfdcdc;
+}
+
+.date {
+    text-align: right;
+    padding-right: 20px;
+}
+
+.chart {
+    width: 95%;
+    height: 800px;
+}
+
+.jbd-title-cont {
+    text-align: center;
+    font-weight: bold;
+    background-color: rgb(249, 255, 255);
+    width: 100%;
+    font-size: 18px;
+}
+
+.dialogbox {
+    display: flex;
+    flex-direction: column;
+}
+
+.ibps {
+    top: 55px;
+    border: 1px solid rgb(241, 238, 238);
+}
+
+
+
+/deep/ .el-dialog {
+    height: 700px;
+    width: 80%;
+}
+
+/deep/ .el-dialog__header {
+    border: 0;
+}
+
+/deep/ .el-pagination__rightwrapper1 {
+    display: none;
+}
+
+/deep/ .ibps-container-crud__header {
+    margin-top: 55px;
+}
+
+/deep/ .el-dialog__headerbtn {
+    z-index: 9999;
+}
+</style>

+ 159 - 0
src/views/permissions/details/fileEchart.vue

@@ -0,0 +1,159 @@
+<template>
+    <div>
+        <div style="text-align: center">
+            <!--表头-->
+            <div class="form-header">
+                <div class="title ibps-tc">用户查阅文件授权</div>
+            </div>
+            <el-transfer style="text-align: left; display: inline-block" v-model="permissionFilesKey" filterable
+                :render-content="renderFunc" :titles="['受限文件', '可查阅文件']" :button-texts="['受限', '可查阅']" :format="{
+                    noChecked: '${total}',
+                    hasChecked: '${checked}/${total}'
+                }" @change="handleChange" :data="allFiles">
+            </el-transfer>
+        </div>
+    </div>
+</template>
+
+
+
+
+<script>
+import { getLmitedFile, getUserByFile, saveUserByFile } from '@/api/permission/file'
+
+export default {
+    props: {
+        id: {
+            type: [String, Number]
+        },
+    },
+    data() {
+        return {
+            idT: '',
+            allFilesDatas: [],// 所有受控文件,与个人无关
+            allFiles: [],
+            noPermissionFiles: [],
+            permissionFiles: [],
+            permissionFilesKey: [],
+            renderFunc(h, option) {
+                return <span>{option.label}</span>;
+            }
+        };
+    },
+
+    methods: {
+        handleChange(value, direction, movedKeys) {
+            let paramsDatas = []
+            for (let i of value) {
+                let paramsData = {}
+                let filterDatas = this.allFilesDatas.filter(item => item.wenJianId == i)
+                paramsData["yongHuId"] = this.idT
+                paramsData["wenJianId"] = filterDatas[0].wenJianId
+                paramsData["wenJianMingChe"] = filterDatas[0].wenJianMingChe
+                paramsDatas.push(paramsData)
+            }
+            saveUserByFile(paramsDatas).then(res => {
+            }).catch(res => {
+            })
+        },
+        getFormData(id) {
+            getLmitedFile(id).then(res => {
+                for (let i of res.variables.data) {
+                    this.allFilesDatas.push(i)
+                    let fileData = {}
+                    fileData["key"] = i.wenJianId
+                    fileData["label"] = i.wenJianMingChe
+                    fileData["yongHuId"] = id
+                    this.noPermissionFiles.push(fileData)
+                    this.allFiles.push(fileData)
+                }
+            }).catch(res => {
+            })
+            getUserByFile(id).then(res => {
+                for (let i of res.variables.data) {
+                    this.allFilesDatas.push(i)
+                    let filterFile = {}
+                    filterFile["key"] = i.wenJianId
+                    filterFile["label"] = i.wenJianMingChe
+                    filterFile["yongHuId"] = id
+                    this.permissionFiles.push(filterFile)
+                    this.permissionFilesKey.push(i.wenJianId)
+                    this.allFiles.push(filterFile)
+
+                }
+            }).catch(res => {
+            })
+        },
+    },
+    watch: {
+        id: {
+            immediate: true,
+            handler: function (val, oldVal) {
+                this.allFilesDatas = []
+                this.permissionFiles = []
+                this.noPermissionFiles = []
+                this.allFiles = []
+                this.permissionFilesKey = []
+                this.idT = val
+                this.getFormData(val)
+            },
+        }
+    }
+};
+</script>
+  
+
+<style  scoped lang="less">
+.form-header {
+    border-bottom: 1px solid #2b34410d;
+    margin-bottom: 5px;
+
+    .title {
+        font-size: 16px;
+        font-weight: bold;
+        color: #222;
+        text-align: left;
+        padding: 8px 10px 10px;
+        margin: 0;
+    }
+
+    .desc {
+        word-wrap: break-word;
+        word-break: normal;
+        text-indent: 0;
+        line-height: 1.6;
+        margin: 0 0 11px;
+        padding: 3px 30px 8px;
+    }
+}
+
+.transfer-footer {
+    margin-left: 20px;
+    padding: 6px 5px;
+}
+
+/deep/.el-transfer {
+    width: 100%;
+}
+
+/deep/ .el-transfer-panel {
+    width: 40%;
+}
+
+/deep/ .el-transfer__buttons {
+    width: 10%;
+    padding: 0 10px;
+}
+
+/deep/ .el-transfer-panel__body {
+    height: auto;
+}
+
+/deep/.el-transfer-panel__list {
+    height: 650px;
+}
+
+/deep/ .el-button {
+    width: 100%;
+}
+</style>

+ 87 - 0
src/views/permissions/file_permission/filePermission.vue

@@ -0,0 +1,87 @@
+<template>
+  <ibps-layout ref="layout">
+    <div slot="west">
+      <div class="box">
+        <p class="title">用户信息</p>
+        <el-input placeholder="输入关键字进行过滤" v-model="filterText">
+        </el-input>
+        <div class="treeDiv">
+          <el-tree ref="tree" :data="peopleData" :props="defaultProps" @node-click="handleNodeClick"
+            :filter-node-method="filterNode"></el-tree>
+        </div>
+      </div>
+      <ibps-container :margin-left="205 + 'px'" class="page">
+        <detail v-if="show === 'detail'" :id="orgId" />
+        <el-alert v-else :closable="false" title="尚未指定一个人员" type="warning" show-icon style="height:50px;" />
+      </ibps-container>
+
+    </div>
+  </ibps-layout>
+</template>
+<script>
+import { getAllUserInfor } from '@/api/permission/page'
+import FixHeight from '@/mixins/height'
+import Detail from '../details/fileEchart.vue'
+
+
+export default {
+  components: {
+    Detail,
+  },
+  mixins: [FixHeight],
+  data() {
+    return {
+      show: '',
+      rightsArr: ['join', 'delete'],
+      rowHandle: true,
+      width: 230,
+      height: document.clientHeight,
+      orgId: '',
+      orgName: '',
+
+      peopleData: [],
+      filterText: '',
+      defaultProps: {
+        children: 'children',
+        label: 'label'
+      }
+    }
+  },
+  mounted() {
+    this.loadNode()
+  },
+  methods: {
+    loadNode(node, resolve) {
+      this.loading = true
+      getAllUserInfor().then(res => {
+        this.loading = false
+        for (let i of res.variables.data) {
+          let data = {}
+          data["id"] = i.id_
+          data["label"] = i.name_
+          this.peopleData.push(data)
+        }
+      }).catch(res => {
+        this.loading = false
+      })
+    },
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    handleNodeClick(data) {
+      if (data.id === 0 || data.id === '0') {
+        this.show = 'empty'
+        return
+      }
+      this.orgId = data.id
+      this.show = 'detail'
+    },
+
+  }
+}
+</script>
+<style lang="scss" >
+
+</style>
+  

+ 245 - 0
src/views/system/jbdScan/goods/deviceTag.vue

@@ -0,0 +1,245 @@
+<template>
+  <div class="bg">
+    <el-dialog 
+      width="21cm"
+      height="10cm" 
+       :modal-append-to-body='true' :append-to-body="true" title="设备标签" :visible.sync="scanVisible">
+      <!-- 表单是否显示 -->
+      <div style="height:500px">
+          <div ref="qrcode" id="box">
+          <vue-easy-print tableShow ref="easyPrint"
+            :onePageRow="onePageRow"
+          >
+            <div v-for="(item1, index1) in list" :key="index1"  style="display: inline-block" >
+              <div v-for="(item2, index2) in parseInt(item1.num)" :key="index2" 
+              style="display: inline-block"
+              ><!-- style="page-break-after:always" -->
+               <div class="All">
+                <div class="tagBox">
+                  <div class="lh">
+                    <div>设备名称:</div>
+                    <div>{{ item1.name }}</div>
+                  </div>
+                  <div class="la">
+                    <div class="lh">
+                      <div>设备编号:</div>
+                      <div>{{ item1.serial }}</div>
+                    </div>
+                  </div>
+                  <div class="lh">
+                    <div>存放地点:</div>
+                    <div>{{ item1.local }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>启用日期:</div>
+                    <div>{{ item1.time }}</div>
+                  </div>
+
+                  <div class="lh">
+                    <div>资产原值:</div>
+                    <div>{{ item1.money }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>使用科室:</div>
+                    <div>{{ item1.condition }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>固定资产编号:</div>
+                    <div>{{ item1.assets }}</div>
+                  </div>
+
+                 
+                  <!-- <div class="lh">
+                    <div>流转状态:</div>
+                    <div>▢待检,▢已检,▢留样</div>
+                  </div> -->
+                 
+                  <div class="ewm">
+                    <vue-barcode :value="item1.serial" :width=1.5 :height=25 :fontSize=15 :margin=8 ></vue-barcode>
+                  </div>
+
+                  <!-- <div
+                    style="page-break-after: always; display: block !important;height: 40px"
+                  ></div> -->
+
+
+                </div>
+               </div>
+              </div>
+            </div>
+          </vue-easy-print>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <!-- <el-button @click="dialogVisible = false">取 消</el-button> -->
+        <el-button type="primary" @click="printDemo">打印标签</el-button>
+      </span>
+    </el-dialog>
+
+
+  </div>
+</template>
+
+<script>
+import VueBarcode from 'vue-barcode';
+import vueEasyPrint from "vue-easy-print";
+import repostCurd from '@/business/platform/form/utils/custom/joinCURD.js';
+
+export default {
+  components: {
+    VueBarcode,
+    vueEasyPrint,
+  },
+  props: {
+    obj: {
+      default: [],
+      type: Array
+    },
+    onePageRow:{
+      type:Number,
+      default:3
+    },
+    blankLines:{
+      type:Boolean,
+      default:true
+    },
+    scanVisible:{
+      type:Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      value: '',
+      id: '',
+      list: [{
+        name: 1,
+        serial: 1,
+        assets: 1,
+        num: 1,
+        local:1,
+        condition: 1,
+        money:1,
+        time:1,
+      }],
+      visible: true,
+    }
+  },
+  watch: {
+    obj() {
+      this.getInit()
+      // console.log(this.obj)
+    }
+  },
+  created() {
+    this.getInit()
+  },
+  methods: {
+    printDemo() {
+      this.$refs.easyPrint.print()
+    },
+    getInit() {
+      var idStr = '';
+      this.obj.forEach(item=>{
+        idStr += item.split(" ")[0] + ','
+      })
+      idStr = idStr.substring(0,idStr.length-1);
+      this.getLook(idStr)
+    },
+    getLook(id) {
+      let sql = `select * from t_sbdj where find_in_set(id_,'${id}')`
+      console.log(sql)
+      repostCurd("sql", sql).then(res => {
+          const data = res.variables.data
+          console.log(data)
+          let list = []
+          data.forEach(item => {
+            let num = 1
+            let o = {
+              name: item.she_bei_ming_cheng_,
+              serial: item.she_bei_shi_bie_h,
+              assets: item.zi_chan_bian_hao_,
+              num: num,
+              local:item.cun_fang_di_dian_,
+              condition: item.shi_yong_ke_shi_,
+              money:item.zi_chan_yuan_zhi_,
+              time:item.qi_yong_ri_qi_!=null?this.getTime(item.qi_yong_ri_qi_):'',
+            }
+            list.push(o)
+          })
+          
+          this.list = list
+      })
+    },
+    getTime(second) {
+      let date =new Date(second);
+      let year = date.getFullYear();
+      let month = ''
+      let day = ''
+      if((date.getMonth()+1)<=9){
+        month = "0"+ (date.getMonth()+1)
+      }else{
+        month = date.getMonth()+1
+      }
+      if(date.getDate()<=9){
+        day =  "0"+date.getDate();
+      }else {
+        day =  date.getDate();
+      }
+        return year + "-"+month+"-"+day;
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.bg {
+  // height: auto;
+}
+
+.tagBox {
+  width: 283px;   // 300  240
+  height: 283px;  // 180  150  94
+  position: relative;
+  border: 2px solid #000000;
+  padding: 5px;
+  display: inline-block;
+  // justify-content: space-around;
+  // flex-direction: column;
+  margin: 10px 5px;
+  border-radius: 4px;
+  background-color: #fff;
+}
+.ewm{
+
+}
+/*
+.tagBox {
+  width: 177.5px;   // 300  240
+  height: 106.5px;  // 180  150
+  position: relative;
+  border: 1px solid #000000;
+  padding: 20px;
+  display: flex;
+  justify-content: space-around;
+  flex-direction: column;
+  margin: 20px auto;
+  border-radius: 15px;
+  background-color: #fff;
+}
+*/
+
+.la {
+  display: flex;
+  align-items: center;
+}
+
+.lh {
+  // line-height: auto;
+  font-size: 18px;  //16
+  display: flex;
+  align-items: center;
+  // padding: 4px;
+
+}
+</style>

+ 261 - 0
src/views/system/jbdScan/goods/deviceVerificationTag.vue

@@ -0,0 +1,261 @@
+<template>
+  <div class="bg">
+    <el-dialog 
+      width="21cm"
+      height="10cm" 
+       :modal-append-to-body='true' :append-to-body="true" title="设备检定校准标签" :visible.sync="scanVisible">
+      <!-- 表单是否显示 -->
+      <div style="height:500px">
+          <div ref="qrcode" id="box">
+          <vue-easy-print tableShow ref="easyPrint"
+            :onePageRow="onePageRow"
+          >
+            <div v-for="(item1, index1) in list" :key="index1"  style="display: inline-block" >
+              <div v-for="(item2, index2) in parseInt(item1.num)" :key="index2" 
+              style="display: inline-block"
+              ><!-- style="page-break-after:always" -->
+               <div class="All">
+                <div class="tagBox">
+                  <div class="lh">
+                    <div>设备名称:</div>
+                    <div>{{ item1.name }}</div>
+                  </div>
+                  <div class="la">
+                    <div class="lh">
+                      <div>设备编号:</div>
+                      <div>{{ item1.serial }}</div>
+                    </div>
+                  </div>
+                  <div class="lh">
+                    <div>存放地点:</div>
+                    <div>{{ item1.local }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>启用日期:</div>
+                    <div>{{ item1.time }}</div>
+                  </div>
+
+                  <div class="lh">
+                    <div>资产原值:</div>
+                    <div>{{ item1.money }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>使用科室:</div>
+                    <div>{{ item1.condition }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>校准机构:</div>
+                    <div>{{ item1.jiGou }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>校准时间:</div>
+                    <div>{{ item1.jiaoZhunTime }}</div>
+                  </div>
+                  <div class="lh">
+                    <div>修正值/修正因子:</div>
+                    <div>{{ item1.yinZi }}</div>
+                  </div>
+
+                  <div class="lh">
+                    <div>固定资产编号:</div>
+                    <div>{{ item1.assets }}</div>
+                  </div>
+                 
+                  <div class="ewm">
+                    <vue-barcode :value="item1.serial" :width=1.5 :height=25 :fontSize=15 :margin=8 ></vue-barcode>
+                  </div>
+
+                  <!-- <div
+                    style="page-break-after: always; display: block !important;height: 40px"
+                  ></div> -->
+
+
+                </div>
+               </div>
+              </div>
+            </div>
+          </vue-easy-print>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <!-- <el-button @click="dialogVisible = false">取 消</el-button> -->
+        <el-button type="primary" @click="printDemo">打印标签</el-button>
+      </span>
+    </el-dialog>
+
+
+  </div>
+</template>
+
+<script>
+import VueBarcode from 'vue-barcode';
+import vueEasyPrint from "vue-easy-print";
+import repostCurd from '@/business/platform/form/utils/custom/joinCURD.js';
+
+export default {
+  components: {
+    VueBarcode,
+    vueEasyPrint,
+  },
+  props: {
+    obj: {
+      default: [],
+      type: Array
+    },
+    onePageRow:{
+      type:Number,
+      default:3
+    },
+    blankLines:{
+      type:Boolean,
+      default:true
+    },
+    scanVisible:{
+      type:Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      value: '',
+      id: '',
+      list: [{
+        name: 1,
+        serial: 1,
+        assets: 1,
+        num: 1,
+        local:1,
+        condition: 1,
+        money:1,
+        time:1,
+        yinZi:1,
+        jiGou:1,
+        jiaoZhunTime:1
+      }],
+      visible: true,
+    }
+  },
+  watch: {
+    obj() {
+      this.getInit()
+      // console.log(this.obj)
+    }
+  },
+  created() {
+    this.getInit()
+  },
+  methods: {
+    printDemo() {
+      this.$refs.easyPrint.print()
+    },
+    getInit() {
+      var idStr = '';
+      this.obj.forEach(item=>{
+        idStr += item.split(" ")[0] + ','
+      })
+      idStr = idStr.substring(0,idStr.length-1);
+      this.getLook(idStr)
+    },
+    getLook(id) {
+      let sql = `select dj.she_bei_ming_cheng_,dj.she_bei_shi_bie_h,dj.zi_chan_bian_hao_,
+        dj.cun_fang_di_dian_,dj.shi_yong_ke_shi_,dj.zi_chan_yuan_zhi_,  dj.qi_yong_ri_qi_,
+        zx.xiu_zheng_zhi_,zx.xiao_zhun_ri_qi_,zx.jian_ding_xiao_zh
+        from t_sbdj dj right JOIN t_sbjdxzzx zx on zx.yi_qi_bian_hao_ = dj.id_ where find_in_set(zx.parent_id_,'${id}')`
+      // console.log(sql)
+      repostCurd("sql", sql).then(res => {
+          const data = res.variables.data
+          // console.log(data)
+          let list = []
+          data.forEach(item => {
+            let num = 1
+            let o = {
+              name: item.she_bei_ming_cheng_,
+              serial: item.she_bei_shi_bie_h,
+              assets: item.zi_chan_bian_hao_,
+              num: num,
+              local:item.cun_fang_di_dian_,
+              condition: item.shi_yong_ke_shi_,
+              money:item.zi_chan_yuan_zhi_,
+              time:item.qi_yong_ri_qi_!=null?this.getTime(item.qi_yong_ri_qi_):'',
+              yinZi:item.xiu_zheng_zhi_,
+              jiGou:item.jian_ding_xiao_zh,
+              jiaoZhunTime:item.xiao_zhun_ri_qi_
+            }
+            list.push(o)
+          })
+          
+          this.list = list
+      })
+    },
+    getTime(second) {
+      let date =new Date(second);
+      let year = date.getFullYear();
+      let month = ''
+      let day = ''
+      if((date.getMonth()+1)<=9){
+        month = "0"+ (date.getMonth()+1)
+      }else{
+        month = date.getMonth()+1
+      }
+      if(date.getDate()<=9){
+        day =  "0"+date.getDate();
+      }else {
+        day =  date.getDate();
+      }
+        return year + "-"+month+"-"+day;
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.bg {
+  // height: auto;
+}
+
+.tagBox {
+  width: 283px;   // 300  240
+  height: 283px;  // 180  150  94
+  position: relative;
+  border: 2px solid #000000;
+  padding: 5px;
+  display: inline-block;
+  // justify-content: space-around;
+  // flex-direction: column;
+  margin: 10px 5px;
+  border-radius: 4px;
+  background-color: #fff;
+}
+.ewm{
+
+}
+/*
+.tagBox {
+  width: 177.5px;   // 300  240
+  height: 106.5px;  // 180  150
+  position: relative;
+  border: 1px solid #000000;
+  padding: 20px;
+  display: flex;
+  justify-content: space-around;
+  flex-direction: column;
+  margin: 20px auto;
+  border-radius: 15px;
+  background-color: #fff;
+}
+*/
+
+.la {
+  display: flex;
+  align-items: center;
+}
+
+.lh {
+  // line-height: auto;
+  font-size: 18px;  //16
+  display: flex;
+  align-items: center;
+  // padding: 4px;
+
+}
+</style>

+ 3 - 1
src/views/system/jbdScan/scan.vue

@@ -17,9 +17,11 @@ import sample from './goods/sample'
 import sampleConfirmation from './goods/sampleConfirmation'
 import manualConfirmation from './goods/manualConfirmation'
 import tag from './goods/tag'
+import deviceTag from './goods/deviceTag.vue'
+import deviceVerificationTag from './goods/deviceVerificationTag.vue'
 
 export default {
-  components: { facility,material,sample,sampleConfirmation,manualConfirmation,tag},
+  components: { facility,material,sample,sampleConfirmation,manualConfirmation,tag,deviceTag,deviceVerificationTag},
   props:{
     currentScan:String,
     scanVisible:Boolean,