| | |
| | | <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"> |
| | |
| | | <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"> |
| | |
| | | <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) { |
| | |
| | | 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" |
| | |
| | | // 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] |
| | |
| | | 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' |
| | |
| | | { 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" }],
|
| | | },
|
| | |
| | | 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();
|
| | | }
|
| | |
| | | }
|
| | | 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) {
|