Browse Source

优化关联表全选不响应问题

yangfan 3 tháng trước cách đây
mục cha
commit
7d2ec291e7

+ 20 - 20
src/components/Generator/generator/config.js

@@ -765,27 +765,27 @@ export const inputComponents = [
     },
     h: 6,
     placeholder: '请输入内容...'
-  },
-  {
-    __config__: {
-      jnpfKey: 'JNPFMap',
-      label: '地图选址',
-      labelWidth: undefined,
-      showLabel: true,
-      tag: 'JNPF-Map',
-      tagIcon: 'icon-ym icon-ym-generator-rich-text',
-      defaultValue: null,
-      required: false,
-      layout: 'colFormItem',
-      span: 24,
-      dragDisabled: false,
-      regList: [],
-      trigger: 'blur',
-      viewDataType: 'STRING'
-    },
-    h: 6,
-    placeholder: '请输入内容...'
   }
+  // {
+  //   __config__: {
+  //     jnpfKey: 'JNPFMap',
+  //     label: '地图选址',
+  //     labelWidth: undefined,
+  //     showLabel: true,
+  //     tag: 'JNPF-Map',
+  //     tagIcon: 'icon-ym icon-ym-generator-rich-text',
+  //     defaultValue: null,
+  //     required: false,
+  //     layout: 'colFormItem',
+  //     span: 24,
+  //     dragDisabled: false,
+  //     regList: [],
+  //     trigger: 'blur',
+  //     viewDataType: 'STRING'
+  //   },
+  //   h: 6,
+  //   placeholder: '请输入内容...'
+  // }
 ]
 
 // 高级控件 【左面板】

+ 135 - 4
src/components/Generator/index/RightComponents/ComInput.vue

@@ -130,13 +130,144 @@
       <el-switch v-model="activeData.isUrl" />
     </el-form-item>
     <el-form-item label="只做展示">
-      <el-switch v-model="activeData.isText" @change="activeData.__vModel__ = 'isOnlyRead_' + +new Date();activeData.__vModelName__ = 'isOnlyRead_' + +new Date()" />
+      <el-switch
+        v-model="activeData.isText"
+        @change="
+          activeData.__vModel__ = 'isOnlyRead_' + +new Date()
+          activeData.__vModelName__ = 'isOnlyRead_' + +new Date()
+        "
+      />
     </el-form-item>
     <el-form-item label="别名展示">
       <el-switch v-model="activeData.anotherName" />
-      <el-button v-if="activeData.anotherName" style="margin-left: 100px" size="mini" icon="el-icon-plus" @click="activeData.anotherNameList.push({realValue: '', anotherName: '',columnBackgroundColor: null})">添加</el-button>
+      <el-button
+        v-if="activeData.anotherName"
+        style="margin-left: 100px"
+        size="mini"
+        icon="el-icon-plus"
+        @click="activeData.anotherNameList.push({ realValue: '', anotherName: '', columnBackgroundColor: null })"
+        >添加</el-button
+      >
     </el-form-item>
     <columnAnotherName v-if="activeData.anotherName" :anotherNameList="activeData.anotherNameList" />
