tianheng-ui 0.1.77 → 0.1.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/theme-chalk/images/json0.png +0 -0
 - package/lib/theme-chalk/images/json1.png +0 -0
 - package/lib/theme-chalk/images/json3.png +0 -0
 - package/lib/theme-chalk/images/json6.png +0 -0
 - package/lib/theme-chalk/styles/feature.scss +6 -0
 - package/lib/tianheng-ui.js +13 -13
 - package/package.json +1 -1
 - package/packages/FormMaking/WidgetConfig.vue +2 -2
 - package/packages/FormMaking/WidgetGuide.vue +176 -23
 - package/packages/FormMaking/WidgetTools.vue +70 -15
 - package/packages/FormMaking/assets/templates/empty.json +39 -0
 - package/packages/FormMaking/assets/templates/general.json +347 -0
 - package/packages/FormMaking/assets/templates/personalDetails.json +884 -0
 - package/packages/FormMaking/assets/templates/table.json +349 -0
 - package/packages/FormMaking/index.vue +9 -4
 - package/packages/TableMaking/widgetConfig.vue +1 -1
 - package/packages/TableMaking/widgetGuide.vue +23 -26
 
    
        package/package.json
    CHANGED
    
    
| 
         @@ -181,7 +181,7 @@ 
     | 
|
| 
       181 
181 
     | 
    
         
             
                          <el-tooltip
         
     | 
| 
       182 
182 
     | 
    
         
             
                            slot="label"
         
     | 
| 
       183 
183 
     | 
    
         
             
                            effect="light"
         
     | 
| 
       184 
     | 
    
         
            -
                            content=" 
     | 
| 
      
 184 
     | 
    
         
            +
                            content="使用该接口的出参配置可选字段"
         
     | 
| 
       185 
185 
     | 
    
         
             
                            placement="top"
         
     | 
| 
       186 
186 
     | 
    
         
             
                          >
         
     | 
| 
       187 
187 
     | 
    
         
             
                            <span style="color: #409EFF;">字段接口</span>
         
     | 
| 
         @@ -217,7 +217,7 @@ 
     | 
|
| 
       217 
217 
     | 
    
         
             
                          <el-tooltip
         
     | 
| 
       218 
218 
     | 
    
         
             
                            slot="label"
         
     | 
| 
       219 
219 
     | 
    
         
             
                            effect="light"
         
     | 
| 
       220 
     | 
    
         
            -
                            content="开启后,选择数据接口会触发 remote-params  
     | 
| 
      
 220 
     | 
    
         
            +
                            content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器获取字段"
         
     | 
| 
       221 
221 
     | 
    
         
             
                            placement="top"
         
     | 
| 
       222 
222 
     | 
    
         
             
                          >
         
     | 
| 
       223 
223 
     | 
    
         
             
                            <span style="color: #409EFF;">远程字段</span>
         
     | 
| 
         @@ -3,14 +3,94 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
                <el-steps :active="step" finish-status="success" simple>
         
     | 
| 
       4 
4 
     | 
    
         
             
                  <el-step title="表单配置" icon="el-icon-s-operation" description="">
         
     | 
| 
       5 
5 
     | 
    
         
             
                  </el-step>
         
     | 
| 
       6 
     | 
    
         
            -
                  <el-step 
     | 
| 
      
 6 
     | 
    
         
            +
                  <el-step
         
     | 
| 
      
 7 
     | 
    
         
            +
                    title="选择初始模板"
         
     | 
| 
      
 8 
     | 
    
         
            +
                    icon="el-icon-set-up"
         
     | 
| 
      
 9 
     | 
    
         
            +
                    description=""
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ></el-step>
         
     | 
| 
      
 11 
     | 
    
         
            +
                  <!-- <el-step
         
     | 
| 
      
 12 
     | 
    
         
            +
                    title="选择初始模板"
         
     | 
| 
      
 13 
     | 
    
         
            +
                    icon="el-icon-set-up"
         
     | 
| 
      
 14 
     | 
    
         
            +
                    description=""
         
     | 
| 
      
 15 
     | 
    
         
            +
                  ></el-step> -->
         
     | 
| 
       7 
16 
     | 
    
         
             
                </el-steps>
         
     | 
| 
       8 
17 
     | 
    
         
             
                <div class="content">
         
     | 
| 
       9 
     | 
    
         
            -
                  < 
     | 
| 
       10 
     | 
    
         
            -
                    <div 
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 18 
     | 
    
         
            +
                  <el-form :model="config" label-width="80px" size="small">
         
     | 
| 
      
 19 
     | 
    
         
            +
                    <div v-show="step === 0">
         
     | 
| 
      
 20 
     | 
    
         
            +
                      <el-form-item>
         
     | 
| 
      
 21 
     | 
    
         
            +
                        <el-tooltip
         
     | 
| 
      
 22 
     | 
    
         
            +
                          slot="label"
         
     | 
| 
      
 23 
     | 
    
         
            +
                          effect="light"
         
     | 
| 
      
 24 
     | 
    
         
            +
                          content="字段的配置方式"
         
     | 
| 
      
 25 
     | 
    
         
            +
                          placement="top"
         
     | 
| 
      
 26 
     | 
    
         
            +
                        >
         
     | 
| 
      
 27 
     | 
    
         
            +
                          <span style="color: #409EFF;">字段类型</span>
         
     | 
| 
      
 28 
     | 
    
         
            +
                        </el-tooltip>
         
     | 
| 
      
 29 
     | 
    
         
            +
                        <el-radio-group v-model="config.config.fields.type">
         
     | 
| 
      
 30 
     | 
    
         
            +
                          <el-radio-button label="custom">自定义</el-radio-button>
         
     | 
| 
      
 31 
     | 
    
         
            +
                          <el-radio-button label="api">接口导入</el-radio-button>
         
     | 
| 
      
 32 
     | 
    
         
            +
                        </el-radio-group>
         
     | 
| 
      
 33 
     | 
    
         
            +
                      </el-form-item>
         
     | 
| 
      
 34 
     | 
    
         
            +
                      <el-form-item v-if="config.config.fields.type === 'api'">
         
     | 
| 
      
 35 
     | 
    
         
            +
                        <el-tooltip
         
     | 
