cz 1 year ago
parent
commit
d5ad8d0a1d

+ 98 - 390
src/components/testForm/index.vue

@@ -1,20 +1,9 @@
 <template>
 <template>
   <div>
   <div>
-    <van-form
-      @submit="onSubmit"
-      :disabled="formOption.disabled"
-      :readonly="formOption.readonly"
-      :label-width="formOption.labelWidth"
-      :label-align="formOption.labelAlign || 'top'"
-      :scroll-to-error="formOption.scroll"
-      ref="testForm"
-    >
+    <van-form @submit="onSubmit" :disabled="formOption.disabled" :readonly="formOption.readonly" :label-width="formOption.labelWidth"
+              :label-align="formOption.labelAlign || 'top'" :scroll-to-error="formOption.scroll" ref="testForm">
       <van-cell-group inset>
       <van-cell-group inset>
-        <div
-          v-for="(i, index) in formConfig"
-          :key="index"
-          :style="i.style || ''"
-        >
+        <div v-for="(i, index) in formConfig" :key="index" :style="i.style || ''">
           <van-field v-if="i.type == 'title'" style="background: #ecebeb">
           <van-field v-if="i.type == 'title'" style="background: #ecebeb">
             <template #input>
             <template #input>
               <div class="_title">
               <div class="_title">
@@ -22,335 +11,137 @@
               </div>
               </div>
             </template>
             </template>
           </van-field>
           </van-field>
-          <van-field
-            v-if="i.type == 'input'"
-            v-model="formData[i.prop]"
-            :label="i.label"
-            :name="i.prop"
-            :type="i.itemType ? i.itemType : 'text'"
-            :placeholder="i.placeholder ? i.placeholder : '请输入'"
-            :clearable="i.clearable ? i.clearable : false"
-            :readonly="getFieldReadonly(i)"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-            :right-icon="i.isNeedRightBtn ? i.rightIcon : ''"
-            @click-right-icon="i.isNeedRightBtn ? i.rightIconClick() : () => {}"
-            @blur="
+          <van-field v-if="i.type == 'input'" v-model="formData[i.prop]" :label="i.label" :name="i.prop" :type="i.itemType ? i.itemType : 'text'"
+                     :placeholder="i.placeholder ? i.placeholder : '请输入'" :clearable="i.clearable ? i.clearable : false"
+                     :readonly="getFieldReadonly(i)" :rules="getRules(i)" :required="getRequired(i)" :right-icon="i.isNeedRightBtn ? i.rightIcon : ''"
+                     @click-right-icon="i.isNeedRightBtn ? i.rightIconClick() : () => {}" @blur="
               i.isNeedBlurMethon ? i.blurMethon(formData[i.prop]) : () => {}
               i.isNeedBlurMethon ? i.blurMethon(formData[i.prop]) : () => {}
-            "
-            @input="
+            " @input="
               () => {
               () => {
                 return i.inputFn ? i.inputFn(formData[i.prop]) : () => {};
                 return i.inputFn ? i.inputFn(formData[i.prop]) : () => {};
               }
               }
-            "
-          >
+            ">
           </van-field>
           </van-field>
           <!-- switch -->
           <!-- switch -->
-          <van-field
-            v-if="i.type == 'switch'"
-            :label="i.label"
-            :name="i.prop"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'switch'" :label="i.label" :name="i.prop" :required="getRequired(i)">
             <template #input>
             <template #input>
               <van-switch v-model="formData[i.prop]" />
               <van-switch v-model="formData[i.prop]" />
             </template>
             </template>
           </van-field>
           </van-field>
           <!-- 多选checkbox -->
           <!-- 多选checkbox -->
-          <van-field
-            v-if="i.type == 'checkbox'"
-            :label="i.label"
-            :name="i.prop"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'checkbox'" :label="i.label" :name="i.prop" :rules="getRules(i)" :required="getRequired(i)">
             <template #input>
             <template #input>
-              <van-checkbox-group
-                v-model="formData[i.prop]"
-                direction="horizontal"
-              >
-                <van-checkbox
-                  shape="square"
-                  v-for="j in i.data"
-                  :key="j.value"
-                  :name="j.value"
-                  >{{ j.text }}</van-checkbox
-                >
+              <van-checkbox-group v-model="formData[i.prop]" direction="horizontal">
+                <van-checkbox shape="square" v-for="j in i.data" :key="j.value" :name="j.value">{{ j.text }}</van-checkbox>
               </van-checkbox-group>
               </van-checkbox-group>
             </template>
             </template>
           </van-field>
           </van-field>
           <!-- 单选radio -->
           <!-- 单选radio -->
-          <van-field
-            v-if="i.type == 'radio'"
-            :label="i.label"
-            :name="i.prop"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'radio'" :label="i.label" :name="i.prop" :rules="getRules(i)" :required="getRequired(i)">
             <template #input>
             <template #input>
