Pārlūkot izejas kodu

自助检索修改

xiaoqiao 1 gadu atpakaļ
vecāks
revīzija
81eb6d5e00

+ 9 - 4
src/main/java/com/bowintek/practice/controller/TempController.java

@@ -24,6 +24,7 @@ import com.bowintek.practice.vo.temp.TempObjectModel;
 import com.bowintek.practice.vo.user.UserInfoModel;
 import com.github.pagehelper.PageInfo;
 import lombok.Data;
+import org.apache.poi.hpsf.GUID;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -67,8 +68,12 @@ public class TempController {
     }
 
     @GetMapping("get")
-    public BaseResponse<RoleModel> get(String tempId) {
-        return RespGenerstor.success(tempService.getTemp(tempId));
+    public BaseResponse<RoleModel> get(String tempId, Integer isCopy) {
+        TempObjectModel temp = tempService.getTemp(tempId);
+        if (isCopy != null && isCopy == 1) {
+            temp.getTemp().setTempId("");
+        }
+        return RespGenerstor.success(temp);
     }
 
     @GetMapping("getExcel")
@@ -157,7 +162,7 @@ public class TempController {
     }
 
     @GetMapping("/getSubjectFieldList")
-    public BaseResponse<List<HashMap<String, Object>>> getSubjectFieldList(String subId,String tagId,Integer fixedType) {
-        return RespGenerstor.success(tempService.getSubjectFieldList(subId,tagId,fixedType));
+    public BaseResponse<List<HashMap<String, Object>>> getSubjectFieldList(String subId, String tagId, Integer fixedType) {
+        return RespGenerstor.success(tempService.getSubjectFieldList(subId, tagId, fixedType));
     }
 }

+ 1 - 1
src/main/java/com/bowintek/practice/services/impl/TempServiceImpl.java

@@ -205,7 +205,7 @@ public class TempServiceImpl implements TempService {
         //保存模板主表
         if (data.temp.getTempId().isEmpty()) {
             rtn.tempId = UUID.randomUUID().toString();
-            data.temp.setTempId(UUID.randomUUID().toString());
+            data.temp.setTempId(rtn.tempId);
             data.temp.setCreateTime(new Date());
             data.temp.setCreatedBy(userID);
             data.temp.setStatus(0);

+ 35 - 0
src/main/resources/META-INF/MANIFEST.MF

@@ -1,3 +1,38 @@
 Manifest-Version: 1.0
 Main-Class: com.bowintek.practice.PracticeApplication
+Class-Path: HikariCP-4.0.3.jar jackson-annotations-2.13.3.jar jul-to-slf
+ 4j-1.7.36.jar netty-codec-4.1.79.Final.jar aspectjweaver-1.9.7.jar tomc
+ at-embed-el-9.0.65.jar tomcat-embed-core-9.0.65.jar commons-beanutils-1
+ .9.4.jar logback-core-1.2.11.jar commons-collections-3.2.2.jar poi-scra
+ tchpad-4.0.0.jar spring-data-keyvalue-2.7.2.jar spring-oxm-5.3.22.jar s
+ pring-boot-devtools-2.7.2.jar poi-4.0.0.jar commons-compress-1.18.jar h
+ ttpcore-4.4.15.jar reactor-core-3.4.21.jar spring-boot-autoconfigure-2.
+ 7.2.jar pagehelper-spring-boot-autoconfigure-1.4.3.jar mybatis-3.5.9.ja
+ r lombok-1.18.20.jar commons-collections4-4.2.jar checker-qual-3.5.0.ja
+ r spring-boot-starter-2.7.2.jar jackson-datatype-jdk8-2.13.3.jar mybati
+ s-spring-boot-autoconfigure-2.2.2.jar spring-tx-5.3.22.jar lettuce-core
+ -6.1.9.RELEASE.jar spring-jcl-5.3.22.jar jsqlparser-4.2.jar jackson-mod
+ ule-parameter-names-2.13.3.jar spring-boot-2.7.2.jar mybatis-spring-boo
+ t-starter-2.2.2.jar commons-net-3.6.jar spring-context-5.3.22.jar netty
+ -common-4.1.79.Final.jar fastjson-1.2.47.jar json-20190722.jar spring-w
+ ebmvc-5.3.22.jar spring-data-commons-2.7.2.jar jackson-core-2.13.3.jar 
+ netty-handler-4.1.79.Final.jar mybatis-spring-2.0.7.jar xmlbeans-3.0.1.
+ jar jackson-datatype-jsr310-2.13.3.jar commons-pool2-2.11.1.jar java-jw
+ t-3.9.0.jar httpclient-4.5.9.jar spring-boot-starter-json-2.7.2.jar spr
+ ing-context-support-5.3.22.jar netty-buffer-4.1.79.Final.jar jakarta.an
+ notation-api-1.3.5.jar spring-beans-5.3.22.jar netty-transport-4.1.79.F
+ inal.jar druid-spring-boot-starter-1.2.11.jar commons-codec-1.15.jar sp
+ ring-boot-starter-data-redis-2.7.2.jar poi-ooxml-schemas-4.0.0.jar mysq
+ l-connector-java-8.0.29.jar tomcat-embed-websocket-9.0.65.jar druid-1.2
+ .11.jar spring-web-5.3.22.jar commons-lang3-3.5.jar spring-data-redis-2
+ .7.2.jar aspectjrt-1.9.7.jar poi-ooxml-4.0.0.jar spring-boot-starter-lo
+ gging-2.7.2.jar jackson-databind-2.13.3.jar postgresql-42.3.6.jar netty
+ -transport-native-unix-common-4.1.79.Final.jar spring-jdbc-5.3.22.jar s
+ pring-boot-starter-web-2.7.2.jar spring-core-5.3.22.jar commons-logging
+ -1.2.jar spring-expression-5.3.22.jar aspose-words-15.8.0-jdk16.jar spr
+ ing-aop-5.3.22.jar pagehelper-5.3.1.jar spring-boot-starter-tomcat-2.7.
+ 2.jar logback-classic-1.2.11.jar spring-boot-starter-jdbc-2.7.2.jar net
+ ty-resolver-4.1.79.Final.jar log4j-api-2.17.2.jar reactive-streams-1.0.
+ 4.jar log4j-to-slf4j-2.17.2.jar pagehelper-spring-boot-starter-1.4.3.ja
+ r slf4j-api-1.7.36.jar snakeyaml-1.30.jar curvesapi-1.04.jar
 

+ 35 - 0
target/classes/META-INF/MANIFEST.MF

@@ -1,3 +1,38 @@
 Manifest-Version: 1.0
 Main-Class: com.bowintek.practice.PracticeApplication
+Class-Path: HikariCP-4.0.3.jar jackson-annotations-2.13.3.jar jul-to-slf
+ 4j-1.7.36.jar netty-codec-4.1.79.Final.jar aspectjweaver-1.9.7.jar tomc
+ at-embed-el-9.0.65.jar tomcat-embed-core-9.0.65.jar commons-beanutils-1
+ .9.4.jar logback-core-1.2.11.jar commons-collections-3.2.2.jar poi-scra
+ tchpad-4.0.0.jar spring-data-keyvalue-2.7.2.jar spring-oxm-5.3.22.jar s
+ pring-boot-devtools-2.7.2.jar poi-4.0.0.jar commons-compress-1.18.jar h
+ ttpcore-4.4.15.jar reactor-core-3.4.21.jar spring-boot-autoconfigure-2.
+ 7.2.jar pagehelper-spring-boot-autoconfigure-1.4.3.jar mybatis-3.5.9.ja
+ r lombok-1.18.20.jar commons-collections4-4.2.jar checker-qual-3.5.0.ja
+ r spring-boot-starter-2.7.2.jar jackson-datatype-jdk8-2.13.3.jar mybati
+ s-spring-boot-autoconfigure-2.2.2.jar spring-tx-5.3.22.jar lettuce-core
+ -6.1.9.RELEASE.jar spring-jcl-5.3.22.jar jsqlparser-4.2.jar jackson-mod
+ ule-parameter-names-2.13.3.jar spring-boot-2.7.2.jar mybatis-spring-boo
+ t-starter-2.2.2.jar commons-net-3.6.jar spring-context-5.3.22.jar netty
+ -common-4.1.79.Final.jar fastjson-1.2.47.jar json-20190722.jar spring-w
+ ebmvc-5.3.22.jar spring-data-commons-2.7.2.jar jackson-core-2.13.3.jar 
+ netty-handler-4.1.79.Final.jar mybatis-spring-2.0.7.jar xmlbeans-3.0.1.
+ jar jackson-datatype-jsr310-2.13.3.jar commons-pool2-2.11.1.jar java-jw
+ t-3.9.0.jar httpclient-4.5.9.jar spring-boot-starter-json-2.7.2.jar spr
+ ing-context-support-5.3.22.jar netty-buffer-4.1.79.Final.jar jakarta.an
+ notation-api-1.3.5.jar spring-beans-5.3.22.jar netty-transport-4.1.79.F
+ inal.jar druid-spring-boot-starter-1.2.11.jar commons-codec-1.15.jar sp
+ ring-boot-starter-data-redis-2.7.2.jar poi-ooxml-schemas-4.0.0.jar mysq
+ l-connector-java-8.0.29.jar tomcat-embed-websocket-9.0.65.jar druid-1.2
+ .11.jar spring-web-5.3.22.jar commons-lang3-3.5.jar spring-data-redis-2
+ .7.2.jar aspectjrt-1.9.7.jar poi-ooxml-4.0.0.jar spring-boot-starter-lo
+ gging-2.7.2.jar jackson-databind-2.13.3.jar postgresql-42.3.6.jar netty
+ -transport-native-unix-common-4.1.79.Final.jar spring-jdbc-5.3.22.jar s
+ pring-boot-starter-web-2.7.2.jar spring-core-5.3.22.jar commons-logging
+ -1.2.jar spring-expression-5.3.22.jar aspose-words-15.8.0-jdk16.jar spr
+ ing-aop-5.3.22.jar pagehelper-5.3.1.jar spring-boot-starter-tomcat-2.7.
+ 2.jar logback-classic-1.2.11.jar spring-boot-starter-jdbc-2.7.2.jar net
+ ty-resolver-4.1.79.Final.jar log4j-api-2.17.2.jar reactive-streams-1.0.
+ 4.jar log4j-to-slf4j-2.17.2.jar pagehelper-spring-boot-starter-1.4.3.ja
+ r slf4j-api-1.7.36.jar snakeyaml-1.30.jar curvesapi-1.04.jar
 

+ 1 - 1
vue/public/appconfig.json

@@ -1,4 +1,4 @@
 {
-  "isDev": false,
+  "isDev": true,
   "SSOLoginUrl": "http://www.baidu.com"
 }

+ 1 - 1
vue/src/components/basic/query/drag-base.less

@@ -7,7 +7,7 @@
 .query-area-item{
   display: inline-block;
   padding: 1px 5px 1px 5px;
-  background-color: #8DC6F9;
+  background-color: #FFFFFF;
   border-radius: 3px;
   margin-right: 10px;
   margin-top: 5px;

+ 106 - 81
vue/src/components/basic/query/drag-where.vue

@@ -3,97 +3,98 @@
     <template v-for="(it, index) in tagList">
       <div class="query-area-item"
            :class="((this.index == index?'query-area-item-active':'') + (convertDataType(tagList[index])==2?' query-area-item-time':''))"
-     >
+      >
         <div class="query-area-header">
           <div class="query-area-item-title">
-            {{ it.displayName ? it.displayName : it.fieldName }}
+            {{ it.displayName ? it.displayName : it.fieldName }}
           </div>
-          <div class="query-area-item-close" @click="childDelete(index)" v-show="it.isFixed!=1">
-            <CloseOutlined style="color: white;"/>
-          </div>
-        </div>
-        <template v-for="(op, idx) in tagList[index].values">
-          <div v-if="convertDataType(tagList[index])==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)"/>
+          <template v-for="(op, idx) in tagList[index].values">
+            <div v-if="convertDataType(tagList[index])==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>
 
-          <div v-if="convertDataType(tagList[index])==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 v-if="convertDataType(tagList[index])==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="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])==2" class="query-area-body">
-            <div
-              :class="(getIsTimeLimit(tagList[index].values[idx].operation)?'query-area-body-oper':'query-area-body-time')">
-              <a-select v-model:value="tagList[index].values[idx].operation" :options="operTimes"></a-select>
+            <div v-if="convertDataType(tagList[index])==2" class="query-area-body">
+              <div
+                :class="(getIsTimeLimit(tagList[index].values[idx].operation)?'query-area-body-oper':'query-area-body-time')">
+                <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-else-if="(tagList[index].values[idx].operation=='date')"
+                  v-model:value="tagList[index].values[idx].val2"/>
+                <a-date-picker
+                  v-else-if="(getTimeType(tagList[index].values[idx].operation)=='datetime')"
+                  v-model:value="tagList[index].values[idx].val2"
+                  :show-time="{ format: 'HH:mm' }"
+                  placeholder="日期时间..."
+                  format="YYYY-MM-DD HH:mm"/>
+                <a-date-picker
+                  v-else-if="(getTimeType(tagList[index].values[idx].operation)=='date')"
+                  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 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-else-if="(tagList[index].values[idx].operation=='date')"
-                v-model:value="tagList[index].values[idx].val2"/>
-              <a-date-picker
-                v-else-if="(getTimeType(tagList[index].values[idx].operation)=='datetime')"
-                v-model:value="tagList[index].values[idx].val2"
-                :show-time="{ format: 'HH:mm' }"
-                placeholder="日期时间..."
-                format="YYYY-MM-DD HH:mm"/>
-              <a-date-picker
-                v-else-if="(getTimeType(tagList[index].values[idx].operation)=='date')"
-                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])==3" class="query-area-body">
-            <div class="query-area-body-oper">
-              <a-select v-model:value="tagList[index].values[idx].operation" :options="operDics"></a-select>
-            </div>
-            <div class="query-area-body-input">
-              <a-select v-model:value="tagList[index].values[idx].val"
-                        :options="(dics[tagList[index].dictionaryCode])"></a-select>
-            </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 v-if="convertDataType(tagList[index])==3" class="query-area-body">
+              <div class="query-area-body-oper">
+                <a-select v-model:value="tagList[index].values[idx].operation" :options="operDics"></a-select>
+              </div>
+              <div class="query-area-body-input">
+                <a-select v-model:value="tagList[index].values[idx].val"
+                          :options="(dics[tagList[index].dictionaryCode])"></a-select>
+              </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 class="query-area-item-close" @click="childDelete(index)" v-show="it.isFixed!=1">
+            <CloseOutlined style="color: white;"/>
           </div>
-        </template>
+        </div>
       </div>
     </template>
   </div>
@@ -242,6 +243,9 @@ export default defineComponent({
     },
     setTagList(list) {
       list.forEach((row) => {
+        if (row.operation == undefined) {
+          row.operation = this.getDefaultSelect(row.operation, row.queryType);
+        }
         row.values = [{operation: row.operation, val: row.value1, val2: row.value2}];
 
         if (this.convertDataType(row) == 2) {
@@ -289,6 +293,27 @@ export default defineComponent({
       }
       console.log("dicCode", dicCode, this.dics);
       return this.dics[dicCode];
+    },
+    getDefaultSelect: function (operation, queryType) {
+      let options: SelectProps['options'] | undefined = [];
+      switch (queryType - 1) {
+        case 0:
+          options = this.operTexts;
+          break;
+        case 1:
+          options = this.operNumbers;
+          break;
+        case 2:
+          options = this.operTimes != null ? this.operTimes[0].options : [];
+          break;
+        case 3:
+          options = this.operDics;
+          break;
+      }
+      if (operation == undefined && options != undefined) {
+        operation = options[0].value;
+      }
+      return operation;
     }
   }
 })
@@ -324,7 +349,7 @@ export default defineComponent({
 }
 
 .query-area-item {
-  width: 280px !important;
+  /*width: 280px !important;*/
 }
 
 .query-area-item-time {

+ 5 - 6
vue/src/components/basic/query/select-column.vue

@@ -79,7 +79,7 @@ export default defineComponent({
       })
 
       fieldList.value = result;
-      setFexidColumn();
+      setFixedColumn();
       basesListChange();
       measuresListChange();
     }
@@ -95,13 +95,13 @@ export default defineComponent({
     );
     watch(
       () => props.options.basesList,
-      () => basesListChange, {deep: true}
+      () => basesListChange(), {deep: true}
     );
     watch(
       () => props.options.basesList,
-      () => measuresListChange, {deep: true}
+      () => measuresListChange(), {deep: true}
     );
-    const setFexidColumn = () => {
+    const setFixedColumn = () => {
       state.checkedList = fieldList.value.filter(x => x.isFixed == 1).map(x => x.fieldId);
       changeColumn();
     }
@@ -128,9 +128,8 @@ export default defineComponent({
       it.operation = e.key;
       if (state.checkedList.findIndex(ck => ck == it.fieldId) < 0) {
         state.checkedList.push(it.fieldId);
-      } else {
-        changeColumn();
       }
+      changeColumn();
     }
     const onCheckAllChange = (e) => {
       let ckList = fieldList.value.map(it => it.fieldId);

+ 5 - 5
vue/src/components/basic/query/select-field.vue

@@ -57,6 +57,9 @@ export default defineComponent({
 
       fieldList.value = result;
       changeList();
+      fieldList.value.filter(x => x.isFixed == 1).forEach(x => x.checked = true);
+      let selectList =  fieldList.value.filter(x => x.checked);
+      emit('ok', selectList);
     }
     watch(
       () => props.subId,
@@ -69,7 +72,7 @@ export default defineComponent({
     );
     watch(
       () => props.options.tagList,
-      () => changeList, {deep: true}
+      () => changeList(), {deep: true}
     );
     //已选择字段变化时
     const changeList = () => {
@@ -80,12 +83,9 @@ export default defineComponent({
           it.value1 = select.value1;
           it.value2 = select.value2;
           it.operation = select.operation;
-          it.fieldAlias =select.fieldAlias;
+          it.fieldAlias = select.fieldAlias;
         }
       })
-      fieldList.value.filter(x => x.isFixed == 1).forEach(x => x.checked = true);
-      let selectList = Object.assign(fieldList.value.filter(x => x.checked));
-      emit('ok', selectList);
     }
     const search = () => {
       if (searchKey.value == undefined) {

+ 1 - 1
vue/src/layout/index.vue

@@ -46,7 +46,7 @@ import PageFooter from './footer';
 import {useThemeStore} from '@/store/modules/projectConfig';
 
 const themeStore = useThemeStore();
-const collapsed = ref<boolean>(false);
+const collapsed = ref<boolean>(true);
 // 自定义侧边栏菜单收缩和展开时的宽度
 const asiderWidth = computed(() => (collapsed.value ? 80 : 220));
 //const getTheme = computed(() => (themeStore.navTheme === 'light' ? 'light' : 'dark'));

+ 14 - 7
vue/src/views/query/index.vue

@@ -175,7 +175,7 @@ export default defineComponent({
     const selectOptions = ref({visible: false, tagList: []});
     const onSelectField = () => {
       selectOptions.value.visible = true;
-      selectOptions.value.tagList = Object.assign((where.value as any).getTagList());
+      selectOptions.value.tagList = Object.assign([],(where.value as any).getTagList());
     }
     const selectOk = (fieldList) => {
       console.log(fieldList);
@@ -193,7 +193,7 @@ export default defineComponent({
     const subjectTrees = ref({
       data: [] as TreeProps['treeData'],
       expandedKeys: [''],
-      selectedKeys:[''],
+      selectedKeys: [''],
       searchStr: ''
     });
 
@@ -283,6 +283,7 @@ export default defineComponent({
         (displayChartBar.value as any).setData(result);
         (displayChartLine.value as any).setData(result);
         (displayChartYbar.value as any).setData(result);
+
         loading.value = false;
       });
     }
@@ -310,11 +311,16 @@ export default defineComponent({
       if (selected && selectedNodes.node.parent != undefined) {
         formState.value.temp.subId = selectedNodes.node.subId;
         formState.value.temp.tagId = subjectTrees.value.expandedKeys[0];
-        subjectTrees.value.selectedKeys=[selectedNodes.node.subId];
+        subjectTrees.value.selectedKeys = [selectedNodes.node.subId];
+        showTree.value = false;
+        formState.value.sub.subjectName=selectedNodes.node.subjectName;
+      }
+      if (selectedNodes.node.parent == undefined) {
+        subjectTrees.value.expandedKeys = [selectedNodes.node.key];
       }
     }
-    const getTemp = async function (tempId) {
-      const rtn = await get('temp/get', {tempId: tempId});
+    const getTemp = async function (tempId,isCopy?) {
+      const rtn = await get('temp/get', {tempId: tempId,isCopy:isCopy});
       console.log(rtn);
       formState.value.temp = rtn.temp;
       formState.value.sub = rtn.sub;
@@ -322,13 +328,14 @@ export default defineComponent({
       formState.value.wheres = rtn.wheres;
       formState.value.measures = rtn.measures;
 
+      showTree.value=false;
       setTimeout(displayReader, 100);
 
       (where.value as any).setTagList(rtn.wheres);
 
       selectColumnOptions.value.basesList = rtn.bases;
       selectColumnOptions.value.measuresList = rtn.measures;
-      selectOptions.value.tagList=rtn.wheres;
+      selectOptions.value.tagList = rtn.wheres;
 
       subjectTrees.value.expandedKeys = [];
       subjectTrees.value.expandedKeys.push(rtn.temp.tagId);
@@ -386,7 +393,7 @@ export default defineComponent({
   created() {
     if (history.state.params?.tempId) {
       console.log("created", history.state.params?.tempId);
-      this.getTemp(history.state.params?.tempId);
+      this.getTemp(history.state.params?.tempId,history.state.params?.iscopy);
     }
   },
   activated() {

+ 23 - 5
vue/src/views/query/table.vue

@@ -72,13 +72,14 @@
                 <a-button type="link" @click="edit(item.tempId)">查看详情</a-button>
               </template>
               <template class="ant-card-actions" #actions>
-                <FormOutlined key="edit" @click="edit(item.tempId)"/>
+                <FormOutlined key="edit" @click="edit(item.tempId)" title="编辑"/>
                 <a-popconfirm placement="leftTop"
                               title="是否删除数据?"
                               @confirm="deleteSingle(item.tempId)">
-                  <DeleteOutlined key="ellipsis"/>
+                  <DeleteOutlined key="ellipsis" title="删除"/>
                 </a-popconfirm>
-                <CloudDownloadOutlined key="edit" @click="down(item.tempId)"/>
+                <CloudDownloadOutlined key="edit" @click="down(item.tempId)" title="申请下载"/>
+                <CopyOutlined  key="copy" @click="copy(item.tempId)" title="拷贝"/>
               </template>
               <a-popover title="详细信息" :visible="item.visible">
                 <template #content>
@@ -114,6 +115,20 @@
         <template #bodyCell="{ column,record }">
           <template v-if="column.key === 'operation'">
             <a-button type="link" size="small" @click="edit(record.tempId)">编辑</a-button>
+            <a-button type="link" size="small" @click="down(record.tempId)">申请下载</a-button>
+            <a-popover  trigger="hover" placement="left">
+              <template #content>
+                <a-button type="link" size="small" @click="copy(record.tempId)">复制模板</a-button><br/>
+                <a-button type="link" size="small" @click="edit(record.tempId)">查看详情</a-button><br/>
+                <a-popconfirm placement="leftTop"
+                              title="是否删除数据?"
+                              @confirm="deleteSingle(record.tempId)">
+                  <a-button type="link" size="small">删除</a-button>
+                </a-popconfirm>
+              </template>
+              <a-button type="link" size="small">更多</a-button>
+            </a-popover>
+
           </template>
         </template>
       </a-table>
@@ -175,7 +190,7 @@ export default defineComponent({
           record.status == 0 ? "正常" : "禁用"
       },
       {title: '备注', dataIndex: 'remark', key: '4', ellipsis: true},
-      {title: '操作', key: 'operation', width: 120, align: "center"},
+      {title: '操作', key: 'operation', width: 180, align: "center"},
     ];
 
     const data = ref([]);
@@ -232,6 +247,9 @@ export default defineComponent({
     const edit = (key: string) => {
       tabsViewStore.addTabByPath('/query/index', {tempId: key});
     };
+    const copy = (key: string) => {
+      tabsViewStore.addTabByPath('/query/index', {tempId: key,iscopy:1});
+    };
     const onSelectChange = (keys: any) => {
       selectedRowKeys.value = keys;
     };
@@ -255,7 +273,7 @@ export default defineComponent({
       onFinish,
       loadData,
       add, deleteSingle,
-      edit, onDelete
+      edit,copy, onDelete
     };
   },
   created() {

+ 1 - 1
vue/src/views/subject/edit.vue

@@ -41,7 +41,7 @@
                          :rules="[{ required: true, message: '请选择标签' }]">
               <a-select
                 v-model:value="dataModel.tagList"
-                mode="tags"
+                mode="multiple"
                 style="width: 100%"
                 :options="tagOptions">
               </a-select>