384 lines
11 KiB
Vue
384 lines
11 KiB
Vue
<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> |