-              <van-radio-group
-                v-model="formData[i.prop]"
-                direction="horizontal"
-              >
-                <van-radio
-                  v-for="j in i.data"
-                  :key="j.value"
-                  :name="j.value || j.id"
-                  >{{ j.label || j.title }}</van-radio
-                >
+              <van-radio-group v-model="formData[i.prop]" direction="horizontal">
+                <van-radio v-for="j in i.data" :key="j.value" :name="j.value || j.id">{{ j.label || j.title }}</van-radio>
               </van-radio-group>
               </van-radio-group>
             </template>
             </template>
           </van-field>
           </van-field>
           <!-- 单选 -->
           <!-- 单选 -->
-          <van-field
-            v-if="i.type == 'picker' && i.itemType == 'onePicker'"
-            v-show="!i.showStatus"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[i.prop + 'Name']"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="
+          <van-field v-if="i.type == 'picker' && i.itemType == 'onePicker'" v-show="!i.showStatus" :label="i.label" :name="i.prop"
+                     v-model="formData[i.prop + 'Name']" is-link :readonly="true" :placeholder="i.placeholder ? i.placeholder : '请选择'" @click="
               () =>
               () =>
                 formOption.readonly || i.readonly ? '' : (i.showPicker = true)
                 formOption.readonly || i.readonly ? '' : (i.showPicker = true)
-            "
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+            " :rules="getRules(i)" :required="getRequired(i)">
           </van-field>
           </van-field>
-          <van-popup
-            v-model:show="i.showPicker"
-            round
-            position="bottom"
-            v-if="i.type == 'picker' && i.itemType == 'onePicker'"
-          >
+          <van-popup v-model:show="i.showPicker" round position="bottom" v-if="i.type == 'picker' && i.itemType == 'onePicker'">
             <div class="searchBox">
             <div class="searchBox">
-              <van-search
-                v-if="i.isNeedSearch && i.isNeedSearch === true"
-                v-model="i.searchKeyword"
-                show-action
-                label=""
-                placeholder="请输入搜索关键词"
-                @search="onSearchData(i)"
-              >
+              <van-search v-if="i.isNeedSearch && i.isNeedSearch === true" v-model="i.searchKeyword" show-action label="" placeholder="请输入搜索关键词"
+                          @search="onSearchData(i)">
                 <template #action>
                 <template #action>
                   <div @click="onSearchData(i)">搜索</div>
                   <div @click="onSearchData(i)">搜索</div>
                 </template>
                 </template>
               </van-search>
               </van-search>
             </div>
             </div>
-            <van-picker
-              :columns="i.data"
-              :columns-field-names="
+            <van-picker :columns="i.data" :columns-field-names="
                 i.fieldNames ? i.fieldNames : onePickerFieldNames
                 i.fieldNames ? i.fieldNames : onePickerFieldNames
-              "
-              @cancel="i.showPicker = false"
-              @confirm="
+              " @cancel="i.showPicker = false" @confirm="
                 (option) =>
                 (option) =>
                   i.changeFn
                   i.changeFn
                     ? i.changeFn(option, i, index)
                     ? i.changeFn(option, i, index)
                     : onConfirmPicker(option, i, index)
                     : onConfirmPicker(option, i, index)
-              "
-            />
+              " />
           </van-popup>
           </van-popup>
           <!-- 多选 -->
           <!-- 多选 -->
-          <van-field
-            v-if="i.type == 'multipleChoice' && i.itemType == 'multiple'"
-            v-show="!i.showStatus"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[i.prop + 'Name']"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'multipleChoice' && i.itemType == 'multiple'" v-show="!i.showStatus" :label="i.label" :name="i.prop"
+                     v-model="formData[i.prop + 'Name']" is-link :readonly="true" :placeholder="i.placeholder ? i.placeholder : '请选择'"
+                     @click="() => (!formOption.readonly ? (i.showPicker = true) : '')" :rules="getRules(i)" :required="getRequired(i)">
           </van-field>
           </van-field>
-          <van-popup
-            v-model:show="i.showPicker"
-            round
-            position="bottom"
-            :style="{ height: '40%' }"
-            v-if="i.type == 'multipleChoice' && i.itemType == 'multiple'"
-          >
-            <van-checkbox-group
-              v-model="formData[i.prop]"
-              @change="
+          <van-popup v-model:show="i.showPicker" round position="bottom" :style="{ height: '40%' }"
+                     v-if="i.type == 'multipleChoice' && i.itemType == 'multiple'">
+            <van-checkbox-group v-model="formData[i.prop]" @change="
                 changeCheckboxGroup(formData, i.prop, i.data, i.fieldNames)
                 changeCheckboxGroup(formData, i.prop, i.data, i.fieldNames)