+    <el-form-item label="开启扫码">
+      <el-switch v-model="activeData.isScan" />
+    </el-form-item>
+    <template v-if="activeData.isScan">
+      <el-form-item label="" label-width="40px">
+        <el-radio-group v-model="activeData.__config__.dataType" size="small" style="text-align: center" @change="dataTypeChange">
+          <el-radio-button label="static">静态数据</el-radio-button>
+          <el-radio-button label="dictionary">数据字典</el-radio-button>
+          <el-radio-button label="dynamic">API数据</el-radio-button>
+        </el-radio-group>
+      </el-form-item>
+      <template v-if="activeData.__config__.dataType === 'static'">
+        <draggable :list="activeData.__slot__.options" :animation="340" group="selectItem" handle=".option-drag">
+          <div v-for="(item, index) in activeData.__slot__.options" :key="index" class="select-item">
+            <div class="select-line-icon option-drag">
+              <i class="el-icon-s-operation" />
+            </div>
+            <el-input v-model="item.fullName" placeholder="选项名(value)" size="small" @input="optionsChange($event, item)" />
+            <el-input v-model="item.id" placeholder="选项值(key)" size="small" @input="optionsChange($event, item)" />
+            <el-input v-if="activeData.__config__.relationSelectId" v-model="item.relation" placeholder="关联关键词" size="small" />
+            <div class="close-btn select-line-icon" @click="activeData.__slot__.options.splice(index, 1)">
+              <i class="el-icon-remove-outline" />
+            </div>
+          </div>
+        </draggable>
+        <div style="margin-left: 29px">
+          <el-button style="padding-bottom: 0" icon="el-icon-circle-plus-outline" type="text" @click="addSelectItem"> 添加选项 </el-button>
+        </div>
+      </template>
+      <!--    <JNPF-TreeSelect :options="treeData" v-model="activeData.__config__.dictionaryType"-->
+      <!--      placeholder="选择数据字典" lastLevel v-if="activeData.__config__.dataType==='dictionary'" clearable>-->
+      <!--    </JNPF-TreeSelect>-->
+      <el-select @change="wallpaperInput" placeholder="选择数据字典" v-model="activeData.__config__.dictionaryType" v-if="activeData.__config__.dataType === 'dictionary'">
+        <el-option v-for="(item, i) of treeData" :key="i" :value="item.id" :label="item.keyCode"></el-option>
+      </el-select>
+      <template v-if="activeData.__config__.dataType === 'dynamic'">
+        <el-form-item label="API数据">
+          <el-cascader
+            :options="dataInterfaceSelector"
+            v-model="activeData.__config__.propsUrl"
+            placeholder="请选择API数据"
+            :filter-method="apiFilterMethod"
+            :props="{ expandTrigger: 'hover', emitPath: false }"
+            :show-all-levels="false"
+            @change="propsUrlChange"
+            clearable
+            filterable
+          >
+          </el-cascader>
+        </el-form-item>
+        <el-divider v-if="activeData.__config__.ApiParams && activeData.__config__.ApiParams.length">API输入参数设置</el-divider>
+        <el-form-item class="varFormItem" v-for="(param, i) of activeData.__config__.ApiParams" :key="i" :label="param.name + ' ' + param.key">
+          <el-cascader v-model="param.varType" :options="varTypeList"></el-cascader>
+          <el-input v-if="param.varType == 1 && param.datatype === 'string'" v-model="param.def"></el-input>
+          <el-input v-if="param.varType == 1 && param.datatype === 'number'" v-model="param.def" type="number"></el-input>
+          <el-date-picker v-if="param.varType == 1 && param.datatype === 'date'" v-model="param.def" placeholder="选择日期" type="date" value-format="yyyyMMdd"></el-date-picker>
+          <el-date-picker v-if="param.varType == 1 && param.datatype === 'month'" v-model="param.def" placeholder="选择月" type="month" value-format="yyyyMM"></el-date-picker>
+          <el-time-picker v-if="param.varType == 1 && param.datatype === 'time'" v-model="param.def" placeholder="选择时间" value-format="HH:mm:ss"></el-time-picker>
+          <el-date-picker v-if="param.varType == 1 && param.datatype === 'timestamp'" v-model="param.def" placeholder="选择日期" type="date" value-format="timestamp"></el-date-picker>
+          <el-time-picker v-if="param.varType == 1 && param.datatype === 'timestamp'" v-model="param.def" placeholder="选择时间" value-format="timestamp"></el-time-picker>
+        </el-form-item>
+        <el-divider>API返回值设置</el-divider>
+        <el-form-item>
+          <template slot="label">
+            <span>组件设置:</span>
+            <el-tooltip style="cursor: pointer" effect="dark" :content="'当前组件设置,指定API返回值某一项作为key或value'" placement="top">
+              <i class="el-icon-question" />
+            </el-tooltip>
+          </template>
+          <el-button size="mini" type="primary" plain @click="previewClick" icon="View">API返回值结构预览</el-button>
+        </el-form-item>
+        <el-form-item label="key值">
+          <el-select placeholder="请选择key值" v-model="activeData.__config__.apiProps.value">
+            <el-option v-for="(item, i) of showFields" :key="i" :value="item.columnComments" :label="item.columnName"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="value值">
+          <el-select placeholder="请选择value值" v-model="activeData.__config__.apiProps.label">
+            <el-option v-for="(item, i) of showFields" :key="i" :value="item.columnComments" :label="item.columnName"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="副标题">
+          <el-select placeholder="请选择副标题" multiple v-model="activeData.__config__.apiProps.fitLabel" @change="fitLabelChange">
+            <el-option v-for="(item, i) of showFields" :key="i" :value="item.columnComments" :label="item.columnName"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item v-if="activeData.__config__.apiProps.fitLabel.length" label="标题分隔符">
+          <el-input v-model="activeData.__config__.apiProps.labelSeparator" placeholder="请输入标题分隔符" />
+        </el-form-item>
+        <template v-if="activeData.__config__.ApiReturn && activeData.__config__.ApiReturn.length">
+          <el-form-item>
+            <template slot="label">
+              <span>变量设置:</span>
+              <el-tooltip style="cursor: pointer" effect="dark" :content="'当前页面变量设置,从API返回值结构预览中选择一或多个类作为变量'" placement="top">
+                <i class="el-icon-question" />
+              </el-tooltip>
+            </template>
+          </el-form-item>
+          <el-table :data="activeData.__config__.ApiReturn" style="width: 100%">
+            <el-table-column prop="keyName" label="API返回值"></el-table-column>
+            <el-table-column label="页面变量名">
+              <template slot-scope="scope">
+                <el-input @input="varNamefitlte(scope.row, $event)" v-model="scope.row.varName" placeholder="请输入页面变量名" />
+                <div v-if="varNamefitlteclass(scope.row, scope.row.varName)" style="color: red">变量名重复 重新输入</div>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" width="50">
+              <template slot-scope="scope">
+                <div class="close-btn select-line-icon" style="cursor: pointer" @click="activeData.__config__.ApiReturn.splice(scope.$index, 1)">
+                  <i class="el-icon-delete" />
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+      </template>
+      <el-divider />
+    </template>
     <el-divider>校验</el-divider>
     <el-form-item label="是否必填">
       <el-switch v-model="activeData.__config__.required" />
