zhangjie 2 yıl önce
ebeveyn
işleme
b370de8f1d

+ 2 - 0
src/modules/card/assets/styles/card-design.scss

@@ -368,6 +368,8 @@
     .el-button {
       width: 100%;
       font-size: 14px;
+      padding-left: 5px;
+      padding-right: 5px;
     }
 
     i {

+ 2 - 0
src/modules/paper-export/components/BoxElementEdit.vue

@@ -28,6 +28,7 @@ import ElementResize from "../../card/components/common/ElementResize";
 import TopicNumber from "../../card/components/common/TopicNumber";
 // elements
 import EditText from "../../card/elements/text/ElemText";
+import EditFieldText from "../elements/field-text/ElemFieldText";
 import EditImage from "../../card/elements/image/ElemImage";
 import EditLine from "../../card/elements/line/ElemLine";
 import EditLines from "../../card/elements/lines/ElemLines";
@@ -44,6 +45,7 @@ export default {
     ElementResize,
     TopicNumber,
     EditText,
+    EditFieldText,
     EditImage,
     EditLine,
     EditLines,

+ 2 - 0
src/modules/paper-export/components/BoxElementPreview.vue

@@ -13,6 +13,7 @@
 
 <script>
 import PreviewText from "../../card/elements/text/ElemText";
+import PreviewFieldText from "../elements/field-text/ElemFieldText";
 import PreviewImage from "../../card/elements/image/ElemImage";
 import PreviewLine from "../../card/elements/line/ElemLine";
 import PreviewLines from "../../card/elements/lines/ElemLines";
@@ -27,6 +28,7 @@ export default {
   name: "BoxElementPreview",
   components: {
     PreviewText,
+    PreviewFieldText,
     PreviewImage,
     PreviewLine,
     PreviewLines,

+ 2 - 0
src/modules/paper-export/components/ElementPropEdit.vue

@@ -29,6 +29,7 @@
 import { mapState, mapMutations, mapActions } from "vuex";
 import { getElementName } from "../elementModel";
 import EditText from "../../card/elements/text/EditText";
+import EditFieldText from "../elements/field-text/EditFieldText";
 import EditImage from "../../card/elements/image/EditImage";
 import EditLine from "../../card/elements/line/EditLine";
 import EditLines from "../../card/elements/lines/EditLines";
@@ -44,6 +45,7 @@ export default {
   name: "ElementPropEdit",
   components: {
     EditText,
+    EditFieldText,
     EditImage,
     EditLine,
     EditLines,

+ 6 - 1
src/modules/paper-export/elementModel.js

@@ -10,6 +10,7 @@ import { getModel as createFillField } from "./elements/fill-field/model";
 import { getModel as createFillTable } from "../card/elements/fill-table/model";
 import { getModel as createFillPane } from "../card/elements/fill-pane/model";
 import { getModel as createPaneBox } from "./elements/pane-box/model";
+import { getModel as createFieldText } from "./elements/field-text/model";
 
 // available infos
 const EDITABLE_ELEMENT = [
@@ -17,7 +18,7 @@ const EDITABLE_ELEMENT = [
   "LINE_VERTICAL",
   "LINES",
   "TEXT",
-  // "FIELD_TEXT",
+  "FIELD_TEXT",
   "IMAGE",
   "GRIDS",
   "PANE",
@@ -76,6 +77,10 @@ const ELEMENT_INFOS = {
     name: "编辑框",
     getModel: createPaneBox,
   },
+  FIELD_TEXT: {
+    name: "字段文本",
+    getModel: createFieldText,
+  },
 };
 
 const ELEMENT_LIST = EDITABLE_ELEMENT.map((type) => {

+ 26 - 35
src/modules/paper-export/elements/field-text/EditText.vue → src/modules/paper-export/elements/field-text/EditFieldText.vue

@@ -35,15 +35,29 @@
           <el-radio-button label="justify">两端</el-radio-button>
         </el-radio-group>
       </el-form-item>
-      <el-form-item prop="field" label="字段:"> </el-form-item>
+      <el-form-item prop="field" label="字段:">
+        <el-select
+          v-model="modalForm.field"
+          placeholder="请选择"
+          @change="fieldChange"
+        >
+          <el-option
+            v-for="item in FIELD_LIST"
+            :key="item.field"
+            :label="item.name"
+            :value="item.field"
+          ></el-option>
+        </el-select>
+      </el-form-item>
     </el-form>
   </div>
 </template>
 
 <script>
-import SizeSelect from "../../components/common/SizeSelect";
-import ColorSelect from "../../components/common/ColorSelect";
-import FontFamilySelect from "../../components/common/FontFamilySelect";
+import SizeSelect from "../../../card/components/common/SizeSelect";
+import ColorSelect from "../../../card/components/common/ColorSelect";
+import FontFamilySelect from "../../../card/components/common/FontFamilySelect";
+import { FIELD_LIST } from "./model";
 
 const initModalForm = {
   id: "",
@@ -76,11 +90,12 @@ export default {
     return {
       modalForm: { ...initModalForm },
       isBold: false,
+      FIELD_LIST,
       rules: {
-        contentStr: [
+        field: [
           {
             required: true,
-            message: "请输入文本内容",
+            message: "请选择字段",
             trigger: "change",
           },
         ],
@@ -92,40 +107,16 @@ export default {
   },
   methods: {
     initData(val) {
-      const contentStr = val.content
-        .map((item) => {
-          return item.type === "text"
-            ? item.content
-            : "${" + item.content + "}";
-        })
-        .join("");
-      this.modalForm = { ...val, contentStr };
+      this.modalForm = { ...val };
       this.isBold = val.fontWeight > 400;
     },
     boldChange(isBold) {
       this.modalForm.fontWeight = isBold ? 700 : 400;
     },
-    contentChange() {
-      const constentStr = this.modalForm.contentStr;
-      const rexp = new RegExp(/\$\{.+?\}/, "g");
-      const variates = constentStr.match(rexp);
-      const texts = constentStr.split(rexp);
-      let contents = [];
-
-      texts.forEach((text, index) => {
-        if (text)
-          contents.push({
-            type: "text",
-            content: text,
-          });
-
-        if (variates && variates[index])
-          contents.push({
-            type: "variate",
-            content: variates[index].replace("${", "").replace("}", ""),
-          });
-      });
-      this.modalForm.content = contents;
+    fieldChange(val) {
+      const item = FIELD_LIST.find((elem) => elem.field === val);
+      this.modalForm.fieldName = item ? item.name : "";
+      this.modalForm.content = "$" + this.modalForm.fieldName;
     },
     async submit() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});

+ 2 - 4
src/modules/paper-export/elements/field-text/ElemText.vue → src/modules/paper-export/elements/field-text/ElemFieldText.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="elem-text" :style="elemStyles">
     <div class="text-body" :style="styles">
-      <div>{{ content }}</div>
+      <div>{{ data.content || data.fieldName }}</div>
     </div>
   </div>
 </template>
@@ -18,9 +18,7 @@ export default {
     },
   },
   data() {
-    return {
-      content: "",
-    };
+    return {};
   },
   computed: {
     styles() {

+ 6 - 1
src/modules/paper-export/elements/field-text/model.js

@@ -1,4 +1,8 @@
-import { getElementId, randomCode, deepCopy } from "../../plugins/utils";
+import {
+  getElementId,
+  randomCode,
+  deepCopy,
+} from "../../../card/plugins/utils";
 
 const MODEL = {
   type: "FIELD_TEXT",
@@ -14,6 +18,7 @@ const MODEL = {
   color: "#000",
   mode: "normal", // side:侧边模式,normal:正常模式
   field: "",
+  fieldName: "",
   content: "样例内容",
 };
 

+ 9 - 5
src/modules/question/components/QuestionEditDialog.vue

@@ -155,11 +155,15 @@ export default {
 
       if (this.isEdit) {
         this.sourceDetailList = this.sourceDetailAllList;
-      } else if (this.sourceDetailAllList.length > this.limitShowCount) {
-        this.sourceDetailList = this.sourceDetailAllList.slice(
-          0,
-          this.limitShowCount
-        );
+      } else {
+        if (this.sourceDetailAllList.length > this.limitShowCount) {
+          this.sourceDetailList = this.sourceDetailAllList.slice(
+            0,
+            this.limitShowCount
+          );
+        } else {
+          this.sourceDetailList = this.sourceDetailAllList;
+        }
       }
 
       this.questionKey = randomCode();