-              "
-              class="multipleChoice"
-            >
-              <van-checkbox
-                v-for="item in i.data"
-                :key="item.value"
-                :name="item.value"
-                >{{ item.text }}</van-checkbox
-              >
+              " class="multipleChoice">
+              <van-checkbox v-for="item in i.data" :key="item.value" :name="item.value">{{ item.text }}</van-checkbox>
             </van-checkbox-group>
             </van-checkbox-group>
           </van-popup>
           </van-popup>
           <!-- 时间选择器 -->
           <!-- 时间选择器 -->
-          <van-field
-            v-if="i.type == 'picker' && i.itemType == 'datePicker'"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[i.prop]"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'picker' && i.itemType == 'datePicker'" :label="i.label" :name="i.prop" v-model="formData[i.prop]" is-link
+                     :readonly="true" :placeholder="i.placeholder ? i.placeholder : '请选择'"
+                     @click="() => (!formOption.readonly ? (i.showPicker = true) : '')" :rules="getRules(i)" :required="getRequired(i)">
           </van-field>
           </van-field>
-          <van-popup
-            v-model:show="i.showPicker"
-            round
-            position="bottom"
-            v-if="i.type == 'picker' && i.itemType == 'datePicker'"
-          >
-            <van-date-picker
-              v-model="currentDate"
-              @confirm="(option) => onConfirmPicker(option, i, index)"
-              @cancel="i.showPicker = false"
-              :min-date="i.minDate"
-              :max-date="i.maxDate"
-              :columns-type="i.columnsType"
-            />
+          <van-popup v-model:show="i.showPicker" round position="bottom" v-if="i.type == 'picker' && i.itemType == 'datePicker'">
+            <van-date-picker v-model="currentDate" @confirm="(option) => onConfirmPicker(option, i, index)" @cancel="i.showPicker = false"
+                             :min-date="i.minDate" :max-date="i.maxDate" :columns-type="i.columnsType" />
           </van-popup>
           </van-popup>
           <!-- 时间选择器 带时分秒 -->
           <!-- 时间选择器 带时分秒 -->
 
 
-          <van-field
-            v-if="i.type == 'picker' && i.itemType == 'datePickerTime'"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[i.prop]"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="
+          <van-field v-if="i.type == 'picker' && i.itemType == 'datePickerTime'" :label="i.label" :name="i.prop" v-model="formData[i.prop]" is-link
+                     :readonly="true" :placeholder="i.placeholder ? i.placeholder : '请选择'" @click="
               () =>
               () =>
                 !formOption.readonly
                 !formOption.readonly
                   ? i.needDefault
                   ? i.needDefault
                     ? defaultTimeFn(i, index)
                     ? defaultTimeFn(i, index)
                     : (i.showPicker = true)
                     : (i.showPicker = true)
                   : ''
                   : ''
-            "
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+            " :rules="getRules(i)" :required="getRequired(i)">
           </van-field>
           </van-field>
-          <van-popup
-            v-model:show="i.showPicker"
-            round
-            position="bottom"
-            v-if="i.type == 'picker' && i.itemType == 'datePickerTime'"
-          >
-            <van-picker-group
-              :tabs="['日期', '时间']"
-              @confirm="() => datePickerTimeConfirm(i, index)"
-              @cancel="i.showPicker = false"
-            >
-              <van-date-picker
-                v-model="datePickerDateArr"
-                :columns-type="i.columnsType"
-              />
-              <van-time-picker
-                v-model="datePickerTimeArr"
-                :columns-type="['hour', 'minute', 'second']"
-              />
+          <van-popup v-model:show="i.showPicker" round position="bottom" v-if="i.type == 'picker' && i.itemType == 'datePickerTime'">
+            <van-picker-group :tabs="['日期', '时间']" @confirm="() => datePickerTimeConfirm(i, index)" @cancel="i.showPicker = false">
+              <van-date-picker v-model="datePickerDateArr" :columns-type="i.columnsType" />
+              <van-time-picker v-model="datePickerTimeArr" :columns-type="['hour', 'minute', 'second']" />
             </van-picker-group>
             </van-picker-group>
           </van-popup>
           </van-popup>
           <!-- 级联 城市 -->
           <!-- 级联 城市 -->
