qrcode-app/pages/apply/qrcodeMake.vue
wyw 7217872c88 1、添加 信息查看导航 维码生成器 隐患查看 检查查看 风险查看 视频查看
2、按钮点击 添加形参
3、接口 添加   区域选择、检查库、隐患 搜索
4、修改 request  公共方法信息(原来的都写死了)
2025-02-25 16:46:59 +08:00

384 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 二维码生成页面 -->
<view class="content">
<view class="container">
<view class="form-sub">
<u-form :model="model" ref="uForm" label-width="90px" class="demo-ruleForm" size="mini">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">参数信息</view>
<!-- <u-form-item label="生成类型" prop="typeEnumValue" borderBottom>
<u-radio-group v-model="model.typeEnumValue" inputAlign="right" placement="row">
<u-radio style="margin-left: 20px;" v-for="item in model.typeEnum" :name="item.value"
:key="item.value" :label="item.name">
</u-radio>
</u-radio-group>
</u-form-item>
<u-form-item v-if="model.typeEnumValue" label="生成类型" prop="downEnumValue" borderBottom>
<u-radio-group v-model="model.downEnumValue" inputAlign="right" placement="row">
<u-radio style="margin-left: 20px;" v-for="item in model.downEnum" :name="item.value"
:key="item.value" :label="item.name">
</u-radio>
</u-radio-group>
</u-form-item> -->
<u-form-item label="班组名称" prop="DEPARTMENT_NAME" borderBottom ref="item1"
@click="handleShowSheet({title: '班组名称',name:'DEPARTMENT_NAME'})">
<u--input v-model="model.DEPARTMENT_NAME" border="none" suffixIcon="arrow-right"
customStyle="margin:0px;display:flex;padding:3px 9px"
suffixIconStyle="font-size:12px"></u--input>
</u-form-item>
<u-form-item label="岗位名称" prop="POST_NAME" borderBottom ref="item1"
@click="handleShowSheet({title: '岗位名称',name:'POST_NAME'})">
<u--input v-model="model.POST_NAME" border="none" suffixIcon="arrow-right"
customStyle="margin:0px;display:flex;padding:3px 9px"
suffixIconStyle="font-size:12px"></u--input>
</u-form-item>
<u-form-item label="链接(Url)" prop="url" borderBottom @click="showSex = true;" ref="item1">
<u--input v-model="model.Url" disabled disabledColor="#ffffff" placeholder="链接(Url)"
border="none" fontSize="14px"
customStyle="margin:0px;display:flex;padding:3px 9px"></u--input>
</u-form-item>
<u-form-item style="margin-bottom: 30px;">
<u-list key="qb">
<u-list-item v-for=" item in model.listQrCode">
<u--input v-model="item.TITle" style="text-align: center;" disabled border="none"
customStyle="margin:0px;display:flex;padding:3px 9px"
suffixIconStyle="font-size:12px"></u--input>
<image :src="item.qrCode" mode="widthFix" class="qr-code"></image>
</u-list-item>
</u-list>
</u-form-item>
</u-form>
<view style="display: flex;flex-direction: row;" class="bottom-button">
<u-button type="primary" @click="generateQRCode" color="#3d4b70"
style="margin-left: 5px;">生成</u-button>
</view>
<query-selector :show="selectorInfo.showPopup" :defaultChecked="selectorInfo.defaultChecked"
:title="selectorInfo.title" :lists="selectorInfo.dataLists" @search="handleSearch"
@select="handleSelected" @close="selectorInfo.showPopup=false" :total="selectorInfo.totalCount" />
</view>
</view>
</view>
</template>
<script>
import QRCode from 'qrcode';
import {
WorkerScheduling
} from '../../services/apply'
import {
DepartmentOrderPaged,
UserPostOrderPaged,
DepartmentPostEntities
} from '../../services/common'
import {
initFilter,
extendRule
} from '../../utils/common'
import config from '../../config/common'
export default {
data() {
return {
qrCodeSrc: '',
OrgId: '',
sourceUrl: config.uni_app_web_source_url,
model: {
OrgId: '',
DEPARTMENT_ID: '',
POST_ID: '',
Nav_Post: {},
Nav_Department: {},
Url:config.uni_app_web_local_api_url,
listQrCode: [{
TITLE: '',
qrCode: ''
}]
// typeEnum: [{
// value: true,
// name: '组织'
// }, {
// value: false,
// name: '岗位'
// }],
// downEnum: [{
// value: true,
// name: '向下包含'
// }, {
// value: false,
// name: '当前组织'
// }],
// typeEnumValue: true,
// downEnumValue: true,
},
selectorInfo: {
showPopup: false,
totalCount: 0,
title: '组织名称',
// itemData: {},
index: 0,
dataLists: [],
defaultText: '',
defaultValue: '',
name: '',
defaultChecked: []
},
}
},
onLoad(option) {
// this.model.DEPARTMENT_ID = option.DEPARTMENT_ID // 'B18F95F4-572A-E521-1412-FA8CE50DC98A'
this.OrgId = option.OrgId // 'B043B28B-BBC3-C452-6052-4FBA1457ABFA'
},
onReady() {
//如果需要兼容微信小程序并且校验规则中含有方法等只能通过setRules方法设置规则。
// this.$refs.uForm.setRules(this.rules)
},
methods: {
async generateQRCode() {
try {
if (!this.model.DEPARTMENT_ID || this.model.DEPARTMENT_ID.length < 2) {
uni.showToast({
title: '请选择班组!',
icon: 'none'
})
return false
}
var url = this.model.Url + '?OrgId=' + this.OrgId
if (this.model.POST_ID && this.model.POST_ID.length > 2) {
url += '&DEPARTMENT_ID=' + this.model.DEPARTMENT_ID + "&POST_ID=" + this.model.POST_ID
const qrCodeData = await QRCode.toDataURL(url);
this.model.listQrCode = []
this.model.listQrCode.push({
TITle: this.model.Nav_Department.NAME + '' + this.model.Nav_Post.NAME,
qrCode: qrCodeData
})
} else {
const json = initFilter(this.OrgId, null, "NAME");
extendRule(json, "STATUS", 1, 1)
json.IgnoreDataRule = true
json.Keyword = this.model.DEPARTMENT_ID
var listResult = await DepartmentPostEntities(json).then(res => {
// this.selectorInfo.totalCount = res.TotalCount
if (res != undefined && res.Data.length > 0) {
return res.Data
} else {
uni.showToast({
title: '该班组没有有效岗位!',
icon: 'none'
})
}
});
if (listResult && listResult.length > 0) {
this.model.listQrCode = []
for (let i = 0; i < listResult.length; i++) {
var qrCodeData = await QRCode.toDataURL(url + '&DEPARTMENT_ID=' +
this.model.DEPARTMENT_ID + "&POST_ID=" + listResult[i].ID);
this.model.listQrCode.push({
TITle: this.model.Nav_Department.NAME + "" + listResult[i].NAME,
qrCode: qrCodeData
})
}
}
}
} catch (error) {
console.error('生成二维码失败:', error);
}
},
closePicker() {
this.comPickerInfo = {
showSheet: false,
columns: [],
title: '',
name: '',
formIndex: undefined
}
},
//显示组件
handleChange() {
this.selectorInfo.showPopup = true
this.selectorInfo.title = '班组名称'
this.handleSearch()
},
//数据加载
handleSearch(val, pageIndex) {
var p = {
name: this.selectorInfo.name,
title: this.selectorInfo.title,
val: val,
pageIndex: pageIndex
}
this.handleShowSheet(p)
},
async handleShowSheet(p) {
const json = initFilter(this.OrgId, null, "NAME", 0, (p.pageIndex ?? 1));
json.IgnoreDataRule = true
json.Limit = 20
if (p.val) {
extendRule(json, "NAME", 9, p.val)
}
let dataSelect = []
if (p.name == 'DEPARTMENT_NAME') {
extendRule(json, "ENABLE_STATUS", 1, 0)
extendRule(json, "DEPARTMENT_TYPE", 1, 2)
dataSelect = await DepartmentOrderPaged(json).then(res => {
this.selectorInfo.totalCount = res.TotalCount
if (res != undefined && res.Data.length > 0) {
for (let i = 0; i < res.Data.length; i++) {
res.Data[i].name = res.Data[i].NAME
res.Data[i].code = res.Data[i].CODE
}
}
return res.Data
})
} else if (p.name == 'POST_NAME') {
extendRule(json, "STATUS", 1, 1)
if (!this.model.DEPARTMENT_ID || this.model.DEPARTMENT_ID.length < 2) {
uni.showToast({
title: '请选择班组!',
icon: 'none'
})
return false
}
json.Keyword = this.model.DEPARTMENT_ID
dataSelect = await DepartmentPostEntities(json).then(res => {
this.selectorInfo.totalCount = res.TotalCount
if (res != undefined && res.Data.length > 0) {
for (let i = 0; i < res.Data.length; i++) {
res.Data[i].name = res.Data[i].NAME
res.Data[i].code = res.Data[i].CODE
}
} else {
uni.showToast({
title: '该班组没有有效岗位!',
icon: 'none'
})
}
return res.Data
})
}
if (dataSelect.length) {
this.selectorInfo = {
totalCount: this.selectorInfo.totalCount,
showPopup: true,
title: p.title,
name: p.name,
dataLists: dataSelect,
}
} else {
// 暂无数据
}
},
handleSelected(e) {
this.selectorInfo.showPopup = false
if (this.selectorInfo.name == 'DEPARTMENT_NAME') {
this.model.DEPARTMENT_NAME = e.NAME
this.model.DEPARTMENT_ID = e.ID
this.model.Nav_Department = e
this.model.POST_ID = ''
this.model.Nav_Post = {}
this.model.listQrCode = []
} else if (this.selectorInfo.name == 'POST_NAME') {
this.model.POST_NAME = e.NAME
this.model.POST_ID = e.ID
this.model.Nav_Post = e
}
}
}
}
</script>
<style>
.content {
background-color: #f4f7ff;
width: 100%;
/* #ifndef APP-PLUS */
height: calc(100vh - 44px - 50px); // 非APP平台下生效
/* #endif */
/* #ifdef APP-PLUS */
height: calc(100vh); // APP平台下生效
/* #endif */
}
.container {
padding: 20px 16px 10px 16px;
}
.form-sub {
/* margin: 20px 16px 10px 16px; */
/* border: 1px solid #EBEEF5; */
padding: 20px 30px 10px 30px;
/* box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 3px 1px; */
background-color: #ffffff;
border-radius: 10px;
}
.demo-ruleForm>>>.u-form-item__body__left__content__label {
font-size: 14px;
color: #8e8b9c;
/* justify-content: flex-start; */
}
.demo-ruleForm>>>.u-form-item__body__left__content__ {
left: -11px;
top: 0px
}
.demo-ruleForm>>>.u-textarea__field {
font-size: 14px;
}
.demo-ruleForm>>>.u-cell__title-text {
font-size: 14px;
}
.demo-ruleForm-thr>>>.u-textarea {
padding: 9px 9px 25px 9px;
}
.demo-ruleForm-thr>>>.u-form-item__body__left__content__label {
font-size: 14px;
color: #8e8b9c;
/* justify-content: flex-start; */
}
.demo-ruleForm-thr>>>.u-form-item__body__left__content__ {
left: -11px;
top: 0px
}
.demo-ruleForm-thr>>>.u-textarea__field {
font-size: 14px;
}
.demo-ruleForm-thr>>>.u-cell__title-text {
font-size: 14px;
}
.bottom-button {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
padding: 10px 16px;
box-sizing: border-box;
background: #f4f7ff;
z-index: 999;
}
</style>