@@ -167,13 +298,13 @@
 <script>
 import iconBox from '@/components/JNPF-iconBox'
 import customExpression from '@/components/Generator/index/RightComponents/customExpression'
-import columnAnotherName from "@/components/Generator/index/RightComponents/componets/columnAnotherName";
+import columnAnotherName from '@/components/Generator/index/RightComponents/componets/columnAnotherName'
 import comMixin from './mixin'
 import { loopActiveTabelList, loopRelationList, loopRelationTabelList } from '@/utils'
 export default {
   props: ['activeData', 'dbLinkId', 'drawList'],
   mixins: [comMixin],
-  components: { iconBox, customExpression,columnAnotherName },
+  components: { iconBox, customExpression, columnAnotherName },
   data() {
     return {
       iconsVisible: false,

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 2
src/utils/request.js


+ 7 - 10
src/views/basic/dynamicModel/list/index.vue

@@ -2361,7 +2361,7 @@ export default {
         if (this.columnData.type != 5) {
           this.hasBatchBtn = this.columnData.btnsList.some((o) => o.value == 'batchRemove' || o.value == 'batchUpdate') || this.customBtns.filter((o) => o.buttonLocation === 1).length > 0
         } else {
-          this.hasBatchBtn = this.btnsList.some((o) => o.value == 'batchRemove'  || o.value == 'batchUpdate') || this.customBtns.filter((o) => o.buttonLocation === 1).length > 0
+          this.hasBatchBtn = this.btnsList.some((o) => o.value == 'batchRemove' || o.value == 'batchUpdate') || this.customBtns.filter((o) => o.buttonLocation === 1).length > 0
         }
 
         this.$nextTick(() => {
@@ -2513,6 +2513,7 @@ export default {
           let compoentConfig = {}
           const find = this.columnData.columnList.find((v) => v.title === data.title)
           comName = formDataFields.find((item) => item['__vModel__'] === data.propId)
+          console.log(comName)
           if (comName) {
             data.field = this.columnDict[data.propId]
             data.title = data.label
@@ -2553,7 +2554,7 @@ export default {
             }
             if (compoentConfig.tag === 'el-select') {
               if (compoentConfig.dataType === 'dictionary') {
-                if (!compoentConfig.dictionaryType) return;
+                if (!compoentConfig.dictionaryType) return
                 await dictDetail({ id: compoentConfig.dictionaryType }).then((res) => {
                   // this.activeData.__slot__.options = res.data.data.list
                   let content = JSON.parse(res.data.data.content || '[]')
@@ -2567,6 +2568,7 @@ export default {
             if (compoentConfig.tag === 'JNPF-UploadImg' || compoentConfig.jnpfKey === 'radio') {
               compoentConfig.readonly = true
             }
+            // console.log(compoentConfig)
             if (compoentConfig.relationData && compoentConfig.relationData.showTitle.length) {
               compoentConfig.readonly = true
               data.slots.default = 'relationDefault'
@@ -2772,7 +2774,7 @@ export default {
                       return find && find.fullName ? find.fullName : v
                     })
                     cellValue = cellValue.toString()
-                  }else {
+                  } else {
                     return cellValue
                   }
                   // const find = column.params.compoentConfig.options.find((v) => v.id == cellValue)
@@ -2805,13 +2807,8 @@ export default {
             })
           } else {
             if (item.config && item.config.isJoin) {
-              item.slots = {}
-              // item.field = g.replaceAll(item.field, 'join_', '')
-              if (item.jnpfKey === 'uploadImg') {
-                item.slots.default = 'default_images'
-                item.showOverflow = false
-              }
-              columnList.push(item)
+              const data = await columnHeader(item)
+              columnList.push(data)
             } else {
               const data = await columnHeader(item)
               columnList.push(data)