| 
      
 36 
     | 
    
         
            +
                          slot="label"
         
     | 
| 
      
 37 
     | 
    
         
            +
                          effect="light"
         
     | 
| 
      
 38 
     | 
    
         
            +
                          content="使用该接口的出参配置可选字段"
         
     | 
| 
      
 39 
     | 
    
         
            +
                          placement="top"
         
     | 
| 
      
 40 
     | 
    
         
            +
                        >
         
     | 
| 
      
 41 
     | 
    
         
            +
                          <span style="color: #409EFF;">字段接口</span>
         
     | 
| 
      
 42 
     | 
    
         
            +
                        </el-tooltip>
         
     | 
| 
      
 43 
     | 
    
         
            +
                        <el-select
         
     | 
| 
      
 44 
     | 
    
         
            +
                          v-model="config.config.fields.api"
         
     | 
| 
      
 45 
     | 
    
         
            +
                          style="width:100%"
         
     | 
| 
      
 46 
     | 
    
         
            +
                          clearable
         
     | 
| 
      
 47 
     | 
    
         
            +
                          placeholder="请选择"
         
     | 
| 
      
 48 
     | 
    
         
            +
                          no-data-text="暂无接口,请前往【接口模块】创建"
         
     | 
| 
      
 49 
     | 
    
         
            +
                          filterable
         
     | 
| 
      
 50 
     | 
    
         
            +
                        >
         
     | 
| 
      
 51 
     | 
    
         
            +
                          <el-option
         
     | 
| 
      
 52 
     | 
    
         
            +
                            v-for="item in apiOptions"
         
     | 
| 
      
 53 
     | 
    
         
            +
                            :key="item.id"
         
     | 
| 
      
 54 
     | 
    
         
            +
                            :label="item.name"
         
     | 
| 
      
 55 
     | 
    
         
            +
                            :value="item.id"
         
     | 
| 
      
 56 
     | 
    
         
            +
                          >
         
     | 
| 
      
 57 
     | 
    
         
            +
                          </el-option>
         
     | 
| 
      
 58 
     | 
    
         
            +
                        </el-select>
         
     | 
| 
      
 59 
     | 
    
         
            +
                      </el-form-item>
         
     | 
| 
      
 60 
     | 
    
         
            +
                      <el-form-item label="表单名称">
         
     | 
| 
      
 61 
     | 
    
         
            +
                        <el-input
         
     | 
| 
      
 62 
     | 
    
         
            +
                          v-model="config.config.title"
         
     | 
| 
      
 63 
     | 
    
         
            +
                          placeholder="请输入"
         
     | 
| 
      
 64 
     | 
    
         
            +
                        ></el-input>
         
     | 
| 
      
 65 
     | 
    
         
            +
                      </el-form-item>
         
     | 
| 
      
 66 
     | 
    
         
            +
                      <el-form-item>
         
     | 
| 
      
 67 
     | 
    
         
            +
                        <el-tooltip
         
     | 
| 
      
 68 
     | 
    
         
            +
                          slot="label"
         
     | 
| 
      
 69 
     | 
    
         
            +
                          effect="light"
         
     | 
| 
      
 70 
     | 
    
         
            +
                          content="开启后,选择数据接口会触发 remote-params 回调,用于从服务器获取字段"
         
     | 
| 
      
 71 
     | 
    
         
            +
                          placement="top"
         
     | 
| 
      
 72 
     | 
    
         
            +
                        >
         
     | 
| 
      
 73 
     | 
    
         
            +
                          <span style="color: #409EFF;">远程字段</span>
         
     | 
| 
      
 74 
     | 
    
         
            +
                        </el-tooltip>
         
     | 
| 
      
 75 
     | 
    
         
            +
                        <el-switch v-model="config.config.fields.remote"> </el-switch>
         
     | 
| 
      
 76 
     | 
    
         
            +
                      </el-form-item>
         
     | 
| 
      
 77 
     | 
    
         
            +
                    </div>
         
     | 
| 
      
 78 
     | 
    
         
            +
                    <div v-show="step === 1" class="formTemplates">
         
     | 
| 
      
 79 
     | 
    
         
            +
                      <div
         
     | 
| 
      
 80 
     | 
    
         
            +
                        :class="
         
     | 
| 
      
 81 
     | 
    
         
            +
                          `formTemplates-item th-border th-hover_boxShadow_light ${
         
     | 
| 
      
 82 
     | 
    
         
            +
                            formTemplateActive === index ? 'th-active' : ''
         
     | 
| 
      
 83 
     | 
    
         
            +
                          }`
         
     | 
| 
      
 84 
     | 
    
         
            +
                        "
         
     | 
| 
      
 85 
     | 
    
         
            +
                        v-for="(item, index) in formTemplates"
         
     | 
| 
      
 86 
     | 
    
         
            +
                        :key="index"
         
     | 
| 
      
 87 
     | 
    
         
            +
                        @click="handleFormTemplateClick(index)"
         
     | 
| 
      
 88 
     | 
    
         
            +
                      >
         
     | 
| 
      
 89 
     | 
    
         
            +
                        <img :src="item.img" alt="" />
         
     | 
| 
      
 90 
     | 
    
         
            +
                        <div>{{ item.name }}</div>
         
     | 
| 
      
 91 
     | 
    
         
            +
                      </div>
         
     | 
| 
      
 92 
     | 
    
         
            +
                    </div>
         
     | 
| 
      
 93 
     | 
    
         
            +
                  </el-form>
         
     | 
| 
       14 
94 
     | 
    
         
             
                </div>
         
     | 
| 
       15 
95 
     | 
    
         
             
                <div class="footer">
         
     | 
| 
       16 
96 
     | 
    
         
             
                  <div></div>
         
     | 
| 
         @@ -23,31 +103,43 @@ 
     | 
|
| 
       23 
103 
     | 
    
         
             
                      @click="handleBack"
         
     | 
| 
       24 
104 
     | 
    
         
             
                      >上一步</el-button
         
     | 
| 
       25 
105 
     | 
    
         
             
                    >
         
     | 
| 
       26 
     | 
    
         
            -
                    <el-button 
     | 
| 
       27 
     | 
    
         
            -
                       
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 106 
     | 
    
         
            +
                    <el-button
         
     | 
