119 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
	<div v-if="prompts">
 | 
						|
		<div class="row">
 | 
						|
			<template v-for="item in prompts">
 | 
						|
				<template v-if="(item.hid == '1') || (item.type == 'H')"></template>
 | 
						|
				<div v-else-if="(odslct) && (odslct[item.id]) && (odslct[item.id].items)" class="col-12">
 | 
						|
					<div class="card mb-3">
 | 
						|
						<div class="card-header">{{item.prompt.replace(/\:\s*$/, '')}}</div>
 | 
						|
						<ul class="list-group list-group-flush" style="max-height: 25vh; overflow-y: auto;"><li v-for="item in odslct[item.id].items" class="list-group-item"><input class="form-check-input me-1" type="checkbox" /> {{item}}</li></ul>
 | 
						|
						<div v-if="item.help" class="card-footer form-text">{{item.help}}</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
				<div v-else-if="item.type == 'P'" class="col-12">
 | 
						|
					<div class="card mb-3">
 | 
						|
						<ViewLocationLookup :client="client" :dfn="dfn" :label="item.prompt.replace(/\:\s*$/, '')" />
 | 
						|
						<div v-if="item.help" class="form-text">{{item.help}}</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
				<div v-else-if="item.type == 'Y'" class="col col-12 col-md-6 col-lg-4 col-xl-3">
 | 
						|
					<div class="form-check form-switch mb-3">
 | 
						|
						<input class="form-check-input" type="checkbox" role="switch" v-model="inputs[item.id]" />
 | 
						|
						<label class="form-check-label">{{item.prompt.replace(/\:\s*$/, '')}}</label>
 | 
						|
						<div v-if="item.help" class="form-text">{{item.help}}</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
				<div v-else-if="item.type == 'R'" class="col col-12 col-md-6 col-lg-4 col-xl-3">
 | 
						|
					<div class="mb-3">
 | 
						|
						<label class="form-label">{{item.prompt.replace(/\:\s*$/, '')}}</label>
 | 
						|
						<DateTimePicker dateonly v-model="inputs[item.id]" />
 | 
						|
						<div v-if="item.help" class="form-text">{{item.help}}</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
				<div v-else-if="item.type == 'N'" class="col col-12 col-md-6 col-lg-4 col-xl-3">
 | 
						|
					<div class="form-floating mb-3">
 | 
						|
						<input type="number" class="form-control" :placeholder="item.default || ' '" v-model="inputs[item.id]" />
 | 
						|
						<label>{{item.prompt.replace(/\:\s*$/, '')}}</label>
 | 
						|
						<div v-if="item.help" class="form-text">{{item.help}}</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
				<div v-else-if="item.type == 'W'" class="col-12">
 | 
						|
					<div class="card mb-3" style="background-color: #fdfbd7;">
 | 
						|
						<div class="card-header">{{item.prompt.replace(/\:\s*$/, '')}}</div>
 | 
						|
						<div class="card-body" style="font-family: monospace; white-space: pre;">{{item.detail}}</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
				<div v-else class="col col-12">
 | 
						|
					<div class="form-floating mb-3">
 | 
						|
						<input type="text" class="form-control" :placeholder="item.default || ' '" :disabled="item.type == 'P'" v-model="inputs[item.id]" />
 | 
						|
						<label>{{item.prompt.replace(/\:\s*$/, '')}}</label>
 | 
						|
						<div v-if="item.help" class="form-text">{{item.help}}</div>
 | 
						|
					</div>
 | 
						|
				</div>
 | 
						|
			</template>
 | 
						|
		</div>
 | 
						|
		<div v-if="(odslct) && (odslct.Info) && (odslct.Info.text)" class="card mb-3" style="background-color: #fdfbd7;"><div class="card-body" style="font-family: monospace; white-space: pre;">{{odslct.Info.text}}</div></div>
 | 
						|
		<div class="btn-group mb-3">
 | 
						|
			<button type="button" class="btn btn-primary" @click="e => $emit('submit', output)">Submit</button>
 | 
						|
			<button type="button" class="btn btn-danger" @click="e => $emit('cancel')">Cancel</button>
 | 
						|
		</div>
 | 
						|
	</div>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
	import ViewLocationLookup from './ViewLocationLookup.vue';
 | 
						|
	import DateTimePicker from './DateTimePicker.vue';
 | 
						|
 | 
						|
	export default {
 | 
						|
		components: {
 | 
						|
			ViewLocationLookup, DateTimePicker
 | 
						|
		},
 | 
						|
		props: {
 | 
						|
			client: Object,
 | 
						|
			ien: String,
 | 
						|
			dfn: String,
 | 
						|
			location_ien: String,
 | 
						|
			dlgname: Object,
 | 
						|
			dlgdef: Object,
 | 
						|
			modelValue: Object
 | 
						|
		},
 | 
						|
		emits: [
 | 
						|
			'submit',
 | 
						|
			'cancel',
 | 
						|
			'update:modelValue'
 | 
						|
		],
 | 
						|
		data() {
 | 
						|
			return {
 | 
						|
				prompts: null,
 | 
						|
				inputs: null,
 | 
						|
				odslct: null
 | 
						|
			};
 | 
						|
		},
 | 
						|
		computed: {
 | 
						|
			output() {
 | 
						|
				if((this.dlgdef) && (this.prompts) && (this.inputs)) {
 | 
						|
					return this.dlgdef.reduce((acc, val) => (acc['"' + val.promptIEN + '","1"'] = this.inputs[val.promptID] || this.prompts[val.promptID].idflt, acc), {});
 | 
						|
				}
 | 
						|
			}
 | 
						|
		},
 | 
						|
		created() {
 | 
						|
			this.$watch(
 | 
						|
				() => (this.client, this.ien, this.dlgdef, {}),
 | 
						|
				async () => {
 | 
						|
					var bldqrsp, loadrsp;
 | 
						|
					if((this.client) && (this.ien) && (this.dlgdef) && (bldqrsp = (await this.client.ORWDXM1_BLDQRSP(this.ien, '^^^^^^;;;^^^^', 0, 0))[0])) {
 | 
						|
						this.inputs = this.dlgdef.reduce((acc, val) => (acc[val.promptID] = null, acc), {});
 | 
						|
						this.prompts = await client.ORWDXM_PROMPTS(this.dlgname.BaseDialogIEN);
 | 
						|
						if(this.prompts) Object.assign(this.inputs, this.prompts.reduce((acc, val) => (acc[val.id] = val.default, acc), {}));
 | 
						|
						if((bldqrsp.ResponseID) && (bldqrsp.ResponseID != '0')) {
 | 
						|
							loadrsp = await this.client.ORWDX_LOADRSP(bldqrsp.ResponseID, 0, 0);
 | 
						|
							if(loadrsp) Object.assign(this.inputs, loadrsp.reduce((acc, val) => (acc[val.promptID] = val.iValue, acc), {}));
 | 
						|
						}
 | 
						|
					} else this.prompts = this.inputs = null;
 | 
						|
				},
 | 
						|
				{ immediate: true }
 | 
						|
			);
 | 
						|
		}
 | 
						|
	};
 | 
						|
</script>
 |