|
@@ -0,0 +1,225 @@
|
|
|
+<template>
|
|
|
+ <div class="query-area"
|
|
|
+ @dragover.prevent=""
|
|
|
+ @dragenter.prevent="handleDragOver($event)"
|
|
|
+ @drop="handleDrop($event)"
|
|
|
+ @dragleave="handleDragleave($event)"
|
|
|
+ >
|
|
|
+ <template v-for="(it, index) in tagList">
|
|
|
+ <div class="query-area-item"
|
|
|
+ :class="((this.index == index?'query-area-item-active':'') + (convertDataType(tagList[index].dataType)==2?' query-area-item-time':''))"
|
|
|
+ draggable="true"
|
|
|
+ @dragstart="childDragstart($event, index)"
|
|
|
+ @dragenter.prevent="childDragEnter($event, index)"
|
|
|
+ @dragleave="childDragleave($event, index)">
|
|
|
+ <div class="query-area-header">
|
|
|
+ <div class="query-area-item-title" @click="handleDisplay(index)">{{it.fieldAlias?it.fieldAlias : it.fieldName}}</div>
|
|
|
+ <div class="query-area-item-close" @click="childDelete(index)"><CloseOutlined style="color: white;"/></div>
|
|
|
+ </div>
|
|
|
+ <template v-for="(op, idx) in tagList[index].values">
|
|
|
+ <div v-if="convertDataType(tagList[index].dataType)==0" class="query-area-body">
|
|
|
+ <div class="query-area-body-oper">
|
|
|
+ <a-select v-model:value="tagList[index].values[idx].operation" :options="operTexts"></a-select>
|
|
|
+ </div>
|
|
|
+ <div class="query-area-body-input">
|
|
|
+ <a-input v-model:value="tagList[index].values[idx].val" placeholder="值..." />
|
|
|
+ </div>
|
|
|
+ <div v-if="false" class="query-area-body-edit">
|
|
|
+ <PlusSquareOutlined v-if="(idx==0)" @click="operationInsert(index, idx)"/>
|
|
|
+ <MinusSquareOutlined v-if="(idx>0)" @click="operationDelete(index, idx)"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="convertDataType(tagList[index].dataType)==1" class="query-area-body">
|
|
|
+ <div class="query-area-body-oper">
|
|
|
+ <a-select v-model:value="tagList[index].values[idx].operation" :options="operNumbers"></a-select>
|
|
|
+ </div>
|
|
|
+ <div class="query-area-body-input">
|
|
|
+ <a-input v-model:value="tagList[index].values[idx].val" placeholder="值..." />
|
|
|
+ </div>
|
|
|
+ <div v-if="tagList[index].values[idx].operation=='limit'" class="query-area-body-text">
|
|
|
+ 到
|
|
|
+ </div>
|
|
|
+ <div v-if="tagList[index].values[idx].operation=='limit'" class="query-area-body-input">
|
|
|
+ <a-input v-model:value="tagList[index].values[idx].val2" placeholder="值..." />
|
|
|
+ </div>
|
|
|
+ <div v-if="false" class="query-area-body-edit">
|
|
|
+ <PlusSquareOutlined v-if="(idx==0)" @click="operationInsert(index, idx)"/>
|
|
|
+ <MinusSquareOutlined v-if="(idx>0)" @click="operationDelete(index, idx)"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="convertDataType(tagList[index].dataType)==2" class="query-area-body">
|
|
|
+ <div class="query-area-body-oper">
|
|
|
+ <a-select v-model:value="tagList[index].values[idx].operation" :options="operTimes"></a-select>
|
|
|
+ </div>
|
|
|
+ <div class="query-area-body-input">
|
|
|
+ <a-range-picker
|
|
|
+ v-if="(tagList[index].values[idx].operation=='datetime')"
|
|
|
+ v-model:value="tagList[index].values[idx].val"
|
|
|
+ :show-time="{ format: 'HH:mm' }"
|
|
|
+ format="YYYY-MM-DD HH:mm"
|
|
|
+ :placeholder="['Start Time', 'End Time']"
|
|
|
+ @change="onRangeChange"
|
|
|
+ @ok="onRangeOk"
|
|
|
+ />
|
|
|
+ <a-range-picker
|
|
|
+ v-if="(tagList[index].values[idx].operation=='date')"
|
|
|
+ v-model:value="tagList[index].values[idx].val"/>
|
|
|
+ </div>
|
|
|
+ <div v-if="false" class="query-area-body-edit">
|
|
|
+ <PlusSquareOutlined v-if="(idx==0)" @click="operationInsert(index, idx)"/>
|
|
|
+ <MinusSquareOutlined v-if="(idx>0)" @click="operationDelete(index, idx)"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <a-modal v-model:visible="modelName.open" title="修改显示名称" @ok="handleDisplayOk">
|
|
|
+ <div style="line-height: 30px;">属性名称:{{modelName.fieldName}}</div>
|
|
|
+ <div>
|
|
|
+ <a-input v-model:value="modelName.fieldAlias"
|
|
|
+ :placeholder="(modelName.fieldName+'...')" />
|
|
|
+ </div>
|
|
|
+ </a-modal>
|
|
|
+</template>
|
|
|
+<script lang="ts">
|
|
|
+ import {defineComponent} from "vue";
|
|
|
+ import DragBase from './drag-base.vue'
|
|
|
+ import type {SelectProps} from 'ant-design-vue';
|
|
|
+ import type { Dayjs } from 'dayjs';
|
|
|
+
|
|
|
+ export default defineComponent({
|
|
|
+ name : 'DragWhere',
|
|
|
+ extends : DragBase,
|
|
|
+ data(){
|
|
|
+ return{
|
|
|
+ operTexts : [
|
|
|
+ { value: '=', label: '等于'},
|
|
|
+ { value: 'like', label: '包含'},
|
|
|
+ { value: 'null', label: '为空'},
|
|
|
+ { value: 'not null', label: '不为空'}
|
|
|
+ ] as SelectProps['options'],
|
|
|
+ operTimes : [
|
|
|
+ { value: 'date', label: '日期'},
|
|
|
+ { value: 'datetime', label: '日期时间'}
|
|
|
+ ] as SelectProps['options'],
|
|
|
+ operNumbers : [
|
|
|
+ { value: '>', label: '大于'},
|
|
|
+ { value: '>=', label: '大于等于'},
|
|
|
+ { value: '=', label: '等于'},
|
|
|
+ { value: '<', label: '小于'},
|
|
|
+ { value: '<=', label: '小于等于'},
|
|
|
+ { value: 'limit', label: '区间'}
|
|
|
+ ] as SelectProps['options'],
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setup(props, context){
|
|
|
+ console.log("measure setup" , props);
|
|
|
+ const dataChange = (obj) => {
|
|
|
+ context.emit('change', obj)
|
|
|
+ }
|
|
|
+
|
|
|
+ return{
|
|
|
+ queryType: props.queryType ? props.queryType : 'dimen',
|
|
|
+ keyName : props.keyName == null || props.keyName == undefined ? 'tempFeildId' : props.keyName,
|
|
|
+ dataChange
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods:{
|
|
|
+ getObject:function (data){
|
|
|
+ data.dataType = 'int';
|
|
|
+ return {
|
|
|
+ tempFeildId : data.tempFeildId,
|
|
|
+ fieldId : data.fieldId,
|
|
|
+ fieldName: data.fieldName,
|
|
|
+ isDrag : 1,
|
|
|
+ dataType : data.dataType,
|
|
|
+ fieldAlias: data.fieldAlias ? data.fieldAlias : null,
|
|
|
+ values : data.values ? data.values :
|
|
|
+ [{ operation : (this.convertDataType(data.dataType)==2?'date':'='), val :'', val2 : '' }]
|
|
|
+ };
|
|
|
+ },
|
|
|
+ operationInsert(index){
|
|
|
+ this.tagList[index].values.push({ operation : '=', val :'' });
|
|
|
+ },
|
|
|
+ operationDelete(index, idx){
|
|
|
+ this.tagList[index].values.splice(idx, 1);
|
|
|
+ },
|
|
|
+ convertDataType(typeStr){
|
|
|
+ if(["char","varchar","text"].indexOf(typeStr)>=0) return 0;
|
|
|
+ if(["int","bigint","decimal"].indexOf(typeStr)>=0) return 1;
|
|
|
+ if(["dtime"].indexOf(typeStr)>=0) return 2;
|
|
|
+ },
|
|
|
+ onRangeChange(value: [Dayjs, Dayjs], dateString: [string, string]) {
|
|
|
+ console.log('Selected Time: ', value);
|
|
|
+ console.log('Formatted Selected Time: ', dateString);
|
|
|
+ },
|
|
|
+ getTagList(){
|
|
|
+ this.tagList.forEach((row, index)=>{
|
|
|
+ row.disOrder = index;
|
|
|
+ row.operation = row.values[0].operation;
|
|
|
+ if(this.convertDataType(row.dataType)==2){
|
|
|
+ let formatString = "YYYY-MM-DD";
|
|
|
+ if(row.values[0].operation=="datetime") formatString="YYYY-MM-DD HH:mm:ss";
|
|
|
+
|
|
|
+ if(row.values[0].val && row.values[0].val.length>0 && row.values[0].val[0]){
|
|
|
+ row.value1 = row.values[0].val[0].toDate().getTime();
|
|
|
+ row.valueStr1 = row.values[0].val[0].format(formatString);
|
|
|
+ }
|
|
|
+ if(row.values[0].val && row.values[0].val.length>1 && row.values[0].val[1]) {
|
|
|
+ row.value2 = row.values[0].val[1].toDate().getTime();
|
|
|
+ row.valueStr2 = row.values[0].val[1].format(formatString);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ row.value1 = row.values[0].val;
|
|
|
+ row.value2 = row.values[0].val2;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return this.tagList;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+</script>
|
|
|
+<style lang="less" scoped>
|
|
|
+ @import 'drag-base.less';
|
|
|
+ .query-area-header{
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ }
|
|
|
+ .query-area-header .query-area-item-title{
|
|
|
+ flex-grow: 1;
|
|
|
+ }
|
|
|
+ .query-area-body{
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ margin-bottom: 5px;
|
|
|
+ }
|
|
|
+ .query-area-body-oper{
|
|
|
+ width: 100px;
|
|
|
+ }
|
|
|
+ .query-area-body-input{
|
|
|
+ flex-grow: 1;
|
|
|
+ }
|
|
|
+ .query-area-item{
|
|
|
+ width: 280px !important;
|
|
|
+ }
|
|
|
+ .query-area-item-time{
|
|
|
+ width: 380px !important;
|
|
|
+ }
|
|
|
+ .query-area-body-edit{
|
|
|
+ font-size: 18px;
|
|
|
+ padding-left: 5px;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ .query-area-body-text{
|
|
|
+ height: 30px;
|
|
|
+ line-height: 30px;
|
|
|
+ padding-left: 5px;
|
|
|
+ padding-right: 5px;
|
|
|
+ margin-top: 1px;
|
|
|
+ }
|
|
|
+</style>
|