沈丘营商办后台前端项目
wjt
2024-06-25 17b1c347ea9c6d3efd566b62bcaf7b3aa07dfa54
二维码修改
4个文件已修改
76 ■■■■ 已修改文件
src/views/index/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/companymanger/components/createQrcode.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/companymanger/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index/index.vue
@@ -6,11 +6,11 @@
        <div>入驻企业总数</div>
      </div>
      <div class="box">
        <div>{{dataInfo.enforceOrderCheckedNum|| 0}}</div>
        <div>{{dataInfo.enforceCompanyNum|| 0}}</div>
        <div>已检查企业数</div>
      </div>
      <div class="box">
        <div>{{dataInfo.enforceCompanyNum|| 0}}</div>
        <div>{{dataInfo.enforceDeptNum|| 0}}</div>
        <div>执法单位数</div>
      </div>
      <div class="box">
@@ -18,11 +18,11 @@
        <div>执法人员数</div>
      </div>
      <div class="box">
        <div>{{dataInfo.enforceOrderNum|| 0}}</div>
        <div>{{dataInfo.enforce0rderNum|| 0}}</div>
        <div>执法记录总数</div>
      </div>
      <div class="box">
        <div>{{dataInfo.enforceOrderCompleteNum|| 0}}</div>
        <div>{{dataInfo.complaintNum|| 0}}</div>
        <div>投诉记录数</div>
      </div>
      <div class="box">
src/views/infomanger/companymanger/components/createQrcode.vue
@@ -1,18 +1,20 @@
<template>
  <el-dialog title="二维码"  v-model="dialogVisible" width="300px" @close="closeDialog"> 
    <div class="text-center">
      <vueQr ref="query" :text="info.companyCode"></vueQr>
      <vueQr ref="query" background="#fff" :text="info.companyCode"></vueQr>
      <div>{{ info.companyName }}</div>
      <div style="margin-top: 10px;">
        <el-link @click="downImage" type="primary">下载企业码</el-link>
      </div>
    </div>
    <canvas ref="canvasRef" style="position: absolute; left: 0; top: 2210px;background-color: white;"></canvas>
  </el-dialog>
</template>
<script lang="ts" setup>
import vueQr from 'vue-qr/src/packages/vue-qr.vue'
let dialogVisible = ref(false)
const canvasRef = ref()
const info = ref({})
const query = ref()
function openDialog(row) {
@@ -24,9 +26,11 @@
  dialogVisible.value = false
}
function downImage() {
  drawText()
 const imageUrl = canvasRef.value.toDataURL('image/png')
  // console.log(query.value.imgUrl)
  let aLink = document.createElement('a')
      let blob = base64ToBlob(query.value.imgUrl)
      let blob = base64ToBlob(imageUrl)
      let evt = document.createEvent("HTMLEvents")
      evt.initEvent("click", true, true) // initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
      aLink.download = "二维码.png"
@@ -34,6 +38,45 @@
      // aLink.dispatchEvent(evt);
      aLink.click()
}
function drawText() {
      const canvas = canvasRef.value;
      canvas.width = 350;
      canvas.height = 350;
      canvas.style.width = '350px';
      canvas.style.height = '350px';
      const ctx = canvas.getContext('2d');
      ctx.fillStyle  = "#fff"
      ctx.fillRect(0, 0, canvas.width, canvas.height);
      let img = new Image();
      img.src = query.value.imgUrl;
      const text = info.value.companyName;
      ctx.drawImage(img, 10, 0, 320, 320);
      ctx.font = '20px Arial';
      ctx.textAlign = 'center';
      ctx.fillStyle = '#000';
      wrapText(ctx, text, 180, 320, 350, 20)
    }
    function wrapText(context, text, x, y, maxWidth, lineHeight) {
    var words = text.split('');
    var line = '';
    for(var n = 0; n < words.length; n++) {
        var testLine = line + words[n] + ' ';
        var metrics = context.measureText(testLine);
        var testWidth = metrics.width;
        if (testWidth > maxWidth && n > 0) {
            context.fillText(line, x, y);
            line = words[n] + ' ';
            y += lineHeight;
        }
        else {
            line = testLine;
        }
    }
    if(line) {
      context.fillText(line, x, y);
    }
}
function   base64ToBlob(code) {
      let parts = code.split(';base64,')
      let contentType = parts[0].split(':')[1]
src/views/infomanger/companymanger/index.vue
@@ -139,7 +139,7 @@
import exportRecord from './components/exportRecord'
import createQrcode from './components/createQrcode'
import judgeCom from './components/judge'
import { listCompany,addCompany, updStatus, delCompany } from "@/api/system/company/company";
import { listCompany,addCompany, updStatus, delCompany, updateCompany } from "@/api/system/company/company";
import exportExcelCom from './components/export'
import { computed } from "vue";
import { judgeStatus, companyStatus, scopeList } from '@/utils/mapList/index.ts'
src/views/system/user/index.vue
@@ -316,11 +316,12 @@
      { required: true, message: "用户名称不能为空", trigger: "blur" },
      { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" },
    ],
    deptId: [{ required: true, message: "部门不能为空", trigger: "blur" }],
    nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
    password: [
      { required: true, message: "用户密码不能为空", trigger: "blur" },
      { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" },
    ],
    // password: [
    //   { required: true, message: "用户密码不能为空", trigger: "blur" },
    //   { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" },
    // ],
    email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
    phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
  },
@@ -379,7 +380,8 @@
function resetQuery() {
  dateRange.value = [];
  proxy.resetForm("queryRef");
  queryParams.value.deptId = undefined;
  // queryParams.value.deptId = undefined;
  queryParams.value.deptId = deptOptions.value[0].id;
  proxy.$refs.deptTreeRef.setCurrentKey(null);
  handleQuery();
}
@@ -605,6 +607,13 @@
}
function batchUserDeptTreeHttp(deptId) {
  batchUserDeptTree({deptId}).then(val => {
    if(val.data.deptId == deptId) {
      val.data.disabled = true
      val.data.child.forEach(item => {
      item.disabled = true
    })
    }
    val.data.child.forEach(item => {
      // item.disabled = true
      if(item.deptId == deptId) {