-          <van-field
-            v-if="i.type == 'cascader' && i.itemType == 'city'"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[i.prop + 'Name']"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          />
-          <van-popup
-            v-if="i.type == 'cascader' && i.itemType == 'city'"
-            v-model:show="i.showPicker"
-            round
-            position="bottom"
-          >
-            <van-cascader
-              v-model="formData[i.prop]"
-              :title="i.title ? i.title : '请选择'"
-              :options="cityOption"
-              @close="i.showPicker = false"
-              @change="(option) => cityOnChange(option, i, index)"
-              @finish="
+          <van-field v-if="i.type == 'cascader' && i.itemType == 'city'" :label="i.label" :name="i.prop" v-model="formData[i.prop + 'Name']" is-link
+                     :readonly="true" :placeholder="i.placeholder ? i.placeholder : '请选择'"
+                     @click="() => (!formOption.readonly ? (i.showPicker = true) : '')" :rules="getRules(i)" :required="getRequired(i)" />
+          <van-popup v-if="i.type == 'cascader' && i.itemType == 'city'" v-model:show="i.showPicker" round position="bottom">
+            <van-cascader v-model="formData[i.prop]" :title="i.title ? i.title : '请选择'" :options="cityOption" @close="i.showPicker = false"
+                          @change="(option) => cityOnChange(option, i, index)" @finish="
                 (option) =>
                 (option) =>
                   i.finishFn ? i.finishFn(option) : () => (i.showPicker = false)
                   i.finishFn ? i.finishFn(option) : () => (i.showPicker = false)
-              "
-            />
+              " />
           </van-popup>
           </van-popup>
           <!-- 级联 公共 -->
           <!-- 级联 公共 -->
-          <van-field
-            v-if="i.type == 'cascader' && i.itemType == 'common'"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[i.prop + 'Name']"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="() => (!formOption.readonly ? (i.showPicker = true) : '')"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          />
-          <van-popup
-            v-if="i.type == 'cascader' && i.itemType == 'common'"
-            v-model:show="i.showPicker"
-            round
-            position="bottom"
-          >
-            <van-cascader
-              v-model="formData[i.prop]"
-              :title="i.title ? i.title : '请选择'"
-              :options="i.data"
-              :field-names="i.fieldNames ? i.fieldNames : fieldNames"
-              @close="i.showPicker = false"
-              @change="(option) => commonOnChange(option, i, index)"
-              @finish="
+          <van-field v-if="i.type == 'cascader' && i.itemType == 'common'" :label="i.label" :name="i.prop" v-model="formData[i.prop + 'Name']" is-link
+                     :readonly="true" :placeholder="i.placeholder ? i.placeholder : '请选择'"
+                     @click="() => (!formOption.readonly ? (i.showPicker = true) : '')" :rules="getRules(i)" :required="getRequired(i)" />
+          <van-popup v-if="i.type == 'cascader' && i.itemType == 'common'" v-model:show="i.showPicker" round position="bottom">
+            <van-cascader v-model="formData[i.prop]" :title="i.title ? i.title : '请选择'" :options="i.data"
+                          :field-names="i.fieldNames ? i.fieldNames : fieldNames" @close="i.showPicker = false"
+                          @change="(option) => commonOnChange(option, i, index)" @finish="
                 (option) =>
                 (option) =>
                   i.finishFn ? i.finishFn(i, option) : handleCommonFinish(index)
                   i.finishFn ? i.finishFn(i, option) : handleCommonFinish(index)
-              "
-            />
+              " />
           </van-popup>
           </van-popup>
           <!-- 文件上传 -->
           <!-- 文件上传 -->
-          <van-field
-            name="uploader"
-            v-if="i.type == 'upload'"
-            :label="i.label"
-            :readonly="i.readonly ? true : false"
-          >
+          <van-field name="uploader" v-if="i.type == 'upload'" :label="i.label" :readonly="i.readonly ? true : false">
             <template #input>
             <template #input>
-              <van-uploader
-                v-model="formData[i.prop]"
-                :after-read="afterRead"
-                multiple
-                :show-upload="i.showUpload === undefined ? true : i.showUpload"
-                :max-count="9"
-                :max-size="5 * 1024 * 1024"
-                @oversize="onOversize"
-              />
+              <van-uploader v-model="formData[i.prop]" :after-read="afterRead" multiple
+                            :show-upload="i.showUpload === undefined ? true : i.showUpload" :max-count="9" :max-size="5 * 1024 * 1024"
+                            @oversize="onOversize" />
             </template>
             </template>
           </van-field>
           </van-field>
           <!-- 插槽 -->
           <!-- 插槽 -->
-          <van-field
-            v-if="i.type == 'slot'"
-            :label="i.label"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'slot'" :label="i.label" :rules="getRules(i)" :required="getRequired(i)">
             <template #input>
             <template #input>
               <div style="width: 100%">
               <div style="width: 100%">
                 <slot :name="i.slotName"> {{ i.slotName }}插槽占位符 </slot>
                 <slot :name="i.slotName"> {{ i.slotName }}插槽占位符 </slot>
@@ -360,123 +151,64 @@
         </div>
         </div>
       </van-cell-group>
       </van-cell-group>
       <!-- 循环业务数据 -->
       <!-- 循环业务数据 -->