| 
      
 107 
     | 
    
         
            +
                      v-if="step !== 1"
         
     | 
| 
      
 108 
     | 
    
         
            +
                      type="primary"
         
     | 
| 
      
 109 
     | 
    
         
            +
                      size="small"
         
     | 
| 
      
 110 
     | 
    
         
            +
                      @click="handleNext"
         
     | 
| 
      
 111 
     | 
    
         
            +
                    >
         
     | 
| 
      
 112 
     | 
    
         
            +
                      下一步<i class="el-icon-right el-icon--right"></i>
         
     | 
| 
      
 113 
     | 
    
         
            +
                    </el-button>
         
     | 
| 
      
 114 
     | 
    
         
            +
                    <el-button v-else type="success" size="small" @click="handleSave">
         
     | 
| 
      
 115 
     | 
    
         
            +
                      完   成<i class="el-icon-finished el-icon--right"></i>
         
     | 
| 
      
 116 
     | 
    
         
            +
                    </el-button>
         
     | 
| 
       29 
117 
     | 
    
         
             
                  </div>
         
     | 
| 
       30 
118 
     | 
    
         
             
                </div>
         
     | 
| 
       31 
119 
     | 
    
         
             
              </div>
         
     | 
| 
       32 
120 
     | 
    
         
             
            </template>
         
     | 
| 
       33 
121 
     | 
    
         | 
| 
       34 
122 
     | 
    
         
             
            <script>
         
     | 
| 
      
 123 
     | 
    
         
            +
            import EmptyTemplateJson from "./assets/templates/empty.json";
         
     | 
| 
      
 124 
     | 
    
         
            +
            import GeneralTemplateJson from "./assets/templates/general.json";
         
     | 
| 
      
 125 
     | 
    
         
            +
            import PersonalDetailsTemplateJson from "./assets/templates/personalDetails.json";
         
     | 
| 
      
 126 
     | 
    
         
            +
            import TableTemplateJson from "./assets/templates/table.json";
         
     | 
| 
      
 127 
     | 
    
         
            +
            import { deepClone } from "./util";
         
     | 
| 
       35 
