2 lines
7.2 KiB
JavaScript
2 lines
7.2 KiB
JavaScript
import"./vue.db505ee4.js";import{_ as _export_sfc,b as useInjectRenderContext,s as service,h as exceptField,i as isNumber}from"./index.b35f53c6.js";import{l as lodash}from"./lodash.c9cf1bdb.js";import{u as useHttp}from"./use-http.ec808253.js";import{u as useProvideFormContext}from"./context.6c9ae94a.js";import{w as watchDebounced}from"./@vueuse.952f4739.js";import{V as useAttrs,r as ref,C as isReactive,p as computed,n as nextTick,aW as resolveComponent,aR as openBlock,ar as createBlock,bd as withCtx,X as renderSlot,c as createVNode,aM as mergeProps,bu as withKeys}from"./@vue.cb43a243.js";import"./@babel.6cd0804c.js";import"./regenerator-runtime.8e24db72.js";import"./js-md5.5179c6be.js";import"./vue-router.a08742b9.js";import"./js-cookie.31874410.js";import"./ant-design-vue.6b10f349.js";import"./@ant-design.bcfb08ae.js";import"./@ctrl.fa7cbd46.js";import"./resize-observer-polyfill.8deb1e21.js";import"./vue-types.6e6d84ba.js";import"./dom-align.f1b5d360.js";import"./lodash-es.0ea26897.js";import"./dayjs.38e390ea.js";import"./async-validator.5d25c98b.js";import"./scroll-into-view-if-needed.5191fdbf.js";import"./compute-scroll-into-view.6058b3be.js";import"./spark-md5.2cc5764b.js";import"./axios.e3200588.js";/* empty css */import"./sortablejs.412b554c.js";import"./clipboard.099d05c9.js";import"./markdown-it.80c3a67b.js";import"./entities.0d2c0164.js";import"./uc.micro.981ceb7b.js";import"./mdurl.ef76b4dc.js";import"./linkify-it.92c30060.js";import"./markdown-it-emoji.e3e91710.js";import"./escape-html.e5dfadb9.js";import"./prismjs.c97a8414.js";import"./diacritics.6be19c75.js";import"./markdown-it-container.512a5043.js";import"./markdown-it-anchor.c88e5394.js";import"./markdown-it-attrs.3af5ab50.js";import"./markdown-it-table-of-contents.8a4ce16f.js";import"./@kangc.86f7507c.js";import"./vue-demi.5fb18120.js";var form_vue_vue_type_style_index_0_scoped_true_lang="";const __default__={name:"ExForm",inheritAttrs:!1},_sfc_main=Object.assign(__default__,{props:{url:String,method:{type:String,default:"POST"},exceptField:{type:Array,default:[]},editId:{type:[String,Number],default:null},callParams:{type:Object,default:{}},params:{type:Object,default:{}},tabsValidateField:{type:Array,default:[]},validateField:{type:Array,default:[]},watch:{type:Array,default:[]},stepCurrent:[String,Number],enterToTab:Boolean,focusFirst:Boolean},emits:["submit","success","formModalClose","gridRefresh","update:stepCurrent","watchModel"],setup(__props,{expose,emit}){const props=__props,attrs=useAttrs(),form=ref();attrs.model;const watchData=[],proxyData=useInjectRenderContext(),stepResult=ref(null),{loading,http}=useHttp();let enterTabIndex=-1,watchPauseField,submitPass=!0;watchDebounced(attrs.model,e=>{emit("watchModel",e)},{debounce:300}),props.watch.forEach(field=>{let watchField=getWatchField(field);const watchValue=eval("attrs.model."+watchField);isReactive(watchValue)?watchDebounced(computed(()=>JSON.stringify(eval("attrs.model."+watchField))),(e,t)=>{watchQueue(field,JSON.parse(e),JSON.parse(t))},{debounce:300,deep:!0}):watchDebounced(()=>eval("attrs.model."+watchField),(e,t)=>{watchQueue(field,e,t)},{debounce:300})});function watchQueue(e,t,a){if(watchPauseField==e)return watchPauseField=null,!0;const r=watchData.length;if(JSON.stringify(t)!=JSON.stringify(a)){if(t===null&&a===""||a===null&&t==="")return;watchData.push({field:e,newValue:t,oldValue:a})}r===0&&watchListen()}function getWatchField(e,t=!1){let a=e;if(e.indexOf(".*.")>-1){let r=e.split(".*.");t?a=r[1]:a=r[0]}return a}async function watchListen(){const t=JSON.parse(JSON.stringify(watchData)).shift();t&&(await watchAjax(t.field,t.newValue,t.oldValue),watchData.shift(),watchListen())}function watchAjax(e,t,a){return new Promise((r,i)=>{submitPass=!1,service({url:props.url,method:props.method,data:Object.assign(props.callParams,{ex_admin_form_action:"watch",data:submitData(),ex_field:e,newValue:t,oldValue:a,formField:attrs.formField,id:props.editId},props.params)}).then(o=>{o.data.showField.forEach(s=>{proxyData[s]=1}),o.data.hideField.forEach(s=>{proxyData[s]=0});let l=o.data.data;for(let s in l){if(isReactive(attrs.model[s])){getWatchField(e)==s&&(watchPauseField=e);let n=getWatchField(e,!0);for(let d in l[s])try{l[s][d][n]=attrs.model[s][d][n]}catch{}}attrs.model[s]=l[s]}submitPass=!0}).finally(o=>{r(o)})})}props.focusFirst&&nextTick(()=>{enterNext()});function enterNext(){let e=form.value.$el.querySelectorAll("input,select,textarea");e=Array.from(e).filter(t=>!(t.nodeName=="INPUT"&&t.getAttribute("type")=="hidden")),e.forEach((t,a)=>{document.activeElement===t&&(enterTabIndex=a)}),enterTabIndex<e.length-1?enterTabIndex++:enterTabIndex=0,e[enterTabIndex].focus()}function onEnter(){props.enterToTab&&enterNext()}function submitData(){const e=lodash.exports.cloneDeep(attrs.model);exceptField(e,props.exceptField);for(let t in e)e[t]===void 0&&(e[t]=null);return e}function scrollToField(e){let t=e.map(a=>isNumber(a)?"*":a);lodash.exports.forEach(props.tabsValidateField,function(a){lodash.exports.forEach(a,function(r,i){t.join(".")==i&&lodash.exports.forEach(r,function(o){proxyData[o.model]=o.key})})}),form.value.scrollToField(e,{block:"center",behavior:"smooth"})}function validate(e,t,a){e=e.join("."),t?(props.validateField[e].message=null,props.validateField[e].status=null):(props.validateField[e].status="error",props.validateField[e].message=a)}function clearValidate(){lodash.exports.forEach(props.validateField,function(e,t){props.validateField[t].message=null,props.validateField[t].status=null})}const submitDebounce=lodash.exports.debounce(submit,500);function submit(){const e=submitData();emit("submit",e),form.value.validate().then(()=>{if(props.url){if(watchData.length>0||!submitPass){loading.value=!0,setTimeout(()=>{submit()},100);return}let t={ex_admin_form_action:"save",data:e,CURRENT_VALIDATION_STEP:props.stepCurrent,FORM_REF:attrs.form_ref};t.id=props.editId,http({url:props.url,method:props.method,data:Object.assign(props.callParams,t,props.params)}).then(a=>{if(clearValidate(),a.code===422){let r="";for(let i in a.data){r||(r=i);let o=a.data[i];props.validateField[i].status="error",props.validateField[i].message=Array.isArray(o)?o[0]:o}scrollToField([r]);return}else if(a.code===201){emit("update:stepCurrent",props.stepCurrent+1);return}else a.code===202&&(emit("update:stepCurrent",props.stepCurrent+1),stepResult.value=a.data);emit("success",a),emit("gridRefresh"),emit("formModalClose")})}else emit("success"),emit("gridRefresh"),emit("formModalClose")}).catch(t=>{scrollToField(t.errorFields[0].name)})}function stepReset(){emit("update:stepCurrent",0),form.value.resetFields(),stepResult.value=null}function reset(){form.value.resetFields(),clearValidate()}const context={submitData,submitDebounce,stepReset,form,loading,submit,reset};return useProvideFormContext(context),expose(context),(e,t)=>{const a=resolveComponent("render"),r=resolveComponent("a-form");return openBlock(),createBlock(r,mergeProps({class:"form",ref_key:"form",ref:form,onValidate:validate},e.$attrs,{onKeyup:withKeys(onEnter,["native","enter"])}),{default:withCtx(()=>[renderSlot(e.$slots,"default",{},void 0,!0),createVNode(a,{data:stepResult.value},null,8,["data"]),renderSlot(e.$slots,"footer",{},void 0,!0)]),_:3},16,["onKeyup"])}}});var form=_export_sfc(_sfc_main,[["__scopeId","data-v-4c591e3a"]]);export{form as default};
|