-      <van-cell-group
-        inset
-        v-for="(item, index) in formData[btnConfigCopy.prop]"
-        :key="index"
-      >
+      <van-cell-group inset v-for="(item, index) in formData[btnConfigCopy.prop]" :key="index">
         <div class="row">
         <div class="row">
           <div>{{ btnConfigCopy.listTitle || "明细" }}{{ index + 1 }}</div>
           <div>{{ btnConfigCopy.listTitle || "明细" }}{{ index + 1 }}</div>
-          <van-button
-            plain
-            type="primary"
-            @click="handleRemove(index, btnConfigCopy)"
-            size="mini"
-            style="border: none; background: #ecebeb"
-            :disabled="formOption.readonly"
-            v-if="
+          <van-button plain type="primary" @click="handleRemove(index, btnConfigCopy)" size="mini" style="border: none; background: #ecebeb"
+                      :disabled="formOption.readonly" v-if="
               formOption.btnConfig !== undefined && formOption.btnConfig.isNeed
               formOption.btnConfig !== undefined && formOption.btnConfig.isNeed
-            "
-            >删除</van-button
-          >
+            ">删除</van-button>
         </div>
         </div>
         <!-- 循环表单数据 -->
         <!-- 循环表单数据 -->
         <div v-for="(i, sonIndex) in btnConfigCopy.listConfig" :key="i.prop">
         <div v-for="(i, sonIndex) in btnConfigCopy.listConfig" :key="i.prop">
-          <van-field
-            v-if="i.type == 'input'"
-            v-model="formData[btnConfigCopy.prop][index][i.prop]"
-            :label="i.label"
-            :name="i.prop"
-            :type="i.itemType ? i.itemType : 'text'"
-            :placeholder="i.placeholder ? i.placeholder : '请输入'"
-            :clearable="i.clearable ? i.clearable : false"
-            :readonly="getFieldReadonly(i)"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-            @change="
+          <van-field v-if="i.type == 'input'" v-model="formData[btnConfigCopy.prop][index][i.prop]" :label="i.label" :name="i.prop"
+                     :type="i.itemType ? i.itemType : 'text'" :placeholder="i.placeholder ? i.placeholder : '请输入'"
+                     :clearable="i.clearable ? i.clearable : false" :readonly="getFieldReadonly(i)" :rules="getRules(i)" :required="getRequired(i)"
+                     @change="
               (val) => {
               (val) => {
                 return i.changeFn ? i.changeFn(index, val) : () => {};
                 return i.changeFn ? i.changeFn(index, val) : () => {};
               }
               }
-            "
-          >
+            ">
           </van-field>
           </van-field>
           <!-- 单选 -->
           <!-- 单选 -->
-          <van-field
-            v-if="i.type == 'picker' && i.itemType == 'onePicker'"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[btnConfigCopy.prop][index][i.prop + 'Name']"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="handleListItemClick(i, index, sonIndex)"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'picker' && i.itemType == 'onePicker'" :label="i.label" :name="i.prop"
+                     v-model="formData[btnConfigCopy.prop][index][i.prop + 'Name']" is-link :readonly="true"
+                     :placeholder="i.placeholder ? i.placeholder : '请选择'" @click="handleListItemClick(i, index, sonIndex)" :rules="getRules(i)"
+                     :required="getRequired(i)">
             <template #input v-if="i.isShowScanCode">
             <template #input v-if="i.isShowScanCode">
               <div style="display: flex; height: 24px">
               <div style="display: flex; height: 24px">
                 <div style="width: calc(100vw - 100px)">
                 <div style="width: calc(100vw - 100px)">
                   {{ formData[btnConfigCopy.prop][index][i.prop + "Name"] }}
                   {{ formData[btnConfigCopy.prop][index][i.prop + "Name"] }}
                 </div>
                 </div>
                 <div style="width: 100px; float: right; margin-top: -20px">
                 <div style="width: 100px; float: right; margin-top: -20px">
-                  <van-button
-                    plain
-                    type="primary"
-                    @click.native.stop="i.scanCode(index)"
-                    size="mini"
-                    style="border: none"
-                    >扫码</van-button
-                  >
+                  <van-button plain type="primary" @click.native.stop="i.scanCode(index)" size="mini" style="border: none">扫码</van-button>
                 </div>
                 </div>
               </div>
               </div>
             </template>
             </template>
           </van-field>
           </van-field>
           <!-- 时间选择器 -->
           <!-- 时间选择器 -->