128 
     | 
    
         
             
            export default {
         
     | 
| 
       36 
     | 
    
         
            -
              props: {  
     | 
| 
      
 129 
     | 
    
         
            +
              props: { config: Object, apiOptions: Array },
         
     | 
| 
       37 
130 
     | 
    
         
             
              data() {
         
     | 
| 
       38 
131 
     | 
    
         
             
                return {
         
     | 
| 
       39 
     | 
    
         
            -
                   
     | 
| 
       40 
     | 
    
         
            -
                   
     | 
| 
      
 132 
     | 
    
         
            +
                  step: 0,
         
     | 
| 
      
 133 
     | 
    
         
            +
                  formTemplates: [
         
     | 
| 
      
 134 
     | 
    
         
            +
                    EmptyTemplateJson,
         
     | 
| 
      
 135 
     | 
    
         
            +
                    GeneralTemplateJson,
         
     | 
| 
      
 136 
     | 
    
         
            +
                    PersonalDetailsTemplateJson,
         
     | 
| 
      
 137 
     | 
    
         
            +
                    TableTemplateJson
         
     | 
| 
      
 138 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 139 
     | 
    
         
            +
                  formTemplateActive: null
         
     | 
| 
       41 
140 
     | 
    
         
             
                };
         
     | 
| 
       42 
141 
     | 
    
         
             
              },
         
     | 
| 
       43 
     | 
    
         
            -
               
     | 
| 
       44 
     | 
    
         
            -
                visible(val) {
         
     | 
| 
       45 
     | 
    
         
            -
                  this.show = val;
         
     | 
| 
       46 
     | 
    
         
            -
                },
         
     | 
| 
       47 
     | 
    
         
            -
                show(val) {
         
     | 
| 
       48 
     | 
    
         
            -
                  this.$emit("update:visible", val);
         
     | 
| 
       49 
     | 
    
         
            -
                }
         
     | 
| 
       50 
     | 
    
         
            -
              },
         
     | 
| 
      
 142 
     | 
    
         
            +
              computed: {},
         
     | 
| 
       51 
143 
     | 
    
         
             
              created() {},
         
     | 
| 
       52 
144 
     | 
    
         
             
              mounted() {},
         
     | 
| 
       53 
145 
     | 
    
         
             
              methods: {
         
     | 
| 
         @@ -57,8 +149,15 @@ export default { 
     | 
|
| 
       57 
149 
     | 
    
         
             
                handleNext() {
         
     | 
| 
       58 
150 
     | 
    
         
             
                  this.step++;
         
     | 
| 
       59 
151 
     | 
    
         
             
                },
         
     | 
| 
       60 
     | 
    
         
            -
                 
     | 
| 
       61 
     | 
    
         
            -
                  this. 
     | 
| 
      
 152 
     | 
    
         
            +
                handleSave() {
         
     | 
| 
      
 153 
     | 
    
         
            +
                  if (this.formTemplateActive !== null) {
         
     | 
| 
      
 154 
     | 
    
         
            +
                    const list = this.formTemplates[this.formTemplateActive].data.list;
         
     | 
| 
      
 155 
     | 
    
         
            +
                    this.config.list = deepClone(list);
         
     | 
| 
      
 156 
     | 
    
         
            +
                  }
         
     | 
| 
      
 157 
     | 
    
         
            +
                  this.$emit("save");
         
     | 
| 
      
 158 
     | 
    
         
            +
                },
         
     | 
| 
      
 159 
     | 
    
         
            +
                handleFormTemplateClick(index) {
         
     | 
| 
      
 160 
     | 
    
         
            +
                  this.formTemplateActive = index;
         
     | 
| 
       62 
161 
     | 
    
         
             
                }
         
     | 
| 
       63 
162 
     | 
    
         
             
              }
         
     | 
| 
       64 
163 
     | 
    
         
             
            };
         
     | 
| 
         @@ -70,7 +169,13 @@ export default { 
     | 
|
| 
       70 
169 
     | 
    
         
             
              height: 100%;
         
     | 
| 
       71 
170 
     | 
    
         | 
| 
       72 
171 
     | 
    
         
             
              .content {
         
     | 
| 
       73 
     | 
    
         
            -
                height: calc(100% -  
     | 
| 
      
 172 
     | 
    
         
            +
                height: calc(100% - 96px);
         
     | 
| 
      
 173 
     | 
    
         
            +
                padding-top: 10px;
         
     | 
| 
      
 174 
     | 
    
         
            +
                overflow-y: scroll;
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                .tools-item {
         
     | 
| 
      
 177 
     | 
    
         
            +
                  margin-bottom: 10px;
         
     | 
| 
      
 178 
     | 
    
         
            +
                }
         
     | 
| 
       74 
179 
     | 
    
         
             
              }
         
     | 
| 
       75 
180 
     | 
    
         
             
              .footer {
         
     | 
| 
       76 
181 
     | 
    
         
             
                height: 50px;
         
     | 
| 
         @@ -78,9 +183,57 @@ export default { 
     | 
|
| 
       78 
183 
     | 
    
         
             
                align-items: center;
         
     | 
| 
       79 
184 
     | 
    
         
             
                justify-content: space-between;
         
     | 
| 
       80 
185 
     | 
    
         
             
                box-sizing: border-box;
         
     | 
| 
      
 186 
     | 
    
         
            +
                background-color: white;
         
     | 
| 
       81 
187 
     | 
    
         | 
| 
       82 
188 
     | 
    
         
             
                .stepView {
         
     | 
| 
       83 
189 
     | 
    
         
             
                }
         
     | 
| 
       84 
190 
     | 
    
         
             
              }
         
     | 
| 
      
 191 
     | 
    
         
            +
              .fields-item {
         
     | 
| 
      
 192 
     | 
    
         
            +
                span {
         
     | 
| 
      
 193 
     | 
    
         
            +
                  padding: 0px 8px 2px 8px;
         
     | 
| 
      
 194 
     | 
    
         
            +
                  border-radius: 4px;
         
     | 
| 
      
 195 
     | 
    
         
            +
                }
         
     | 
| 
      
 196 
     | 
    
         
            +
                span:nth-child(1) {
         
     | 
| 
      
 197 
     | 
    
         
            +
                  color: #1890ff;
         
     | 
| 
      
 198 
     | 
    
         
            +
                  background-color: #e8f4ff;
         
     | 
| 
      
 199 
     | 
    
         
            +
                }
         
     | 
| 
      
 200 
     | 
    
         
            +
                span:nth-child(2) {
         
     | 
| 
      
 201 
     | 
    
         
            +
                  color: #13ce66;
         
     | 
| 
      
 202 
     | 
    
         
            +
                  background-color: #e7faf0;
         
     | 
| 
      
 203 
     | 
    
         
            +
                }
         
     | 
| 
      
 204 
     | 
    
         
            +
                span:nth-child(3) {
         
     | 
| 
      
 205 
     | 
    
         
            +
                  color: #909399;
         
     | 
| 
      
 206 
     | 
    
         
            +
                  background-color: #f4f4f5;
         
     | 
| 
      
 207 
     | 
    
         
            +
                }
         
     | 
| 
      
 208 
     | 
    
         
            +
              }
         
     | 
| 
      
 209 
     | 
    
         
            +
              .formTemplates {
         
     | 
| 
      
 210 
     | 
    
         
            +
                .formTemplates-item {
         
     | 
| 
      
 211 
     | 
    
         
            +
                  display: inline-block;
         
     | 
| 
      
 212 
     | 
    
         
            +
                  margin: 10px;
         
     | 
| 
      
 213 
     | 
    
         
            +
                  padding: 10px;
         
     | 
| 
      
 214 
     | 
    
         
            +
                  width: 230px;
         
     | 
| 
      
 215 
     | 
    
         
            +
                  border-radius: 4px;
         
     | 
| 
      
 216 
     | 
    
         
            +
                  transition: 0.25s;
         
     | 
| 
      
 217 
     | 
    
         
            +
                  box-sizing: border-box;
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
                  img {
         
     | 
| 
      
 220 
     | 
    
         
            +
                    width: 100%;
         
     | 
| 
      
 221 
     | 
    
         
            +
                    height: 230px;
         
     | 
| 
      
 222 
     | 
    
         
            +
                    object-fit: contain;
         
     | 
| 
      
 223 
     | 
    
         
            +
                  }
         
     | 
| 
      
 224 
     | 
    
         
            +
                }
         
     | 
| 
      
 225 
     | 
    
         
            +
              }
         
     | 
| 
      
 226 
     | 
    
         
            +
            }
         
     | 
| 
      
 227 
     | 
    
         
            +
            </style>
         
     | 
| 
      
 228 
     | 
    
         
            +
             
     | 
| 
      
 229 
     | 
    
         
            +
            <style lang="scss">
         
     | 
| 
      
 230 
     | 
    
         
            +
            .widgetGuide {
         
     | 
| 
      
 231 
     | 
    
         
            +
              .el-transfer {
         
     | 
| 
      
 232 
     | 
    
         
            +
                display: flex;
         
     | 
| 
      
 233 
     | 
    
         
            +
                align-items: center;
         
     | 
| 
      
 234 
     | 
    
         
            +
              }
         
     | 
| 
      
 235 
     | 
    
         
            +
              .el-transfer-panel {
         
     | 
| 
      
 236 
     | 
    
         
            +
                flex: 1;
         
     | 
| 
      
 237 
     | 
    
         
            +
              }
         
     | 
| 
       85 
238 
     | 
    
         
             
            }
         
     | 
| 
       86 
239 
     | 
    
         
             
            </style>
         
     | 
| 
         @@ -74,7 +74,6 @@ 
     | 
|
| 
       74 
74 
     | 
    
         
             
                        <el-button
         
     | 
| 
       75 
75 
     | 
    
         
             
                          type="text"
         
     | 
| 
       76 
76 
     | 
    
         
             
                          size="medium"
         
     | 
| 
       77 
     | 
    
         
            -
                          disabled
         
     | 
| 
       78 
77 
     | 
    
         
             
                          @click="handleDialogOpen('importTemplate')"
         
     | 
| 
       79 
78 
     | 
    
         
             
                          >导入模板
         
     | 
| 
       80 
79 
     | 
    
         
             
                        </el-button>
         
     | 
| 
         @@ -120,7 +119,8 @@ 
     | 
|
| 
       120 
119 
     | 
    
         
             
                  :showFooter="
         
     | 
| 
       121 
120 
     | 
    
         
             
                    dialog.action === 'previewPc' ||
         
     | 
| 
       122 
121 
     | 
    
         
             
                      dialog.action === 'previewH5' ||
         
     | 
| 
       123 
     | 
    
         
            -
                      dialog.action === 'importJson'
         
     | 
| 
      
 122 
     | 
    
         
            +
                      dialog.action === 'importJson' ||
         
     | 
| 
      
 123 
     | 
    
         
            +
                      dialog.action === 'importTemplate'
         
     | 
| 
       124 
124 
     | 
    
         
             
                  "
         
     | 
| 
       125 
125 
     | 
    
         
             
                  @on-close="handleDialogClose"
         
     | 
| 
       126 
126 
     | 
    
         
             
                  @on-affirm="handleDialogAffirm"
         
     | 
| 
         @@ -133,7 +133,21 @@ 
     | 
|
| 
       133 
133 
     | 
    
         
             
                    ></el-alert>
         
     | 
| 
       134 
134 
     | 
    
         
             
                    <th-code-editor v-model="dialog.data" ref="codeEditor"></th-code-editor>
         
     | 
| 
       135 
135 
     | 
    
         
             
                  </template>
         
     | 
| 
       136 
     | 
    
         
            -
                  < 
     | 
| 
      
 136 
     | 
    
         
            +
                  <div v-if="dialog.action === 'importTemplate'" class="formTemplates">
         
     | 
| 
      
 137 
     | 
    
         
            +
                    <div
         
     | 
| 
      
 138 
     | 
    
         
            +
                      :class="
         
     | 
| 
      
 139 
     | 
    
         
            +
                        `formTemplates-item th-border th-hover_boxShadow_light ${
         
     | 
| 
      
 140 
     | 
    
         
            +
                          formTemplateActive === index ? 'th-active' : ''
         
     | 
| 
      
 141 
     | 
    
         
            +
                        }`
         
     | 
| 
      
 142 
     | 
    
         
            +
                      "
         
     | 
| 
      
 143 
     | 
    
         
            +
                      v-for="(item, index) in formTemplates"
         
     | 
| 
      
 144 
     | 
    
         
            +
                      :key="index"
         
     | 
| 
      
 145 
     | 
    
         
            +
                      @click="handleFormTemplateClick(index)"
         
     | 
| 
      
 146 
     | 
    
         
            +
                    >
         
     | 
| 
      
 147 
     | 
    
         
            +
                      <img :src="item.img" alt="" />
         
     | 
| 
      
 148 
     | 
    
         
            +
                      <div>{{ item.name }}</div>
         
     | 
| 
      
 149 
     | 
    
         
            +
                    </div>
         
     | 
| 
      
 150 
     | 
    
         
            +
                  </div>
         
     | 
| 
       137 
151 
     | 
    
         
             
                  <template v-if="dialog.action === 'generateJson'">
         
     | 
| 
       138 
152 
     | 
    
         
             
                    <th-code-editor v-model="dialog.data" ref="codeEditor"></th-code-editor>
         
     | 
| 
       139 
153 
     | 
    
         
             
                  </template>
         
     | 
| 
         @@ -164,7 +178,7 @@ 
     | 
|
| 
       164 
178 
     | 
    
         
             
                  <template v-if="dialog.action === 'previewPc'">
         
     | 
| 
       165 
179 
     | 
    
         
             
                    <generate-form
         
     | 
| 
       166 
180 
     | 
    
         
             
                      v-if="dialog.show"
         
     | 
| 
       167 
     | 
    
         
            -
                      :config=" 
     | 
| 
      
 181 
     | 
    
         
            +
                      :config="formConfig"
         
     | 
| 
       168 
182 
     | 
    
         
             
                      :oauthConfig="oauthConfig"
         
     | 
| 
       169 
183 
     | 
    
         
             
                      :slotKeys="slotKeys"
         
     | 
| 
       170 
184 
     | 
    
         
             
                      @change="handleDataChange"
         
     | 
| 
         @@ -188,7 +202,7 @@ 
     | 
|
| 
       188 
202 
     | 
    
         
             
                      <generate-form
         
     | 
| 
       189 
203 
     | 
    
         
             
                        v-if="dialog.show"
         
     | 
| 
       190 
204 
     | 
    
         
             
                        class="box"
         
     | 
| 
       191 
     | 
    
         
            -
                        :config=" 
     | 
| 
      
 205 
     | 
    
         
            +
                        :config="formConfig"
         
     | 
| 
       192 
206 
     | 
    
         
             
                        :oauthConfig="oauthConfig"
         
     | 
| 
       193 
207 
     | 
    
         
             
                        @change="handleDataChange"
         
     | 
| 
       194 
208 
     | 
    
         
             
                        @button-submit="handleButtonSubmit"
         
     | 
| 
         @@ -230,13 +244,17 @@ import { deepClone } from "./util/index"; 
     | 
|
| 
       230 
244 
     | 
    
         
             
            import * as XLSX from "xlsx/xlsx.mjs";
         
     | 
| 
       231 
245 
     | 
    
         
             
            import generateCode from "./util/generateCode.js";
         
     | 
| 
       232 
246 
     | 
    
         
             
            import GenerateForm from "./GenerateForm";
         
     | 
| 
      
 247 
     | 
    
         
            +
            import EmptyTemplateJson from "./assets/templates/empty.json";
         
     | 
| 
      
 248 
     | 
    
         
            +
            import GeneralTemplateJson from "./assets/templates/general.json";
         
     | 
| 
      
 249 
     | 
    
         
            +
            import PersonalDetailsTemplateJson from "./assets/templates/personalDetails.json";
         
     | 
| 
      
 250 
     | 
    
         
            +
            import TableTemplateJson from "./assets/templates/table.json";
         
     | 
| 
       233 
251 
     | 
    
         
             
            export default {
         
     | 
| 
       234 
252 
     | 
    
         
             
              props: {
         
     | 
| 
       235 
253 
     | 
    
         
             
                baseConfig: Object,
         
     | 
| 
       236 
254 
     | 
    
         
             
                permissions: Array,
         
     | 
| 
       237 
255 
     | 
    
         
             
                basicComponents: Array,
         
     | 
| 
       238 
256 
     | 
    
         
             
                layoutComponents: Array,
         
     | 
| 
       239 
     | 
    
         
            -
                 
     | 
| 
      
 257 
     | 
    
         
            +
                formConfig: Object,
         
     | 
| 
       240 
258 
     | 
    
         
             
                oauthConfig: Object,
         
     | 
| 
       241 
259 
     | 
    
         
             
                apiOptions: Array
         
     | 
| 
       242 
260 
     | 
    
         
             
              },
         
     | 
| 
         @@ -249,7 +267,6 @@ export default { 
     | 
|
| 
       249 
267 
     | 
    
         
             
                    data: null
         
     | 
| 
       250 
268 
     | 
    
         
             
                  },
         
     | 
| 
       251 
269 
     | 
    
         
             
                  dialogResultData: { show: false, data: null },
         
     | 
| 
       252 
     | 
    
         
            -
             
     | 
| 
       253 
270 
     | 
    
         
             
                  dialogTitles: {
         
     | 
| 
       254 
271 
     | 
    
         
             
                    previewPc: "预览-电脑端",
         
     | 
| 
       255 
272 
     | 
    
         
             
                    previewH5: "预览-移动端",
         
     | 
| 
         @@ -258,7 +275,14 @@ export default { 
     | 
|
| 
       258 
275 
     | 
    
         
             
                    generateJson: "生成JSON",
         
     | 
| 
       259 
276 
     | 
    
         
             
                    generateCode: "生成代码"
         
     | 
| 
       260 
277 
     | 
    
         
             
                  },
         
     | 
| 
       261 
     | 
    
         
            -
                   
     | 
| 
      
 278 
     | 
    
         
            +
                  formTemplates: [
         
     | 
| 
      
 279 
     | 
    
         
            +
                    EmptyTemplateJson,
         
     | 
| 
      
 280 
     | 
    
         
            +
                    GeneralTemplateJson,
         
     | 
| 
      
 281 
     | 
    
         
            +
                    PersonalDetailsTemplateJson,
         
     | 
| 
      
 282 
     | 
    
         
            +
                    TableTemplateJson
         
     | 
| 
      
 283 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 284 
     | 
    
         
            +
                  formTemplateActive: null,
         
     | 
| 
      
 285 
     | 
    
         
            +
                  slotKeys: []
         
     | 
| 
       262 
286 
     | 
    
         
             
                };
         
     | 
| 
       263 
287 
     | 
    
         
             
              },
         
     | 
| 
       264 
288 
     | 
    
         
             
              created() {},
         
     | 
| 
         @@ -418,13 +442,13 @@ export default { 
     | 
|
| 
       418 
442 
     | 
    
         
             
                  let data = "";
         
     | 
| 
       419 
443 
     | 
    
         
             
                  switch (action) {
         
     | 
| 
       420 
444 
     | 
    
         
             
                    case "generateJson":
         
     | 
| 
       421 
     | 
    
         
            -
                      data = JSON.stringify(this. 
     | 
| 
      
 445 
     | 
    
         
            +
                      data = JSON.stringify(this.formConfig, null, 2);
         
     | 
| 
       422 
446 
     | 
    
         
             
                      break;
         
     | 
| 
       423 
447 
     | 
    
         
             
                    case "generateCode":
         
     | 
| 
       424 
448 
     | 
    
         
             
                      data = {
         
     | 
| 
       425 
449 
     | 
    
         
             
                        generate: generateCode(
         
     | 
| 
       426 
450 
     | 
    
         
             
                          {
         
     | 
| 
       427 
     | 
    
         
            -
                            formConfig: JSON.stringify(this. 
     | 
| 
      
 451 
     | 
    
         
            +
                            formConfig: JSON.stringify(this.formConfig, null, 2),
         
     | 
| 
       428 
452 
     | 
    
         
             
                            apiOptions: JSON.stringify(this.apiOptions, null, 2),
         
     | 
| 
       429 
453 
     | 
    
         
             
                            oauthConfig: JSON.stringify(this.oauthConfig, null, 2)
         
     | 
| 
       430 
454 
     | 
    
         
             
                          },
         
     | 
| 
         @@ -432,7 +456,7 @@ export default { 
     | 
|
| 
       432 
456 
     | 
    
         
             
                        ),
         
     | 
| 
       433 
457 
     | 
    
         
             
                        making: generateCode(
         
     | 
| 
       434 
458 
     | 
    
         
             
                          {
         
     | 
| 
       435 
     | 
    
         
            -
                            formConfig: JSON.stringify(this. 
     | 
| 
      
 459 
     | 
    
         
            +
                            formConfig: JSON.stringify(this.formConfig, null, 2),
         
     | 
| 
       436 
460 
     | 
    
         
             
                            apiOptions: JSON.stringify(this.apiOptions, null, 2),
         
     | 
| 
       437 
461 
     | 
    
         
             
                            oauthConfig: JSON.stringify(this.oauthConfig, null, 2)
         
     | 
| 
       438 
462 
     | 
    
         
             
                          },
         
     | 
| 
         @@ -440,6 +464,9 @@ export default { 
     | 
|
| 
       440 
464 
     | 
    
         
             
                        )
         
     | 
| 
       441 
465 
     | 
    
         
             
                      };
         
     | 
| 
       442 
466 
     | 
    
         
             
                      break;
         
     | 
| 
      
 467 
     | 
    
         
            +
                    case "importTemplate":
         
     | 
| 
      
 468 
     | 
    
         
            +
                      this.formTemplateActive = null;
         
     | 
| 
      
 469 
     | 
    
         
            +
                      break;
         
     | 
| 
       443 
470 
     | 
    
         | 
| 
       444 
471 
     | 
    
         
             
                    default:
         
     | 
| 
       445 
472 
     | 
    
         
             
                      break;
         
     | 
| 
         @@ -453,6 +480,14 @@ export default { 
     | 
|
| 
       453 
480 
     | 
    
         
             
                  if (this.dialog.action === "importJson") {
         
     | 
| 
       454 
481 
     | 
    
         
             
                    this.handleClick("import-json", JSON.parse(this.dialog.data));
         
     | 
| 
       455 
482 
     | 
    
         
             
                  }
         
     | 
| 
      
 483 
     | 
    
         
            +
                  if (
         
     | 
| 
      
 484 
     | 
    
         
            +
                    this.dialog.action === "importTemplate" &&
         
     | 
| 
      
 485 
     | 
    
         
            +
                    this.formTemplateActive !== null
         
     | 
| 
      
 486 
     | 
    
         
            +
                  ) {
         
     | 
| 
      
 487 
     | 
    
         
            +
                    const list = this.formTemplates[this.formTemplateActive].data.list;
         
     | 
| 
      
 488 
     | 
    
         
            +
                    this.formConfig.list = deepClone(list);
         
     | 
| 
      
 489 
     | 
    
         
            +
                    this.$emit("importTemplate");
         
     | 
| 
      
 490 
     | 
    
         
            +
                  }
         
     | 
| 
       456 
491 
     | 
    
         
             
                  this.handleDialogClose();
         
     | 
| 
       457 
492 
     | 
    
         
             
                },
         
     | 
| 
       458 
493 
     | 
    
         
             
                handleDialogFullscreen() {
         
     | 
| 
         @@ -472,8 +507,8 @@ export default { 
     | 
|
| 
       472 
507 
     | 
    
         
             
                },
         
     | 
| 
       473 
508 
     | 
    
         
             
                handleNetworkConfig() {
         
     | 
| 
       474 
509 
     | 
    
         
             
                  const fieldsApi = {
         
     | 
| 
       475 
     | 
    
         
            -
                    fields: this. 
     | 
| 
       476 
     | 
    
         
            -
                    mounted: this. 
     | 
| 
      
 510 
     | 
    
         
            +
                    fields: this.formConfig.config.fields.api,
         
     | 
| 
      
 511 
     | 
    
         
            +
                    mounted: this.formConfig.config.mounted.api
         
     | 
| 
       477 
512 
     | 
    
         
             
                  };
         
     | 
| 
       478 
513 
     | 
    
         
             
                  const initList = list => {
         
     | 
| 
       479 
514 
     | 
    
         
             
                    for (const item of list) {
         
     | 
| 
         @@ -490,13 +525,16 @@ export default { 
     | 
|
| 
       490 
525 
     | 
    
         
             
                      }
         
     | 
| 
       491 
526 
     | 
    
         
             
                    }
         
     | 
| 
       492 
527 
     | 
    
         
             
                  };
         
     | 
| 
       493 
     | 
    
         
            -
                  initList(this. 
     | 
| 
      
 528 
     | 
    
         
            +
                  initList(this.formConfig.list);
         
     | 
| 
       494 
529 
     | 
    
         
             
                  const apis = Object.values(fieldsApi);
         
     | 
| 
       495 
530 
     | 
    
         
             
                  const network = {};
         
     | 
| 
       496 
531 
     | 
    
         
             
                  this.apiOptions.map(item => {
         
     | 
| 
       497 
532 
     | 
    
         
             
                    if (apis.includes(item.id)) network[item.id] = item;
         
     | 
| 
       498 
533 
     | 
    
         
             
                  });
         
     | 
| 
       499 
     | 
    
         
            -
                  this. 
     | 
| 
      
 534 
     | 
    
         
            +
                  this.formConfig.config.network = network;
         
     | 
| 
      
 535 
     | 
    
         
            +
                },
         
     | 
| 
      
 536 
     | 
    
         
            +
                handleFormTemplateClick(index) {
         
     | 
| 
      
 537 
     | 
    
         
            +
                  this.formTemplateActive = index;
         
     | 
| 
       500 
538 
     | 
    
         
             
                }
         
     | 
| 
       501 
539 
     | 
    
         
             
              }
         
     | 
| 
       502 
540 
     | 
    
         
             
            };
         
     | 
| 
         @@ -520,6 +558,23 @@ export default { 
     | 
|
| 
       520 
558 
     | 
    
         
             
                justify-content: right;
         
     | 
| 
       521 
559 
     | 
    
         
             
              }
         
     | 
| 
       522 
560 
     | 
    
         | 
| 
      
 561 
     | 
    
         
            +
              .formTemplates {
         
     | 
| 
      
 562 
     | 
    
         
            +
                .formTemplates-item {
         
     | 
| 
      
 563 
     | 
    
         
            +
                  display: inline-block;
         
     | 
| 
      
 564 
     | 
    
         
            +
                  margin: 10px;
         
     | 
| 
      
 565 
     | 
    
         
            +
                  padding: 10px;
         
     | 
| 
      
 566 
     | 
    
         
            +
                  width: 230px;
         
     | 
| 
      
 567 
     | 
    
         
            +
                  border-radius: 4px;
         
     | 
| 
      
 568 
     | 
    
         
            +
                  transition: 0.25s;
         
     | 
| 
      
 569 
     | 
    
         
            +
             
     | 
| 
      
 570 
     | 
    
         
            +
                  img {
         
     | 
| 
      
 571 
     | 
    
         
            +
                    width: 100%;
         
     | 
| 
      
 572 
     | 
    
         
            +
                    height: 230px;
         
     | 
| 
      
 573 
     | 
    
         
            +
                    object-fit: contain;
         
     | 
| 
      
 574 
     | 
    
         
            +
                  }
         
     | 
| 
      
 575 
     | 
    
         
            +
                }
         
     | 
| 
      
 576 
     | 
    
         
            +
              }
         
     | 
| 
      
 577 
     | 
    
         
            +
             
     | 
| 
       523 
578 
     | 
    
         
             
              .previewH5 {
         
     | 
| 
       524 
579 
     | 
    
         
             
                width: 300px;
         
     | 
| 
       525 
580 
     | 
    
         
             
                height: 649px;
         
     | 
| 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {
         
     | 
| 
      
 2 
     | 
    
         
            +
              "name": "空白表单",
         
     | 
| 
      
 3 
     | 
    
         
            +
              "data": {
         
     | 
| 
      
 4 
     | 
    
         
            +
                "list": [],
         
     | 
| 
      
 5 
     | 
    
         
            +
                "config": {
         
     | 
| 
      
 6 
     | 
    
         
            +
                  "fields": {
         
     | 
| 
      
 7 
     | 
    
         
            +
                    "type": "api",
         
     | 
| 
      
 8 
     | 
    
         
            +
                    "api": "",
         
     | 
| 
      
 9 
     | 
    
         
            +
                    "remote": true
         
     | 
| 
      
 10 
     | 
    
         
            +
                  },
         
     | 
| 
      
 11 
     | 
    
         
            +
                  "ui": "element",
         
     | 
| 
      
 12 
     | 
    
         
            +
                  "title": "",
         
     | 
| 
      
 13 
     | 
    
         
            +
                  "width": "",
         
     | 
| 
      
 14 
     | 
    
         
            +
                  "labelWidth": 100,
         
     | 
| 
      
 15 
     | 
    
         
            +
                  "labelPosition": "right",
         
     | 
| 
      
 16 
     | 
    
         
            +
                  "labelSuffix": ":",
         
     | 
| 
      
 17 
     | 
    
         
            +
                  "size": "small",
         
     | 
| 
      
 18 
     | 
    
         
            +
                  "disabled": false,
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "hideLabel": false,
         
     | 
| 
      
 20 
     | 
    
         
            +
                  "mounted": {
         
     | 
| 
      
 21 
     | 
    
         
            +
                    "api": ""
         
     | 
| 
      
 22 
     | 
    
         
            +
                  },
         
     | 
| 
      
 23 
     | 
    
         
            +
                  "eventScript": [
         
     | 
| 
      
 24 
     | 
    
         
            +
                    {
         
     | 
| 
      
 25 
     | 
    
         
            +
                      "id": "mounted",
         
     | 
| 
      
 26 
     | 
    
         
            +
                      "label": "mounted",
         
     | 
| 
      
 27 
     | 
    
         
            +
                      "value": ""
         
     | 
| 
      
 28 
     | 
    
         
            +
                    },
         
     | 
| 
      
 29 
     | 
    
         
            +
                    {
         
     | 
| 
      
 30 
     | 
    
         
            +
                      "id": "refresh",
         
     | 
| 
      
 31 
     | 
    
         
            +
                      "label": "refresh",
         
     | 
| 
      
 32 
     | 
    
         
            +
                      "value": ""
         
     | 
| 
      
 33 
     | 
    
         
            +
                    }
         
     | 
| 
      
 34 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 35 
     | 
    
         
            +
                  "network": {}
         
     | 
| 
      
 36 
     | 
    
         
            +
                }
         
     | 
| 
      
 37 
     | 
    
         
            +
              },
         
     | 
| 
      
 38 
     | 
    
         
            +
              "img": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJXCAYAAABPMCoJAAABSGlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8bAwiDFwMmgwGCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsisbp07V2MmPjdxvXLacUqm13NM9SiAKyW1OBlI/wHi9OSCohIGBsYUIFu5vKQAxO4AskWKgI4CsueA2OkQ9gYQOwnCPgJWExLkDGTfALIFkjMSgWYwvgCydZKQxNOR2FB7QYDXxdXHRyHUyMTQ0iOYgHtJBiWpFSUg2jm/oLIoMz2jRMERGEqpCp55yXo6CkYGRkYMDKAwh6j+HAQOS0axfQix/CUMDBbfGBiYJyLEkqYwMGxvY2CQuIUQU5nHwMDfwsCw7VBBYlEi3AGM31iK04yNIGweewYG1rv//3/WYGBgn8jA8Hfi//+/F////3cx0PzbDAwHKgHHO2Hu23HkSwAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAACWKADAAQAAAABAAACVwAAAAAOBDdzAAA0sUlEQVR4Ae3d6ZPcRnon4Oybl6TR3N4dhx22Y73+4v2y//zu2juxozk8OkYj6qLucySNRIni0VddvcgqFbtJkwTRnVWJTDyI6GGzgUq8+bwQ59coFLBx0izBQoAAAQIECBAgkExgM9lIBiJAgAABAgQIEJgLCFgOBAIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAABAgQIJBYQsBKDGo4AAQIECBAgIGA5BggQIECAAAECiQUErMSghiNAgAABAgQICFiOAQIECBAgQIBAYgEBKzGo4QgQIECAAAECApZjgAABAgQIECCQWEDASgxqOAIECBAgQICAgOUYIECAAAECBAgkFhCwEoMajgABAgQIECAgYDkGCBAgQIAAAQKJBQSsxKCGI0CAAAECBAgIWI4BAgQIECBAgEBiAQErMajhCBAgQIAAAQIClmOAAAECBAgQIJBYQMBKDGo4AgQIECBAgICA5RggQIAAAQIECCQWELASgxqOAAECBAgQICBgOQYIECBAgAABAokFBKzEoIYjQIAAAQIECAhYjgECBAgQIECAQGIBASsxqOEIECBAgAABAgKWY4AAAQIECBAgkFhAwEoMajgCBAgQIECAgIDlGCBAgAAB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J0CAAAECBAi0CQhYbULWEyBAgAABAgQ6CghYHcFsToAAAQIECBBoExCw2oSsJ0CAAAECBAh0FBCwOoLZnAABAgQIECDQJiBgtQlZT4AAAQIECBDoKCBgdQSzOQECBAgQIECgTUDAahOyngABAgQIECDQUUDA6ghmcwIECBAgQIBAm4CA1SZkPQECBAgQIECgo4CA1RHM5gQIECBAgACBNgEBq03IegIECBAgQIBARwEBqyOYzQkQIECAAAECbQICVpuQ9QQIECBAgACBjgICVkcwmxMgQIAAAQIE2gQErDYh6wkQIECAAAECHQUErI5gNidAgAABAgQItAkIWG1C1hMgQIAAAQIEOgoIWB3BbE6AAAECBAgQaBMQsNqErCdAgAABAgQIdBQQsDqC2ZwAAQIECBAg0CYgYLUJWU+AAAECBAgQ6CggYHUEszkBAgQIECBAoE1AwGoTsp4AAQIECBAg0FFAwOoIZnMCBAgQIECAQJuAgNUmZD0BAgQIECBAoKOAgNURzOYECBAgQIAAgTYBAatNyHoCBAgQIECAQEcBAasjmM0JECBAgAABAm0C/x9YvWPWbALEKQAAAABJRU5ErkJggg=="
         
     | 
| 
      
 39 
     | 
    
         
            +
            }
         
     |