王震
2023-08-25 16225c86f3bef25e88ecdb5fcc5469c2a7e446fb
Merge remote-tracking branch 'origin/master'

# Conflicts:
# .env.development
# src/views/inspectionManagement/commissionInspection/index.vue
已修改11个文件
已重命名1个文件
已添加2个文件
1552 ■■■■■ 文件已修改
src/api/chart/work/index.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/home/index.js 补丁 | 查看 | 原始文档 | blame | 历史
src/api/inspection/commisioninspection.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/laboratory/role.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/satisfactionSurveys/index.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/chart/work/index.vue 417 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inspectionManagement/commissionInspection/addCommision.vue 317 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inspectionManagement/commissionInspection/index.vue 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/laboratory/role/index.vue 216 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/laboratory/role/menuPower.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/chart/work/index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
import request from '@/utils/request'
//获取责任人项目数统计
export function getDutyMater(params) {
    return request({
      url: '/work/dutyMater',
      method: 'get',
      params
    })
}
//获取责任人及时率
export function getDutyTimely(params) {
    return request({
      url: '/work/dutytimely',
      method: 'get',
      params
    })
}
//获取执行人项目数统计
export function getExecuteMater(params) {
    return request({
      url: '/work/executeMater',
      method: 'get',
      params
    })
}
//获取执行人及时率
export function getExecuteTimely(params) {
    return request({
      url: '/work/executetimely',
      method: 'get',
      params
    })
}
src/api/home/index.js
src/api/inspection/commisioninspection.js
@@ -56,3 +56,12 @@
    method: 'get'
  })
}
export function isIfViewUUID(params){
  return request({
    url: '/link-basic/isIfViewUUID',
    method: 'get',
        params
  })
}
src/api/laboratory/role.js
@@ -7,3 +7,28 @@
      params
    })
  }
  export function addRoleInfo(data) {
    return request({
      url: '/role-manager/addRoleInfo',
      method: 'post',
      data
    })
  }
  export function assertRepeat(params) {
    return request({
      url: '/role-manager/assertRepeat',
      method: 'get',
      params
    })
  }
  //getAllRoleAndMenuInfo
  export function getAllRoleAndMenuInfo(params) {
    return request({
      url: '/role-manager/getAllRoleAndMenuInfo',
      method: 'get',
      params
    })
  }
src/layout/components/Navbar.vue
@@ -6,25 +6,41 @@
    <div class="right-menu">
      <div class="right-serves">
        <i class="el-icon-setting" />
        <i class="el-icon-bell" />
        <i class="el-icon-time" />
        <!-- <i class="el-icon-setting" /> -->
        <p @click="toMessage"><el-badge is-dot class="el-icon-bell message-icon"></el-badge></p>
        <!-- <i class="el-icon-time" /> -->
      </div>
      <el-dropdown class="avatar-container" trigger="click">
        <div class="avatar-wrapper">
          <a class="user-avatar">{{ user.name.slice(0,1) }}</a>
        </div>
        <el-dropdown-menu slot="dropdown" class="user-dropdown">
          <router-link to="/">
            <el-dropdown-item>
              ä¿®æ”¹å¯†ç 
              <p @click="dialogFormVisible = true">修改密码</p>
            </el-dropdown-item>
          </router-link>
          <el-dropdown-item divided @click.native="logout">
            <span style="display:block;">退出登录</span>
          </el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      <el-dialog title="修改密码" :visible.sync="dialogFormVisible" :append-to-body="true">
        <el-form :model="form">
          <el-form-item label="旧密码" :label-width="formLabelWidth">
            <el-input v-model="form.oldPwd" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="新密码" :label-width="formLabelWidth">
            <el-input maxlength="30" show-word-limit v-model="form.newPwd" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="确认密码" :label-width="formLabelWidth">
            <el-input maxlength="30" show-word-limit v-model="form.confirmPwd" autocomplete="off"></el-input>
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button @click="reset()">取 æ¶ˆ</el-button>
          <el-button type="primary" @click="editPwd">ç¡® å®š</el-button>
        </div>
      </el-dialog>
    </div>
  </div>
</template>
@@ -41,6 +57,21 @@
    } from "@/api/util/requestUtil.js"
export default {
  data(){
    return {
      form: {
        oldPwd: '',
        newPwd: '',
        confirmPwd: ''
      },
      dialogFormVisible: false,
      formLabelWidth: '120px',
            user: {
                id: null,
                name: 'value'
            }
    }
  },
  components: {
    // Breadcrumb,
    // Hamburger
@@ -51,18 +82,22 @@
      'avatar'
    ])
  },
    data() {
        return {
            user: {
                id: null,
                name: 'value'
            }
        }
    },
    mounted() {
        this.getUser()
    },
  methods: {
    reset(){
      this.dialogFormVisible = false;
      this.form.oldPwd = '';
      this.form.newPwd = '';
      this.form.confirmPwd = '';
    },
    toMessage(){
      this.$router.push('/message/toDo');
    },
    editPwd(){
      console.log(1);
    },
    toggleSideBar() {
      this.$store.dispatch('app/toggleSideBar')
    },
@@ -89,7 +124,13 @@
  border-bottom: 1px solid #f0f2f5;
  // box-shadow: 0 0 0.857143rem rgba(0, 0, 0, 0.12);
  // box-shadow: 0 1px 4px rgba(0,21,41,.08);
  .message-icon{
    margin-right: 10px;
    cursor: pointer;
  }
  .v-modal{
    z-index: 8;
  }
  .hamburger-container {
    line-height: 46px;
    height: 100%;
src/main.js
@@ -43,6 +43,8 @@
    return JSON.parse(JSON.stringify(val))
}
Vue.prototype.vueIp = "http://localhost:8080/"
// set ElementUI lang to EN
Vue.use(ElementUI, { locale })
// å¦‚果想要中文版 element-ui,按如下方式声明
src/router/index.js
@@ -59,6 +59,11 @@
    }]
  },
  {
      path: '/addCommision/:viewId',
      hidden: true,
      component: () => import('@/views/inspectionManagement/commissionInspection/addCommision'),
    },
  {
    path: '/standardLibrary',
    component: Layout,
    redirect: '/standardLibrary/index',
@@ -169,16 +174,7 @@
        path: 'commissionInspection',
        name: 'CommissionInspection',
        component: () => import('@/views/inspectionManagement/commissionInspection/index'),
        meta: { title: '委托检验', icon: 'table' },
        // children: [
        //   {
        //     path: 'addCommision',
        //     name: 'AddCommision',
        //     hidden: true,
        //     component: () => import('@/views/inspectionManagement/commissionInspection/addCommision'),
        //     meta: { title: '检测信息', icon: 'table' }
        //   }
        // ]
        meta: { title: '委托检验', icon: 'table' }
      },
      {
        path: 'reportForInspection',
@@ -423,22 +419,23 @@
  {
    path: '/message',
    component: Layout,
    redirect: '/message/message',
    redirect: '/message/toDo',
    name: 'Message',
    meta: { title: '消息待办', icon: 'el-icon-s-help' },
    children: [
      {
        path: 'message',
        name: 'Message',
        component: () => import('@/views/message/message/index'),
        meta: { title: '我的消息', icon: 'table' }
      },
      {
        path: 'toDo',
        name: 'ToDo',
        component: () => import('@/views/message/toDo/index'),
        meta: { title: '我的待办', icon: 'tree' }
      }
        },
      {
        path: 'message',
        name: 'Message',
        // hidden: true,
        component: () => import('@/views/message/message/index'),
        // meta: { title: '我的消息', icon: 'table' }
      },
    ]
  },
  {
@@ -481,7 +478,7 @@
]
const createRouter = () => new Router({
  // mode: 'history', // require service support
  mode: 'history',
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})
src/views/CNAS/satisfactionSurveys/index.vue
@@ -482,6 +482,11 @@
</script>
  