-          <van-field
-            v-if="i.type == 'picker' && i.itemType == 'datePicker'"
-            :label="i.label"
-            :name="i.prop"
-            v-model="formData[btnConfigCopy.prop][index][i.prop]"
-            is-link
-            :readonly="true"
-            :placeholder="i.placeholder ? i.placeholder : '请选择'"
-            @click="handleListItemClick(i, index, sonIndex)"
-            :rules="getRules(i)"
-            :required="getRequired(i)"
-          >
+          <van-field v-if="i.type == 'picker' && i.itemType == 'datePicker'" :label="i.label" :name="i.prop"
+                     v-model="formData[btnConfigCopy.prop][index][i.prop]" is-link :readonly="true"
+                     :placeholder="i.placeholder ? i.placeholder : '请选择'" @click="handleListItemClick(i, index, sonIndex)" :rules="getRules(i)"
+                     :required="getRequired(i)">
           </van-field>
           </van-field>
         </div>
         </div>
       </van-cell-group>
       </van-cell-group>
       <!-- 单独写个循环,保证弹窗唯一 -->
       <!-- 单独写个循环,保证弹窗唯一 -->
       <div v-for="(item, index) in btnConfigCopy.listConfig" :key="index">
       <div v-for="(item, index) in btnConfigCopy.listConfig" :key="index">
-        <van-popup
-          v-model:show="item.showPicker"
-          round
-          position="bottom"
-          v-if="item.type == 'picker' && item.itemType == 'onePicker'"
-        >
+        <van-popup v-model:show="item.showPicker" round position="bottom" v-if="item.type == 'picker' && item.itemType == 'onePicker'">
           <div class="searchBox">
           <div class="searchBox">
-            <van-search
-              v-if="item.isNeedSearch && item.isNeedSearch === true"
-              v-model="item.searchKeyword"
-              show-action
-              label=""
-              placeholder="请输入搜索关键词"
-              @search="onSearchData(item)"
-            >
+            <van-search v-if="item.isNeedSearch && item.isNeedSearch === true" v-model="item.searchKeyword" show-action label=""
+                        placeholder="请输入搜索关键词" @search="onSearchData(item)">
               <template #action>
               <template #action>
                 <div @click="onSearchData(item)">搜索</div>
                 <div @click="onSearchData(item)">搜索</div>
               </template>
               </template>
             </van-search>
             </van-search>
           </div>
           </div>
 
 
-          <van-picker
-            :columns="item.data"
-            :columns-field-names="
+          <van-picker :columns="item.data" :columns-field-names="
               item.fieldNames ? item.fieldNames : onePickerFieldNames
               item.fieldNames ? item.fieldNames : onePickerFieldNames
-            "
-            @cancel="item.showPicker = false"
-            @confirm="
+            " @cancel="item.showPicker = false" @confirm="
               (option) =>
               (option) =>
                 item.changeFn
                 item.changeFn
                   ? item.changeFn(
                   ? item.changeFn(
@@ -487,47 +219,24 @@
                       btnConfigCopy.prop
                       btnConfigCopy.prop
                     )
                     )
                   : onConfirmListPicker(option, item)
                   : onConfirmListPicker(option, item)
-            "
-          />
+            " />
         </van-popup>
         </van-popup>
-        <van-popup
-          v-model:show="item.showPicker"
-          round
-          position="bottom"
-          v-if="item.type == 'picker' && item.itemType == 'datePicker'"
-        >
-          <van-date-picker
-            @confirm="(option) => onConfirmListPicker(option, item)"
-            @cancel="item.showPicker = false"
-            :min-date="item.minDate"
-            :max-date="item.maxDate"
-            :columns-type="item.columnsType"
-          />
+        <van-popup v-model:show="item.showPicker" round position="bottom" v-if="item.type == 'picker' && item.itemType == 'datePicker'">
+          <van-date-picker @confirm="(option) => onConfirmListPicker(option, item)" @cancel="item.showPicker = false" :min-date="item.minDate"
+                           :max-date="item.maxDate" :columns-type="item.columnsType" />
         </van-popup>
         </van-popup>
       </div>
       </div>
 
 
       <!-- 按钮 -->
       <!-- 按钮 -->
-      <div
-        class="btn-box"
-        v-if="formOption.btnConfig !== undefined && formOption.btnConfig.isNeed"
-      >
-        <van-button
-          :plain="btnConfigCopy.plain ? btnConfigCopy.plain : false"
-          :type="btnConfigCopy.itemType ? btnConfigCopy.itemType : 'primary'"
-          :size="btnConfigCopy.size ? btnConfigCopy.size : 'small'"
-          style="width: 100%; border: none"
-          @click="handlePush()"
-        >
+      <div class="btn-box" v-if="formOption.btnConfig !== undefined && formOption.btnConfig.isNeed">
+        <van-button :plain="btnConfigCopy.plain ? btnConfigCopy.plain : false" :type="btnConfigCopy.itemType ? btnConfigCopy.itemType : 'primary'"
+                    :size="btnConfigCopy.size ? btnConfigCopy.size : 'small'" style="width: 100%; border: none" @click="handlePush()">
           <template #icon>
           <template #icon>
