142 lines
41 KiB
JavaScript
142 lines
41 KiB
JavaScript
|
|
import{_ as s,c as a,a as p,o as e}from"./app-CDlLWk6N.js";const t=""+new URL("vmodel_demo--x0CSlwt.png",import.meta.url).href,o={};function l(c,n){return e(),a("div",null,n[0]||(n[0]=[p(`<h1 id="pc端逻辑" tabindex="-1"><a class="header-anchor" href="#pc端逻辑"><span>PC端逻辑</span></a></h1><p>未绑定流程的表单和带流程的标配单赋值逻辑基本一致,在原始框架中,带流程的表单详情取值实际上取得是流程保存的一份冗余数据,而列表读取的是原始表单的数据,这样会导致数据不一致。在后续版本中,这个问题已经被修复。</p><h2 id="赋值过程-表单初始化" tabindex="-1"><a class="header-anchor" href="#赋值过程-表单初始化"><span>赋值过程(表单初始化)</span></a></h2><p>以流程表单为例,入口页面为SystemForm/src/Form,异步组件加载完成之后,会调用loadingCompleted函数。这个函数会调用ref的setWorkFlowForm,函数定义位于生成代码的components/Form.vue中。</p><p>对于非新建场景,id(就是默认的rowKey)存在,因此会调用setFormDataFromId,重新查一次表单数据,避免数据不一致问题,此时formModel实际上是有值的,但是值来自流程冗余,因此因此会调用setFormDataFromId会重新覆盖formModel的值。</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">setWorkFlowForm</span><span class="token punctuation">(</span><span class="token parameter">obj</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> flowData <span class="token operator">=</span> <span class="token function">changeWorkFlowForm</span><span class="token punctuation">(</span><span class="token function">cloneDeep</span><span class="token punctuation">(</span>formProps<span class="token punctuation">)</span><span class="token punctuation">,</span> obj<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> <span class="token punctuation">{</span>buildOptionJson<span class="token punctuation">,</span> uploadComponentIds<span class="token punctuation">,</span> formModels<span class="token punctuation">,</span> isViewProcess<span class="token punctuation">}</span> <span class="token operator">=</span> flowData<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> data<span class="token punctuation">.</span>formDataProps <span class="token operator">=</span> buildOptionJson<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token function">emits</span><span class="token punctuation">(</span><span class="token string">'changeUploadComponentIds'</span><span class="token punctuation">,</span> uploadComponentIds<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//工作流中必须保存上传组件id【附件汇总需要】</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>isViewProcess<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token function">setDisabledForm</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//查看</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> state<span class="token punctuation">.</span>formModel <span class="token operator">=</span> formModels<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>formModels<span class="token punctuation">[</span>RowKey<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token function">setFormDataFromId</span><span class="token punctuation">(</span>formModels<span class="token punctuation">[</span>RowKey<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span> <span class="token keyword">catch</span><span class="token punctuation">(</span>ex<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>最后,这个函数会调用SimpleForm/SimpleFormSetup的setFieldsValue函数完成表单赋值,因此,最上面template里formModel的定义仅仅是为了防止初值没有报错。</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">setFormDataFromId</span><span class="token punctuation">(</span><span class="token parameter">rowId<span class="token punctuation">,</span> skipUpdate</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">const</span> record <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">getDevgaofirst</span><span class="token punctuation">(</span>rowId<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>skipUpdate<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">return</span> record<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token function">setFieldsValue</span><span class="token punctuation">(</span>record<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> state<span class="token punctuation">.</span>formModel <span class="token operator">=</span> record<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">await</span> <span class="token function">getFormDataEvent</span><span class="token punctuation">(</span>formEventConfigs<span class="token punctuation">,</span> state<span class="token punctuation">.</span>formModel<span class="token punctuation">,</span> systemFormRef<span class="token punctuation">.</span>value<span class="token punctuation">,</span> formProps<span class="token punctuation">.</span>schemas<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//表单事件:获取表单数据</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">return</span> record<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="取值过程-表单提交" tabindex="-1"><a class="header-anchor" href="#取值过程-表单提交"><span>取值过程(表单提交)</span></a></h2><p>表单提交时调用的实际上是表单的校验函数,这个函数会返回表单的值:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">saveLaunch</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> data<span class="token punctuation">.</span>submitLoading <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> loading<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> validateForms <span class="token operator">=</span> <span class="token keyword">await</span> formInformation<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">validateForm</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>validateForms<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 后面代码省略</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>需要注意的是,这个函数的返回值必须表单中有效的antd-vue表单字段,而且字段必须渲染出来(可以v-show不能v-if,隐藏字段会自动处理)。因此修改提交值可以在模块生成的form.vue中找到validate函数:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">validate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> values <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> values <span class="token operator">=</span> <span class="token keyword">await</span> systemFormRef<span class="token punctuation">.</span>value<span class="token operator">?.</span><span class="token function">validate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">//可以修改values,加入需要额外提交给后端的值</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>data<span class="token punctuation">.</span>formDataProps<span class="token punctuation">.</span>hiddenComponent<span class="token operator">?.</span>length<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 其他代码省略</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">return</span> values<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="表单值绑定-v-model" tabindex="-1"><a class="header-anchor" href="#表单值绑定-v-model"><span>表单值绑定(v-model)</span></a></h2><p>在拆分后的CustomDevForm中,formModel为响应式的,下面是一个例子,直接利用formModel拼接字符串,同时保持表单样式(提交时不传值):</p><div class="language-vue line-numbers-mode" data-highlighter="prismjs" data-ext="vue"><pre><code><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>template</span><span class="token punctuation">></span></span></span>
|
|||
|
|
<span class="line"> <span class="token comment"><!-- 其余代码省略 --></span></span>
|
|||
|
|
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Col</span> <span class="token attr-name">:span</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>getColWidth({responsive: true})<span class="token punctuation">"</span></span><span class="token punctuation">></span></span></span>
|
|||
|
|
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>FormItem</span> <span class="token attr-name">label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>vmodel演示<span class="token punctuation">"</span></span><span class="token punctuation">></span></span></span>
|
|||
|
|
<span class="line"> {{formModel.danXingWenBen5090 + '/' + formModel.danXingWenBen23227}}</span>
|
|||
|
|
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>FormItem</span><span class="token punctuation">></span></span></span>
|
|||
|
|
<span class="line"> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>Col</span><span class="token punctuation">></span></span></span>
|
|||
|
|
<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>template</span><span class="token punctuation">></span></span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>效果如下: <img src="`+t+`" alt="演示"></p><h1 id="移动端逻辑" tabindex="-1"><a class="header-anchor" href="#移动端逻辑"><span>移动端逻辑</span></a></h1><p>表述与PC端基本一致,不再赘述。流程表单赋值也修改为从原始表单获取而非流程表单。</p><h2 id="赋值过程-表单初始化-1" tabindex="-1"><a class="header-anchor" href="#赋值过程-表单初始化-1"><span>赋值过程(表单初始化)</span></a></h2><p>移动端赋值过程相对PC端简化很多,在流程层获取到流程数据后,向下传递,在FormInformation.vue层存贮到公共文件userFormInfo.js文件中。然后接着通过loadForm方法向下层组件传递。</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token comment">// FormInformation.vue</span></span>
|
|||
|
|
<span class="line"><span class="token keyword">function</span> <span class="token function">setFormModel</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span><span class="token punctuation">(</span>state<span class="token punctuation">.</span>platform<span class="token operator">==</span><span class="token string">'wx'</span><span class="token punctuation">)</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 无关代码省略</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> index <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> index <span class="token operator"><</span> itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">.</span>length<span class="token punctuation">;</span> index<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>forms<span class="token punctuation">.</span>formModels<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">!=</span><span class="token string">"{}"</span><span class="token punctuation">)</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">//这里放入流程表单数据</span></span>
|
|||
|
|
<span class="line"> itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">loadForm</span><span class="token punctuation">(</span>forms<span class="token punctuation">.</span>formModels<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>system-form层同样触发下层form的loadForm方法。</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token comment">// system-form层</span></span>
|
|||
|
|
<span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">loadForm</span><span class="token punctuation">(</span><span class="token parameter">formModel</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">await</span> systemRef<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">loadForm</span><span class="token punctuation">(</span>formModel<span class="token punctuation">)</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>在生成的表单文件form.vue中,通过传递过来的formModel的rowKey值查询一遍原始表单数据,最后赋值。</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token comment">// form.vue</span></span>
|
|||
|
|
<span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">loadForm</span><span class="token punctuation">(</span><span class="token parameter">val</span><span class="token punctuation">)</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> id <span class="token operator">=</span> val<span class="token punctuation">[</span>rowKey<span class="token punctuation">]</span></span>
|
|||
|
|
<span class="line"> formConfig<span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">const</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> data</span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">getxxx</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>data<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">await</span> formRef<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">setFormData</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token operator">...</span>props<span class="token punctuation">.</span>formModel<span class="token punctuation">,</span> <span class="token operator">...</span>data<span class="token punctuation">}</span><span class="token punctuation">)</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="取值过程-表单提交-1" tabindex="-1"><a class="header-anchor" href="#取值过程-表单提交-1"><span>取值过程(表单提交)</span></a></h2><p>移动端与PC端不同的是,在提交表单的时候校验函数和获取表单值的函数是分别进行的,validate函数并没有返回表单的值。</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token comment">// 流程提交参数</span></span>
|
|||
|
|
<span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">saveLaunch</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> uni<span class="token punctuation">.</span><span class="token function">showLoading</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 校验表单</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> validateForms <span class="token operator">=</span> <span class="token keyword">await</span> flowInfoRef<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">validateForm</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>validateForms<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> successValidate <span class="token operator">=</span> validateForms<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">ele</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">return</span> ele<span class="token punctuation">.</span>validate<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>successValidate<span class="token punctuation">.</span>length <span class="token operator">==</span> validateForms<span class="token punctuation">.</span>length<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 获取表单值</span></span>
|
|||
|
|
<span class="line"> mainFormModels<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token keyword">await</span> flowInfoRef<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">getFormModels</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 其他代码省略</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 其他代码省略</span></span>
|
|||
|
|
<span class="line"> </span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>这里获取表单值的函数的最底层是在simpleForm.vue公共组件,在这里getFormData函数返回与表单双向绑定的formModelRef的值,然后每一层都有一个getFormData函数向外暴露,以方便在最外层获取表单的值。在FormInformation.vue中,因为原始框架支持多表单,所以对多个表单值进行了合并处理。</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code><span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">getFormModels</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> formModes <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span><span class="token punctuation">(</span>state<span class="token punctuation">.</span>platform<span class="token operator">==</span><span class="token string">'wx'</span><span class="token punctuation">)</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 无关代码省略</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> index <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> index <span class="token operator"><</span> forms<span class="token punctuation">.</span>configs<span class="token punctuation">.</span>length<span class="token punctuation">;</span> index<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span> <span class="token punctuation">(</span>itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> formModel <span class="token operator">=</span> <span class="token keyword">await</span> itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token operator">?.</span><span class="token function">getFormData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">if</span><span class="token punctuation">(</span>itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">.</span>formType<span class="token operator">==</span>FormType<span class="token punctuation">.</span><span class="token constant">SYSTEM</span><span class="token punctuation">)</span><span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token keyword">let</span> formModelIdVal <span class="token operator">=</span> <span class="token keyword">await</span> itemRefs<span class="token punctuation">.</span>value<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token operator">?.</span><span class="token function">submit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> formModel <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token operator">...</span>formModel<span class="token punctuation">,</span><span class="token operator">...</span>formModelIdVal<span class="token punctuation">}</span><span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> formModes<span class="token punctuation">[</span>forms<span class="token punctuation">.</span>configs<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">.</span>formKey<span class="token punctuation">]</span> <span class="token operator">=</span> formModel<span class="token punctuation">;</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"> <span class="token comment">// 无关代码省略</span></span>
|
|||
|
|
<span class="line"> <span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"><span class="token punctuation">}</span></span>
|
|||
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="表单值绑定-v-model-1" tabindex="-1"><a class="header-anchor" href="#表单值绑定-v-model-1"><span>表单值绑定(v-model)</span></a></h2><p>该部分逻辑基本与PC端一致,不再赘述。</p>`,33)]))}const u=s(o,[["render",l]]),r=JSON.parse('{"path":"/front_dev/pass_value.html","title":"PC端逻辑","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"赋值过程(表单初始化)","slug":"赋值过程-表单初始化","link":"#赋值过程-表单初始化","children":[]},{"level":2,"title":"取值过程(表单提交)","slug":"取值过程-表单提交","link":"#取值过程-表单提交","children":[]},{"level":2,"title":"表单值绑定(v-model)","slug":"表单值绑定-v-model","link":"#表单值绑定-v-model","children":[]},{"level":2,"title":"赋值过程(表单初始化)","slug":"赋值过程-表单初始化-1","link":"#赋值过程-表单初始化-1","children":[]},{"level":2,"title":"取值过程(表单提交)","slug":"取值过程-表单提交-1","link":"#取值过程-表单提交-1","children":[]},{"level":2,"title":"表单值绑定(v-model)","slug":"表单值绑定-v-model-1","link":"#表单值绑定-v-model-1","children":[]}],"git":{"updatedTime":1744251107000,"contributors":[{"name":"gaoyunqi","username":"","email":"gaoyunqi@gdyd.com","commits":3},{"name":"DESKTOP-45LLIKH\\\\11405","username":"","email":"1140589958@qq.com","commits":2}],"changelog":[{"hash":"c84155fcf9531f25802f735edad59713762e5ca9","time":1744251107000,"email":"1140589958@qq.com","author":"DESKTOP-45LLIKH\\\\11405","message":"feat: 已写文档优化"},{"hash":"2a3d23ec1d24173947de6a4bcab9d30b7e90134a","time":1744169755000,"email":"1140589958@qq.com","author":"DESKTOP-45LLIKH\\\\11405","message":"feat: 更新文档 APP端 二开前准备及表单介绍部分"},{"hash":"ade1311d7bba455235b42db2e5f325116e3b86f4","time":1743940801000,"email":"gaoyunqi@gdyd.com","author":"gaoyunqi","message":"更新pc端前端文档"},{"hash":"6d1f2ad492629141aa9a6c3928f16e820688a85b","time":1743498223000,"email":"gaoyunqi@gdyd.com","author":"gaoyunqi","message":"更新前端文档:传值和显示隐藏部分"},{"hash":"6b00dc3b796584764f267778542e4e208f169201","time":1743251097000,"email":"gaoyunqi@gdyd.com","author":"gaoyunqi","message":"更新表单封装说明"}]},"filePathRelative":"front_dev/pass_value.md"}');export{u as comp,r as data};
|