<style lang="scss" scoped>
.content-main {
    .el-form .el-form-item .el-form-item__content {
      width: 100% !important;
    }
.top-bar {
  margin: -25px -15px;
  background: #fff;
@@ -544,12 +549,6 @@
tr,
td {
  padding: 10px;
}
</style>
<style >
.content-main {
  .el-form .el-form-item .el-form-item__content {
    width: 100% !important;
  }
}
</style>
src/views/chart/work/index.vue
@@ -4,27 +4,31 @@
          <el-row :gutter="10">
            <el-col :span="24">
                <el-card>
                  <el-form :inline="true" :model="formInline" class="demo-form-inline">
                    <el-form-item>
                  <el-form :rules="rules" ref="formInline" :inline="true"
                  :model="formInline" class="demo-form-inline">
                    <el-form-item prop="date">
                      <p><span>*</span>检测日期:</p>
                      <el-date-picker
                        v-model="dateTime"
                        v-model="formInline.date"
                        format="yyyy-MM-dd"
                        value-format="yyyy-MM-dd"
                        type="daterange"
                        range-separator="至"
                        start-placeholder="开始日期"
                        end-placeholder="结束日期">
                      </el-date-picker>
                    </el-form-item>
                    <el-form-item>
                    <el-form-item prop="type">
                      <p><span>*</span>检验类型:</p>
                      <el-select v-model="formInline.region" placeholder="采购入库">
                        <el-option label="区域一" value="shanghai"></el-option>
                        <el-option label="区域二" value="beijing"></el-option>
                      <el-select v-model="formInline.type" placeholder="采购入库">
                        <el-option label="原材料" value="0"></el-option>
                        <el-option label="成品" value="1"></el-option>
                        <el-option label="委托品" value="2"></el-option>
                      </el-select>
                    </el-form-item>
                    <el-form-item class="buttons">
                      <el-button>清空</el-button>
                      <el-button type="primary" @click="onSubmit">查询</el-button>
                      <el-button @click="resetForm('formInline')">清空</el-button>
                      <el-button type="primary" @click="onSubmit('formInline')">查询</el-button>
                    </el-form-item>
                  </el-form>
                </el-card>
@@ -48,59 +52,105 @@
          <el-col :span="12">
              <el-card>
                <p>负责人及时率</p>
                <div id="leaderTimly" style="width:100%;height:400px;"></div>
                <div id="leaderTimely" style="width:100%;height:400px;"></div>
              </el-card>
          </el-col>
          <el-col :span="12">
              <el-card>
                <p>实验员及时率</p>
                <div id="testerTimly" style="width:100%;height:400px;"></div>
                <div id="testerTimely" style="width:100%;height:400px;"></div>
              </el-card>
          </el-col>
        </el-row>
      </div>
      <div class="work-foot"></div>
      <div class="work-foot">
        <el-button type="primary">数据导出</el-button>
      </div>
  </div>
</template>
<script>
import * as echarts from 'echarts';
import { getDutyMater,getDutyTimely,getExecuteMater,getExecuteTimely
} from '@/api/chart/work/index'
export default {
  data() {
      return {
        formInline: {
          user: '',
          region: ''
          date: null,
          type: ''
        },
        dateTime: '',
        rules: {
          type: [
            { required: true, message: '请选择检测类型', trigger: 'change' }
          ],
          date: [
            {required: true, message: '请选择日期', trigger: 'change' }
          ]
        },
      }
    },
    mounted(){
      this.initLeaderStatiChart('leaderStati');
      this.initLeaderTimlyChart();
      this.initLeaderStatiChart('testerStati');
      this.initTesterTimlyChart();
      // this.initLeaderStatiChart("");
      this.initLeaderTimelyChart("leaderTimely");
      this.initTesterStatiChart("testerStati");
      this.initTesterTimelyChart("testerTimely");
    },
    methods: {
      onSubmit() {
        console.log('submit!');
      async queryData(){
        let date = this.formInline.date;
        let obj = {
          startTime : date[0],
          endTime : date[1],
          type : this.formInline.type
        }
        const dutyMater = await getDutyMater(obj);
        const dutyTimely = await getDutyTimely(obj);
        const executeMater = await getExecuteMater(obj);
        const executeTimely = await getExecuteTimely(obj);
        console.log("dm",dutyMater.data);
        console.log("dt",dutyTimely.data);
        console.log("em",executeMater.data.length);
        console.log("et",executeTimely.data);
        this.initLeaderStatiChart("leaderStati",dutyMater.data);
        this.initLeaderTimelyChart("leaderTimely",dutyTimely.data);
        this.initTesterStatiChart("testerStati",executeMater.data);
        this.initTesterTimelyChart("testerTimely",executeTimely.data);
      },
      initLeaderStatiChart(id){
      onSubmit(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            this.queryData();
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.formInline.date = null;
        this.formInline.type = null;
        this.$refs[formName].resetFields();
      },
      initLeaderStatiChart(id,dutyMater){
        var chartDom = document.getElementById(id);
        var myChart = echarts.init(chartDom);
          window.addEventListener('resize', function() {
          myChart.resize();
        });
        var option;
        let max = 0;
        let xAxisData = [];
        let data1 = [];
        let data2 = [];
        let data3 = [];
        let data4 = [];
        for (let i = 0; i < 10; i++) {
          xAxisData.push('Class' + i);
          data1.push(+(Math.random() * 2).toFixed(2));
          data2.push(+(Math.random() * 5).toFixed(2));
          data3.push(+(Math.random() + 0.3).toFixed(2));
          data4.push(+Math.random().toFixed(2));
        for(let i=0;i<dutyMater.length;i++){
          xAxisData.push(dutyMater[i].name);
          data1.push(dutyMater[i].finsh);
          data2.push(dutyMater[i].unfinish);
          let sum = dutyMater[i].finsh + dutyMater[i].unfinish;
          if( sum > max ){
             max = sum;
          }
        }
        var emphasisStyle = {
          itemStyle: {
@@ -110,7 +160,7 @@
        };
        option = {
          legend: {
            data: ['bar', 'bar2'],
            data: ['已完成', '未完成'],
            left: 'center'
          },
          tooltip: {},
@@ -121,59 +171,282 @@
            splitLine: { show: false },
            splitArea: { show: false }
          },
          yAxis: {},
          yAxis: {
            min: 0,
            max: max,
            interval: max,
          },
          grid: {
            bottom: 100
          },
          series: [
            {
              name: 'bar',
              name: '已完成',
              barWidth: '20%',
              type: 'bar',
              stack: 'one',
              emphasis: emphasisStyle,
              data: data1
              data: data1,
              itemStyle: {
                color: '#80d9c5'
              }
            },
            {
              name: 'bar2',
              name: '未完成',
              barWidth: '20%',
              type: 'bar',
              stack: 'one',
              emphasis: emphasisStyle,
              data: data2
              data: data2,
              itemStyle: {
                color: '#f2d09d'
              },
            }
          ]
        };
        myChart.on('brushSelected', function (params) {
          var brushed = [];
          var brushComponent = params.batch[0];
          for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
            var rawIndices = brushComponent.selected[sIdx].dataIndex;
            brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));
          }
          myChart.setOption({
            title: {
              backgroundColor: '#333',
              text: 'SELECTED DATA INDICES: \n' + brushed.join('\n'),
              bottom: 0,
              right: '10%',
              width: 100,
              textStyle: {
                fontSize: 12,
                color: '#fff'
              }
            }
        option && myChart.setOption(option);
      },
      initTesterStatiChart(id,executeMater){
        console.log("qqq----",executeMater);
        var chartDom = document.getElementById(id);
        var myChart = echarts.init(chartDom);
          window.addEventListener('resize', function() {
          myChart.resize();
          });
        var option;
        let xAxisData = [];
        let data1 = [];
        let data2 = [];
        // for(let i=0;i<executeMater.length;i++){
        //   xAxisData.push(executeMater[i].name);
        //   data1.push(executeMater[i].finsh);
        //   data2.push(executeMater[i].unfinsh);
        // }
        var emphasisStyle = {
          itemStyle: {
            shadowBlur: 10,
            shadowColor: 'rgba(0,0,0,0.3)'
          }
        };
        option = {
          legend: {
            data: ['数据1', '数据2'],
            left: 'center'
          },
          tooltip: {},
          xAxis: {
            data: xAxisData,
            name: '姓名',
            axisLine: { onZero: true },
            splitLine: { show: false },
            splitArea: { show: false }
          },
          yAxis: {
            min: 0,
            max: 60,
            interval: 10,
          },
          grid: {
            bottom: 100
          },
          series: [
            {
              name: '数据1',
              type: 'bar',
              stack: 'one',
              emphasis: emphasisStyle,
              data: data1,
              itemStyle:{
                color: "#d97559"
              }
            },
            {
              name: '数据2',
              type: 'bar',
              stack: 'one',
              emphasis: emphasisStyle,
              data: data2,
              itemStyle:{
                color: "#e4c477"
              }
            }
          ]
        };
        option && myChart.setOption(option);
      },
      initLeaderTimelyChart(id,dutyTimely){
        var chartDom = document.getElementById(id);
        var myChart = echarts.init(chartDom);
          window.addEventListener('resize', function() {
          myChart.resize();
        });
        var option;
        option = {
          tooltip: {
            trigger: 'axis',
            axisPointer: {
              type: 'cross',
              crossStyle: {
                color: '#999'
              }
            }
          },
          legend: {
            data: ['样品数',  '完成及时率']
          },
          xAxis: [
            {
              name: '姓名',
              type: 'category',
              data: ['沐秋',],
              axisPointer: {
                type: 'shadow'
              },
              itemStyle: {
                top: '20px'
              }
            }
          ],
          yAxis: [
            {
              type: 'value',
              name: '数量',
              min: 0,
              max: 10,
              interval: 1,
              axisLabel: {
                formatter: '{value}'
              }
            },
            {
              type: 'value',
              name: '百分比',
              min: 0,
              max: 100,
              interval: 10,
              axisLabel: {
                formatter: '{value} %'
              }
            }
          ],
          series: [
            {
              name: '样品数',
              type: 'bar',
              barWidth: '20%',
              tooltip: {
                valueFormatter: function (value) {
                  return value;
                }
              },
              data: [4.0],
              itemStyle: {
                color: '#9fceff'
              }
            },
            {
              name: '完成及时率',
              type: 'line',
              tooltip: {
                valueFormatter: function (value) {
                  return value + ' %';
                }
              },
              data: [7.5],
              itemStyle: {
                color: '#d2eec5'
              }
            },
          ]
        };
        option && myChart.setOption(option);
      },
      initTesterStatiChart(){
      initTesterTimelyChart(id,executeTimely){
        var chartDom = document.getElementById(id);
        var myChart = echarts.init(chartDom);
          window.addEventListener('resize', function() {
          myChart.resize();
        });
        var option;
        option = {
          tooltip: {
            trigger: 'axis',
            axisPointer: {
              type: 'cross',
              crossStyle: {
                color: '#999'
              }
            }
      },
      initLeaderTimlyChart(){
          legend: {
            data: ['项目数', '完成及时率'],
            show: true
      },
      initTesterTimlyChart(){
          xAxis: [
            {
              type: 'category',
              data: ["","",""],
              axisPointer: {
                type: 'shadow'
              }
            }
          ],
          yAxis: [
            {
              type: 'value',
              name: '',
              min: 0,
              max: 50,
              interval: 5,
              axisLabel: {
                formatter: '{value}'
              }
            },
            {
              type: 'value',
              name: '',
              min: 0,
              max: 100,
              interval: 10,
              axisLabel: {
                formatter: '{value} %'
              }
            }
          ],
          series: [
            {
              name: '项目数',
              type: 'bar',
              tooltip: {
                valueFormatter: function (value) {
                  return value ;
                }
              },
              data: [2.0, 4.9, 7.0],
              itemStyle: {
                color: '#5087ec'
              }
            },
            {
              name: '完成及时率',
              type: 'line',
              yAxisIndex: 1,
              tooltip: {
                valueFormatter: function (value) {
                  return value + ' %';
                }
              },
              data: [2.0, 2.2, 3.3],
              itemStyle: {
                color: '#68bbc4'
              }
            }
          ]
        };
        option && myChart.setOption(option);
      },
    }
}
@@ -186,7 +459,7 @@
    padding: 0;
    .work-head{
      width:94%;
      height:100;
      height:100px;
      margin: 5px 10px;
      position: fixed;
      z-index: 10;
@@ -203,16 +476,32 @@
          }
        }
        .buttons{
          margin: 40px 0px 0px 900px;
          margin: 40px 0px 0px 50%;
        }
      }
    }
    .work-center{
      margin: 0px 0px 5px 10px;
      margin: 0px 0px 150px 10px;
      padding: 18vh 0px 5px 0px;
      .el-card{
        margin: 5px 0px;
        height:500px;
        p{
          font-size: 22px;
          margin: 0;
          padding: 0;
        }
      }
    }
    .work-foot{
      width:100%;
      height:50px;
      position: fixed;
      bottom: 0px;
      z-index: 10;
      text-align: right;
      .el-button{
        margin-right: 7%;
      }
    }
  }
src/views/home/index.vue
@@ -71,7 +71,7 @@
          </el-col>
          <el-col :span="12">
            <el-card :body-style="{ padding: '0px',height:'25vh' }">
              <p style="z-index: 10;position: absolute;font-size: 10px;margin-left: 10px;color: #ff0000;">未检验</p>
              <p style="z-index: 2;position: absolute;font-size: 10px;margin-left: 10px;color: #ff0000;">未检验</p>
              <el-table
                :data="uncheckedData"
                :cell-style="cell"
@@ -105,7 +105,7 @@
import * as echarts from 'echarts';
import { getVerifiedTop3,getUncheckedTop4,getMatAndFinshQualified,
  getCheckAndProjectNum,getTurno
} from '@/api/home'
} from '@/api/home/index'
export default {
  name: "home",
  data() {
@@ -113,7 +113,7 @@
      insNum: 0,
      insUnNum: 0,
      insproNum: 0,
      insproUnNum: 1110,
      insproUnNum: 0,
      radioType: "本年",
      imgSrc: require("@/assets/404_images/bg.png"),
      verifiedData: new Array(),
src/views/inspectionManagement/commissionInspection/addCommision.vue
@@ -1,169 +1,108 @@
<template>
  <div v-if="!showDetail">
    <div class="add_commision">
  <div class="content-main">
    <div class="firstBox">
      <div class="title">检测信息</div>
                <div class="title">委托信息</div>
      <div class="tableBox">
        <div class="tableBox-header">
        <el-button class="split" @click="dialogueFormVisible = true" type="primary" size="small" style="background-color: rgb(1, 102, 226);">添加样品</el-button>
        <el-input
                        <el-button class="split" @click="dialogueFormVisible = true" type="primary" size="small"
                            style="background-color: rgb(1, 102, 226);">添加样品</el-button>
                        <!--        <el-input
          v-model="searchData"
          class="input-form split"
          placeholder="扫描二维码录入样品..."
          prefix-icon="el-icon-search"
          style="width: 200px;"
        >
        </el-input>
        </el-input>-->
        <el-button type="primary" size="small" style="background-color: rgb(1, 102, 226);">重置</el-button>
      </div>
        <el-table
                ref="detectionInfo"
                :max-height="800"
                :cell-style="{textAlign: 'center'}"
                    <el-table ref="detectionInfo" :max-height="800" :cell-style="{textAlign: 'center'}"
                :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}"
                :data="detectionInfo"
                style="width: 100%"
              >
                <el-table-column
                  type="index"
                  label="序号"
                  min-width="10%"
                />
                <el-table-column
                  prop="sampleNumber"
                  label="样品编号"
                  min-width="8%"
                />
                <el-table-column
                  prop="sampleName"
                  label="样品名称"
                  min-width="10%"
                />
                <el-table-column
                  prop="specificationsModels"
                  label="规格型号"
                  min-width="10%"
                />
                <el-table-column
                  prop="unit"
                  label="单位"
                  min-width="8%"
                />
                <el-table-column
                  prop="samplesNumber"
                  label="数量"
                  min-width="8%"
                />
                <el-table-column
                  prop="addway"
                  label="添加方式"
                  min-width="8%">
                        :data="detectionInfo" style="width: 100%;margin-bottom: 20px;">
                        <el-table-column type="index" label="序号" min-width="10%" />
                        <el-table-column prop="sampleNumber" label="样品编号" min-width="8%" />
                        <el-table-column prop="sampleName" label="样品名称" min-width="10%" />
                        <el-table-column prop="specificationsModels" label="规格型号" min-width="10%" />
                        <el-table-column prop="unit" label="单位" min-width="8%" />
                        <el-table-column prop="samplesNumber" label="数量" min-width="8%" />
                        <el-table-column prop="addway" label="添加方式" min-width="8%">
                  <template slot-scope="scope">
                    <div v-if="scope.row.addway === 0">
                      <el-tag :type= 'success' disable-transitions>扫描</el-tag>
                                    <el-tag type="success" disable-transitions>扫描</el-tag>
                    </div>
                    <div v-if="scope.row.addway === 1">
                      <el-tag :type= 'primary' disable-transitions>录入</el-tag>
                                    <el-tag type="primary" disable-transitions>录入</el-tag>
                    </div>
                    <div v-else></div>
                </template>
                </el-table-column>
                <el-table-column
                  prop="experiment"
                  label="试验"
                  min-width="8%"
                />
                <el-table-column
                  prop="remarks"
                  label="备注"
                  min-width="8%"
                />
                <el-table-column
                  label="操作"
                  min-width="8%"
                >
                        <el-table-column prop="remarks" label="备注" min-width="8%" />
                        <el-table-column label="操作" min-width="8%">
                  <template slot-scope="scope">
                    <el-button type="text" size="small">修改</el-button>
                    <el-button type="text" size="small" @click="deleteRow(scope.row)">删除</el-button>
                  </template>
                </el-table-column>
              </el-table>
              <!-- åˆ†é¡µå™¨ -->
              <div>
                <el-pagination
                  class="pagination"
                  @size-change="handleSizeChange"
                  @current-change="handleCurrentChange"
                  :current-page="currentPage"
                  :page-sizes="[100, 200, 300, 400]"
                  :page-size="100"
                  layout="total, sizes, prev, pager, next, jumper"
                  :total="400">
                </el-pagination>
              </div>
      </div>
      <div class="secondBox">
        <el-row class="header">
            <el-col :span="12">基本信息</el-col>
                        <el-col :span="12" style="font-size: 16px;margin-bottom: 5px;">基本信息</el-col>
            <el-col :span="12" style="text-align: right;">
            <!-- ç‚¹å‡»è¿”回,当前页面值为false -->
            <!-- <el-button type="primary" size="mini" style="background-color: rgb(1, 102, 226); ">打印委托单</el-button> -->
            </el-col>
        </el-row>
            <el-form :model="infoForm" ref="infoForm" class="infoForm" label-position="right" label-width="100px" size="mini" >
                    <el-form :model="infoForm" ref="infoForm" class="infoForm" label-position="right" label-width="100px"
                        size="mini">
              <div class="formwrapper">
                  <el-row :gutter="200">
                        <el-col :span="5">
                        <el-form-item label="委托编号:">
                            <el-input style="width: 160px" type="text" :value="infoForm.commisioncode" readonly disabled="true" autocomplete="off" />
                                        <el-input style="width: 200px" type="text" :value="infoForm.commisioncode" readonly disabled
                                            autocomplete="off" size="small" />
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="委托单位:">
                          <el-input style="width: 160px" v-model="infoForm.department" placeholder="请输入委托单位"  />
                                        <el-input style="width: 200px" v-model="infoForm.department" placeholder="请输入委托单位" size="small" />
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="联系人:">
                          <el-input style="width: 160px" v-model="infoForm.contacter" placeholder="请输入委托单位"  />
                                        <el-input style="width: 200px" v-model="infoForm.contacter" placeholder="请输入委托单位" size="small" />
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="联系电话:">
                          <el-input style="width: 160px" v-model="infoForm.tel" placeholder="请输入联系电话" />
                                        <el-input style="width: 200px" v-model="infoForm.tel" placeholder="请输入联系电话" size="small" />
                        </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row :gutter="200">
                        <el-col :span="5">
                        <el-form-item label="联系地址:" >
                          <el-input style="width: 160px;" v-model="infoForm.address" placeholder="请输入联系地址" autocomplete="off" />
                                        <el-input style="width: 200px;" v-model="infoForm.address" placeholder="请输入联系地址" autocomplete="off"
                                            size="small" />
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="完成期限:">
                            <el-date-picker
                              v-model="infoForm.deadline"
                              type="date"
                              placeholder="选择日期"
                              style="width: 160px;">
                                        <el-date-picker v-model="infoForm.deadline" type="date" placeholder="选择日期" style="width: 200px;"
                                            size="small">
                            </el-date-picker>
                          </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="送样时间:">
                            <el-date-picker
                              v-model="infoForm.time"
                              type="date"
                              placeholder="选择日期"
                              style="width: 160px;">
                                        <el-date-picker v-model="infoForm.time" type="date" placeholder="选择日期" style="width: 200px;">
                            </el-date-picker>
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="送样方式:">
                          <el-select style="width: 160px;" v-model="infoForm.way" size="small" placeholder="送样">
                                <el-option v-for="options in sampleDeliveryMode" :key="options.key" :value="options.value">{{ options.value }}</el-option>
                                        <el-select style="width: 200px;" v-model="infoForm.way" size="small" placeholder="送样">
                                            <el-option v-for="options in sampleDeliveryMode" :key="options.key"
                                                :value="options.value">{{ options.value }}</el-option>
                            </el-select>
                        </el-form-item>
                        </el-col>
@@ -171,28 +110,33 @@
                    <el-row :gutter="200">
                        <el-col :span="5">
                        <el-form-item label="送样人:" >
                          <el-input style="width: 160px;" v-model="infoForm.sender" placeholder="请输入送样人" autocomplete="off" />
                                        <el-input style="width: 200px;" v-model="infoForm.sender" placeholder="请输入送样人" autocomplete="off"
                                            size="small" />
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="送样人电话:" >
                          <el-input style="width: 160px;" v-model="infoForm.sendertel" placeholder="请输入送样人电话" autocomplete="off" />
                                        <el-input style="width: 200px;" v-model="infoForm.sendertel" placeholder="请输入送样人电话"
                                            autocomplete="off" size="small" />
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="报告数:">
                            <el-input style="width: 160px;" v-model="infoForm.num" placeholder="请输入报告数" autocomplete="off" />
                                        <el-input style="width: 200px;" v-model="infoForm.num" placeholder="请输入报告数" autocomplete="off"
                                            size="small" />
                        </el-form-item>
                        </el-col>
                        <el-col :span="5">
                        <el-form-item label="委托备注:">
                            <el-input style="width: 160px;" v-model="infoForm.other" placeholder="备注" autocomplete="off" />
                                        <el-input style="width: 200px;" v-model="infoForm.other" placeholder="备注" autocomplete="off"
                                            size="small" />
                        </el-form-item>
                        </el-col>
                    </el-row>
                    </div>
                    <div class="submitBtn">
                      <el-button type="primary" size="small" @click="submitInspection" style="background-color: rgb(1, 102, 226);">提交</el-button>
                            <el-button type="primary" size="small" @click="submitInspection"
                                style="background-color: rgb(1, 102, 226);">提交</el-button>
                      <!-- ç‚¹å‡»è¿”回,当前页面值为false -->
                      <el-button type="primary" size="mini" style="background-color: rgb(1, 102, 226); ">打印委托单</el-button>
                    </div>
@@ -200,59 +144,58 @@
      </div>
    </div>
    <div class="checkType">
      <el-dialog
        title="添加指标"
        :visible.sync="dialogueFormVisible"
        width="40%"
      >
        <el-form :model="addPointerForm" ref="addPointerForm" class="addPointerForm" label-position="right" label-width="100px" size="mini">
                <el-dialog title="添加样品" :visible.sync="dialogueFormVisible" width="40%" top="30vh">
                    <el-form :model="addPointerForm" ref="addPointerForm" class="addPointerForm" label-position="right"
                        label-width="100px" size="mini">
          <el-row :gutter="50">
            <el-col :span="10">
                            <el-col :span="11">
              <el-form-item label="样品编号:">
                <el-select style="width: 160px;" v-model="addPointerForm.sampleNumber" size="small" placeholder="请选择样品编号">
                  <el-option v-for="options in samplecodeoptions" :value="options.value" :key="options.key" >{{ options.value }}</el-option>
                </el-select>
                                    <el-input v-model="addPointerForm.sampleNumber" size="small" disabled>
                                    </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="10">
                            <el-col :span="11">
              <el-form-item label="样品名称:">
                <el-select style="width: 160px;" v-model="addPointerForm.sampleName" size="small" placeholder="请选择样品名称">
                  <el-option v-for="options in sampleoptions" :value="options.value" :key="options.key">{{ options.value }}</el-option>
                                    <el-select v-model="addPointerForm.sampleName" size="small" placeholder="请选择样品名称"
                                        @change="upMaterialName">
                                        <el-option v-for="options in sampleoptions" :value="options.key" :label="options.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="50">
            <el-col :span="10">
                            <el-col :span="11">
              <el-form-item label="规格型号:">
                <el-select style="width: 160px;" v-model="addPointerForm.specificationsModels" size="small" placeholder="请选择样品名称">
                  <el-option v-for="options in model_spe_options" :value="options.value" :key="options.key">{{ options.value }}</el-option>
                                    <el-select v-model="addPointerForm.specificationsModels" size="small" placeholder="请先选择样品名称">
                                        <el-option v-for="options in model_spe_options" :value="options.value"
                                            :key="options.key">{{ options.value }}</el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="10">
                            <el-col :span="11">
              <el-form-item label="样品单位:">
                <el-input style="width: 160px" type="text" v-model="addPointerForm.unit" placeholder="请输入单位" autocomplete="off" />
                                    <el-input type="text" v-model="addPointerForm.unit" placeholder="请输入单位" autocomplete="off" />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="50">
            <el-col :span="10">
                            <el-col :span="11">
              <el-form-item label="样品数量:">
                <el-input style="width: 160px" type="text" v-model="addPointerForm.samplesNumber" placeholder="请输入数量" autocomplete="off" />
                                    <el-input type="text" v-model="addPointerForm.samplesNumber" placeholder="请输入数量" autocomplete="off" />
              </el-form-item>
            </el-col>
            <el-col :span="10">
                            <el-col :span="11">
              <el-form-item label="备注:">
                <el-input style="width: 160px" type="text" v-model="addPointerForm.remarks" placeholder="请输入备注" autocomplete="off" />
                                    <el-input type="text" v-model="addPointerForm.remarks" placeholder="请输入备注" autocomplete="off" />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="50">
            <el-col :span="10">
              <el-form-item label="添加实验:">
                                <el-form-item label="添加项目:">
                <el-checkbox-group v-model="addPointerForm.experiment" style="display: flex; flex-direction: column;">
                  <el-checkbox v-for="expers in experList" :label="expers.label" :key="expers.key">{{ expers.label }}</el-checkbox>
                                        <el-checkbox v-for="expers in experList" :label="expers.label"
                                            :key="expers.key">{{ expers.label }}</el-checkbox>
                </el-checkbox-group>
              </el-form-item>
            </el-col>
@@ -266,13 +209,16 @@
          </div>
  </div>
</div>
<div v-else>
  <router-view></router-view>
</div>
</template>
<script>
import {getSampleName, getModelSpecification, getlink, addInspection} from '@/api/inspection/commisioninspection'
    import {
        getSampleName,
        getModelSpecification,
        getlink,
        addInspection,
        isIfViewUUID
    } from '@/api/inspection/commisioninspection'
export default {
  data() {
    return {
@@ -327,13 +273,7 @@
        key:'1',
        value: ''
      }],
      model_spe_options:[{
        key:'1',
        value: '选项1'
      },{
        key: '2',
        value: '选项2'
      }],
                model_spe_options: [],
      sampleDeliveryMode:[{
        key: '1',
        value: '送样'
@@ -342,43 +282,48 @@
        value: '上门'
      }],
      dialogueFormVisible: false,
      showDetail: false
                showDetail: false,
                viewId: null
    }
  },
  created(){
    this.getlink()
            this.viewId = this.$route.params.viewId
            this.$store.commit('settings/SAVE_LINK', this.viewId)
            this.getlink(this.$route.params.viewId)
  },
  mounted(){
    this.getSampleName()
    this.getModelSpecification()
  },
  methods: {
    // èŽ·å–é“¾æŽ¥link
    getlink(){
      getlink().then((result)=>{
        this.$store.commit('settings/SAVE_LINK',result.data)
        console.log(this.$store.state.settings.link)
            getlink(viewId) {
                if (viewId == null) {
                    this.$message.error('当前链接不在有效期内,系统自动关闭')
                    this.$router.push('/404')
                    return
                }
                isIfViewUUID({
                    viewId
                }).then(res => {
                    if (!res.data) {
                        this.$message.error('当前链接不在有效期内,系统自动关闭')
                        this.$router.push('/404')
                    }
      })
    },
    async getSampleName(){
      const res = await getSampleName()
      // console.log('res',res.data)
      this.sampleoptions = res.data.map((item)=>{
        return{
          key:item.id.toString(),
          value:item.name
        }
      })
      this.samplecodeoptions = res.data.map((item)=>{
        return{
          key:item.id.toString(),
          value:item.code
                        value: item.name,
                        code: item.code
        }
      })
    },
    async getModelSpecification(){
      const res = await getModelSpecification({materialId: '1'})
      // console.log(res)
            async getModelSpecification(val) {
                const res = await getModelSpecification({
                    materialId: val
                })
      this.model_spe_options = res.data.map((item)=>{
        return{
          key:item.specificationsId,
@@ -415,7 +360,8 @@
      }else{
        sampledeliveryway = 2
      }
      const res = await addInspection({completionDeadline: this.infoForm.deadline,
                const res = await addInspection({
                    completionDeadline: this.infoForm.deadline,
        contactAddress: this.infoForm.address,
        contactNumber: this.infoForm.tel,
        contacts: this.infoForm.contacter,
@@ -426,32 +372,8 @@
        reportNumber: parseInt(this.infoForm.num),
        sampleDeliveryMode: sampledeliveryway,
        sampleDeliveryPhone: this.infoForm.sendertel,
        sampleSender: this.infoForm.sender})
//       const res = await addInspection({
//   completionDeadline: "2023-08-03",
//   contactAddress: "江苏南通",
//   contactNumber: "12321423432",
//   contacts: "小黑",
//   entrustRemarks: "委托备注YPBH123456789YPBH123456789YPBH123456789",
//   entrusted: "阿里巴巴",
//   inspectionTime: "2023-08-03",
//   linkDetectionList: [
//     {
//       "experiment": "做梦",
//       "remarks": "通过了",
//       "sampleName": "发动机",
//       "sampleNumber": "YPBH123456789",
//       "samplesNumber": 20,
//       "specificationsModels": "GGXH-AAAAA",
//       "unit": "百度"
//     }
//   ],
//   reportNumber: 23,
//   sampleDeliveryMode: 1,
//   sampleDeliveryPhone: "123456789676",
//   sampleSender: "小白"
// })
      // console.log(res)
                    sampleSender: this.infoForm.sender
                })
      this.infoForm.commisioncode = res.data
      if(res.data){
        this.$message({
@@ -472,8 +394,15 @@
      this.pageParams.pageNo = pageNo
    },
    deleteRow(row){
      console.log(row)
      row = null
            },
            upMaterialName(val) {
                this.sampleoptions.forEach(a => {
                    if (a.key == val) {
                        this.addPointerForm.sampleNumber = a.code
                    }
                })
                this.getModelSpecification(val)
    }
  }
}
@@ -488,26 +417,35 @@
.firstBox{
  .title{
    padding:0px 10px 10px 10px;
                padding: 15px 10px;
                font-size: 18px;
                background-color: #0166e2;
                color: #fff;
                border-radius: 4px;
                margin-bottom: 20px;
  }
  .tableBox{
    background-color: #fff;
    padding: 0px 20px;
    margin: 0px -15px;
    flex: 1;
    background: #fff;
    /* padding: 20px 20px 10px 20px; */
    display: flex;
    flex-direction: column;
    .tableBox-header{
      padding: 20px 0px;
      .split{
        margin-right: 15px;
      }
    }
          .el-table {
            flex: 1;
          }
          >div:nth-child(3){
            display: flex;
            justify-content: end;
@@ -515,14 +453,16 @@
          }
  }
}
.secondBox{
  margin: 0px -15px;
  .header{
    display: flex;
    justify-content: space-between;
    padding: 10px 20px;
    margin-top: 10px;
  }
  .submitBtn{
    display: flex;
    justify-content: end;
@@ -530,12 +470,15 @@
    margin-top: 20px;
  }
}
.infoForm{
  background-color: #fff;
  padding: 20px 50px;
  .formwrapper{
    margin: 20px 0px;
    padding-left: 30px;
    .el-row{
      margin: 10px 0px;
    }
src/views/inspectionManagement/commissionInspection/index.vue
@@ -1,32 +1,20 @@
<template>
  <div>
    <div>
        <div v-if="!showDetail">
      <div class="content-main">
          <div class="top-bar">
              <el-form ref="form" :inline="true" :model="searchData">
              <el-form-item label="委托编号:" class="sermargin">
                <el-input
                  v-model="searchData.code"
                  class="input-form"
                  placeholder="请输入"
                >
                            <el-input v-model="searchData.code" class="input-form" placeholder="请输入">
                </el-input>
              </el-form-item>
              <el-form-item label="样品名称:" class="sermargin">
                <el-input
                  v-model="searchData.name"
                  class="input-form"
                  placeholder="请输入"
                >
                            <el-input v-model="searchData.name" class="input-form" placeholder="请输入">
                </el-input>
              </el-form-item>
              <el-form-item label="委托单位:" style="margin-right: 20px;">
                <el-select v-model="searchData.department" placeholder="全部">
                  <el-option
                    v-for="item in options"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value">
                                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
                  </el-option>
                </el-select>
              </el-form-item>
@@ -35,19 +23,27 @@
                <el-button type="primary" plain @click="reset">重置</el-button>
              </el-form-item>
              </el-form>
              <el-form class="rightForm">
                  <!-- æ˜¾ç¤ºæ–°å¢žå§”托的网址链接 -->
                <div v-show="showlinkDiv === true">
                  <span style="font-size: 12px;">{{ textToCopy }}</span>
                  <el-button type="text" @click="copyText" style="margin-left: 30px;">{{ copied ===false?'复制':'已复制' }}</el-button>
                    <el-form>
                        <el-popover placement="left" width="350" trigger="click">
                            <div class="vue_qr_div">
                                <el-row>
                                    <el-col>
                                        <el-input v-model="view" readonly size="medium" style="width: 250px;margin-right: 10px;"></el-input>
                                        <el-button size="small" type="primary" v-if="viewId==null" @click="viewDia=true">生成</el-button>
                                        <el-button size="small" type="primary" v-else-if="viewId!=null" @click="copy">复制</el-button>
                                    </el-col>
                                </el-row>
                                <el-row style="margin-top: 10px;">
                                    <el-col v-if="viewId==null">当前链接已过期,请点击生成按钮重新生成</el-col>
                                    <el-col
                                        v-else-if="viewId!=null">当前链接将在{{(parseInt(viewTime)/60/60)>1?(parseInt(viewTime)/60/60).toFixed(1)+'小时':Math.round(parseInt(viewTime)/60)+'分钟'}}后过期</el-col>
                                </el-row>
                </div>
                <el-button class="rightBtn" type="primary" @click="showLink">新增委托</el-button>
                            <el-button slot="reference" class="rightBtn" type="primary" @click="goToaddCommision">新增委托</el-button>
                        </el-popover>
              </el-form>
          </div>
        </div>
          <el-card style="margin: 20px 8px;">
          <div >
                <div class="library-table">
            <div class="table-header">
              <div class="search-bar">
                <el-radio-group v-model="radioValue" @change="radioclick">
@@ -56,78 +52,27 @@
              </el-radio-button>
              </el-radio-group>
              </div>
              <div class="generateInsp">
                <el-button type="primary" size="mini" icon="el-icon-document" style="background-color: rgb(1, 102, 226);">生成报检单</el-button>
                            <el-button type="primary" size="mini" icon="el-icon-document"
                                style="background-color: rgb(1, 102, 226);">生成报检单</el-button>
              </div>
            </div>
              <el-table
                ref="commisionTable"
                :max-height="800"
                :cell-style="{textAlign: 'center'}"
                    <div class="table-box">
                        <el-table ref="commisionTable" :max-height="800" :cell-style="{textAlign: 'center'}"
                :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}"
                :data="commisionTable"
                style="width: 100%"
              >
                <el-table-column
                  type="selection"
                  min-width="10%"
                />
                <el-table-column
                  type="index"
                  label="序号"
                  min-width="10%"
                />
                <el-table-column
                  prop="entrust_coding"
                  label="委托编号"
                  min-width="10%"
                />
                <el-table-column
                  prop="entrusted"
                  label="委托单位"
                  min-width="12%"
                />
                <el-table-column
                  prop="samples_number"
                  label="样品编号"
                  min-width="8%"
                />
                <el-table-column
                  prop="sample_name"
                  label="样品名称"
                  min-width="8%"
                />
                <el-table-column
                  prop="specifications_models"
                  label="规格型号"
                  min-width="12%"
                />
                <el-table-column
                  prop="dateSurvey"
                  label="送达时间"
                  min-width="8%"
                />
                <el-table-column
                  prop="completionDeadline"
                  label="完成期限"
                  min-width="8%"
                />
                <el-table-column
                  prop="contacts"
                  label="委托编制人"
                  min-width="8%"
                />
                <el-table-column
                  prop="inspectionTime"
                  label="检验日期"
                  min-width="8%"
                />
                <el-table-column
                  prop="inspection_status"
                  label="状态"
                  min-width="8%">
                            :data="commisionTable" style="width: 100%">
                            <el-table-column type="selection" min-width="10%" />
                            <el-table-column type="index" label="序号" min-width="10%" />
                            <el-table-column prop="entrust_coding" label="委托编号" min-width="10%" />
                            <el-table-column prop="entrusted" label="委托单位" min-width="12%" />
                            <el-table-column prop="samples_number" label="样品编号" min-width="8%" />
                            <el-table-column prop="sample_name" label="样品名称" min-width="8%" />
                            <el-table-column prop="specifications_models" label="规格型号" min-width="12%" />
                            <el-table-column prop="dateSurvey" label="送达时间" min-width="8%" />
                            <el-table-column prop="completionDeadline" label="完成期限" min-width="8%" />
                            <el-table-column prop="contacts" label="委托编制人" min-width="8%" />
                            <el-table-column prop="inspectionTime" label="检验日期" min-width="8%" />
                            <el-table-column prop="inspection_status" label="状态" min-width="8%">
                  <template slot-scope="scope">
                    <div v-if="scope.row.inspection_status === 1">
                      <span style="color: green;">已检测</span>
@@ -137,10 +82,7 @@
                    </div>
                  </template>
                </el-table-column>
                <el-table-column
                  label="操作"
                  min-width="8%"
                >
                            <el-table-column label="操作" min-width="8%">
                  <template slot-scope="scope">
                    <el-button type="text" size="small" @click="handleClick(scope.row)">删除</el-button>
                  </template>
@@ -148,28 +90,51 @@
              </el-table>
              <!-- åˆ†é¡µå™¨ -->
              <div>
                <el-pagination
                  class="pagination"
                  @size-change="handleSizeChange"
                  @current-change="handleCurrentChange"
                  :current-page="currentPage"
                  :page-sizes="[10,20,30]"
                  :page-size="pageSize"
                  layout="total, sizes, prev, pager, next, jumper"
                  :total="total">
                            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
                                :current-page="currentPage" :page-sizes="[5, 10, 20]" :page-size="pageSize"
                                layout="total, sizes, prev, pager, next, jumper" :total="total">
                </el-pagination>
              </div>
          </div>
        </el-card>
   </div>
            </div>
        </div>
        <div v-else>
            <router-view />
        </div>
        <el-dialog title="链接时长设置" :visible.sync="viewDia" width="30%">
            <div>
                <el-row style="line-height: 46px;">
                    <el-col :span="6" style="font-size: 14px;text-align: right;">时长设置:</el-col>
                    <el-col :span="14" :offset="1">
                        <el-select v-model="viewTime" size="medium">
                            <el-option label="1 å¤©" :value="1"></el-option>
                            <el-option label="2 å¤©" :value="2"></el-option>
                            <el-option label="3 å¤©" :value="3"></el-option>
                            <el-option label="4 å¤©" :value="4"></el-option>
                            <el-option label="5 å¤©" :value="5"></el-option>
                            <el-option label="6 å¤©" :value="6"></el-option>
                            <el-option label="1 å‘¨" :value="7"></el-option>
                        </el-select>
                    </el-col>
                </el-row>
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button type="primary" @click="getViewId()">提 äº¤</el-button>
                <el-button @click="viewDia = false">取 æ¶ˆ</el-button>
            </span>
        </el-dialog>
        <!-- éšè—åŸŸè¾“入框用来复制 -->
        <input id="copyContext" style="position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;" />
 </div>
</template>
<script>
import { getCommisionList } from '@/api/inspection/commisioninspection'
    import {
        getCommisionList,
        getViewUUID,
        selectViewUUID
    } from '@/api/inspection/commisioninspection'
export default {
  data() {
    return {
@@ -197,8 +162,7 @@
        sample_name: "发动机",
        inspection_status: 1
      }],
      conditionsOptions: [
        {
                conditionsOptions: [{
          label: '全部',
          value: 0
        },
@@ -214,42 +178,39 @@
      currentPage: 1,
      pageSize: 5,
      total: 100,
      showlinkDiv: false,
      copied: false,
      textToCopy: 'http://localhost:8080/#/addCommision'
                showDetail: false,
                day: 1,
                view: null,
                viewId: null,
                viewTime: 1,
                viewDia: false
    }
  },
  created() {
    this.getCommisionList()
  },
  // updated() {
  //   if (this.$router.currentRoute.name === 'AddCommision') {
  //     // console.log(this.$router.currentRoute.name)
  //     this.showDetail = true
  //   }
  // },
  methods: {
    copyText() {
      this.$copyText(this.textToCopy)
        .then(() => {
          this.copied = true;
          // setTimeout(() => {
          //   this.copied = false;
          // }, 2000);
        })
        .catch(error => {
          console.log('复制失败',error);
        });
        updated() {
            if (this.$router.currentRoute.name === 'AddCommision') {
                // console.log(this.$router.currentRoute.name)
                this.showDetail = true
            }
    },
        methods: {
    async getCommisionList(){
      const res = await getCommisionList({pageNo:this.currentPage, pageSize:this.pageSize})
                const res = await getCommisionList({
                    pageNo: this.currentPage,
                    pageSize: this.pageSize
                })
      this.commisionTable = res.data.row
      this.total = res.data.total
      // console.log(res)
       // èŽ·å–æ‰€æœ‰çš„å§”æ‰˜å•ä½åç§°
      const allDepartmentNames = [...new Set(this.commisionTable.map(item => item.entrusted))]
      // å°†allDepartmentNames转换为options需要的格式
      this.options = allDepartmentNames.map(name => ({ value: name, label: name }))
                this.options = allDepartmentNames.map(name => ({
                    value: name,
                    label: name
                }))
            },
            // æŸ¥è¯¢æ–¹æ³•
@@ -295,7 +256,11 @@
      if(this.radioValue === 0){
        this.getCommisionList() 
      }else{
        const res = await getCommisionList({pageNo:this.currentPage, pageSize:this.pageSize, inspectionStatus: this.radioValue})
                    const res = await getCommisionList({
                        pageNo: this.currentPage,
                        pageSize: this.pageSize,
                        inspectionStatus: this.radioValue
                    })
        // console.log(res)
        this.commisionTable = res.data.row
        this.total = res.data.total
@@ -310,7 +275,11 @@
      if(this.radioValue === 0){
        this.getCommisionList()
      }else{
        const res = await getCommisionList({pageNo:this.currentPage, pageSize:this.pageSize, inspectionStatus: this.radioValue})
                    const res = await getCommisionList({
                        pageNo: this.currentPage,
                        pageSize: this.pageSize,
                        inspectionStatus: this.radioValue
                    })
        this.commisionTable = res.data.row
        this.total = res.data.total
      }
@@ -322,19 +291,48 @@
      if(this.radioValue === 0){
        this.getCommisionList()
      }else{
        const res = await getCommisionList({pageNo:this.currentPage, pageSize:this.pageSize, inspectionStatus: this.radioValue})
                    const res = await getCommisionList({
                        pageNo: this.currentPage,
                        pageSize: this.pageSize,
                        inspectionStatus: this.radioValue
                    })
        this.commisionTable = res.data.row
        this.total = res.data.total
      }
    },
    showLink() {
      this.showlinkDiv = true
            goToaddCommision() {
                // this.showDetail = true
                selectViewUUID({
                    day: this.day
                }).then(res => {
                    this.view = `${this.vueIp}addCommision/${res.data.id}`
                    this.viewId = res.data.id
                    this.viewTime = res.data.time
                })
            },
            getViewId() {
                getViewUUID({
                    day: this.viewTime == null ? 1 : this.viewTime
                }).then(res => {
                    this.viewId = res.data
                    this.view = `${this.vueIp}addCommision/${res.data.id}`
                    this.viewDia = false
                    this.$message.success('链接已生成,点击复制按钮进行复制')
                })
            },
            copy() {
                document.getElementById('copyContext').value = this.view
                const input = document.querySelector('#copyContext');
                input.select()
                if (document.execCommand('copy')) {
                    this.$message.success('已复制到剪贴板')
                }
    }
  }
}
</script>
<style lang="scss" scoped>
<style scoped>
    .top-bar {
        margin: -25px -15px;
        background: #fff;
@@ -342,21 +340,17 @@
        justify-content: space-between;
        padding: 5px 24px 0px 24px;
.top-bar{
    margin: -25px -15px;
    background: #fff;
    display: flex;
    justify-content: space-between;
    padding: 5px 24px 0px 24px;
    .sermargin{
      margin-right: 60px;
    }
    .rightForm{
      display: flex;
      justify-content: space-between;
      /* background-color: #bfa; */
      height: 40px;
      line-height: 40px;
      >div{
        padding: 0px 10px;
        padding-bottom: 10px;
@@ -365,39 +359,97 @@
        /* height: 40px;
        line-height: 40px; */
      }
      .rightBtn{
        background-color: rgb(1, 102, 226);
      }
    }
  }
    .rightBtn {
        background-color: rgb(1, 102, 226);
    }
    }
    }
    .library-table {
        background-color: #fff;
        flex: 1;
        margin: 0px -15px;
        margin-top: 40px;
        display: flex;
        flex-direction: column;
    .table-header{
            padding: 20px;
    display:flex;
    margin-bottom: 10px;
    .search-bar{
      width: 50%;
            justify-content: space-between;
            .el-form-item {
                margin-bottom: 30px !important;
    }
    .generateInsp{
      width: 50%;
        }
        .table-box {
            padding: 0px 20px;
            margin-top: 0px;
            flex: 1;
            background: #fff;
            /* padding: 20px 20px 10px 20px; */
            display: flex;
            flex-direction: column;
            .el-table {
                flex: 1;
            }
            >div:nth-child(2) {
      display: flex;
      justify-content: end;
                margin: 10px 0;
    }
  }
  .pagination{
    }
    .rightBtn {
        background-color: rgb(1, 102, 226);
    }
    .library-table {
        background-color: #fff;
        flex: 1;
        margin: 0px -15px;
        margin-top: 40px;
  display: flex;
  margin-top: 20px;
  justify-content: end;
        flex-direction: column;
        .table-header {
            padding: 20px;
            display: flex;
            justify-content: space-between;
            .el-form-item {
                margin-bottom: 30px !important;
}
        }
        .table-box {
            padding: 0px 20px;
            margin-top: 0px;
            flex: 1;
            background: #fff;
            /* padding: 20px 20px 10px 20px; */
            display: flex;
            flex-direction: column;
            .el-table {
                flex: 1;
            }
            >div:nth-child(2) {
                display: flex;
                justify-content: end;
                margin: 10px 0;
            }
        }
    }
    .vue_qr_div{
        text-align: center;
        color: #0166e2;
    }
</style>
src/views/laboratory/role/index.vue
@@ -7,10 +7,6 @@
            <el-input v-model="searchData.roleName" class="input-form" placeholder="请输入角色名称" style="width:250px">
            </el-input>
          </el-form-item>
          <el-form-item label="权限:" class="sermargin">
            <el-input v-model="searchData.permission" class="input-form" placeholder="请输入权限" style="width:250px">
            </el-input>
          </el-form-item>
          <el-form-item class="rightBtn">
            <el-button type="primary">查询</el-button>
            <el-button type="primary" plain>重置</el-button>
@@ -28,11 +24,10 @@
          <el-table :max-height="800" :cell-style="{ textAlign: 'center' }"
            :header-cell-style="{ border: '0px', background: '#f5f7fa', color: '#606266', boxShadow: 'inset 0 1px 0 #ebeef5', textAlign: 'center' }"
            :data="roleTable" style="width: 100%">
            <el-table-column type="selection" min-width="8%" />
            <el-table-column prop="rolename" label="角色名称" min-width="20%" />
            <el-table-column prop="permission" label="权限" min-width="20%" />
            <el-table-column prop="create_time" label="创建时间" min-width="20%" />
            <el-table-column prop="update_time" label="更新时间" min-width="20%" />
            <el-table-column type="index" min-width="8%" />
            <el-table-column prop="roleName" label="角色名称" min-width="20%" />
            <el-table-column prop="createTime" label="创建时间" min-width="20%" />
            <el-table-column prop="updateTime" label="更新时间" min-width="20%" />
            <el-table-column label="操作" min-width="12%">
              <template slot-scope="scope">
                <el-button type="text" size="small">编辑</el-button>
@@ -50,23 +45,61 @@
        </div>
      </div>
    </div>
    <el-dialog title="新增角色" :visible.sync="dialogTableVisible" width="60%">
    <el-dialog title="新增角色" :visible.sync="dialogTableVisible" width="50%">
      <el-form :model="roleAdd" ref="roleAdd" label-position="right" label-width="100px">
        <el-form-item label="角色名:">
          <el-input style="width: 300px" v-model="roleAdd.roleName" placeholder="请输入角色名">
        <el-col :span="24" style="display: flex;justify-content: space-between;">
          <el-form-item :rules="nameaRules" label="角色名:">
            <el-input @blur="assertName" style="width: 300px" v-model="roleAdd.roleName" placeholder="请输入角色名">
          </el-input>
        </el-form-item>
        <el-form-item label="功能选择:">
          <el-cascader size="medium " v-model="roleAdd.menuData" :options="menuInfo">
            <template slot-scope="{ node, data }">
          <!-- <el-form-item label="菜单选择:">
            <el-cascader style="width: 300px" collapse-tags size="medium " filterable :props="props"
              v-model="roleAdd.menuData" :options="menuInfo">
              <template slot-scope="{ data }">
              <span>{{ data.label }}</span>
              <span v-if="!node.isLeaf"> ({{  }}) </span>
            </template>
          </el-cascader>
        </el-form-item>
          </el-form-item> -->
        </el-col>
      </el-form>
      <el-col :span="24">
        <el-table height="300" :data="menuInfo" style="width: 100%;margin-bottom: 20px;" row-key="id"
          :default-expand-all="false" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
          <el-table-column highlight-current-row prop="parentId" label="菜单类型" sortable width="180">
            <template slot-scope="scope">
              <span v-if="scope.row.parentId == 0 && scope.row.children != undefined" style="color: #409eff;">主菜单</span>
              <span v-if="scope.row.parentId == 0 && scope.row.children === undefined" style="color: #409eff;">
                ä¸»èœå•
              </span>
            </template>
          </el-table-column>
          <el-table-column prop="name" label="菜单名" sortable width="180">
            <template slot-scope="scope">
              <el-col v-if="scope.row.parentId == 0">
                <span style="color: #409eff;">{{ scope.row.name }}</span>
              </el-col>
              <el-col v-else>
                <span style="color: #40b815;">{{ scope.row.name }}</span>
              </el-col>
            </template>
          </el-table-column>
          <el-table-column prop="id" label="操作权限">
            <template slot-scope="scope">
              <el-col v-if="scope.row.parentId == 0 && scope.row.children != undefined">
                <!-- <el-checkbox v-model="scope.row.select">查询</el-checkbox> -->
              </el-col>
              <el-col v-else>
                <el-checkbox size="medium" v-model="scope.row.selected" @change="chekSelect(scope)">查询</el-checkbox>
                <el-checkbox size="medium" v-model="scope.row.added" @change="chekAdd(scope)">添加</el-checkbox>
                <el-checkbox size="medium" v-model="scope.row.updated" @change="chekUpdate(scope)">修改</el-checkbox>
                <el-checkbox size="medium" v-model="scope.row.deleted" @change="chekDelet(scope)">删除</el-checkbox>
              </el-col>
            </template>
          </el-table-column>
        </el-table>
      </el-col>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogTableVisible = false">取 æ¶ˆ</el-button>
        <el-button @click="clearAll">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="addRole">ç¡® å®š</el-button>
      </span>
    </el-dialog>
@@ -74,8 +107,12 @@
</template>
<script>
import { getMenusTree } from '@/api/laboratory/role'
import { getMenusTree, addRoleInfo, assertRepeat, getAllRoleAndMenuInfo } from '@/api/laboratory/role'
import { default as menuPower } from './menuPower.vue'
export default {
  components: {
    menuPower: () => import('./menuPower.vue')
  },
  data() {
    return {
      props: { multiple: true },
@@ -83,22 +120,15 @@
        roleName: null,
        menuData: null
      },
      nameaRules: [{ required: true, message: '请输入角色名' }],
      menuTableTree: null,
      searchData: {
        roleName: '',
        permission: ''
      },
      assertRepeatName: true,
      menuInfo: [],
      roleTable: [{
        rolename: '部长',
        permission: 'ROOT',
        create_time: '2023-07-04 12:12:12',
        update_time: '2023-07-04 12:12:12'
      }, {
        rolename: '组长',
        permission: '--',
        create_time: '2023-07-04 12:12:12',
        update_time: '2023-07-04 12:12:12'
      }],
      roleTable: [],
      updateData: {
        oldPassWord: '',
        newPassWord: '',
@@ -113,23 +143,62 @@
  created() {
  },
  mounted() {
    this.start()
  },
  methods: {
    chekSelect(scope) {
    },
    async start() {
      let res = await getAllRoleAndMenuInfo()
      this.roleTable = res.data
      console.log(res);
    },
    async assertName() {
      if (this.roleAdd.roleName == null || this.roleAdd.roleName == '') {
        this.$message({
          message: '请输入角色名',
          type: 'warning'
        });
        return
      }
      let res = await assertRepeat({ roleName: this.roleAdd.roleName })
      if (!res.data) {
        this.assertRepeatName = false
        this.$message({
          message: '角色名重复,请重新输入!',
          type: 'warning'
        });
      } else {
        this.assertRepeatName = true
      }
    },
    chekAdd(scope) {
      scope.row.selected = true
    },
    chekUpdate(scope) {
      scope.row.selected = true
    },
    chekDelet(scope) {
      scope.row.selected = true
    },
    async addClickRole() {
      let res = await getMenusTree();
      this.menuInfo = res.data
      this.menuInfo.forEach(item => {
        item.select = false
        item.add = false
        item.update = false
        item.delete = false
        this.$set(item, 'selected', false);
        this.$set(item, 'added', false);
        this.$set(item, 'updated', false);
        this.$set(item, 'deleted', false);
        if (item.children.length == 0) {
          delete item['children']
        } else {
          item.children.forEach(c => {
            c.select = false
            c.add = false
            c.update = false
            c.delete = false
            this.$set(c, 'selected', false);
            this.$set(c, 'added', false);
            this.$set(c, 'updated', false);
            this.$set(c, 'deleted', false);
            if (c.children.length == 0) {
              delete c['children']
            }
@@ -137,10 +206,68 @@
        }
      })
      this.dialogTableVisible = true
      // console.log(this.dialogTableVisible)
    },
    addRole() {
      console.log(this.roleAdd);
    async addRole() {
      if (this.roleAdd.roleName == null || this.roleAdd.roleName == '') {
        this.$message({
          message: '请输入角色名',
          type: 'warning'
        });
        return
      }
      if (!this.assertRepeatName) {
        this.$message({
          message: '角色名重复,请重新输入',
          type: 'warning'
        });
        return
      }
      this.menuInfo.forEach(item => {
        if (item.children != undefined) {
          item.children.forEach(c => {
            if (c.added) {
              item.selected = true
            }
            if (c.selected) {
              item.selected = true
            }
            if (c.updated) {
              item.selected = true
            }
            if (c.deleted) {
              item.selected = true
            }
          })
        }
      })
      console.log(this.menuInfo);
      this.roleAdd.menuData = JSON.parse(JSON.stringify(this.menuInfo));
      this.roleAdd.menuData.forEach(item => {
        if (item.children != undefined) {
          let child = item.children.filter(c => {
            return c.added == true || c.selected == true || c.deleted == true || c.updated === true
          })
          item.children = child
        }
      })
      this.roleAdd.menuData = this.roleAdd.menuData.filter(item => {
        return item.selected == true
      })
      let res = await addRoleInfo(this.roleAdd);
      if (res.data) {
        this.$message({
          message: '添加角色成功',
          type: 'success'
        });
        this.dialogTableVisible = false
      } else {
        this.$message.error('添加失败!请重新操作');
      }
    },
    assertDml(a, b) {
      a = b ? true : false
      console.log(a);
      return a
    },
    // search(){},
    // reset(){},
@@ -153,6 +280,13 @@
    handleCurrentChange(val) {
      console.log(`当前是第${val}页`)
      this.currentPage = val
    },
    clearAll() {
      this.roleAdd.roleName = null
      this.roleAdd.menuData = null
      this.menuInfo = []
      this.assertRepeatName = true
      this.dialogTableVisible = false
    }
  }
}
src/views/laboratory/role/menuPower.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<template>
    <div>
    </div>
</template>
<script>
export default {
    data() {
        return {
        }
    },
    created() {
    },
    methods: {
    }
}
</script>
<style scoped></style>