-            <van-icon
-              :name="btnConfigCopy.icon ? btnConfigCopy.icon : 'plus'"
-              :size="12"
-            />
+            <van-icon :name="btnConfigCopy.icon ? btnConfigCopy.icon : 'plus'" :size="12" />
           </template>
           </template>
           {{
           {{
             btnConfigCopy.btnName ? btnConfigCopy.btnName : "添加"
             btnConfigCopy.btnName ? btnConfigCopy.btnName : "添加"
-          }}</van-button
-        >
+          }}</van-button>
       </div>
       </div>
       <div style="margin: 16px" v-show="!formOption.hiddenSubmitBtn">
       <div style="margin: 16px" v-show="!formOption.hiddenSubmitBtn">
         <van-button round block type="primary" native-type="submit">
         <van-button round block type="primary" native-type="submit">
@@ -711,7 +420,6 @@ const formDataListShowLabelOne = () => {
       const jele = btnConfigCopy.listConfig[j];
       const jele = btnConfigCopy.listConfig[j];
       if (jele.type === "picker" && jele.itemType !== "datePicker") {
       if (jele.type === "picker" && jele.itemType !== "datePicker") {
         if (jele.data && jele.data.length > 0) {
         if (jele.data && jele.data.length > 0) {
-          console.log(jele.data, "wwwww");
           formData.value[btnConfigCopy.prop][i][jele.prop + "Name"] =
           formData.value[btnConfigCopy.prop][i][jele.prop + "Name"] =
             selectDataEcho(
             selectDataEcho(
               jele,
               jele,

+ 70 - 25
src/views/JXSK/salesContract/add.vue

@@ -1,20 +1,9 @@
 <template>
 <template>
   <div class="form">
   <div class="form">
-    <van-nav-bar
-      :title="$t('salesContract.name')"
-      :left-text="$t('common.back')"
-      left-arrow
-      @click-left="onClickLeft"
-    >
+    <van-nav-bar :title="$t('salesContract.name')" :left-text="$t('common.back')" left-arrow @click-left="onClickLeft">
     </van-nav-bar>
     </van-nav-bar>
-    <testForm
-      v-model="formData.data"
-      :formOption="formOption"
-      :formConfig="formConfig"
-      :rules="rules"
-      @onSubmit="onSubmit"
-      ref="formDom"
-    ></testForm>
+    <testForm v-model="formData.data" :formOption="formOption" :formConfig="formConfig" :rules="rules" @onSubmit="onSubmit(20)"
+              @otherBtnClick="onSubmit(10)" ref="formDom"></testForm>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -80,6 +69,12 @@ const rules = {
       message: proxy.t("salesContract.pleaseEnterTheQuantity"),
       message: proxy.t("salesContract.pleaseEnterTheQuantity"),
     },
     },
   ],
   ],
+  devUserId: [
+    {
+      required: true,
+      message: "请选择研发负责人",
+    },
+  ],
 };
 };
 const formOption = reactive({
 const formOption = reactive({
   readonly: false, //用于控制整个表单是否只读
   readonly: false, //用于控制整个表单是否只读
@@ -88,6 +83,8 @@ const formOption = reactive({
   scroll: true,
   scroll: true,
   labelWidth: "62pk",
   labelWidth: "62pk",
   hiddenSubmitBtn: false,
   hiddenSubmitBtn: false,
+  otherBtn: true,
+  otherBtnText: "暂存",
   btnConfig: {
   btnConfig: {
     isNeed: true,
     isNeed: true,
     prop: "salesContractDetailsList",
     prop: "salesContractDetailsList",
@@ -358,6 +355,18 @@ const formConfig = reactive([
     prop: "contractAmount",
     prop: "contractAmount",
     readonly: true,
     readonly: true,
   },
   },
+  {
+    type: "picker",
+    label: "研发负责人",
+    prop: "devUserId",
+    itemType: "onePicker",
+    showPicker: false,
+    fieldNames: {
+      text: "label",
+      value: "value",
+    },
+    data: [],
+  },
 ]);
 ]);
 const onClickLeft = () => history.back();
 const onClickLeft = () => history.back();
 const fundsPaymentMethod = ref([]);
 const fundsPaymentMethod = ref([]);
@@ -413,6 +422,22 @@ const getDict = () => {
     });
     });
     formConfig[0].data = corporationList.value;
     formConfig[0].data = corporationList.value;
   });
   });
+
+  proxy
+    .post("/system/user/getUserList", {
+      pageNum: 1,
+      pageSize: 9999,
+      roleKey: "dev",
+    })
+    .then((res) => {
+      formConfig[18].data = res.data.map((item) => {
+        return {
+          ...item,
+          label: item.nickName,
+          value: item.userId,
+        };
+      });
+    });
 };
 };
 
 
 const getProductData = (keyword) => {
 const getProductData = (keyword) => {
@@ -445,6 +470,9 @@ const getDetails = (id) => {
     res.data.deliveryDate = res.data.deliveryDate.slice(0, 10);
     res.data.deliveryDate = res.data.deliveryDate.slice(0, 10);
     formData.data = res.data;
     formData.data = res.data;
     changeAmount();
     changeAmount();
+    setTimeout(() => {
+      formDom.value.formDataListShowLabelOne();
+    }, 100);
   });
   });
 };
 };
 
 
