Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

晴为镜 1 сар өмнө
parent
commit
63604c58c1

+ 107 - 26
zkqy-ui/src/components/LangSelect/index.vue

@@ -1,30 +1,41 @@
 <template>
 <template>
-  <el-dropdown trigger="click" class="international" @command="handleSetLanguage">
-    <div>
-      <svg-icon class-name="international-icon" icon-class="language" />
+  <el-dropdown
+      trigger="click"
+      class="language-switcher"
+      @command="handleSetLanguage"
+  >
+    <div class="language-trigger">
+      <svg-icon class-name="language-icon" icon-class="language" />
+      <span class="current-language">{{ language === 'zh_CN' ? '中文' : 'English' }}</span>
+      <i class="el-icon-arrow-down"></i>
     </div>
     </div>
-    <el-dropdown-menu slot="dropdown">
-      <el-dropdown-item :disabled="language==='zh_CN'" command="zh_CN">
-        中文
+    <el-dropdown-menu slot="dropdown" class="language-menu">
+      <el-dropdown-item
+          :class="{ 'language-active': language==='zh_CN' }"
+          command="zh_CN"
+      >
+        <span class="language-option">
+          <span class="language-flag">🇨🇳</span>
+          <span>中文</span>
+        </span>
       </el-dropdown-item>
       </el-dropdown-item>
-      <el-dropdown-item :disabled="language==='en_US'" command="en_US">
-        English
+      <el-dropdown-item
+          :class="{ 'language-active': language==='en_US' }"
+          command="en_US"
+      >
+        <span class="language-option">
+          <span class="language-flag">🇺🇸</span>
+          <span>English</span>
+        </span>
       </el-dropdown-item>
       </el-dropdown-item>
     </el-dropdown-menu>
     </el-dropdown-menu>
   </el-dropdown>
   </el-dropdown>
 </template>
 </template>
 
 
 <script>
 <script>