@@ -452,22 +480,21 @@ onMounted(() => {
   getDict();
   getDict();
   if (route.query.id) {
   if (route.query.id) {
     getDetails(route.query.id);
     getDetails(route.query.id);
-    formOption.readonly = true; //全部只读
-    formOption.hiddenSubmitBtn = true; //隐藏提交按钮
-    formOption.btnConfig.isNeed = false;
+    if (route.query.status != 0) {
+      formOption.readonly = true; //全部只读
+      formOption.hiddenSubmitBtn = true; //隐藏提交按钮
+      formOption.otherBtn = false; //隐藏其他按钮操作
+      formOption.btnConfig.isNeed = false;
+    }
   }
   }
 });
 });
 
 
-const onSubmit = () => {
+const onSubmit = (type) => {
   if (formData.data.salesContractDetailsList.length > 0) {
   if (formData.data.salesContractDetailsList.length > 0) {
-    proxy
-      .post("/flowProcess/initiate", {
-        flowKey: "jxst_sales_contract_flow",
-        data: formData.data,
-      })
-      .then(
+    if (type == 10) {
+      proxy.post("/salesContract/add", formData.data).then(
         () => {
         () => {
-          showSuccessToast(proxy.t("common.operationSuccessful"));
+          showSuccessToast("暂存成功");
           setTimeout(() => {
           setTimeout(() => {
             onClickLeft();
             onClickLeft();
           }, 500);
           }, 500);
@@ -476,6 +503,24 @@ const onSubmit = () => {
           return showFailToast(err.message);
           return showFailToast(err.message);
         }
         }
       );
       );
+    } else {
+      proxy
+        .post("/flowProcess/initiate", {
+          flowKey: "jxst_sales_contract_flow",
+          data: formData.data,
+        })
+        .then(
+          () => {
+            showSuccessToast(proxy.t("common.operationSuccessful"));
+            setTimeout(() => {
+              onClickLeft();
+            }, 500);
+          },
+          (err) => {
+            return showFailToast(err.message);
+          }
+        );
+    }
   } else {
   } else {
     return showFailToast(proxy.t("salesContract.pleaseAddContractDetails"));
     return showFailToast(proxy.t("salesContract.pleaseAddContractDetails"));
   }
   }

+ 6 - 25
src/views/JXSK/salesContract/index.vue

@@ -1,33 +1,13 @@
 <template>
 <template>
-  <van-nav-bar
-    :title="$t('salesContract.name')"
-    left-text=""
-    left-arrow
-    @click-left="onClickLeft"
-    @click-right="onClickRight"
-  >
+  <van-nav-bar :title="$t('salesContract.name')" left-text="" left-arrow @click-left="onClickLeft" @click-right="onClickRight">
     <template #right> {{ $t("common.add") }} </template>
     <template #right> {{ $t("common.add") }} </template>
   </van-nav-bar>
   </van-nav-bar>
-  <van-search
-    v-model="req.keyword"
-    :placeholder="$t('common.pleaseEnterKeywords')"
-    @search="onRefresh"
-  />
+  <van-search v-model="req.keyword" :placeholder="$t('common.pleaseEnterKeywords')" @search="onRefresh" />
   <van-pull-refresh v-model="loading" @refresh="onRefresh">
   <van-pull-refresh v-model="loading" @refresh="onRefresh">
     <div class="list">
     <div class="list">
-      <van-list
-        v-model:loading="loading"
-        :finished="finished"
-        :finished-text="$t('common.noMore')"
-        :offset="300"
-        @load="onLoad"
-        style="margin-bottom: 60px"
-      >
-        <commonList
-          :data="listData"
-          @onClick="toDtl"
-          :config="listConfig"
-        ></commonList>
+      <van-list v-model:loading="loading" :finished="finished" :finished-text="$t('common.noMore')" :offset="300" @load="onLoad"
+                style="margin-bottom: 60px">
+        <commonList :data="listData" @onClick="toDtl" :config="listConfig"></commonList>
       </van-list>
       </van-list>
     </div>
     </div>
   </van-pull-refresh>
   </van-pull-refresh>
@@ -87,6 +67,7 @@ const toDtl = (row) => {
     path: "jxskSalesContractAdd",
     path: "jxskSalesContractAdd",
     query: {
     query: {
       id: row.id,
       id: row.id,
+      status: row.flowStatus,
     },
     },
   });
   });
 };
 };