-import { changeLanguage } from "@/api/login";
+
 
 
 export default {
 export default {
-  name: 'LangSelect',
-  props: {
-    titlePathFlag: {
-      type: Boolean,
-      default: false
-    }
-  },
   computed: {
   computed: {
     language() {
     language() {
       console.log('this.$store.getters.language',this.$store.getters.language)
       console.log('this.$store.getters.language',this.$store.getters.language)
@@ -35,15 +46,8 @@ export default {
     handleSetLanguage(value) {
     handleSetLanguage(value) {
       console.log('value',value)
       console.log('value',value)
       this.$i18n.locale = value
       this.$i18n.locale = value
-      this.$store.dispatch('app/setLanguage', value)
-      console.log('[判断传入位置]',this.titlePathFlag)
-      if (this.titlePathFlag) {
-        window.location.reload()
-      }
-      // this.$message({ message: '设置语言成功', type: 'success' })
-      // changeLanguage(value).then(response => {
-      //   console.log('response',response)
-      //   window.location.reload();
+      this.$store.dispatch('app/setLanguage', value);
+      window.location.reload();
       // });
       // });
     }
     }
   },
   },
@@ -51,4 +55,81 @@ export default {
     console.log(1234567)
     console.log(1234567)
   }
   }
 }
 }
-</script>
+</script>
+<style lang="scss" scoped>
+.language-switcher {
+  cursor: pointer;
+  transition: all 0.3s;
+
+  &:hover {
+    opacity: 0.8;
+  }
+}
+
+.language-trigger {
+  display: flex;
+  align-items: center;
+  padding: 0 12px;
+  height: 40px;
+  color: #606266;
+  font-size: 14px;
+
+  .language-icon {
+    font-size: 18px;
+    margin-right: 5px;
+    color: #5a5e66;
+  }
+
+  .current-language {
+    margin: 0 5px;
+    font-weight: 500;
+  }
+
+  .el-icon-arrow-down {
+    font-size: 12px;
+    transition: transform 0.3s;
+  }
+
+  &:hover {
+    .el-icon-arrow-down {
+      transform: rotate(180deg);
+    }
+  }
+}
+
+.language-menu {
+  border-radius: 6px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+  border: none;
+  padding: 6px 0;
+
+  .el-dropdown-menu__item {
+    padding: 8px 16px;
+    transition: all 0.2s;
+
+    &:hover {
+      background-color: #f5f7fa;
+      color: #409eff;
+    }
+  }
+
+  .language-option {
+    display: flex;
+    align-items: center;
+  }
+
+  .language-flag {
+    margin-right: 8px;
+    font-size: 16px;
+  }
+
+  .language-active {
+    background-color: #ecf5ff;
+    color: #409eff;
+
+    &:hover {
+      background-color: #ecf5ff;
+    }
+  }
+}
+</style>

+ 1 - 1
zkqy-ui/src/views/bpmprocess/scriptManage.vue

@@ -250,7 +250,7 @@
                   icon="el-icon-edit"
                   icon="el-icon-edit"
                   @click="handleUpdate(scope.row)"
                   @click="handleUpdate(scope.row)"
                   v-hasPermi="['system:script:edit']"
                   v-hasPermi="['system:script:edit']"
-                >{{ $t('normal.update') }}
+                >{{ $t('update') }}
                 </el-button>
                 </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
 
 

+ 79 - 17
zkqy-ui/src/views/formCreate/components/FcDesigner.vue

@@ -374,6 +374,7 @@ import {
     copyTextToClipboard,
     copyTextToClipboard,
     formTemplate,
     formTemplate,
     htmlTemplate,
     htmlTemplate,
+    htmlTemplateCard,
     htmlTemplateY,
     htmlTemplateY,
     getFormRuleDescription,
     getFormRuleDescription,
     getRuleDescription,
     getRuleDescription,
@@ -749,23 +750,23 @@ export default defineComponent({
         console.log('初始 form.rule:', data.form.rule);
         console.log('初始 form.rule:', data.form.rule);
         // 在数据初始化后定义监听器
         // 在数据初始化后定义监听器
         watch(() => data.activeTab, (newVal, oldVal) => {
         watch(() => data.activeTab, (newVal, oldVal) => {
-            console.log('[监听] activeTab 发生变化:', { newVal, oldVal });
-            console.log('[监听] 当前状态:', {
-                activeMenuTab: data.activeMenuTab,
-                activeRule: data.activeRule,
-                customFormIsShow: data.customForm?.isShow
-            });
+            // console.log('[监听] activeTab 发生变化:', { newVal, oldVal });
+            // console.log('[监听] 当前状态:', {
+            //     activeMenuTab: data.activeMenuTab,
+            //     activeRule: data.activeRule,
+            //     customFormIsShow: data.customForm?.isShow
+            // });
             if (newVal === 'form') {
             if (newVal === 'form') {
-                console.log('[监听] 设置 activeMenuTab 为 menu');
+                // console.log('[监听] 设置 activeMenuTab 为 menu');
                 data.activeMenuTab = 'menu';
                 data.activeMenuTab = 'menu';
             }
             }
         });
         });
 
 
         watch(() => data.activeRule, (newVal,oldVal) => {
         watch(() => data.activeRule, (newVal,oldVal) => {
-            console.log('[监听] activeRule 发生变化:', {
-                newVal,
-                oldVal: data.activeRule?._fc_id
-            });
+            // console.log('[监听] activeRule 发生变化:', {
+            //     newVal,
+            //     oldVal: data.activeRule?._fc_id
+            // });
             newVal && methods.updateRuleFormData();
             newVal && methods.updateRuleFormData();
            
            
             vm.$emit('activeRuleChange', {
             vm.$emit('activeRuleChange', {
@@ -773,7 +774,7 @@ export default defineComponent({
             });
             });
         }, { deep: true, flush: 'post' }); // 深度监听,延迟到 DOM 更新后触发
         }, { deep: true, flush: 'post' }); // 深度监听,延迟到 DOM 更新后触发
         watch(() => data.customForm?.isShow, (newVal) => {
         watch(() => data.customForm?.isShow, (newVal) => {
-            console.log('[监听] customForm.isShow 发生变化:', newVal);
+            // console.log('[监听] customForm.isShow 发生变化:', newVal);
         });
         });
         watch(() => data.preview.state, function (n) {
         watch(() => data.preview.state, function (n) {
             console.log('n',n)
             console.log('n',n)
@@ -812,14 +813,34 @@ export default defineComponent({
         };
         };
 
 
         watch(() => locale.value, (n) => {
         watch(() => locale.value, (n) => {
-            console.log('[监听] locale.value 发生变化:',locale.value)
+            // console.log('[1. Locale Change] 开始切换语言:', n);
             _t = n ? useLocale(locale).t : globalT;
             _t = n ? useLocale(locale).t : globalT;
+                // 后来添加的一行清空操作--切换语言时执行清空
+            methods.clearDragRule();
+            //     // 记录当前状态
+            // console.log('[2. Current State]', {
+            //     formRule: data.form.rule,
+            //     baseFormRule: data.baseForm.rule,
+            //     validateFormRule: data.validateForm.rule,
+            //     activeRule: data.activeRule
+            // });
             const formVal = data.form.api.formData && data.form.api.formData();
             const formVal = data.form.api.formData && data.form.api.formData();
             const baseFormVal = data.baseForm.api.formData && data.baseForm.api.formData();
             const baseFormVal = data.baseForm.api.formData && data.baseForm.api.formData();
             const validateFormVal = data.validateForm.api.formData && data.validateForm.api.formData();
             const validateFormVal = data.validateForm.api.formData && data.validateForm.api.formData();
+            // console.log('[3. Form Values]', {
+            //     formVal,
+            //     baseFormVal,
+            //     validateFormVal
+            // });
+
             data.validateForm.rule = tidyRuleConfig(validate, validateRule.value, { t });
             data.validateForm.rule = tidyRuleConfig(validate, validateRule.value, { t });
             data.baseForm.rule = tidyRuleConfig(field, baseRule.value, { t });
             data.baseForm.rule = tidyRuleConfig(field, baseRule.value, { t });
             data.form.rule = tidyRuleConfig(form, formRule.value, { t });
             data.form.rule = tidyRuleConfig(form, formRule.value, { t });
+            // console.log('[4. Updated Rules]', {
+            //     validateFormRule: data.validateForm.rule,
+            //     baseFormRule: data.baseForm.rule,
+            //     formRule: data.form.rule
+            // });
 
 
             data.cacheProps = {};
             data.cacheProps = {};
             const rule = data.activeRule;
             const rule = data.activeRule;
@@ -828,11 +849,17 @@ export default defineComponent({
                 propsVal = data.propsForm.api.formData && data.propsForm.api.formData();
                 propsVal = data.propsForm.api.formData && data.propsForm.api.formData();
                 data.propsForm.rule = data.cacheProps[rule._fc_id] = methods.getPropsRule(rule);
                 data.propsForm.rule = data.cacheProps[rule._fc_id] = methods.getPropsRule(rule);
             }
             }
+            // console.log('[5. Updated Props]', {
+            //     activeRule: rule,
+            //     propsVal
+            // });
             nextTick(() => {
             nextTick(() => {
+                // console.log('[6. NextTick] 开始更新表单值');
                 formVal && data.form.api.setValue(formVal);
                 formVal && data.form.api.setValue(formVal);
                 baseFormVal && data.baseForm.api.setValue(baseFormVal);
                 baseFormVal && data.baseForm.api.setValue(baseFormVal);
                 validateFormVal && data.validateForm.api.setValue(validateFormVal);
                 validateFormVal && data.validateForm.api.setValue(validateFormVal);
                 propsVal && data.propsForm.api.setValue(propsVal);
                 propsVal && data.propsForm.api.setValue(propsVal);
+                // console.log('[7. NextTick] 表单值更新完成');
             });
             });
         });
         });
 
 
@@ -1035,7 +1062,8 @@ export default defineComponent({
                     { language: 'xml' }
                     { language: 'xml' }
                 ).value
                 ).value
             },
             },
-            getSaveDate(zkqyDataCr,dataSource,url) {
+            getSaveDate(zkqyCardItem,zkqyDataCr,dataSource,url) {
+                console.log('zkqyDataCr',zkqyDataCr)
                 let zkqyData;
                 let zkqyData;
                 if(zkqyDataCr){
                 if(zkqyDataCr){
                     zkqyData = zkqyDataCr
                     zkqyData = zkqyDataCr
@@ -1043,13 +1071,16 @@ export default defineComponent({
                     zkqyData = "[]"
                     zkqyData = "[]"
                 }
                 }
                 console.log('zkqyData',zkqyData)
                 console.log('zkqyData',zkqyData)
-
                 const rule = methods.getJson();
                 const rule = methods.getJson();
                 const options = methods.getOptionsJson();
                 const options = methods.getOptionsJson();
                 data.preview.rule = designerForm.parseJson(rule);
                 data.preview.rule = designerForm.parseJson(rule);
                 data.preview.option = designerForm.parseJson(options);
                 data.preview.option = designerForm.parseJson(options);
                 // html
                 // html
                 let htmlDataMb = htmlTemplate(rule, options,zkqyData,dataSource,url); // 直接调用,不经过高亮
                 let htmlDataMb = htmlTemplate(rule, options,zkqyData,dataSource,url); // 直接调用,不经过高亮
+                if(zkqyCardItem){
+                    console.log('zkqyData',zkqyData)
+                   htmlDataMb = htmlTemplateCard(rule, options,zkqyData,dataSource,url);// 直接调用,不经过高亮
+                }
                 //  组件
                 //  组件
                 let componentDataMb = formTemplate(rule, options);
                 let componentDataMb = formTemplate(rule, options);
                 let saveDate = {
                 let saveDate = {
@@ -1151,7 +1182,7 @@ export default defineComponent({
                     console.log('componentRule.value[name]-----------',componentRule.value[name])
                     console.log('componentRule.value[name]-----------',componentRule.value[name])
                 });
                 });
                 data.cacheProps = {};
                 data.cacheProps = {};
-                console.log('[[datadata]]',data)
+                // console.log('[[datadata]]',data)
                 const activeRule = data.activeRule;
                 const activeRule = data.activeRule;
                 if (activeRule) {
                 if (activeRule) {
                     const propsVal = data.propsForm.api.formData && data.propsForm.api.formData();
                     const propsVal = data.propsForm.api.formData && data.propsForm.api.formData();
@@ -1396,7 +1427,7 @@ export default defineComponent({
 
 
             },
             },
             formOptChange(field, value) {
             formOptChange(field, value) {
-                console.log('[FormOptChange] field:', field, 'value:', value);
+                // console.log('[FormOptChange] field:', field, 'value:', value);
                 // 1. 更新表单值
                 // 1. 更新表单值
                 data.form.value[field] = value;
                 data.form.value[field] = value;
 
 
@@ -1542,20 +1573,28 @@ export default defineComponent({
                 });
                 });
             },
             },
             triggerActive(rule) {
             triggerActive(rule) {
+                // console.log('[14. TriggerActive] 开始激活规则:', rule);
                 let dragTool;
                 let dragTool;
                 if (is.String(rule)) {
                 if (is.String(rule)) {
                     rule = methods.findRule(rule);
                     rule = methods.findRule(rule);
+                    // console.log('[15. Found Rule]', rule);
                 }
                 }
                 if (!rule) {
                 if (!rule) {
+                    // console.log('[TriggerActive] 规则不存在,退出');
                     return;
                     return;
                 }
                 }
                 if (rule._menu.inside) {
                 if (rule._menu.inside) {
                     dragTool = rule.children[0];
                     dragTool = rule.children[0];
                 } else {
                 } else {
+                    console.log( rule);
+
                     dragTool = rule.__fc__.parent.rule;
                     dragTool = rule.__fc__.parent.rule;
                 }
                 }
+                // console.log('[16. DragTool]', dragTool);
+
                 if (dragTool && dragTool.type === 'DragTool') {
                 if (dragTool && dragTool.type === 'DragTool') {
                     const el = data.dragForm.api.el(dragTool.__fc__.id);
                     const el = data.dragForm.api.el(dragTool.__fc__.id);
+                    // console.log('[17. Element]', el);
                     if (el) {
                     if (el) {
                         fcx.active = el.id;
                         fcx.active = el.id;
                         emit('active', rule);
                         emit('active', rule);
@@ -1772,25 +1811,40 @@ export default defineComponent({
                 return flag;
                 return flag;
             },
             },
             dragMenu({ menu, children, index, slot }) {
             dragMenu({ menu, children, index, slot }) {
+                // console.log('[8. DragMenu] 开始拖拽操作:', {
+                //     menu,
+                //     children,
+                //     index,
+                //     slot
+                // });
+
                 if (data.inputForm.state) {
                 if (data.inputForm.state) {
+                    // console.log('[DragMenu] 输入表单状态中,退出');
                     return;
                     return;
                 }
                 }
                 if (menu.only && methods.checkOnly(menu)) {
                 if (menu.only && methods.checkOnly(menu)) {
+                    // console.log('[DragMenu] 组件唯一性检查失败,退出');
                     return;
                     return;
                 }
                 }
                 methods.handleAddBefore();
                 methods.handleAddBefore();
                 const dragRule = data.dragRuleList[menu.name];
                 const dragRule = data.dragRuleList[menu.name];
+                // console.log('[9. DragRule]', dragRule);
                 emit('drag', {
                 emit('drag', {
                     item: menu, dragRule
                     item: menu, dragRule
                 });
                 });
                 const rule = methods.makeRule(data.dragRuleList[dragRule.name]);
                 const rule = methods.makeRule(data.dragRuleList[dragRule.name]);
+                // console.log('[10. Made Rule]', rule);
                 if (slot) {
                 if (slot) {
                     rule.slot = slot;
                     rule.slot = slot;
                 }
                 }
                 children.splice(index, 0, rule);
                 children.splice(index, 0, rule);
                 const firstRule = (rule.type === 'DragTool') ? rule.children[0] : rule;
                 const firstRule = (rule.type === 'DragTool') ? rule.children[0] : rule;
+                // console.log('[11. First Rule]', firstRule);
+
                 methods.handleAddAfter({ rule });
                 methods.handleAddAfter({ rule });
+
                 if (firstRule && methods.getConfig('autoActive', true)) {
                 if (firstRule && methods.getConfig('autoActive', true)) {
+                    // console.log('[12. Auto Active] 准备激活规则');
                     nextTick(() => {
                     nextTick(() => {
                         methods.triggerActive(firstRule);
                         methods.triggerActive(firstRule);
                     });
                     });
@@ -2364,6 +2418,14 @@ export default defineComponent({
 >>> .checkbox .checkbox_props form .fc-form-row .el-col:nth-child(2),
 >>> .checkbox .checkbox_props form .fc-form-row .el-col:nth-child(2),
 >>> .radio .radio_props form .fc-form-row .el-col:nth-child(1),
 >>> .radio .radio_props form .fc-form-row .el-col:nth-child(1),
 >>> .radio .radio_props form .fc-form-row .el-col:nth-child(2)
 >>> .radio .radio_props form .fc-form-row .el-col:nth-child(2)
+/* >>> .elCard .elCard_props form .fc-form-row .el-col:nth-child(3),
+>>> .elCard .elCard_props form .fc-form-row .el-col:nth-child(4),
+>>> .elCard .elCard_props form .fc-form-row .el-col:nth-child(5) */
+{
+    display: none
+}
+
+>>> .upload .upload_props form .fc-form-row .el-col:nth-child(4)
 {
 {
     display: none
     display: none
 }
 }

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 372 - 19
zkqy-ui/src/views/formCreate/layout/home/formCreateMange.vue


+ 35 - 13
zkqy-ui/src/views/formCreate/layout/home/templateJs/zkqyTable.js

@@ -7,12 +7,20 @@ var zkqyTable = {
     template: \`
     template: \`
     <div class="zkqy-table">
     <div class="zkqy-table">
         <div class="table-container">
         <div class="table-container">
-            <div class="zkqy-table-btn" style="margin-bottom: 10px;">
+            <div class="zkqy-table-btn" style="margin-bottom: 10px; display: flex; gap: 10px;">
                 <el-button type="primary" plain @click="add">新增</el-button>
                 <el-button type="primary" plain @click="add">新增</el-button>
                 <el-button type="primary" plain @click="edit">修改</el-button>
                 <el-button type="primary" plain @click="edit">修改</el-button>
             </div>
             </div>
-            <el-table :data="tableData" style="width: 100%" :fit="true" border>
-                <el-table-column v-if="columns && columns.length > 0" :width="40">
+            <el-table 
+                :data="tableData" 
+                style="width: 100%" 
+                :fit="true" 
+                border 
+                :cell-style="{padding: '8px'}"
+                :header-cell-style="{padding: '8px'}"
+                :row-style="{height: '40px'}"
+                :default-sort="{prop: 'date', order: 'descending'}">
+                <el-table-column v-if="columns && columns.length > 0" :width="50">
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <el-radio class="radio" 
                         <el-radio class="radio" 
                                  :label="scope.row" 
                                  :label="scope.row" 
@@ -27,10 +35,10 @@ var zkqyTable = {
                     :key="column.prop" 
                     :key="column.prop" 
                     :prop="column.prop" 
                     :prop="column.prop" 
                     :label="column.label" 
                     :label="column.label" 
-                    :width="column.width"  
-                    flex="1">
+                    min-width="100"
+                    show-overflow-tooltip>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column label="操作" width="120" align="center" v-if="columns && columns.length > 0">
+                <el-table-column label="操作" width="100" align="center" v-if="columns && columns.length > 0">
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <el-button size="mini" type="danger" @click="handleDelete(scope.\$index, scope.row)">
                         <el-button size="mini" type="danger" @click="handleDelete(scope.\$index, scope.row)">
                             删除
                             删除
@@ -42,10 +50,11 @@ var zkqyTable = {
                 @size-change="handleSizeChange"
                 @size-change="handleSizeChange"
                 @current-change="handleCurrentChange"
                 @current-change="handleCurrentChange"
                 :current-page="currentPage4"
                 :current-page="currentPage4"
-                :page-sizes="[2, 5, 10, 15]"
-                :page-size="100"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="tableList[0].total">
+                :page-sizes="[5, 10, 20, 30]"
+                :page-size="5"
+                layout="total, sizes, prev, pager, next"
+                :total="tableList[0].total"
+                style="margin-top: 10px; text-align: center;">
             </el-pagination>
             </el-pagination>
         </div>
         </div>
     </div>
     </div>
@@ -61,7 +70,7 @@ var zkqyTable = {
             tableList: [{
             tableList: [{
                 pageId: '',
                 pageId: '',
                 total: 0,
                 total: 0,
-                pageSize: 2,
+                pageSize: 5,
                 pageNum: 1
                 pageNum: 1
             }],
             }],
             baseUrl: '${url}',
             baseUrl: '${url}',
@@ -70,10 +79,14 @@ var zkqyTable = {
                 dbname:'${dataSource}',
                 dbname:'${dataSource}',
                 'Content-Type': 'application/json'
                 'Content-Type': 'application/json'
             },
             },
+            tableHeight: window.innerHeight - 200,
         };
         };
     },
     },
     methods: {
     methods: {
-        // 方法实现...
+        // 添加窗口大小变化监听
+        handleResize() {
+            this.tableHeight = window.innerHeight - 200;
+        },
         add() {
         add() {
             let p = this.zkqyTablePageJson[0]?.props?.addZkqyTableRow
             let p = this.zkqyTablePageJson[0]?.props?.addZkqyTableRow
             if(p){
             if(p){
@@ -272,10 +285,19 @@ var zkqyTable = {
             }
             }
          },
          },
     mounted() {
     mounted() {
-        console.log('父组件传递的 options:', this.pageId);
+        // console.log('父组件传递的 options:', this.pageId);
+        // 添加窗口大小变化监听
+        window.addEventListener('resize', this.handleResize);
+        // 初始化表格高度
+        this.handleResize(); 
+        
         this.tableList[0].pageId = this.pageId
         this.tableList[0].pageId = this.pageId
         let { pageId, pageNum, pageSize } = this.tableList[0];
         let { pageId, pageNum, pageSize } = this.tableList[0];
         this.getTableLimitInfo({ pageId, pageNum, pageSize });
         this.getTableLimitInfo({ pageId, pageNum, pageSize });
+    },
+     beforeDestroy() {
+        // 移除窗口大小变化监听
+        window.removeEventListener('resize', this.handleResize);
     }
     }
 };
 };
 
 

+ 4 - 1
zkqy-ui/src/views/formCreate/locale/en.js

@@ -836,7 +836,10 @@ const En = {
         },
         },
         zkqyTable: {
         zkqyTable: {
             name: '表格',
             name: '表格',
-        }
+        },
+        zkqyCard: {
+            name: '卡片',
+        },
     },
     },
 };
 };
 
 

+ 3 - 0
zkqy-ui/src/views/formCreate/locale/zh-cn.js

@@ -837,6 +837,9 @@ const ZhCn = {
         zkqyTable: {
         zkqyTable: {
             name: '表格',
             name: '表格',
         },
         },
+        zkqyCard: {
+            name: '卡片',
+        },
     },
     },
 };
 };
 
 

+ 182 - 1
zkqy-ui/src/views/formCreate/utils/index.js

@@ -407,10 +407,11 @@ export default {
 }
 }
 
 
 export function htmlTemplate(json, options, zkqyData,dataSource,url) {
 export function htmlTemplate(json, options, zkqyData,dataSource,url) {
-// console.log(zkqyData)
     return `<html lang="zh">
     return `<html lang="zh">
     <head>
     <head>
         <meta charset="UTF-8">
         <meta charset="UTF-8">
+        <!-- 添加移动端视口设置 -->
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
         <!-- Import style -->
         <!-- Import style -->
         <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"/>
         <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"/>
         <!-- Import Vue 2.7 -->
         <!-- Import Vue 2.7 -->
@@ -419,6 +420,11 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
         <script src="https://unpkg.com/element-ui/lib/index.js"></script>
         <script src="https://unpkg.com/element-ui/lib/index.js"></script>
         <!-- Import formCreate -->
         <!-- Import formCreate -->
         <script src="https://unpkg.com/@form-create/element-ui@super"><\/script>
         <script src="https://unpkg.com/@form-create/element-ui@super"><\/script>
+        <style>
+            .el-form-item__content{
+                margin-left: 0px !important;
+            }
+        </style>
     </head>
     </head>
     <body>
     <body>
         <div id="app">
         <div id="app">
@@ -572,6 +578,181 @@ export function htmlTemplate(json, options, zkqyData,dataSource,url) {
     </body>
     </body>
 </html>`
 </html>`
 }
 }
+export function htmlTemplateCard(json, options,zkqyData,dataSource,url) {
+    let x = true;
+    const jsonData = JSON.parse(json);
+    const cardComponent = Array.isArray(jsonData) ? jsonData.find(item => item.type === 'elCard') : null;
+    if(cardComponent) {
+      x = !cardComponent.cardSelect;
+    }
+    console.log('json', jsonData);
+    console.log('json---x', x);
+    
+    // 根据 x 的值生成不同的模板
+    const searchInputTemplate = x ? `
+            <div>
+                <el-input placeholder="请输入内容" v-model="selectValue" class="input-with-select">
+                    <el-button slot="append" icon="el-icon-search" @click="searchCardList()"></el-button>
+                </el-input>
+            </div>` : '';
+
+    return `<html lang="zh">
+    <head>
+        <meta charset="UTF-8">
+        <!-- Import style -->
+        <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"/>
+          <!-- 添加移动端视口设置 -->
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+        <!-- Import Vue 2.7 -->
+        <script src="https://unpkg.com/vue@2"></script>
+        <!-- Import element-ui -->
+        <script src="https://unpkg.com/element-ui/lib/index.js"></script>
+        <!-- Import formCreate -->
+        <script src="https://unpkg.com/@form-create/element-ui@super"><\/script>
+    </head>
+    <body>
+        <div id="app">
+            ${searchInputTemplate}
+            <form-create :rule="rule" :option="options" v-model:value="formData" v-model="api" @submit="onSubmit"></form-create>
+        </div>
+        <script>
+            Vue.use(ELEMENT);
+            Vue.use(formCreate);
+            new Vue({
+                el: '#app',
+                data() {
+                    return {
+                        rule: formCreate.parseJson('${json.replaceAll('\\', '\\\\').replaceAll('\'', '\\\'')}'),
+                        options: formCreate.parseJson('${options.replaceAll('\\', '\\\\').replaceAll('\'', '\\\'')}'),
+                        formData: {},
+                        api: null,
+                        baseUrl: '${url}',
+                        headers: {
+                            Accept: 'application/json',
+                            dbname:'${dataSource}',
+                            'Content-Type': 'application/json'
+                        },
+                        cardList: {
+                            pageId: '',
+                            total: 0,
+                            pageSize: 5,
+                            pageNum: 1
+                        },
+                        selectValue:'',
+                        zkqyData:${zkqyData},
+                        
+                    };
+                },
+                mounted(){
+                        // 寻找type为'elCard'的对象
+                        const cardComponent = Array.isArray(this.rule) ? 
+                            this.rule.find(item => item.type === 'elCard') : null;
+                        // 获取pageId
+                        const x = cardComponent?.props?.pageId;
+                        // 设置到cardList中
+                        this.cardList.pageId = x;
+                        // 获取分页参数
+                        let { pageId, pageNum, pageSize} = this.cardList;
+                        // 调用接口
+                        this.getTableLimitInfo({pageId, pageNum, pageSize});
+                },
+                methods: { 
+                    searchCardList(){
+                        this.rule.forEach(item => {
+                            if(item.type === 'elCard'){
+                                let cardColumn = item.cardColumn;
+                                let { pageId, pageNum, pageSize} = this.cardList;
+                                // 添加搜索参数
+                                let params = {
+                                        pageId, 
+                                        pageNum,
+                                        pageSize,
+                                        [cardColumn]: this.selectValue
+                                    }; 
+                                // 调用接口
+                                this.getTableLimitInfo(params);
+                            }
+                        })
+                    },
+                    async getTableLimitInfo(params = {}) {
+                            const endpoint = 'api/mobilePageDesignData/muti/tableLimitInfo';
+                            await this.fetchGet(endpoint, params, (data) => {
+                                if (data.code === 200) {
+                                    console.log('Data', data);
+                                    // 获取第一个 elCard 类型的组件作为模板
+                                    const templateCard = Array.isArray(this.rule) ? 
+                                        this.rule.find(item => item.type === 'elCard') : null;
+                                    
+                                    if (templateCard) {
+                                        // 创建新的数组,根据 data.rows 的数量复制 elCard
+                                        const newRule = data.rows.map((row, index) => {
+                                            // 深拷贝模板对象
+                                            const newCard = JSON.parse(JSON.stringify(templateCard));
+                                            
+                                            // 更新 children 数组中的值
+                                            newCard.children.forEach(child => {
+                                                if (child.columnItem && row[child.columnItem] !== undefined) {
+                                                    child.value = row[child.columnItem];
+                                                }
+                                            });
+                                            
+                                            // 更新 _fc_id 和 name,确保唯一性
+                                            newCard._fc_id = \`\${newCard._fc_id}_\${index}\`;
+                                            newCard.name = \`\${newCard.name}_\${index}\`;
+                                            
+                                            return newCard;
+                                        });
+                                        
+                                        // 更新 this.rule
+                                        this.rule = newRule;
+                                        console.log('更新后的 rule:', this.rule);
+                                    }
+                                } else {
+                                    console.warn('接口返回非 200 状态:', data);
+                                }
+                            });
+                        },
+                    async fetchGet(endpoint, params = {}, successCallback) {
+                        try {
+                            // 构建查询字符串
+                            const queryString = Object.keys(params)
+                                .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
+                                .join('&');
+                            // 拼接完整的 URL
+                            const url = this.baseUrl + endpoint + (queryString ? '?' + queryString : '');
+                    
+                            // 发起 GET 请求
+                            const response = await fetch(url, {
+                                method: 'GET',
+                                headers: this.headers
+                            });
+                    
+                            // 检查响应状态
+                            if (!response.ok) {
+                                throw new Error('HTTP error! status: ' + response.status);
+                            }
+                    
+                            // 解析返回的数据
+                            const data = await response.json();
+                    
+                            // 调用成功回调函数
+                            if (successCallback && typeof successCallback === 'function') {
+                                successCallback(data);
+                            }
+                        } catch (error) {
+                            console.error('调用接口出错:', error);
+                            throw error; // 抛出错误以便上层捕获
+                        }
+                    },
+                    onSubmit(formData){
+                        console.log('submit', formData);
+                    }
+                }
+            });
+        </script>
+    </body>
+</html>`
+}
 export function htmlTemplateY(json, options) {
 export function htmlTemplateY(json, options) {
     return `<html lang="zh">
     return `<html lang="zh">
     <head>
     <head>

+ 85 - 42
zkqy-ui/src/views/system/tenant/index.vue

@@ -54,9 +54,9 @@
           icon="el-icon-search"
           icon="el-icon-search"
           size="mini"
           size="mini"
           @click="handleQuery"
           @click="handleQuery"
-          >{{ $t('search') }}</el-button>
+        >{{$t('tenant.activationCode.search')}}</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-          >{{ $t('reset') }}</el-button>
+        >{{$t('tenant.activationCode.reset')}}</el-button>
       </el-form-item>
       </el-form-item>
     </el-form>
     </el-form>
 
 
@@ -69,7 +69,8 @@
           size="mini"
           size="mini"
           @click="handleAdd"
           @click="handleAdd"
           v-hasPermi="['system:tenant:add']"
           v-hasPermi="['system:tenant:add']"
-          >{{ $t('insert') }}</el-button>
+          >{{$t('normal.insert')}}
+        </el-button>
       </el-col>
       </el-col>
       <el-col :span="1.5">
       <el-col :span="1.5">
         <el-button
         <el-button
@@ -80,7 +81,7 @@
           size="mini"
           size="mini"
           @click="handleExport"
           @click="handleExport"
           v-hasPermi="['system:tenant:export']"
           v-hasPermi="['system:tenant:export']"
-          >{{ $t('normal.export') }}
+          >导出{{$t('normal.export')}}
         </el-button>
         </el-button>
         <ExcelDownLoad
         <ExcelDownLoad
           v-else
           v-else
@@ -114,6 +115,7 @@
       <el-table-column :label="$t('tenant.contactInfo')" align="center" prop="contactInfo" />
       <el-table-column :label="$t('tenant.contactInfo')" align="center" prop="contactInfo" />
       <el-table-column :label="$t('tenant.address')" align="center" prop="address" />
       <el-table-column :label="$t('tenant.address')" align="center" prop="address" />
       <el-table-column :label="$t('tenant.owner')" align="center" prop="owner" />
       <el-table-column :label="$t('tenant.owner')" align="center" prop="owner" />
+      <!--      <el-table-column :label="$t('tenant.tenantParentId')" align="center" prop="tenantParentId"/>-->
       <el-table-column
       <el-table-column
         :label="$t('tenant.tenantClientLoginUrl')"
         :label="$t('tenant.tenantClientLoginUrl')"
         align="center"
         align="center"
@@ -124,20 +126,21 @@
         align="center"
         align="center"
         prop="tenantToolLoginUrl"
         prop="tenantToolLoginUrl"
       />
       />
+      <!--      <el-table-column :label="$t('tenant.tenantGrade')" align="center" prop="tenantGrade"/>-->
       <el-table-column
       <el-table-column
         :label="$t('tenant.tenantExpirationTime')"
         :label="$t('tenant.tenantExpirationTime')"
         align="center"
         align="center"
         prop="tenantExpirationTime"
         prop="tenantExpirationTime"
       />
       />
       <el-table-column
       <el-table-column
-        :label="$t('operation')"
+        :label="$t('normal.operation')"
         align="center"
         align="center"
         class-name="small-padding fixed-width"
         class-name="small-padding fixed-width"
       >
       >
         <template slot-scope="scope">
         <template slot-scope="scope">
           <el-dropdown>
           <el-dropdown>
             <el-button type="warning" plain size="small">
             <el-button type="warning" plain size="small">
-              {{ $t('process') }}<i class="el-icon-arrow-down el-icon--right"></i>
+              {{$t('normal.process')}}<i class="el-icon-arrow-down el-icon--right"></i>
             </el-button>
             </el-button>
             <el-dropdown-menu slot="dropdown">
             <el-dropdown-menu slot="dropdown">
               <el-dropdown-item>
               <el-dropdown-item>
@@ -147,7 +150,8 @@
                   icon="el-icon-edit"
                   icon="el-icon-edit"
                   @click="handleUpdate(scope.row)"
                   @click="handleUpdate(scope.row)"
                   v-hasPermi="['system:tenant:edit']"
                   v-hasPermi="['system:tenant:edit']"
-                  >{{ $t('update') }}</el-button>
+                  >{{$t('normal.modify')}}
+                </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
               <el-dropdown-item>
               <el-dropdown-item>
                 <el-button
                 <el-button
@@ -156,7 +160,8 @@
                   icon="el-icon-delete"
                   icon="el-icon-delete"
                   @click="handleDelete(scope.row)"
                   @click="handleDelete(scope.row)"
                   v-hasPermi="['system:tenant:remove']"
                   v-hasPermi="['system:tenant:remove']"
-                  >{{ $t('delete') }}</el-button>
+                  >{{$t('normal.delete')}}
+                </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
               <el-dropdown-item>
               <el-dropdown-item>
                 <el-button
                 <el-button
@@ -165,7 +170,8 @@
                   icon="el-icon-position"
                   icon="el-icon-position"
                   @click="bindDatasource(scope.row)"
                   @click="bindDatasource(scope.row)"
                   v-show="scope.row.datasourceId == null"
                   v-show="scope.row.datasourceId == null"
-                  >{{ $t('tenant.bindDatasource') }}</el-button>
+                  >{{$t('tenant.bindDatasource')}}
+                </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
               <el-dropdown-item>
               <el-dropdown-item>
                 <el-button
                 <el-button
@@ -174,7 +180,8 @@
                   icon="el-icon-s-custom"
                   icon="el-icon-s-custom"
                   @click="openTenantExpirationTime(scope.row)"
                   @click="openTenantExpirationTime(scope.row)"
                   v-hasPermi="['system:tenant:remove']"
                   v-hasPermi="['system:tenant:remove']"
-                  >{{ $t('tenant.activateTenant') }}</el-button>
+                  >{{$t('tenant.activateTenant')}}
+                </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
               <el-dropdown-item>
               <el-dropdown-item>
                 <el-button
                 <el-button
@@ -183,7 +190,8 @@
                   icon="el-icon-s-open"
                   icon="el-icon-s-open"
                   @click="openLoginConfig(scope.row, 'client')"
                   @click="openLoginConfig(scope.row, 'client')"
                   v-hasPermi="['system:tenant:remove']"
                   v-hasPermi="['system:tenant:remove']"
-                  >{{ $t('tenant.configLoginPage') }}</el-button>
+                  >{{$t('tenant.configLoginPage')}}
+                </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
               <el-dropdown-item>
               <el-dropdown-item>
                 <el-button
                 <el-button
@@ -192,7 +200,8 @@
                   icon="el-icon-s-open"
                   icon="el-icon-s-open"
                   @click="openLoginConfig(scope.row, 'tool')"
                   @click="openLoginConfig(scope.row, 'tool')"
                   v-hasPermi="['system:tenant:remove']"
                   v-hasPermi="['system:tenant:remove']"
-                  >{{ $t('tenant.configLoginPage') }}</el-button>
+                  >{{$t('tenant.configLoginPage')}}
+                </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
             </el-dropdown-menu>
             </el-dropdown-menu>
           </el-dropdown>
           </el-dropdown>
@@ -209,14 +218,13 @@
     />
     />
 
 
     <!-- 添加或修改租户信息对话框 -->
     <!-- 添加或修改租户信息对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+    <el-dialog :title="title"  :visible.sync="open" width="800px" append-to-body>
       <el-row>
       <el-row>
         <el-form ref="form" :model="form" :rules="rules" label-width="120px">
         <el-form ref="form" :model="form" :rules="rules" label-width="120px">
           <el-col :span="12">
           <el-col :span="12">
             <el-form-item :label="$t('tenant.selectParentTenant')" prop="tenantParentId">
             <el-form-item :label="$t('tenant.selectParentTenant')" prop="tenantParentId">
               <el-cascader
               <el-cascader
                 v-model="form.tenantParentId"
                 v-model="form.tenantParentId"
-                :placeholder="$t('tenant.pleaseEnterSelect')"
                 :options="tenantAllList"
                 :options="tenantAllList"
                 :props="{
                 :props="{
                   checkStrictly: true,
                   checkStrictly: true,
@@ -229,7 +237,7 @@
                 style="width: 250px"
                 style="width: 250px"
               ></el-cascader>
               ></el-cascader>
             </el-form-item>
             </el-form-item>
-            <el-form-item :label="$t('tenant.tenantProfession')" prop="tenantProfession">
+            <el-form-item :label="$t('tenant.tenantProfession')" prop="tenantProfession" >
               <el-select v-model="form.tenantProfession" :placeholder="$t('tenant.pleaseSelectTenantProfession')" style="width: 250px">
               <el-select v-model="form.tenantProfession" :placeholder="$t('tenant.pleaseSelectTenantProfession')" style="width: 250px">
                 <el-option
                 <el-option
                   v-for="item in tenantProfessionList"
                   v-for="item in tenantProfessionList"
@@ -265,11 +273,12 @@
               <el-input v-model="form.owner" :placeholder="$t('tenant.pleaseEnterOwner')" />
               <el-input v-model="form.owner" :placeholder="$t('tenant.pleaseEnterOwner')" />
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
+
         </el-form>
         </el-form>
       </el-row>
       </el-row>
       <div slot="footer" class="dialog-footer">
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">{{ $t('normal.confirm') }}</el-button>
-        <el-button @click="cancel">{{ $t('normal.cancel') }}</el-button>
+        <el-button type="primary" @click="submitForm">{{$t('normal.confirm')}}</el-button>
+        <el-button @click="cancel">{{$t('normal.cancel')}}</el-button>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
 
 
@@ -286,8 +295,8 @@
         class="mb5"
         class="mb5"
         @input="dataSourceTypeChange"
         @input="dataSourceTypeChange"
       >
       >
-        <el-radio-button :label="true">{{ $t('tenant.publicNetwork') }}</el-radio-button>
-        <el-radio-button :label="false">{{ $t('tenant.privateNetwork') }}</el-radio-button>
+        <el-radio-button :label="true">{{$t('tenant.publicNetwork')}}</el-radio-button>
+        <el-radio-button :label="false">{{$t('tenant.privateNetwork')}}</el-radio-button>
       </el-radio-group>
       </el-radio-group>
       <el-form
       <el-form
         ref="dataSourceForm"
         ref="dataSourceForm"
@@ -323,6 +332,7 @@
           />
           />
         </el-form-item>
         </el-form-item>
 
 
+        <!-- !dataSourceType -->
         <el-form-item
         <el-form-item
           :label="$t('tenant.databaseIp')"
           :label="$t('tenant.databaseIp')"
           v-show="!dataSourceType"
           v-show="!dataSourceType"
@@ -361,13 +371,13 @@
           :loading="dialogLoading"
           :loading="dialogLoading"
           >{{ dialogLoading ? $t('tenant.binding') : $t('normal.confirm') }}
           >{{ dialogLoading ? $t('tenant.binding') : $t('normal.confirm') }}
         </el-button>
         </el-button>
-        <el-button @click="cancel1">{{ $t('normal.cancel') }}</el-button>
+        <el-button @click="cancel1">{{$t('normal.cancel')}}</el-button>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
 
 
     <!-- 激活租户弹出层-->
     <!-- 激活租户弹出层-->
     <el-dialog
     <el-dialog
-      :title="$t('tenant.titles.activateTenant')"
+      :title="$t('tenant.activateTenant')"
       :visible.sync="tenantExpirationTimeOpen"
       :visible.sync="tenantExpirationTimeOpen"
       width="500px"
       width="500px"
       append-to-body
       append-to-body
@@ -379,7 +389,7 @@
         label-width="80px"
         label-width="80px"
       >
       >
         <el-form-item
         <el-form-item
-          :label="$t('tenant.titles.activateTenant')"
+          :label="$t('tenant.activateTenant')"
           prop="tenantExpirationTime"
           prop="tenantExpirationTime"
           label-width="110px"
           label-width="110px"
         >
         >
@@ -392,12 +402,12 @@
           <el-button
           <el-button
             type="primary"
             type="primary"
             @click="activationOperationMethod('tenantExpirationTimeFrom')"
             @click="activationOperationMethod('tenantExpirationTimeFrom')"
-            >{{ $t('normal.confirm') }}</el-button>
-          <el-button @click="tanentCancel">{{ $t('normal.cancel') }}</el-button>
+            >{{$t('normal.confirm')}}
+          </el-button>
+          <el-button @click="tanentCancel">{{$t('normal.cancel')}}</el-button>
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
     </el-dialog>
     </el-dialog>
-
     <!-- 登录页面配置信息列表 -->
     <!-- 登录页面配置信息列表 -->
     <el-dialog
     <el-dialog
       :title="login_title"
       :title="login_title"
@@ -412,14 +422,14 @@
         :rules="rules"
         :rules="rules"
         label-width="80px"
         label-width="80px"
       >
       >
-        <el-form-item :label="$t('tenant.title')" prop="loginPageTitle">
+        <el-form-item :label="$t('tenant.title')+':'" prop="loginPageTitle">
           <el-input
           <el-input
             v-model="loginForm.loginPageTitle"
             v-model="loginForm.loginPageTitle"
             :placeholder="$t('tenant.pleaseEnterLoginPageTitle')"
             :placeholder="$t('tenant.pleaseEnterLoginPageTitle')"
           />
           />
         </el-form-item>
         </el-form-item>
 
 
-        <el-form-item :label="$t('tenant.description')" prop="loginPageDescription">
+        <el-form-item :label="$t('tenant.description')+':'" prop="loginPageDescription">
           <span slot="label">
           <span slot="label">
             <el-tooltip
             <el-tooltip
               :content="$t('tenant.descriptionTip')"
               :content="$t('tenant.descriptionTip')"
@@ -427,7 +437,7 @@
             >
             >
               <i class="el-icon-question"></i>
               <i class="el-icon-question"></i>
             </el-tooltip>
             </el-tooltip>
-            {{ $t('tenant.description') }}:
+            {{$t('tenant.description')}}:
           </span>
           </span>
           <el-input
           <el-input
             v-model="loginForm.loginPageDescription"
             v-model="loginForm.loginPageDescription"
@@ -435,7 +445,7 @@
             :placeholder="$t('tenant.pleaseEnterContent')"
             :placeholder="$t('tenant.pleaseEnterContent')"
           />
           />
         </el-form-item>
         </el-form-item>
-        <el-form-item :label="$t('tenant.windowTitle')" prop="windowTitle">
+        <el-form-item :label="$t('tenant.windowTitle')+':'" prop="windowTitle">
           <el-input
           <el-input
             v-model="loginForm.windowTitle"
             v-model="loginForm.windowTitle"
             :placeholder="$t('tenant.pleaseEnterWindowTitle')"
             :placeholder="$t('tenant.pleaseEnterWindowTitle')"
@@ -446,7 +456,7 @@
             <el-tooltip :content="$t('tenant.logoTip')" placement="top">
             <el-tooltip :content="$t('tenant.logoTip')" placement="top">
               <i class="el-icon-question"></i>
               <i class="el-icon-question"></i>
             </el-tooltip>
             </el-tooltip>
-            {{ $t('tenant.logo') }}:
+            {{$t('tenant.logo')}}:
           </span>
           </span>
           <image-upload :limit="1" v-model="loginForm.loginPageLogo" />
           <image-upload :limit="1" v-model="loginForm.loginPageLogo" />
         </el-form-item>
         </el-form-item>
@@ -455,7 +465,7 @@
             <el-tooltip :content="$t('tenant.backgroundImageTip')" placement="top">
             <el-tooltip :content="$t('tenant.backgroundImageTip')" placement="top">
               <i class="el-icon-question"></i>
               <i class="el-icon-question"></i>
             </el-tooltip>
             </el-tooltip>
-            {{ $t('tenant.backgroundImage') }}:
+            {{$t('tenant.backgroundImage')}}:
           </span>
           </span>
           <image-upload
           <image-upload
             :limit="1"
             :limit="1"
@@ -465,8 +475,8 @@
       </el-form>
       </el-form>
 
 
       <div slot="footer" class="dialog-footer">
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitLoginForm">{{ $t('normal.confirm') }}</el-button>
-        <el-button @click="cancelLoginForm">{{ $t('normal.cancel') }}</el-button>
+        <el-button type="primary" @click="submitLoginForm">{{$t('normal.confirm')}}</el-button>
+        <el-button @click="cancelLoginForm">{{$t('normal.cancel')}}</el-button>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
   </div>
   </div>
@@ -805,12 +815,12 @@ export default {
           this.loginForm.loginType = loginType;
           this.loginForm.loginType = loginType;
           this.loginOpen = true;
           this.loginOpen = true;
           if (loginType == "client") {
           if (loginType == "client") {
-            this.login_title = "配置客户端";
+            this.login_title = this.$t('tenant.titles.configureClient');
           } else {
           } else {
-            this.login_title = "配置工具端";
+            this.login_title =this.$t('tenant.titles.configureTool');
           }
           }
         } else {
         } else {
-          this.$message.error("网络异常,请稍后再试");
+          this.$message.error(this.$t('tenant.messages.networkError'));
         }
         }
       } catch (error) {}
       } catch (error) {}
     },
     },
@@ -850,10 +860,10 @@ export default {
             if (res.data) {
             if (res.data) {
               callback();
               callback();
             } else {
             } else {
-              callback(new Error("租户管理员账号已存在"));
+              callback(new Error(this.$t('tenant.messages.tenantAccountExists')));
             }
             }
           } else {
           } else {
-            callback(new Error("租户管理员账号校验失败,请重新输入"));
+            callback(new Error(this.$t('tenant.messages.tenantAccountCheckFailed')));
           }
           }
         });
         });
       }
       }
@@ -877,12 +887,14 @@ export default {
     // },
     // },
     // 数据库名称校验规则
     // 数据库名称校验规则
     databaseNameValidator(rule, value, callback) {
     databaseNameValidator(rule, value, callback) {
+      // 正则校验
       let regex = /^[a-z][a-z0-9]*$/;
       let regex = /^[a-z][a-z0-9]*$/;
       if (regex.test(value)) {
       if (regex.test(value)) {
-        // callback();
+        // callback(); // 输入内容符合规则
       } else {
       } else {
         callback(new Error(this.$t('tenant.messages.databaseNameFormat')));
         callback(new Error(this.$t('tenant.messages.databaseNameFormat')));
       }
       }
+      // 重名校验
       let isRepeat = this.databaseNameList.filter((item) => item == value);
       let isRepeat = this.databaseNameList.filter((item) => item == value);
       if (isRepeat.length !== 0) {
       if (isRepeat.length !== 0) {
         callback(new Error(this.$t('tenant.messages.databaseNameDuplicate')));
         callback(new Error(this.$t('tenant.messages.databaseNameDuplicate')));
@@ -908,7 +920,7 @@ export default {
       input.select(); // 选中输入框的内容
       input.select(); // 选中输入框的内容
       document.execCommand("copy"); // 执行复制操作
       document.execCommand("copy"); // 执行复制操作
       document.body.removeChild(input); // 移除临时的输入框
       document.body.removeChild(input); // 移除临时的输入框
-      this.$message({ message: "复制成功", type: "success" }); // 提示
+      this.$message({ message: this.$t('tenant.messages.copySuccess'), type: "success" }); // 提示
     },
     },
     /** 查询租户信息列表 */
     /** 查询租户信息列表 */
     getList() {
     getList() {
@@ -995,6 +1007,8 @@ export default {
     },
     },
     /** 新增按钮操作 */
     /** 新增按钮操作 */
     handleAdd() {
     handleAdd() {
+      // // 获取所有租户信息¬
+      console.log("abc")
       this.getTenantAllList();
       this.getTenantAllList();
       this.open = true;
       this.open = true;
       this.title = this.$t('tenant.titles.addTenant');
       this.title = this.$t('tenant.titles.addTenant');
@@ -1026,9 +1040,37 @@ export default {
       this.dataSourceTitle = row.tenantName + this.$t('tenant.titles.configureDatabase');
       this.dataSourceTitle = row.tenantName + this.$t('tenant.titles.configureDatabase');
       this.fromTenantId = row.tenantId;
       this.fromTenantId = row.tenantId;
       this.dataSourceTypeChange();
       this.dataSourceTypeChange();
+
+      // const tenantId = row.tenantId || this.ids;
+      // getTenant(tenantId).then((response) => {
+      //   this.form = response.data;
+      //   this.open = true;
+      //   this.title = "修改租户信息";
+      // });
     },
     },
     /** 提交按钮 */
     /** 提交按钮 */
-    submitForm() {
+    async submitForm() {
+
+      // console.log("租户信息")
+      // console.log("租户地址信息:", this.dict.type.system_login_url);
+      let valid = await this.$refs.form.validate();
+      if (!valid) return;
+      if (this.form.tenantParentId.length >= 0) {
+        // 处理当前租户的上级租户id
+        this.form.tenantParentId =
+          this.form.tenantParentId[this.form.tenantParentId.length - 1] !=
+          undefined
+            ? this.form.tenantParentId[this.form.tenantParentId.length - 1]
+            : "";
+      }
+      this.form.tenantClientLoginUrl = this.dict.type.system_login_url
+        .find((item) => item.label == "client_login_url")
+        ?.value.replace("#{val}", this.form.tenantCode);
+      this.form.tenantToolLoginUrl = this.dict.type.system_login_url
+        .find((item) => item.label == "crm_login_url")
+        ?.value.replace("#{val}", this.form.tenantCode);
+      // this.form.tenantClientLoginUrl = this.dict.type.system_login_url.find((item) => item.label == "client_login_url")?.value.replace("#{val}", this.form.tenantCode + "client");
+      // this.form.tenantToolLoginUrl = this.dict.type.system_login_url.find((item) => item.label == "crm_login_url")?.value.replace("#{val}", this.form.tenantCode + "tool");
       this.$refs["form"].validate((valid) => {
       this.$refs["form"].validate((valid) => {
         if (valid) {
         if (valid) {
           if (this.form.tenantId != null) {
           if (this.form.tenantId != null) {
@@ -1089,7 +1131,7 @@ export default {
                           this.currentTenantInfo.tenantId
                           this.currentTenantInfo.tenantId
                         );
                         );
                         if ((resp.code = 200)) {
                         if ((resp.code = 200)) {
-                          this.$modal.msgSuccess("新增成功");
+                          this.$modal.msgSuccess(this.$t('tenant.messages.addSuccess'));
                           this.dataSourceOpen = false;
                           this.dataSourceOpen = false;
                           this.getList();
                           this.getList();
                         }
                         }
@@ -1197,6 +1239,7 @@ export default {
           );
           );
           if (response.code == 200) {
           if (response.code == 200) {
             this.$message.success(this.$t('tenant.messages.activationSuccess'));
             this.$message.success(this.$t('tenant.messages.activationSuccess'));
+            //重新刷新列表
             this.getList();
             this.getList();
           } else {
           } else {
             this.$message.error(this.$t('tenant.messages.activationFailed'));
             this.$message.error(this.$t('tenant.messages.activationFailed'));

+ 1 - 1
zkqy-ui/src/views/system/tenant/tenantIndex.vue

@@ -152,7 +152,7 @@
                   icon="el-icon-edit"
                   icon="el-icon-edit"
                   @click="handleUpdate(scope.row)"
                   @click="handleUpdate(scope.row)"
                   v-hasPermi="['system:tenant:edit']"
                   v-hasPermi="['system:tenant:edit']"
-                >{{ $t('normal.update') }}
+                >{{ $t('update') }}
                 </el-button>
                 </el-button>
               </el-dropdown-item>
               </el-dropdown-item>
               <el-dropdown-item>
               <el-dropdown-item>

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно