app-form-view 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/css/style.css +157 -206
- package/dist/index.js +567 -2
- package/package.json +7 -5
- package/scripts/rollup.config.base.js +100 -68
- package/scripts/rollup.config.build.js +32 -29
- package/scripts/rollup.config.dev.js +18 -21
- package/scripts/rollup.config.prod.js +12 -2
- package/src/assets/css/app-form.css +50 -14
- package/src/assets/css/global.css +12 -12
- package/src/assets/scss/_flex.scss +31 -34
- package/src/assets/scss/app-form.scss +184 -1
- package/src/assets/scss/global.scss +179 -1
- package/src/components/appForm/Checkbox.vue +5 -0
- package/src/components/appForm/Input.vue +2 -2
- package/src/components/appForm/SearchApi.vue +1 -1
- package/src/components/appForm/Table.vue +21 -3
- package/src/components/appForm/select.vue +5 -5
- package/src/components/form/SearchSelect.vue +3 -3
- package/src/components/form/Table.vue +1 -1
- package/src/index.js +1 -1
- package/src/views/build/FieldMappingDialog.vue +0 -7
- package/src/views/build/RightPanel.vue +0 -1
- package/src/views/build/index.vue +0 -15
- package/src/views/build/viewAppForm.vue +150 -111
- package/src/views/build/viewForm.vue +2 -2
- package/static/plugins/css/app-form.css +3 -1
- package/static/plugins/scss/app-form.scss +5 -0
package/dist/index.js
CHANGED
|
@@ -1,5 +1,570 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* app-form-view.js v0.0.
|
|
2
|
+
* app-form-view.js v0.0.1
|
|
3
3
|
* Released under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("vue"),require("vuex"),require("element-ui"),require("vant")):"function"==typeof define&&define.amd?define(["vue","vuex","element-ui","vant"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["app-form-view"]=t(e.Vue,e.Vuex,e.ELEMENT,e.vant)}(this,function(e,t,i,a){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=s(e);const o={input:{tag:"c-input",appTag:"c-app-input",tagIcon:"danhangwenben"},textarea:{tag:"c-textarea",appTag:"c-app-input",tagIcon:"duohangwenben"},inputNumber:{tag:"c-input-number",appTag:"c-app-input",tagIcon:"shuzhixing"},select:{tag:"c-select",appTag:"c-app-select",tagIcon:"xiala-"},radio:{tag:"c-radio",appTag:"c-app-radio",tagIcon:"duoxuan-xuanzhong"},checkbox:{tag:"c-radio",appTag:"c-app-checkbox",tagIcon:"duoxuan-xuanzhong"},datetime:{tag:"c-datetime-picker",appTag:"c-app-datetime-picker",tagIcon:"riqishijian"},datetimeRange:{tag:"c-datetime-range",appTag:"c-app-datetime-range",tagIcon:"riqishijian"},inputTree:{tag:"c-input-tree",appTag:"c-app-input-tree",tagIcon:"bumen"},inputUpload:{tag:"c-input-upload",appTag:"c-app-input-upload",tagIcon:"yunshangchuan"},subRow:{tag:"c-sub-row",appTag:"c-app-collapse",tagIcon:"zhediemianban"},textBox:{tag:"c-text-box",appTag:"c-app-text-box",tagIcon:"wenbenzuhe"},searchSelect:{tag:"c-search-select",appTag:"c-app-search-select",tagIcon:"sousuoxialacaidan"},searchApi:{tag:"c-search-api",appTag:"c-app-search-api",tagIcon:"duqushujuku"},subTitle:{tag:"c-sub-title",appTag:"c-app-sub-title",tagIcon:"biaotizhengwenqiehuan"},row:{tag:"c-row",appTag:"c-app-row",tagIcon:"zhage"},password:{tag:"c-input",appTag:"c-app-input",tagIcon:"mima2"},inputHidden:{tag:"c-input-hidden",appTag:"c-app-input-hidden",tagIcon:"yincangyu1"},table:{tag:"c-table",appTag:"c-app-table",tagIcon:"biaoge"},block:{tag:"c-block",appTag:"c-app-block",tagIcon:"biaoge"},button:{tag:"c-button",appTag:"c-app-button",tagIcon:"caozuoanniu"}},r=[{label:"单行文本",hideLabel:!1,name:"",widget:"input",type:"text",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",clearable:!0,prepend:"",prependType:"text",append:"",appendType:"text",maxlength:null,readonly:!1,disabled:!1,required:!1,preReg:"",regList:[],changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"多行文本",hideLabel:!1,name:"",widget:"textarea",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",rows:2,maxlength:null,readonly:!1,disabled:!1,required:!1,regList:[],preReg:"",changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"数值输入框",hideLabel:!1,name:"",widget:"inputNumber",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",clearable:!0,prepend:"",prependType:"text",append:"",appendType:"text",min:0,max:1e3,readonly:!1,disabled:!1,required:!1,preReg:"",regList:[],changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"下拉选择",hideLabel:!1,name:"",widget:"select",placeholder:"请选择",defaultValue:"",width:6,class:"form-control",clearable:!0,readonly:!1,disabled:!1,required:!1,regList:[],changeTag:!0,description:"",descriptionType:"icon",dataType:"dict",dict:"",dictLylx:"",options:[],sjbName:"",visible:!0,multiple:!1,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"单选框",hideLabel:!1,name:"",widget:"radio",defaultValue:"",width:6,class:"",readonly:!1,disabled:!1,required:!1,changeTag:!0,description:"",descriptionType:"icon",dataType:"dict",dict:"",dictLylx:"",options:[],sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"复选框",hideLabel:!1,name:"",widget:"checkbox",defaultValue:"",width:6,class:"",readonly:!1,disabled:!1,required:!1,changeTag:!0,description:"",descriptionType:"icon",dataType:"dict",dict:"",dictLylx:"",options:[],sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"日期时间",hideLabel:!1,name:"",widget:"datetime",defaultValue:"",placeholder:"请选择",width:6,class:"form-control",disabled:!1,readonly:!1,clearable:!0,required:!1,datetype:"date",format:"yyyy-MM-dd",changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"日期范围",hideLabel:!1,name:"",widget:"datetimeRange",defaultValue:"",width:12,class:"form-control",disabled:!1,readonly:!1,required:!1,datetype:"date",format:"yyyy-MM-dd",changeTag:!0,description:"",descriptionType:"icon",separator:"-",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"树选择器",hideLabel:!1,name:"",widget:"inputTree",defaultValue:"",placeholder:"请选择",width:12,class:"form-control",disabled:!1,readonly:!0,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",multiple:!1,api:{url:"system/dept/roleDeptTreeData",method:"get",paramsList:[],refresh:!1,fhType:"json"},async:!1,keyMap:{id:"id",name:"name",title:"title",pId:"pId",rootPId:0},expand:{enable:!0,level:"all"},separator:",",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"文件上传",hideLabel:!1,name:"",widget:"inputUpload",placeholder:"请选择",width:12,class:"",disabled:!1,readonly:!1,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",allowedFileType:["image","pdf","office","zip"],mode:0,columns:2,source:"mainTable",minFileCount:null,maxFileCount:null,multiple:!1,sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},events:[],keyMap:{path:"fileBase64",name:"fileName",type:"fileType",size:"size",bizType:"biz_type"},appVisible:!0,appReadonly:!1,maxFileSize:25600},{label:"搜索建议",hideLabel:!1,name:"",widget:"searchSelect",defaultValue:"",placeholder:"请选择",width:12,class:"form-control",disabled:!1,readonly:!1,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",api:{url:"",method:"post",paramsList:[],mappings:[],headers:[],refresh:!1},sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"API查询",hideLabel:!1,name:"",widget:"searchApi",defaultValue:"",placeholder:"点击查询",width:12,class:"form-control",disabled:!1,readonly:!0,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",append:"查询",appendType:"text",buttonType:"success",visible:!0,api:{url:"",method:"post",mappings:[],paramsList:[],refresh:!1,fhType:"json"},openType:"modal",sjbName:"",visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"密码",hideLabel:!1,name:"",widget:"password",type:"password",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",clearable:!0,prepend:"",prependType:"text",append:"",appendType:"text",maxlength:null,readonly:!1,disabled:!1,required:!0,preReg:"password",regList:[],changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!1},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"隐藏域",hideLabel:!1,name:"",widget:"inputHidden",type:"hidden",defaultValue:"",noDrag:!0,sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!0,edit:!0,view:!0},events:[],appVisible:!0,appReadonly:!0}];function l(e){return"[object String]"===Object.prototype.toString.call(e)}const c=function(e,t){const i=Object.create(null),a=e.split(",");for(let e=0;e<a.length;e++)i[a[e]]=!0;return t?e=>i[e.toLowerCase()]:e=>i[e]}("accept,accept-charset,accesskey,action,align,alt,async,autocomplete,autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,name,contenteditable,contextmenu,controls,coords,data,datetime,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,ismap,itemprop,keytype,kind,lang,language,list,loop,low,manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,type,usemap,value,width,wrap");var d={render(e){let t={props:{attrs:{},conf:{},terminal:this.terminal,mode:this.mode,value:this.value},on:{updateItem:(e,t)=>{this.$emit("updateItem",e,t)},input:e=>{this.$emit("onInput",e,this.conf.name||this.attrs.name)}},style:{}};const i=JSON.parse(JSON.stringify(this.conf)),a=[];return null==i.name?t={props:{conf:i,mode:this.mode},on:{updateItem:(e,t)=>{this.$emit("updateItem",e,t)}}}:(Object.keys(i).forEach(e=>{const a=i[e];"vModel"===e?function(e,t,i){t.props.value=i,t.on.input=t=>{e.$emit("input",t)}}(this,t,this.value||i.defaultValue):t[e]?t[e]=a:c(e)?t.props.attrs[e]=a:t.props.conf[e]=a}),t.props.conf.preReg&&"mobile"!==this.terminal&&(t.props.attrs.class=t.props.attrs.class+" "+t.props.conf.preReg)),this.terminal&&"mobile"==this.terminal?e(o[this.conf.widget].appTag,t,a):e(o[this.conf.widget].tag,t,a)},props:["conf","value","mode","terminal"]};function p(e,t){return!1!==e.appVisible&&(!e.visibilityByMode||(e.visibilityByMode[t]??!0))}const h={colFormItem(e,t,i,a,s){const{updateItem:n}=this.$listeners,o=s?.mode||"add";if(!p(t,o))return null;let r="";r+="widget-"+t.widget;const l=function(e,t){return!0===e.readonly||!!e.readonlyByMode&&(e.readonlyByMode[t]??!1)}(t,o),c={...t,readonly:l,disabled:t.disabled||l&&"view"==o};return null==t.name?e(d,{attrs:{conf:c,mode:o,terminal:"mobile"},key:t.renderKey,on:{updateItem:n},class:r}):e("c-app-form-item",{attrs:{conf:t,mode:o,formConf:s},on:{updateItem:n},class:r,scopedSlots:{default:i=>e(d,{key:t.renderKey,attrs:{conf:t,value:i.value,mode:o,terminal:"mobile"},on:{input:i.onUpdate,updateItem:n}})}})},rowFormItem(e,t,i,a,s){const{updateItem:n}=this.$listeners,o=s?.mode||"add";if(!p(t,o))return null;let r="widget-"+t.widget,l=u.apply(this,arguments);if("subRow"==t.widget)return e("div",{class:r},[e("c-sub-row",{attrs:{conf:t,formConf:s,mode:o},on:{updateItem:n}},[l])]);if("block"==t.widget)return e("div",{class:r},[e("c-block",{attrs:{conf:t,formConf:s,mode:o},on:{updateItem:n}},[l])]);return e("div",{class:r+(void 0!==t.border&&t.border.length>0?t.border.join(" "):"")},[l])}};function u(e,t,i,a,s){return Array.isArray(t.children)?t.children.map((i,a)=>{const n=h[i.layout];return n?n.call(this,e,i,a,t.children,s):m()}):null}function m(){throw new Error(`没有与${this.element.layout}匹配的layout`)}var f={components:{render:d},props:["element","index","drawingList","formConf"],render(e){const t=h[this.element.layout||"colFormItem"];return t?t.call(this,e,this.element,this.index,this.drawingList,this.formConf):m()}};var g={session:{set(e,t){sessionStorage&&null!=e&&null!=t&&sessionStorage.setItem(e,t)},get:e=>sessionStorage?null==e?null:sessionStorage.getItem(e):null,setJSON(e,t){null!=t&&this.set(e,JSON.stringify(t))},getJSON(e){const t=this.get(e);return null!=t?JSON.parse(t):null},remove(e){sessionStorage.removeItem(e)}},local:{set(e,t){localStorage&&null!=e&&null!=t&&localStorage.setItem(e,t)},get:e=>localStorage?null==e?null:localStorage.getItem(e):null,setJSON(e,t){null!=t&&this.set(e,JSON.stringify(t))},getJSON(e){const t=this.get(e);return null!=t?JSON.parse(t):null},remove(e){localStorage.removeItem(e)}}};new class{constructor(){this.config={baseURL:"/",apiPrefix:"",staticPrefix:""},this.init()}init(){window.APP_CONFIG&&this.mergeConfig(window.APP_CONFIG),this.mergeConfig(this.getUrlConfig()),this.mergeConfig(this.getLocalStorageConfig())}getUrlConfig(){const e=new URLSearchParams(window.location.search),t={};return e.get("baseURL")&&(t.baseURL=e.get("baseURL")),e.get("apiPrefix")&&(t.apiPrefix=e.get("apiPrefix")),t}getLocalStorageConfig(){try{return JSON.parse(localStorage.getItem("app-config"))||{}}catch{return{}}}mergeConfig(e){this.config={...this.config,...e}}updateConfig(e){this.mergeConfig(e),localStorage.setItem("app-config",JSON.stringify(this.config))}get(e){return this.config[e]}getAll(){return{...this.config}}};function y(e){let t="";for(const i of Object.keys(e)){const a=e[i],s=encodeURIComponent(i)+"=";if(null!==a&&""!==a&&void 0!==a)if("object"==typeof a){for(const e of Object.keys(a))if(null!==a[e]&&""!==a[e]&&void 0!==a[e]){t+=encodeURIComponent(`${i}[${e}]`)+"="+encodeURIComponent(a[e])+"&"}}else t+=s+encodeURIComponent(a)+"&"}return t.slice(0,-1)}const b=e=>{const t={...{url:"",method:"GET",data:null,headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"json",timeout:1e4,cache:!0,processData:!0,contentType:!0},...e};if(t.url=function(e,t){if(!t)return e;const i=e.endsWith("/"),a=t.startsWith("/");return i&&a?e+t.slice(1):i||a?e+t:e+"/"+t}("/api/",t.url),"GET"===t.method.toUpperCase()&&t.data){const e=y(t.data);t.url+=(t.url.includes("?")?"&":"?")+e,t.data=null}t.data instanceof FormData?(t.contentType=!1,t.processData=!1,t.headers={}):["POST","PUT","PATCH"].includes(t.method.toUpperCase())&&t.data&&"application/x-www-form-urlencoded"===t.headers["Content-Type"]&&(t.data=y(t.data));const a=function(e){if(!1!==e.headers?.repeatSubmit&&["POST","PUT"].includes(e.method.toUpperCase())){const t={url:e.url,data:e.data,time:(new Date).getTime()};if(JSON.stringify(t).length>=5242880)return console.warn(`[${e.url}]: 请求数据超出5M限制`),e;g.session.setJSON("sessionObj",t)}return e}(t);return a?new Promise((e,t)=>{$.ajax({cache:a.cache,processData:a.processData,contentType:a.contentType,url:a.url,type:a.method,data:a.data,headers:a.headers,timeout:a.timeout,success:(s,n,o)=>{try{const t=function(e){const t=e.data;if("blob"===e.responseType||"arraybuffer"===e.responseType)return t;const a=t.code,s=t.msg||"操作失败";return 401===a?Promise.reject("无效的会话,请重新登录"):500===a?(i.Message({message:s,type:"error"}),Promise.reject(s)):601===a?(i.Message({message:s,type:"warning"}),Promise.reject("warning")):0!==a&&void 0!==a?(i.Notification.error({title:s}),Promise.reject("error")):t}({data:s,responseType:a.responseType});e(t)}catch(e){t(e)}},error:(e,a,s)=>{(function(e,t,a){let s="";return s="error"===t?0===e.status?"后端接口连接异常":`系统接口${e.status}异常`:"timeout"===t?"请求超时":`请求失败: ${a||t}`,i.Message({message:s,type:"error",duration:5e3}),Promise.reject(s)})(e,a,s).catch(t)}})}):Promise.reject("请求被拦截")};const v="sjyy/sjczgl/form/bdgl/config/",w={scene:v+"getFromConfigScene",addSave:v+"formConfigAdd",editSave:v+"formConfigEdit",view:v+"formConfigView",getData:"sjyy/sjczgl/form/bdgl/formBdglView",getSjyyFields:"sjyy/sjcxgl/sjxgl/getYsjSjxList",getDict:v+"getFormDictData",getFormInitData:"sjyy/sjczgl/sjcjh/getFormInitData",getViewData:"sjyy/sjczgl/sjcjh/getDataViewById"};function C(e,t){return b({url:e,method:"post",data:t})}var x={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"app-page",class:e.mode},[i("c-app-form",{ref:"cform",staticClass:"app-form",attrs:{conf:e.formConf,model:e.formConf.model||{},openType:e.openType,singleUploadList:e.singleUploadList,multiplySingleUploadList:e.multiplySingleUploadList},on:{updateItem:e.updateItem}},[i("div",{staticClass:"app-wrap scroll-wrap"},[i("div",{staticStyle:{padding:"15px"}},[e._l(e.hiddenList,function(t){return i("app-form-item",{key:t.renderKey,attrs:{element:t,"form-conf":e.formConf},on:{updateItem:e.updateItem}})}),e._v(" "),e._l(e.filterDrawingList,function(t){return i("app-form-item",{key:t.renderKey,attrs:{element:t,"form-conf":e.formConf},on:{updateItem:e.updateItem}})})],2)]),e._v(" "),e.formConf.buttons?i("van-goods-action",{ref:"detailBtns",staticClass:"bottom-btns"},e._l(e.formConf.buttons,function(t){return i("app-form-item",{key:t.renderKey,attrs:{element:t,"form-conf":e.formConf},on:{updateItem:e.updateItem}})}),1):e._e()],1)],1)},staticRenderFns:[],components:{AppFormItem:f},props:{formData:{type:Object,default:()=>{}},mode:{}},data:()=>({formConf:{},drawingList:[],openType:"",paddingBottom:"0px",baseWidget:r.map(e=>e.widget)}),computed:{...t.mapState("user",["userInfo"]),hiddenList(){return this.drawingList.filter(e=>e.noDrag)},filterDrawingList(){return this.getDrawingList(this.drawingList.filter(e=>!e.noDrag))},filterList(){return this.flattenDrawingList(this.drawingList)},singleUploadList(){return this.filterList.filter(e=>"inputUpload"==e.widget&&"mainTable"==e.source)},tableList(){return this.filterList.filter(e=>"table"==e.widget)},multiplyUploadList(){let e={};return this.filterList.filter(e=>"inputUpload"==e.widget&&"attachedTable"==e.source).forEach(t=>{if(t.name.split("@").length>1){const[i,a]=t.name.split("@");e[i]||(e[i]=t.keyMap)}}),e},multiplySingleUploadList(){let e={};return this.filterList.filter(e=>"inputUpload"==e.widget&&"attachedTable"==e.source).forEach(t=>{1==t.name.split("@").length&&(e[t.name]=t.keyMap)}),e},sceneName(){return{add:"新增",edit:"修改",view:"查看"}[this.formConf.mode]||"新增"}},watch:{formData:{handler(e){e&&(this.formConf=e,this.drawingList=e.fields)},deep:!0}},created(){this.userInfo&&this.userInfo.userId||this.fetchUserInfo(),this.formData&&(this.formConf=this.formData,this.drawingList=this.formData.fields);const{formId:e,buttonCode:t,ywid:i}=this.getFormParamsFromUrl();var a;e?(a={id:e},b({url:w.view,method:"post",data:a})).then(e=>{if(0==e.code){const a=e.data,s=a.formCode;this.openType=a.openType;let n=JSON.parse(a.formJson),o="add";n.sceneList&&n.sceneList.length>0&&t&&n.sceneList.filter(e=>e.sceneCode==t).length>0&&(o=n.sceneList.filter(e=>e.sceneCode==t)[0].operationType),this.drawingList=JSON.parse(JSON.stringify(n.fields)),delete n.fields,this.formConf=n,this.formConf.mode="detail"==o?"view":o,this.formConf.model={},this.formConf&&this.formConf.buttons&&this.formConf.buttons.length>0?this.$refs.detailBtns?this.paddingBottom=this.$refs.detailBtns.offsetHeight+"px":(this.paddingBottom="60px",this.$nextTick(()=>{this.$refs.detailBtns&&(this.paddingBottom=this.$refs.detailBtns.offsetHeight+"px")})):this.paddingBottom="0px","add"==this.formConf.mode?s&&function(e){return b({url:w.getFormInitData,method:"post",data:e})}({formCode:s}).then(e=>{0==e.code&&(this.formConf.model=e.data)}):"edit"!=this.formConf.mode&&"view"!=this.formConf.mode||(i?s&&i&&function(e){return b({url:w.getViewData,method:"post",data:e})}({formCode:s,id:i}).then(e=>{if(0==e.code){this.formConf.model=e.data;let t={};for(let e in this.formConf.model){const i=this.multiplyUploadList[e];if(i){const a=i.bizType;this.formConf.model[e].forEach(s=>{t[e+"@"+s[a]]||(t[e+"@"+s[a]]=[]),t[e+"@"+s[a]].push({[i.path]:s.path.fileBase64,[i.name]:s.path.fileName,[i.type]:s.path.fileType,[i.size]:s.size,[a]:s[a]})}),delete this.multiplyUploadList[e],delete this.formConf.model[e]}const a=this.multiplySingleUploadList[e];a&&this.formConf.model[e]&&(this.formConf.model[e]=this.formConf.model[e].map(e=>({[a.path]:e.path.fileBase64,[a.name]:e.path.fileName,[a.type]:e.path.fileType,[a.size]:e.size,[a.bizType]:e[a.bizType]})));const s=this.tableList.filter(t=>t.name==e);s&&s.length>0&&(this.formConf.model[e]=JSON.stringify(this.formConf.model[e]))}for(let e in t)this.formConf.model[e]=t[e];console.log(this.formConf.model,"回显数据")}}):$.modal.confirm("编辑状态下未从URL中获取到表单ywid,是否返回?",()=>{if("dialog"==this.openType){var e=parent.layer.getFrameIndex(window.name);parent.layer.close(e)}else"blank"==this.openType?window.close():$.modal.closeTab()}))}}).catch(e=>{console.error("获取表单数据失败:",e)}):console.warn("未从URL中获取到表单ID")},mounted(){},methods:{...t.mapActions("user",["fetchUserInfo"]),onClickLeft(){},getDrawingList(e){const t=e.length;return e.map((i,a)=>{const{class:s,...n}=i,o=0===a,r=a===t-1,l=this.baseWidget.indexOf(i.widget)>-1;let c="";if(r&&l)c="last-cell-child";else if(o)(l||"subTitle"===i.widget)&&(c="first-cell-child");else{const t=e[a-1],s=e[a+1],n=this.baseWidget.indexOf(t.widget)>-1,o=this.baseWidget.indexOf(s.widget)>-1;"subTitle"===t.widget||n&&"subTitle"!=i.widget||(c="first-cell-child"),o||(c+=c?" last-cell-child":"last-cell-child")}return{...n,class:c}})},updateItem(e,t){if("object"==typeof e){if(e.name){let i=function(e,t,i,a="children"){let s=null;return function e(n){s||Array.isArray(n)&&n.some(n=>{const o=n.name===t,r=null==i||""===i||n.sjbName===i;return o&&r?(s=n,!0):(n[a]&&Array.isArray(n[a])&&e(n[a]),!!s)})}(e),s}(this.drawingList,e.name,e.sjbName);if(i){const a=e.key.split(".");let s=i;for(let e=0;e<a.length;e++)e===a.length-1?s[a[e]]=t:(s[a[e]]||(s[a[e]]={}),s=s[a[e]])}}}else this.activeData[e]=t},getFormParamsFromUrl(){const e={formId:null,buttonCode:null,ywid:null},t=new URLSearchParams(window.location.search);if(e.formId=t.get("id")||e.formId,e.buttonCode=t.get("buttonCode")||e.buttonCode,e.ywid=t.get("ywid")||e.ywid,e.formId)return e;const i=window.location.pathname.split("/").filter(e=>e);if(0===i.length)return e;const a=i.findIndex(e=>"formRuntime"===e);return-1===a||a>=i.length-1||(e.formId=i[a+1]||null,e.buttonCode=i[a+2]||null,e.ywid=i[a+3]||null,e.formId&&!/^\d+$/.test(e.formId)&&(e.formId=null),e.ywid&&!/^\d+$/.test(e.ywid)&&(e.ywid=null)),e},getChatIdFromUrl:function(e){const t=new URL(e).pathname.split("/").filter(e=>e);return t[t.length-1]},flattenDrawingList(e){if(!Array.isArray(e)||0===e.length)return[];const t=e=>{let i=[];return e.forEach(e=>{if("object"==typeof e&&null!==e){"inputUpload"!=e.widget&&"table"!=e.widget||i.push(e);["children","columnsData"].forEach(a=>{Array.isArray(e[a])&&(i=i.concat(t(e[a])))})}}),i};return t(e)}}},k={data:()=>({originCompConfig:{},eventMixinInited:!1,eventHandlersCache:{}}),watch:{"conf.events":{deep:!0,handler(e,t){this.eventMixinInited&&JSON.stringify(e)!==JSON.stringify(t)&&(this.unbindAllEvents(),this.initEventHandlers(),this.saveOriginCompConfig())}},value:{deep:!0,handler(e,t){this.eventMixinInited&&e!==t&&this.triggerEvent("change",{value:e,oldValue:t})}}},mounted(){this.conf?this.initEventMixin():console.warn("表单组件未配置 conf 参数,事件 mixin 初始化失败")},beforeDestroy(){this.unbindAllEvents(),this.eventMixinInited=!1},methods:{initEventMixin(){this.saveOriginCompConfig(),this.initEventHandlers(),this.triggerEvent("rendered"),this.eventMixinInited=!0},saveOriginCompConfig(){this.originCompConfig={visible:!1!==this.conf.visible,disabled:!0===this.attrs?.disabled,required:!0===this.attrs?.required,readonly:!0===this.attrs?.readonly,value:this.value,refresh:this.conf.refresh||!1}},initEventHandlers(){const e=this.conf?.events||[];Array.isArray(e)&&0!==e.length&&e.forEach(e=>{const{type:t,rules:i}=e;if(t&&Array.isArray(i))switch(t){case"change":break;case"click":case"focus":case"blur":this.bindDomEvent(t,i);break;case"rendered":this.executeRules(i);break;default:console.warn(`不支持的事件类型:${t}`)}})},bindDomEvent(e,t){let i=this.$el.querySelector("input, textarea, select, button, a");if(!i){const e=this.$el.tagName.toLowerCase();if(!["input","textarea","select","button","a"].includes(e))return;i=this.$el}const a=i=>{i.stopPropagation(),i.preventDefault(),this.executeRules(t,{field:this.attrs?.name,eventType:e,value:this.value})},s=`${e}-${this.uid||this.conf.id||Date.now()}`;this.eventHandlersCache[s]={el:i,type:e,handler:a},i.addEventListener(e,a)},unbindAllEvents(){this.eventHandlersCache&&(Object.values(this.eventHandlersCache).forEach(e=>{e.el&&e.type&&e.handler&&e.el.removeEventListener(e.type,e.handler)}),this.eventHandlersCache={})},triggerEvent(e,t={}){const i=(this.conf?.events||[]).find(t=>t.type===e);i&&Array.isArray(i.rules)&&this.executeRules(i.rules,{...t,field:this.attrs?.name,eventType:e,component:this})},executeRules(e,t={}){Array.isArray(e)&&0!==e.length&&e.forEach(e=>{this.checkConditionGroups(e.conditionGroups,t)?this.executeActions(e.actions):this.restoreCompOriginState(e.actions)})},checkConditionGroups(e,t={}){if(!Array.isArray(e)||0===e.length)return!0;let i=!0;return e.forEach((e,a)=>{const s=this.checkSingleConditionGroup(e,t);i=0===a?s:"and"===e.groupLogic?i&&s:i||s}),i},checkSingleConditionGroup(e,t={}){const i=e?.conditions||[];if(!Array.isArray(i)||0===i.length)return!0;let a=!0;return i.forEach((e,i)=>{const s=this.checkSingleCondition(e,t);a=0===i?s:"and"===e.logic?a&&s:a||s}),a},checkSingleCondition(e,t={}){const{field:i,operator:a,valueType:s,value:n}=e;if(!i||!a)return!1;let o=this.getTargetFieldValue(i);const r=this.getCompareValue(s,n);switch(a){case"=":return this.compareValues(o,r,"=");case"!=":return this.compareValues(o,r,"!=");case"like":return this.compareValues(o,r,"like");case">":return this.compareValues(o,r,">");case"<":return this.compareValues(o,r,"<");case">=":return this.compareValues(o,r,">=");case"<=":return this.compareValues(o,r,"<=");case"in":return this.compareValues(o,r,"in");case"is null":return null==o||""===o;case"is not null":return null!=o&&""!==o;default:return console.warn(`不支持的运算符:${a}`),!1}},getTargetFieldValue(e){return this.formData?this.formData[e]:e===this.attrs?.name?this.value:void 0},getCompareValue(e,t){if("fixed"===e)return t;if("form"===e){if(Array.isArray(t)){let e=[];return t.forEach(t=>{void 0!==this.formData[t]&&e.push(this.formData[t])}),e}return this.formData?.[t]||""}return t},compareValues(e,t,i){const a=null==e?"":String(e),s=null==t?"":String(t);switch(i){case"=":return a==s;case"!=":return a!==s;case"like":return a.includes(s);case">":return Number(a)>Number(s);case"<":return Number(a)<Number(s);case">=":return Number(a)>=Number(s);case"<=":return Number(a)<=Number(s);case"in":return Array.isArray(t)?t.includes(e):s.includes(a);default:return!1}},executeActions(e){Array.isArray(e)&&0!==e.length&&e.forEach(e=>{const{type:t,fields:i,setValueType:a,setFixedValue:s,setFormValue:n,message:o}=e;["saveForm","saveAndCloseForm","closeForm","resetForm"].includes(t)?this.triggerGlobalFormEvent(t):"refreshData"!==t?"openModal"!==t?t&&Array.isArray(i)&&i.forEach(e=>{switch(t){case"show":this.updateCompProp(e,"visible",!0);break;case"hide":this.updateCompProp(e,"visible",!1);break;case"editable":this.updateCompProp(e,"disabled",!1),this.updateCompProp(e,"readonly",!1);break;case"required":this.updateCompProp(e,"required",!0);break;case"readonly":this.updateCompProp(e,"readonly",!0),this.updateCompProp(e,"disabled",!0);break;case"showError":this.showCompError(e,o||"操作失败!");break;case"setValue":this.setCompValue(e,a,s,n);break;case"refreshComponent":this.updateCompProp(e,"api.refresh",!0);break;default:console.warn(`不支持的动作类型:${t}`)}}):"function"==typeof this.openModal?this.openModal():console.warn("当前组件未实现 openModal 方法"):"function"==typeof this.refreshData?this.refreshData():console.warn("当前组件未实现 refreshData 方法")})},triggerGlobalFormEvent(e){const t=this.findParentFormComponent();t?"function"==typeof t[e]?t[e]({formData:this.formData,field:this.attrs?.name,component:this}):console.warn(`Form 组件未实现 ${e} 方法`):console.warn("未找到外层 Form 组件,无法执行表单全局操作")},findParentFormComponent(){let e=this.$parent;for(;e;){if(!0===e.isForm)return e;e=e.$parent}return null},restoreCompOriginState(e){Array.isArray(e)&&0!==e.length&&e.forEach(e=>{const{type:t,fields:i}=e;t&&Array.isArray(i)&&i.forEach(e=>{switch(t){case"show":this.updateCompProp(e,"visible",!1);break;case"hide":this.updateCompProp(e,"visible",!0);break;case"editable":case"readonly":this.updateCompProp(e,"disabled",this.originCompConfig.disabled),this.updateCompProp(e,"readonly",this.originCompConfig.readonly);break;case"required":this.updateCompProp(e,"required",this.originCompConfig.required)}})})},updateCompProp(e,t,i){this.$emit("updateItem",{name:e,sjbName:null,key:t},i)},setCompValue(e,t,i,a){"fixed"===t?this.updateFormData(e,i):"form"===t&&this.updateFormData(e,this.formData?.[a]||"")},showCompError(e,t){this.$parent&&this.$parent.$refs.form?this.$parent.$refs.form.validateField(this.conf.value,()=>{this.$message.error(t)}):this.$message?.error(t)||console.error(t)}}},V={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("van-form",{ref:"vantForm",attrs:{"validate-first":""},model:{value:e.formModel,callback:function(t){e.formModel=t},expression:"formModel"}},[i("van-nav-bar",{staticClass:"top-nav-bar",attrs:{title:e.conf.showName&&e.conf.name?e.sceneName+e.conf.name:"","left-arrow":""},on:{"click-left":e.onClickLeft}}),e._v(" "),e._t("default")],2)},staticRenderFns:[],name:"Form",mixins:[k],provide(){return{formData:n.default.observable(this.formModel),updateFormData:this.updateFormData}},props:{conf:{type:Object,required:!0},openType:{type:String},singleUploadList:{type:Array},multiplySingleUploadList:{type:Object},model:{type:Object,default:function(){return{}}}},data(){return{isForm:!0,formModel:this.model,initialFormModel:JSON.stringify(this.model),formItems:[],ywid:"",back:!1,lastSubmitTime:0,submitInterval:1e3}},watch:{model:{handler(e,t){Object.keys(this.formModel).forEach(e=>{n.default.delete(this.formModel,e)}),Object.keys(e).forEach(t=>{n.default.set(this.formModel,t,e[t])})},deep:!0}},computed:{saveUrl(){return this.ywid?this.conf.sceneList.filter(e=>"edit"==e.operationType)[0]?.operationUrl:this.conf.sceneList.filter(e=>e.operationType==this.conf.mode)[0]?.operationUrl},sceneName(){return{add:"新增",edit:"修改",view:"查看"}[this.conf.mode]||"新增"}},methods:{onClickLeft(){"view"==this.conf.mode?this.closeForm():this.$dialog.confirm({message:"是否保存到草稿箱?",confirmButtonText:"保存",cancelButtonText:"不保存,直接返回"}).then(()=>{this.back=!0,this.saveHandler()}).catch(()=>{this.closeForm()})},updateFormData(e,t){n.default.set(this.formModel,e,t),this.$emit("updateModel",e,t)},register(e){this.formItems.push(e)},saveForm(){this.$dialog.confirm({message:"保存此次编辑?",confirmButtonText:"保存",cancelButtonText:"不保存"}).then(()=>{this.back=!1,this.saveHandler()})},saveHandler(){this.$refs.vantForm.validate().then(()=>{const e=this.convertVueFormToNativeFormData({...this.formModel});this.$toast.loading({forbidClick:!0,message:"保存中…"});try{this.ywid&&!this.formModel[this.conf.primaryKeyName]&&e.append(this.conf.primaryKeyName||"id",this.ywid),b({url:this.saveUrl,method:"POST",data:e}).then(e=>{"add"==this.conf.mode&&(this.ywid=e.data),this.$toast.clear(),this.$toast.success("保存成功!"),this.back&&this.closeForm()}).catch(e=>{this.$toast.clear(),this.$toast.fail("保存失败!"),this.back=!1})}catch(e){this.$toast.fail("保存失败!")}}).catch(()=>{this.$toast.fail("表单校验失败!")})},saveAndCloseForm(){const e=Date.now();e-this.lastSubmitTime<this.submitInterval?this.$toast.fail("请勿重复提交"):(this.lastSubmitTime=e,this.$refs.vantForm.validate().then(()=>{const e=this.convertVueFormToNativeFormData({...this.formModel});this.$toast.loading({forbidClick:!0,message:"保存中…"}),this.ywid&&!this.formModel[this.conf.primaryKeyName]&&e.append(this.conf.primaryKeyName||"id",this.ywid),b({url:this.saveUrl,method:"POST",data:e}).then(e=>{this.$toast.clear(),this.$toast.success("提交成功!"),this.closeForm()}).catch(e=>{$.modal.msgError("提交失败!")})}).catch(()=>{this.$toast.fail("表单校验失败!")}))},closeForm(){this.goBack?this.goBack():this.$router?this.$router.go(-1):window.history.back()},resetForm(){try{if(Object.keys(this.formModel).forEach(e=>{n.default.delete(this.formModel,e)}),Object.assign(this.formModel,JSON.parse(this.initialFormModel)),this.$refs.cform){const e=$(this.$refs.cform).validate();e&&(e.resetForm(),$(this.$refs.cform).find(".error").removeClass("error"),$(this.$refs.cform).find(".valid").removeClass("valid"))}this.$message?.success("表单已重置")||$.modal.msgSuccess("表单已重置")}catch(e){this.$message?.error("表单重置失败")||$.modal.msgError("表单重置失败")}},convertVueFormToNativeFormData(e){let t=[];for(let i in e)if(i.split("@").length>1){const[a,s]=i.split("@"),n=l(e[i])?JSON.parse(e[i]):e[i];e[a]||(e[a]=[]),Array.isArray(n)?e[a].push(...n):e[a].push(n),delete e[i],-1==t.indexOf(a)&&t.push(a)}if(t.forEach(t=>{e[t]=JSON.stringify(e[t])}),this.multiplySingleUploadList)for(let t in this.multiplySingleUploadList)e[t]=JSON.stringify(e[t]);const i=new FormData;return Object.entries(e).forEach(([e,t])=>{const a=this.singleUploadList.filter(t=>t.name==e);a.length>0&&(t=l(t)?JSON.parse(t):t),Array.isArray(t)?t.forEach(t=>{null!=t&&i.append(e,a.length>0?this.getFile(a[0],t):t)}):null!=t&&i.append(e,a.length>0?this.getFile(a[0],t):t)}),i},getFile(e,t){const i=e.keyMap.path||"path",a=atob(t[i].split(",")[1]),s=t[i].split(",")[0].split(":")[1].split(";")[0],n=new ArrayBuffer(a.length),o=new Uint8Array(n);for(let e=0;e<a.length;e++)o[e]=a.charCodeAt(e);const r=new Blob([n],{type:s});return new File([r],t[e.keyMap.name]||"file",{type:s})}}},T={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return"inputHidden"==e.conf.widget&&"preview"==e.mode?i("label",{staticClass:"form-item_label",staticStyle:{width:"auto"}},[i("span",{ref:"editableDiv",class:"preview"==e.mode?"editable":"",attrs:{contenteditable:!0},on:{input:e.handleUpdateLabel}},[e._v(e._s(e.conf.label))]),e._v(" "),e._t("default",null,{value:e.fieldValue,onUpdate:e.handleInput})],2):e._t("default",null,{value:e.fieldValue,onUpdate:e.handleInput})},staticRenderFns:[],inject:["formData","updateFormData"],props:{conf:{type:Object},mode:{type:String,default:"preview"},errorMsg:{type:String,default:""},formConf:{type:Object}},data:()=>({tooltipInstance:null}),computed:{fieldValue(){return this.conf.name&&this.formData?this.formData[this.conf.name]:""},...t.mapState("user",["userInfo"])},mounted(){this.conf.requiredCondition&&"tjsz"==this.conf.requiredCondition.tjlxFlag&&this.setCondition(this.conf.requiredCondition,"required",!0),this.conf.visibleCondition&&"tjsz"==this.conf.visibleCondition.tjlxFlag&&this.setCondition(this.conf.visibleCondition,"visible",!0),this.conf.editableCondition&&"tjsz"==this.conf.editableCondition.tjlxFlag&&this.setCondition(this.conf.editableCondition,"readonly",!1)},methods:{handleUpdateLabel(){this.$emit("updateItem","label",this.$refs.editableDiv.innerText)},setCondition(e,t,i){const a=e.conditionContextType,s=e.conditions;if("USER"==a){let e=s.field.split(".").length>1?s.field.split(".")[1]:s.field;this.userInfo&&s.usersx&&this.userInfo[s.usersx]==this.formData[e]?this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},i):"visible"==t&&this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},!i)}else if("DEPT"==a)this.userInfo&&this.userInfo.deptId&&s.length>0&&s.includes(this.userInfo.deptId)?this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},i):"visible"==t&&this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},!i);else if("USER_ROLE"==a){const e=s.map(e=>e.roleId);if(this.userInfo.roles&&this.userInfo.roles.length>0){for(let a=0;a<this.userInfo.roles.length;a++)if(e.includes(this.userInfo.roles[a].roleId))return void this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},i);this.$emit("updateItem",t,!i)}else"visible"==t&&this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},!i)}},handleInput(e,t){this.conf.name?this.updateFormData(this.conf.name,e):t&&this.updateFormData(t,e)}}},_={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"form",staticClass:"sub-form",class:1==e.conf.collapse?"open-pane":""},[e.conf.hideLabel?e._e():i("div",{staticClass:"sub-title"},[2!=e.formConf.subRow||e.conf.icon?e._e():i("span",{staticClass:"blue-xian"}),e._v(" "),e.conf.icon?i("span",{staticClass:"icon",class:e.conf.icon}):e._e(),e._v(" "),i("span",{ref:"editableDiv",class:"preview"==e.mode?"editable title":"title",attrs:{contenteditable:"preview"==e.mode},on:{input:e.handleUpdateLabel}},[e._v(e._s(e.conf.label))]),e._v(" "),1==e.conf.collapse||2==e.conf.collapse?i("a",{staticClass:"arrow-right",on:{click:e.toggleCollapse}},[i("i",{staticClass:"fa fa-angle-right"})]):e._e()]),e._v(" "),i("div",{ref:"collapse",staticClass:"sub-con",class:1==e.conf.collapse?"collapse in":2==e.conf.collapse?"collapse":""},[e._t("default")],2)])},staticRenderFns:[],props:{mode:{type:String,default:"preview"},conf:{type:Object,required:!0},formConf:{type:Object}},data:()=>({}),methods:{handleUpdateLabel(){this.$emit("updateItem","label",this.$refs.editableDiv.innerText)},toggleCollapse(){$(this.$refs.collapse).collapse("toggle"),$(this.$refs.form).toggleClass("open-pane")}}},S={props:{conf:{type:Object,default:()=>({})},attrs:{type:Object,default:()=>({})},value:{},mode:{type:String,default:"preview"}},inject:["formData","updateFormData"],data(){return{innerValue:this.displayValue}},watch:{value:{immediate:!0,handler(e){if(Array.isArray(e))this.innerValue=e.length>0?e.join(","):this.conf.defaultValue||"";else{const t=""===e||null==e;this.innerValue=t?this.conf.defaultValue||"":e}}},"conf.defaultValue"(e){if(Array.isArray(this.value))this.innerValue=this.value.length>0?this.value.join(","):e||"";else{(""===this.value||null===this.value||void 0===this.value)&&(this.innerValue=e||"")}}},computed:{rules(){const e=this.conf.preReg,t=[];return"tel"==e?t.push({pattern:/^(0\d{2,3}-)?\d{7,8}$/g,message:"请输入正确的座机号码"}):"idCard"==e?t.push({pattern:/^\d{15}$|^\d{17}[\dXx]$/g,message:"请输入正确的15或18位身份证号"}):"email"==e?t.push({pattern:/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/g,message:"请输入正确的邮箱地址"}):"isChinese"==e?t.push({pattern:/^[\u4e00-\u9fa5]{0,}$/,message:"请输入汉字"}):"english"==e?t.push({pattern:/^[a-zA-Z]{0,}$/,message:"请输入英文字母"}):"url"==e?t.push({pattern:/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/,message:"请输入正确的网址"}):"port"==e?t.push({pattern:/^([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/,message:"请输入正确的端口号"}):"plateNumber"==e?t.push({pattern:/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/,message:"请输入正确的车牌号"}):"zinteger"==e?t.push({pattern:/^([1-9]\d*|[0]{1,1})$/,message:"请输入非负整数"}):"floatNumber"==e?t.push({pattern:/^(([1-9]\d*)|0)(\.\d{1,2})?$/,message:"请输入最多2位小数的正数"}):"floatNumberOne"==e?t.push({pattern:/^(([1-9]\d*)|0)(\.\d{1,1})?$/,message:"请输入最多1位小数的正数"}):"password"==e?t.push({pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,14}$/,message:"请输入包含大小写字母、数字、特殊符号的8位-14位密码"}):"password1"==e?t.push({pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/,message:"请输入至少8位,包含大小写字母和数字的密码"}):"password2"==e?t.push({pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,message:"请输入至少8位,大小写字母、数字、特殊字符各至少一个的密码"}):"password3"==e&&t.push({pattern:/^(?!.*(.{2,}).*\1)[a-zA-Z0-9~!@#$%^&*()_+`\-={}:";'<>?,./]{12,}$/,message:"请输入至少12位,不允许连续重复字符的密码"}),this.attrs.required&&t.push({required:!0,message:"必填项",trigger:"blur"}),t},displayValue(){if(Array.isArray(this.value))return this.value.length>0?this.value.join(","):this.conf.defaultValue||"";return""===this.value||null===this.value||void 0===this.value?this.conf.defaultValue||"":this.value}}},A={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules},on:{input:e.handleChange,clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1))},staticRenderFns:[],mixins:[S,k],computed:{filterAttrs(){const{...e}=this.attrs,{preReg:t,widget:i,clearable:a}=this.conf;e.type="password"==i?"password":"inputNumber"==i?"number":"textarea"==i?"textarea":"text";const s={mobile:"tel",integer:"digit"};return t&&s[t]&&(e.type=s[t]),e.maxlength&&(e.showWordLimit=!0),a&&(e.disabled||e.readonly)&&(e.clearable=!0),"view"==this.mode&&(e.readonly=!0),"form-control"==e.class&&(e.class=""),e}},methods:{handleChange(e){this.$emit("input",this.innerValue)},handleClear(){this.innerValue="",this.$emit("input",this.innerValue)}}};class D{constructor(e,t){this.http=e,this.socket=null}async fetch(e,t,i=[]){try{if(e)try{return await this.fetchApiData(e,t,i)}catch(e){console.error("动态数据获取失败,回退到静态数据:",e)}}catch(e){throw console.error("[DataFetcher] 数据获取失败:",e),e}}async fetchApiData(e,t,i){const a=await this.http({method:i,url:e,data:t,timeout:1e4});return 0===a.code?a.data||a.rows:a}normalizeData(e,t=[]){if(!e)return[];if(Array.isArray(e))return e.map((e,i)=>{const a={};for(let i=0;i<t.length;i++){const s=t[i];a[s.target]=this.getValueFromSource(e,s)}return a});{const i=[];return t.forEach(t=>{const a={id:t.id,name:t.name||t.sourcelabel,unit:t.unit||""};a.value=this.getValueFromSource(e,t),i.push(a)}),i}}getValueFromSource(e,t){const i=t.source,a=t.formatter,s=t.params,n=e[i];if(a){return this.executeModuleFunction(a,n,s||"")||n}return n}generateId(e,t){return e.id||e._id||e.key||`item-${t}-${Date.now()}`}formatTime(e){const t=new Date(e);return`${t.getFullYear()}-${(t.getMonth()+1).toString().padStart(2,"0")}-${t.getDate().toString().padStart(2,"0")}`}executeModuleFunction(e,...t){if("function"==typeof formatterUtils[e]){return formatterUtils[e](...t)}return console.error(`函数 ${e} 未定义`),t[0]}}const j=`${"undefined"!=typeof __API_PROXY_TARGET__?__API_PROXY_TARGET__:window.location.origin}/`;var L={props:{conf:{type:Object,default:()=>({})},attrs:{type:Object,default:()=>({})},value:{},mode:{type:String,default:"preview"}},inject:["formData","updateFormData"],data(){return{dataFetcher:null,datalist:null,loading:!1,baseURL:j,innerValue:this.displayValue}},watch:{"conf.api":{deep:!0,handler(e,t){"page"!==e.fhType&&((this.conf.api?.url&&e.url!==t.url||1==e.refresh)&&this.refreshData(),void 0!==e.refresh&&this.$emit("updateItem",{name:this.attrs.name,sjbName:null,key:"api.refresh"},!1))}},value:{immediate:!0,handler(e){if(Array.isArray(e))this.innerValue=e.length>0?e.join(","):this.conf.defaultValue||"";else{const t=""===e||null==e;this.innerValue=t?this.conf.defaultValue||"":e}}},"conf.defaultValue"(e){if(Array.isArray(this.value))this.innerValue=this.value.length>0?this.value.join(","):e||"";else{(""===this.value||null===this.value||void 0===this.value)&&(this.innerValue=e||"")}}},computed:{...t.mapState("user",["userInfo"]),displayValue(){if(Array.isArray(this.value))return this.value.length>0?this.value.join(","):this.conf.defaultValue||"";return""===this.value||null===this.value||void 0===this.value?this.conf.defaultValue||"":this.value}},methods:{async refreshData(){if(this.conf.api.url){this.loading=!0,this.error=null;try{const e=await this.dataFetcher.fetch(this.conf.api.url,this.getParams(this.conf.api.paramsList),this.conf.api.method||"get");this.datalist=e,this.refreshCallback()}catch(e){this.error=e}finally{this.loading=!1}}},updateCallback(e){var t;if(null==e&&(e=JSON.parse(JSON.stringify(this.datalist))),this.conf.api.mappings)if(function(e){if(null===e||"object"!=typeof e||Array.isArray(e))return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))this.conf.api.mappings.forEach(t=>{void 0!==e[t.field]&&this.updateFormData(t.name,e[t.field])});else if(t=e,"[object Array]"===Object.prototype.toString.call(t)){const t=this.conf.separator||",",i=e.length>0?e[0]:{};this.conf.api.mappings.forEach(a=>{let s="";if(this.attrs.multiple){s=e.filter(e=>void 0!==e[a.field]&&null!==e[a.field]).map(e=>e[a.field]).join(t)}else s=i[a.field]??"";null!=s&&(a.name==this.attrs.name&&(this.innerValue=s),this.updateFormData(a.name,s))})}else this.innerValue=e,this.$emit("input",this.innerValue)},getParams(e){const t={};return e.forEach(e=>{if(e.value&&"string"==typeof e.value){const i=e.value.match(/\$\{(\w+)\}/),a=e.value.match(/\#\{(\w+)\}/);if(i){const a=i[1];e.type&&"string"==e.type?t[e.name]=e.value.replace(/\$\{(\w+)\}/g,(e,t)=>{const i=this.formData[t];return null==i||""===i?"":`'${String(i)}'`}):t[e.name]=this.formData[a]}else if(a){const i=a[1];t[e.name]=this.userInfo[i]||""}else t[e.name]=e.value}}),t},buildUrl:function(e,t){if(e=e.replace(/\/\//g,"/"),!t||0===Object.keys(t).length)return e;const i=new URLSearchParams;for(const[e,a]of Object.entries(t))null!=a&&i.append(e,a);const a=i.toString();return e+(e.includes("?")?"&":"?")+a},reset(){},openModal(){this.conf.api.url&&$.modal.open("选择",this.buildUrl(this.baseURL+this.conf.api.url,this.getParams(this.conf.api.paramsList)),.8*window.innerWidth,.8*window.innerHeight,(e,t)=>{var i=t.find("iframe")[0].contentWindow.$("#bootstrap-table").bootstrapTable("getSelections");0!=i.length?(this.updateCallback(i),layer.close(e)):$.modal.alertWarning(this.attrs.multiple?"请至少选择一行记录":"请选择一行记录")})}},created:function(){this.dataFetcher=new D(b)}},I={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"text-combination",class:[e.conf.size,e.conf.align,e.conf.weight?"fb":"",e.isEmpty&&"preview"==!e.mode?"empty-content":""].concat(e.conf.border&&e.conf.border.length>0?e.conf.border:[])},[e.loading?i("div",{staticClass:"loading"},[i("div",{staticClass:"spinner"}),e._v(" "),i("p",[e._v("正在加载数据...")])]):e.error?i("div",{staticClass:"error"},[i("div",{staticClass:"error-icon"},[e._v("!")]),e._v(" "),i("p",{staticClass:"error-message"},[e._v(e._s(e.error))]),e._v(" "),i("button",{staticClass:"refresh-btn",on:{click:e.refresh}},[e._v("重试")])]):i("div",[i("p",{staticClass:"content",domProps:{innerHTML:e._s(e.processedContent)}}),e._v(" "),e.isEmpty&&"view"!==e.mode?i("div",{staticClass:"empty-state"},[e._v("请在组件配置中添加文本组合控件内容")]):e._e()])])},staticRenderFns:[],mixins:[L,k],data:()=>({loading:!1,error:null,variableData:null,processedContent:""}),computed:{isEmpty(){return!this.conf.textContent&&!this.processedContent},variables(){return this.extractVariables(this.conf.textContent)}},watch:{"conf.textContent":{handler(){this.processText(),this.replaceVariables(this.datalist)},immediate:!0},"conf.api":{handler(){this.refreshData()},immediate:!0}},methods:{extractVariables(e){if(!e)return[];const t=/\$\{([^}]+)\}/g,i=[];let a;for(;null!==(a=t.exec(e));)i.push(a[1]);return[...new Set(i)]},refreshCallback(){this.replaceVariables(this.datalist)},processText(){if(!this.conf.textContent)return void(this.processedContent="");if(0!==this.extractVariables(this.conf.textContent).length)return this.conf.api&&this.conf.api.url?void 0:(this.error="配置错误:包含变量但未配置API接口",void(this.processedContent=this.conf.textContent));this.processedContent=this.conf.textContent},replaceVariables(e){if(!e||"object"!=typeof e)return void(this.processedContent=this.conf.textContent);let t=this.conf.textContent;this.variables.forEach(i=>{const a=new RegExp(`\\$\\{${i}\\}`,"g"),s=this.getNestedValue(e,i);void 0!==s&&(t=t.replace(a,this.formatValue(s)))}),this.processedContent=t},getNestedValue(e,t){if(!t)return;const i=t.split(".");let a=e;for(let e of i){if(!a||!a.hasOwnProperty(e))return;a=a[e]}return a},formatValue:e=>null==e?"":e instanceof Date||"number"==typeof e?e.toLocaleString():"object"==typeof e?JSON.stringify(e):String(e),refresh(){this.refreshData()},handleChange(e){this.$emit("input",e)}}},F={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("input",e._b({domProps:{value:e.innerValue},on:{change:e.handleChange}},"input",e.attrs,!1))},staticRenderFns:[],mixins:[S,k],methods:{handleChange(e){this.innerValue=e.target.value,this.$emit("input",this.innerValue)}},watch:{innerValue(e){this.$emit("input",e)}}};function R(e,t){let i=e.split("/")[0];return b({url:"/sjyy/sjczgl/form/bdgl/config/getFormDictData",data:{dictType:i,dictLylx:t||e.split("/")[1]||"sys"},method:"post"})}var O={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return"view"===e.mode?i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label},model:{value:e.innerValueLabel,callback:function(t){e.innerValueLabel=t},expression:"innerValueLabel"}},"van-field",e.filterAttrs,!1)):i("div",[i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":function(t){e.showPicker=!0}},model:{value:e.innerValueLabel,callback:function(t){e.innerValueLabel=t},expression:"innerValueLabel"}},"van-field",e.filterAttrs,!1)),e._v(" "),i("van-popup",{staticClass:"select-popup",style:{height:"40%"},attrs:{position:"bottom","get-container":"#myForm",closeable:""},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[i("div",{staticClass:"custom-picker-container"},[i("van-sticky",[i("van-nav-bar",{attrs:{title:"选择",border:!1}})],1),e._v(" "),e.attrs.multiple?i("div",{staticClass:"popup-body scroll-wrap"},[i("div",{staticClass:"option-list",class:e.attrs.multiple?"multiple-select":"single-select"},e._l(e.selectOptions,function(t){return i("div",{key:t.value,staticClass:"option-item ",class:e.checkedValues.includes(t.value)?"active":"",on:{click:function(i){return e.handleItemClick(t.value)}}},[i("span",[e._v(e._s(t.label))]),e._v(" "),e.checkedValues.includes(t.value)&&e.attrs.multiple?i("van-icon",{attrs:{name:"success"}}):e._e()],1)}),0)]):i("van-picker",{ref:"myPicker",staticClass:"flex-item",attrs:{columns:e.selectOptions,"value-key":"label"}}),e._v(" "),i("div",{staticClass:"bottom-btn"},[i("van-button",{attrs:{type:"primary",round:"",block:"",icon:"checked"},on:{click:e.onConfirm}},[e._v("确认")])],1)],1)])],1)},staticRenderFns:[],mixins:[S,k],data:()=>({selectOptions:[],showPicker:!1,checkedValues:[]}),watch:{"conf.options":{immediate:!0,handler(e){"static"===this.conf.dataType&&(this.selectOptions=Array.isArray(e)?e:[])},deep:!0},"conf.dict":{immediate:!0,handler(e){"dict"===this.conf.dataType&&e&&this.loadDictData(e,this.conf.dictLylx)}}},computed:{filterAttrs(){const{...e}=this.attrs,{clearable:t}=this.conf;return e.maxlength&&(e.showWordLimit=!0),t&&(e.clearable=!0),"form-control"==e.class&&(e.class=""),e},columns(){return this.selectOptions.map(e=>({text:e.label,value:e.value}))},innerValueLabel(){if(!this.attrs.multiple)return this.innerValue&&this.selectOptions.find(e=>e.value===this.innerValue)?.label||"";if(this.attrs.multiple&&this.innerValue){const e=Array.isArray(this.innerValue)?this.innerValue:this.innerValue.toString().split(",");return this.selectOptions.filter(t=>e.includes(t.value)).map(e=>e.label).join(",")}return""}},created(){"dict"===this.conf.dataType&&this.conf.dict?this.loadDictData(this.conf.dict,this.conf.dictLylx):this.conf.dataType},methods:{async loadDictData(e,t){try{const i=await R(e,t);this.selectOptions=(i.rows||i.data||[]).map(e=>({value:e.dictValue,label:e.dictLabel,id:e.dictType+e.dictCode}))}catch(e){console.error("加载字典数据失败:",e),this.selectOptions=[]}},onConfirm(){if(this.attrs.multiple)this.innerValue=this.checkedValues.join(","),this.$emit("input",this.checkedValues);else{const e=this.$refs.myPicker.getColumnValue(0);this.innerValue=e?e.value:"",this.$emit("input",this.innerValue)}this.showPicker=!1},handleItemClick(e){this.checkedValues.includes(e)?this.checkedValues.splice(this.checkedValues.indexOf(e),1):this.checkedValues.push(e)}}},P={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("van-field",{class:e.attrs.class,attrs:{label:e.conf.hideLabel?"":e.conf.label,name:e.attrs.name,rules:e.rules},scopedSlots:e._u([{key:"input",fn:function(){return[i("van-radio-group",{attrs:{direction:"horizontal",disabled:e.attrs.readonly||e.attrs.disabled},on:{change:e.handleChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},e._l(e.selectOptions,function(t){return i("van-radio",{key:t.value,attrs:{name:t.value}},[e._v(e._s(t.label))])}),1)]},proxy:!0}])})},staticRenderFns:[],mixins:[S,k],data:()=>({selectOptions:[]}),watch:{"conf.options":{immediate:!0,handler(e){"static"===this.conf.dataType&&(this.selectOptions=Array.isArray(e)?e:[])},deep:!0},"conf.dict":{immediate:!0,handler(e){"dict"===this.conf.dataType&&e&&this.loadDictData(e,this.conf.dictLylx)}}},methods:{async loadDictData(e,t){try{const i=await R(e,t);this.selectOptions=(i.rows||i.data||[]).map(e=>({value:e.dictValue,label:e.dictLabel,id:e.dictType+e.dictCode}))}catch(e){console.error("加载字典数据失败:",e),this.selectOptions=[]}},handleChange(){this.$emit("input",this.innerValue)}}},E={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("van-field",{attrs:{label:e.conf.hideLabel?"":e.conf.label,name:e.attrs.name,rules:e.rules},scopedSlots:e._u([{key:"input",fn:function(){return[i("van-checkbox-group",{attrs:{direction:"horizontal",disabled:e.attrs.readonly||e.attrs.disabled},on:{change:e.handleChange},model:{value:e.arrayValue,callback:function(t){e.arrayValue=t},expression:"arrayValue"}},e._l(e.selectOptions,function(t){return i("van-checkbox",{key:t.value,attrs:{name:t.value,shape:"square"}},[e._v(e._s(t.label))])}),1)]},proxy:!0}])})},staticRenderFns:[],mixins:[S,k],data(){return{selectOptions:[],arrayValue:this.innerValue?Array.isArray(this.innerValue)?this.innerValue:this.innerValue.split(","):[]}},watch:{"conf.options":{immediate:!0,handler(e){"static"===this.conf.dataType&&(this.selectOptions=Array.isArray(e)?e:[])},deep:!0},"conf.dict":{immediate:!0,handler(e){"dict"===this.conf.dataType&&e&&this.loadDictData(e,this.conf.dictLylx)}}},created(){"dict"===this.conf.dataType&&this.conf.dict?this.loadDictData(this.conf.dict,this.conf.dictLylx):this.conf.dataType},methods:{async loadDictData(e,t){try{const i=await R(e,t);this.selectOptions=(i.rows||i.data||[]).map(e=>({value:e.dictValue,label:e.dictLabel,id:e.dictType+e.dictCode}))}catch(e){console.error("加载字典数据失败:",e),this.selectOptions=[]}},handleChange(){this.$emit("input",this.arrayValue)}}},N={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.filterAttrs.readonly||e.filterAttrs.disabled?i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)):i("div",[i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":function(t){e.showPicker=!0},clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)),e._v(" "),i("van-popup",{staticClass:"select-popup",attrs:{position:"bottom","get-container":"#myForm",closeable:""},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[i("van-sticky",[i("van-nav-bar",{attrs:{title:e.pickerTitle,border:!1}})],1),e._v(" "),i("van-datetime-picker",{class:"date-time-picker-"+e.conf.datetype,attrs:{type:e.dateType,"show-toolbar":!1,formatter:e.formatterDateTime},model:{value:e.currentDateTime,callback:function(t){e.currentDateTime=t},expression:"currentDateTime"}}),e._v(" "),i("div",{staticClass:"bottom-btn"},[i("van-button",{attrs:{type:"primary",round:"",block:""},on:{click:e.onConfirm}},[e._v("确认")])],1)],1)],1)},staticRenderFns:[],mixins:[S,k],data(){return{showPicker:!1,currentDateTime:this.syncCurrentDateTime(this.innerValue)}},computed:{filterAttrs(){const{class:e,...t}=this.attrs,{clearable:i}=this.conf;return i&&(t.clearable=!0),"view"==this.mode&&(t.readonly=!0),"form-control"==t.class&&(t.class=""),t},pickerTitle(){const{datetype:e}=this.conf;return"date"==e?"选择日期":"datetime"==e||"time"==e?"选择时间":"month"==e?"选择月份":"year"==e?"选择年":"选择日期"},dateType(){const{datetype:e}=this.conf;return"date"==e||"datetime"==e||"time"==e?e:"month"==e||"year"==e?"year-month":void 0},format(){return this.conf.format.replace(/y/g,"Y").replace(/d/g,"D")}},watch:{dateType:{handler(e,t){"time"==t&&(this.innerValue=""),"time"!=e&&"time"!=t||(this.currentDateTime=this.syncCurrentDateTime(this.innerValue))},immediate:!0}},methods:{handleChange(){this.$emit("input",this.innerValue)},onConfirm(){const e=this.dateType;this.innerValue="time"===e?2==this.currentDateTime.split(":").length?this.currentDateTime+":00":this.currentDateTime:this.$dayjs(this.currentDateTime).format(this.format),this.handleChange(),this.showPicker=!1},formatterDateTime:(e,t)=>"year"===e?t+"年":"month"===e?t+"月":"day"===e?t+"日":"hour"===e?t+"时":"minute"===e?t+"分":"second"===e?t+"秒":void 0,handleClear(){this.innerValue="",this.$emit("input",this.innerValue)},syncCurrentDateTime(e){const t=this.dateType;return e?"time"===t?e:new Date(e):"time"===t?"00:00":new Date}}},z={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.filterAttrs.readonly||e.filterAttrs.disabled?i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)):i("div",[i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":function(t){e.showPicker=!0},clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)),e._v(" "),i("van-calendar",{staticClass:"select-popup",attrs:{type:"range","get-container":"#myForm",title:"日期范围选择","allow-same-day":!0,"min-date":e.minDate,color:"#1989fa"},on:{confirm:e.onConfirm},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}})],1)},staticRenderFns:[],mixins:[S,k],data:()=>({startValue:"",endValue:"",showPicker:!1,startFieldName:"",endFieldName:"",minDate:new Date(2e3,0,1)}),watch:{innerValue:{immediate:!0,handler(e){this.parseValueToStartEnd(e)}},"attrs.name":{handler(){this.parseNameToFields()}}},computed:{filterAttrs(){const{class:e,...t}=this.attrs,{clearable:i}=this.conf;return i&&(t.clearable=!0),"view"==this.mode&&(t.readonly=!0),"form-control"==t.class&&(t.class=""),t},format(){return this.conf.format.replace(/y/g,"Y").replace(/d/g,"D")}},mounted(){const e=this.value||this.conf.defaultValue||"";this.parseValueToStartEnd(e)},methods:{parseNameToFields(){const e=this.conf.separator||"-";if(!nameStr)return this.startFieldName="",void(this.endFieldName="");const[t,i]=this.attrs.name.split(e);this.startFieldName=t||"",this.endFieldName=i||""},parseValueToStartEnd(e){if(!e||"string"!=typeof e)return this.startValue="",void(this.endValue="");let t="",i="";if(e.includes(" - "))[t,i]=e.split(" - ");else{const a=10;e.length>=2*a?(t=e.substring(0,a),i=e.substring(a+1)):e.length===a&&(t=e,i="")}this.startValue=t||"",this.endValue=i||""},joinStartEndToValue(){return this.startValue&&this.endValue?`${this.startValue} - ${this.endValue}`:""},handleClear(){this.innerValue="",this.$emit("input",this.innerValue)},handleChange(e){this.innerValue=this.joinStartEndToValue(),this.$emit("input",this.innerValue),this.$emit("input",this.startValue,this.startFieldName),this.$emit("input",this.endValue,this.endFieldName)},onConfirm(e){this.startValue=this.$dayjs(e[0]).format(this.format),this.endValue=this.$dayjs(e[1]).format(this.format),this.handleChange(),this.showPicker=!1}}},M={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return"view"===e.mode?i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label},model:{value:e.showText,callback:function(t){e.showText=t},expression:"showText"}},"van-field",e.filterAttrs,!1)):i("div",[i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{clear:e.handleClear,"click-right-icon":function(t){e.showPicker=!0}},model:{value:e.showText,callback:function(t){e.showText=t},expression:"showText"}},"van-field",e.filterAttrs,!1)),e._v(" "),i("van-popup",{staticClass:"select-popup",staticStyle:{height:"40%"},attrs:{position:"bottom","get-container":"#myForm"},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[i("div",{staticClass:"custom-picker-container"},[i("van-cascader",{staticClass:"flex-item",attrs:{title:"请选择",options:e.treeOptions,"active-color":"#1989fa"},on:{close:function(t){e.showPicker=!1},finish:e.onFinish}})],1)])],1)},staticRenderFns:[],mixins:[L,k],data:()=>({showPicker:!1,showText:""}),computed:{filterAttrs(){const{...e}=this.attrs,{clearable:t}=this.conf;return e.maxlength&&(e.showWordLimit=!0),t&&(e.clearable=!0),"form-control"==e.class&&(e.class=""),"view"==this.mode&&(e.readonly=!0),e},treeOptions(){return this.datalist?function(e,t){const i=[],a={};return e.forEach(e=>{a[e[t.id]]={value:e[t.id],text:e[t.name],id:e[t.id],pId:e[t.pId]}}),e.forEach(e=>{const s=a[e[t.pId]],n=a[e[t.id]];s&&(s.children||(s.children=[]),s.children.push(n)),e[t.pId]==t.rootPId&&i.push(n)}),i}(this.datalist,this.conf.keyMap):[]},multiple(){return this.attrs.multiple}},methods:{handleChange(e){this.$emit("input",this.innerValue)},handleClear(){this.innerValue="",this.$emit("input",this.innerValue)},onFinish({selectedOptions:e}){this.innerValue=e[e.length-1].value,this.showText=e[e.length-1].text,this.showPicker=!1}},mounted(){this.refreshData()}},B={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("van-field",{class:e.attrs.class,attrs:{name:e.attrs.name,label:e.conf.hideLabel?"":e.conf.label,rules:e.rules},scopedSlots:e._u([{key:"input",fn:function(){return[i("van-uploader",e._b({attrs:{name:e.attrs.name,"after-read":e.afterRead,"upload-icon":"plus"},on:{oversize:e.onOversize,delete:e.onDelete},scopedSlots:e._u([{key:"preview-cover",fn:function(t){var a=t.file,s=t.content;return[i("div",{staticClass:"download-btn",on:{click:function(t){return t.stopPropagation(),e.handleDownload(a,s)}}},[i("van-icon",{attrs:{name:"down",color:"#fff"}})],1)]}}]),model:{value:e.fileList,callback:function(t){e.fileList=t},expression:"fileList"}},"van-uploader",e.filterAttrs,!1))]},proxy:!0}])})},staticRenderFns:[],props:{conf:{type:Object,default:()=>({})},attrs:{type:Object,default:()=>({})},value:{type:[Array,Object,String],default:""},mode:{type:String,default:"preview"}},mixins:[k],inject:["formData","updateFormData"],data(){return{innerValue:this.formatToJsonString(this.value),fileList:[]}},computed:{isImg(){const{allowedFileType:e}=this.conf;return!(!e.includes("image")||1!=e.length)},filterAttrs(){const{multiple:e,readonly:t,disabled:i}=this.attrs,{allowedFileType:a,minFileCount:s,maxFileCount:n,maxFileSize:o}=this.conf,r=a.includes("image")&&1==a.length,l={};if(e&&(l.multiple=!0,n&&n>1&&(l.maxCount=n)),o&&(l.maxSize=1024*o),(t||i||"view"==this.mode)&&(l.deletable=!1,l.showUpload=!1,l.previewFullImage=!0),l.disabled=!1,r)l.accept="image/*";else if(a.includes("apk"))l.accept=".apk";else{const e=[];a.includes("pdf")&&e.push(".pdf"),a.includes("office")&&e.push(".doc,.docx,.xls,.xlsx,.ppt,.pptx"),a.includes("zip")&&e.push(".zip,.rar,.7z"),a.includes("image")&&e.push(".png,.jpg,.jpeg,.gif,.webp"),l.accept=e.join(",")}return l}},watch:{value(e){const t=this.formatToJsonString(e);this.innerValue=t,this.fileList="[]"===t||""===t?[]:this.syncFileObjectsFromBase64()}},created(){this.fileList=this.syncFileObjectsFromBase64()},methods:{onDelete(e,{index:t}){this.afterRead(),console.log("已删除",e.url,t)},onOversize(e){this.$toast("文件大小不能超过"+this.conf.maxFileSize+"KB")},afterRead(e){this.getStringValue(),this.$emit("input",this.innerValue)},getStringValue(){this.innerValue=JSON.stringify(this.fileList.map(e=>{let t={};t[this.conf.keyMap.name||"name"]=e.file.name,t[this.conf.keyMap.size||"size"]=e.file.size;const i=e.file.name.split(".").pop()?.toLowerCase()||"";return t[this.conf.keyMap.type||"type"]=i,t[this.conf.keyMap.path||"path"]=e.content,this.attrs.name.split("@").length>1&&(t[this.conf.keyMap.bizType||"bizType"]=this.attrs.name.split("@").pop()),t}))},formatToJsonString:e=>e?"string"==typeof e?e.trim()||"[]":JSON.stringify(e):"[]",parseValueToArray(){try{if(!this.innerValue)return[];let e="string"==typeof this.innerValue?JSON.parse(this.innerValue):this.innerValue;return Array.isArray(e)?e:e?[e]:[]}catch(e){return console.error("解析文件数据失败",e),[]}},syncFileObjectsFromBase64(){const e=this.parseValueToArray();if(!e.length)return[];const t=[];return e.forEach(e=>{try{const i=e[this.conf.keyMap.path||"path"];if(!i)return;let a=function(e,t="file"){if(!e)return null;let i="",a="";e.includes(",")?[i,a]=e.split(","):a=e;let s="";i&&(s=i.replace("data:","").replace(";base64","")),s&&"application/octet-stream"!==s||(s=function(e){if(!e)return"";const t=[{mime:"image/png",magic:"iVBORw0KGgo"},{mime:"image/jpeg",magic:"/9j/"},{mime:"image/gif",magic:"R0lGODdh"},{mime:"image/gif",magic:"R0lGODlh"},{mime:"image/webp",magic:"UklGR"},{mime:"image/bmp",magic:"Qk02"},{mime:"application/pdf",magic:"JVBERi0xLj"},{mime:"application/zip",magic:"UEsDBBQAAAAI"},{mime:"application/zip",magic:"UEsDBBQABgAIAAAA"},{mime:"application/x-rar-compressed",magic:"UmFyIRoH"},{mime:"application/x-7z-compressed",magic:"N3q8rycAAAA="},{mime:"application/msword",magic:"0M8R4KGxGuE"},{mime:"application/vnd.ms-excel",magic:"0M8R4KGxGuE"},{mime:"application/vnd.ms-powerpoint",magic:"0M8R4KGxGuE"},{mime:"text/plain",magic:"5L2g5aW9"}];for(const i of t)if(e.startsWith(i.magic))return i.mime;return""}(a));const n=function(e){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/bmp":"bmp","application/pdf":"pdf","application/zip":"zip","application/x-rar-compressed":"rar","application/x-7z-compressed":"7z","application/msword":"doc","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.ms-excel":"xls","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application/vnd.ms-powerpoint":"ppt","application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","text/plain":"txt"}[e]||"bin"}(s),o=t.includes(".")?t:`${t}.${n}`;try{const e=atob(a),t=new Uint8Array(e.length);for(let i=0;i<e.length;i++)t[i]=e.charCodeAt(i);const i=new Blob([t],{type:s});return new File([i],o,{type:s})}catch(e){return console.error("Base64 转 File 失败:",e),null}}(i,e[this.conf.keyMap.name]||"file");if(a&&(a.name.endsWith(".bin")||"application/octet-stream"===a.type)){let t="";const s=(e[this.conf.keyMap.name]||"").toLowerCase(),n=(e[this.conf.keyMap.type]||"").toLowerCase();if(n?t=n:s&&(s.endsWith(".png")?t="image/png":s.endsWith(".jpg")||s.endsWith(".jpeg")?t="image/jpeg":s.endsWith(".gif")?t="image/gif":s.endsWith(".pdf")?t="application/pdf":s.endsWith(".zip")?t="application/zip":s.endsWith(".docx")?t="application/vnd.openxmlformats-officedocument.wordprocessingml.document":s.endsWith(".xlsx")?t="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":s.endsWith(".pptx")?t="application/vnd.openxmlformats-officedocument.presentationml.presentation":s.endsWith(".doc")?t="application/msword":s.endsWith(".xls")?t="application/vnd.ms-excel":s.endsWith(".ppt")&&(t="application/vnd.ms-powerpoint")),!t&&i.includes("UEsDBBQ")&&(t="application/vnd.openxmlformats-officedocument.wordprocessingml.document"),t){const[,s]=i.split(","),n=atob(s),o=new Uint8Array(n.length);for(let e=0;e<n.length;e++)o[e]=n.charCodeAt(e);const r=new Blob([o],{type:t}),l=this.getExtensionByMimeType(t),c=e[this.conf.keyMap.name]||`file.${l}`;a=new File([r],c,{type:t})}}a&&t.push({file:a,content:i,url:i,message:a.name,status:""})}catch(e){console.error("回显文件失败:",e)}}),t},handleDownload(e,t){if(!e||!t)return void this.$toast("文件不存在");const[i,a]=t.split(","),s=atob(a),n=[];for(let e=0;e<s.length;e++)n.push(s.charCodeAt(e));const o=new Blob([new Uint8Array(n)],{type:i||"application/octet-stream"}),r=URL.createObjectURL(o),l=document.createElement("a");l.href=r,l.download=e?.name||"file",document.body.appendChild(l),l.click(),document.body.removeChild(l),URL.revokeObjectURL(r)},getExtensionByMimeType:e=>({"image/png":"png","image/jpeg":"jpg","image/gif":"gif","application/pdf":"pdf","application/zip":"zip"}[e]||"file")}},U={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return"view"==e.mode?i("div",{staticClass:"view-value"},[e._v(e._s(e.innerValue||"-"))]):i("div",{staticClass:"input-group"},[i("input",e._b({ref:"suggestInput",attrs:{type:"text",placeholder:e.conf.placeholder||"请选择",disabled:e.conf.disabled||e.loading},domProps:{value:e.innerValue}},"input",e.attrs,!1)),e._v(" "),i("div",{staticClass:"input-group-btn"},[i("button",{staticClass:"btn btn-white dropdown-toggle",attrs:{type:"button","data-toggle":"dropdown",disabled:e.conf.disabled||e.loading}},[i("span",{staticClass:"caret"})]),e._v(" "),i("ul",{staticClass:"dropdown-menu dropdown-menu-right",attrs:{role:"menu"}})])])},staticRenderFns:[],mixins:[S,k],data:()=>({loading:!1,suggestInstance:null}),mounted(){this.initBsSuggest()},beforeDestroy(){this.suggestInstance&&(this.$refs.suggestInput.bsSuggest("destroy"),this.suggestInstance=null)},methods:{initBsSuggest(){const e=this,{api:t}=this.conf,i=$(this.$refs.suggestInput),a={};t.headers.forEach(e=>{e.field&&e.label&&(a[e.field]=e.label)});const s=t.headers.map(e=>e.name||e.field);this.suggestInstance=i.bsSuggest({url:t.url,method:t.method,dataType:"json",delay:300,highlightKeyword:!0,showHeader:Object.keys(a).length>0,effectiveFields:s,effectiveFieldsAlias:a,autoSelect:!1,ignorecase:!0,idField:"xmbh",keyField:this.attrs.name,fnProcessParams:function(i){const a={};return t.paramsList.forEach(t=>{if(t.value&&"string"==typeof t.value){const i=t.value.match(/\$\{(\w+)\}/);if(i){const s=i[1];a[t.name]=e.formData[s]||""}else a[t.name]=t.value}}),t.mappings.forEach(e=>{a[e.field]=i}),a},processData:function(t){e.loading=!1;const i=t.data||t,a=this.attrs.name;return{value:i.map(e=>e[a]||""),data:i}},beforeSend:function(){e.loading=!0},onError:function(){e.loading=!1,console.error("bsSuggest 请求失败")}}).on("onSetSelectValue",function(i,a,s){if(s&&"object"==typeof s){t.mappings.forEach(t=>{e.updateFormData(t.name,s[t.field])});const i=e.attrs.name;e.innerValue=s[i]||"",e.$emit("input",e.innerValue)}})},triggerSearch(e){this.suggestInstance&&this.$refs.suggestInput.bsSuggest("lookup",e)}}},q={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"table-pro"},[e._t("toolbar",null,{selected:e.selectedRows}),e._v(" "),i("div",{staticClass:"table-container",style:{height:e.height?e.height:"auto"}},[e.fixedLeft>0||e.showCheck?i("div",{staticClass:"fixed-left"},[i("div",{staticClass:"fixed-header"},[e.showCheck&&e.multiple?i("div",{staticClass:"cell check-cell"},[i("van-checkbox",{attrs:{shape:"square"},on:{change:e.handleSelectAll},model:{value:e.isCheckAll,callback:function(t){e.isCheckAll=t},expression:"isCheckAll"}})],1):e._e(),e._v(" "),e._l(e.leftCols,function(t,a){return i("div",{key:a,staticClass:"cell",style:e.getCellStyle(t)},[e._v(e._s(t.label))])})],2),e._v(" "),i("div",{ref:"fixedBody",staticClass:"fixed-body"},e._l(e.localData,function(t,a){return i("div",{key:a,staticClass:"row-flex",attrs:{"data-row-index":a}},[e.showCheck?i("div",{staticClass:"cell check-cell"},[e.multiple?i("van-checkbox",{attrs:{shape:"square"},on:{change:function(i){return e.handleChangeRow(t,a)}},model:{value:t.checked,callback:function(i){e.$set(t,"checked",i)},expression:"row.checked"}}):i("van-radio",{attrs:{name:"row_"+a},on:{click:function(t){return e.handleChange(a)}},model:{value:e.selectedRowId,callback:function(t){e.selectedRowId=t},expression:"selectedRowId"}})],1):e._e(),e._v(" "),e._l(e.leftCols,function(s,n){return i("div",{key:n,staticClass:"cell",style:e.getCellStyle(s)},[e.$scopedSlots.cell?e._t("cell",null,{row:t,col:s,index:a}):e.$scopedSlots[s.prop]?e._t(s.prop,null,{row:t,col:s,index:a}):s.slot&&e.$scopedSlots[s.slot]?e._t(s.slot,null,{row:t,col:s,index:a}):i("span",[e._v(e._s(t[s.prop]||"-"))])],2)})],2)}),0),e._v(" "),i("div",{staticClass:"shadow right-shadow"})]):e._e(),e._v(" "),i("div",{ref:"scrollBody",staticClass:"scroll-section",class:{"auto-width":e.isAutoWidth},on:{scroll:e.handleScroll}},[i("div",{ref:"scrollHeader",staticClass:"scroll-header"},e._l(e.centerCols,function(t){return i("div",{key:t.prop,staticClass:"cell",style:e.getCellStyle(t)},[e._v(e._s(t.label))])}),0),e._v(" "),i("div",{staticClass:"scroll-body-inner"},[i("div",{staticClass:"scroll-content",style:e.contentWidthStyle},[e._l(e.localData,function(t,a){return i("div",{key:a,staticClass:"row-flex",attrs:{"data-row-index":a}},e._l(e.centerCols,function(s){return i("div",{key:s.prop,staticClass:"cell",style:e.getCellStyle(s)},[e.$scopedSlots.cell?e._t("cell",null,{row:t,col:s,index:a}):e.$scopedSlots[s.prop]?e._t(s.prop,null,{row:t,col:s,index:a}):s.slot&&e.$scopedSlots[s.slot]?e._t(s.slot,null,{row:t,col:s,index:a}):i("span",[e._v(e._s(t[s.prop]||"-"))])],2)}),0)}),e._v(" "),e.localData.length||e.loading?e._e():i("div",{staticClass:"empty-content"},[e._v("暂无数据")])],2)])]),e._v(" "),e.fixedRight>0&&!e.isAutoWidth?i("div",{staticClass:"fixed-right"},[i("div",{staticClass:"fixed-header"},e._l(e.rightCols,function(t){return i("div",{key:t.prop,staticClass:"cell",style:e.getCellStyle(t)},[e._v(e._s(t.label))])}),0),e._v(" "),i("div",{staticClass:"fixed-body"},e._l(e.localData,function(t,a){return i("div",{key:a,staticClass:"row-flex"},e._l(e.rightCols,function(s){return i("div",{key:s.prop,staticClass:"cell",style:e.getCellStyle(s)},[e.$scopedSlots.cell?e._t("cell",null,{row:t,col:s,index:a}):e.$scopedSlots[s.prop]?e._t(s.prop,null,{row:t,col:s,index:a}):s.slot&&e.$scopedSlots[s.slot]?e._t(s.slot,null,{row:t,col:s,index:a}):i("span",[e._v(e._s(t[s.prop]||"-"))])],2)}),0)}),0),e._v(" "),i("div",{staticClass:"shadow left-shadow"})]):e._e()]),e._v(" "),e.showPagination?i("van-pagination",{staticClass:"pagination",attrs:{"total-items":e.page.total,"items-per-page":e.page.size},on:{change:e.handlePageChange},model:{value:e.page.current,callback:function(t){e.$set(e.page,"current",t)},expression:"page.current"}}):e._e()],2)},staticRenderFns:[],name:"TablePro",components:{VanPagination:a.Pagination,VanLoading:a.Loading,VanCheckbox:a.Checkbox,VanRadio:a.Radio},props:{columns:{type:Array,default:()=>[]},data:{type:Array,default:()=>[]},fixedLeft:{type:Number,default:0},fixedRight:{type:Number,default:0},height:{type:String},page:{type:Object,default:()=>({current:1,size:10,total:0})},showPagination:{type:Boolean,default:!0},showLoadMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},showCheck:{type:Boolean,default:!1},multiple:{type:Boolean,default:!0}},data:()=>({isCheckAll:!1,selectedRowId:null,selectedRows:[],colWidthCache:new Map,localData:[]}),watch:{data:{handler(e){this.localData=JSON.parse(JSON.stringify(e)).map(e=>(void 0===e.checked&&(e.checked=!1),e)),this.isCheckAll=!1,this.selectedRows=[],this.$nextTick(()=>{this.syncRowHeight()})},deep:!0,immediate:!0}},computed:{isAutoWidth(){return this.columns.length<=2},leftCols(){return this.columns.slice(0,this.fixedLeft)},centerCols(){const e=this.fixedLeft,t=this.fixedRight>0?this.columns.length-this.fixedRight:this.columns.length;return this.columns.slice(e,t)},rightCols(){return this.fixedRight>0?this.columns.slice(this.columns.length-this.fixedRight):[]},contentWidthStyle(){if(this.isAutoWidth)return{};let e=0;return this.centerCols.forEach(t=>{const i=this.getPxWidth(t.width||"120px");e+=i}),{width:e+"px"}}},methods:{syncRowHeight(){this.$nextTick(()=>{const e=document.querySelectorAll(".fixed-left .row-flex"),t=document.querySelectorAll(".scroll-section .row-flex"),i=document.querySelectorAll(".fixed-right .row-flex");e.forEach((e,a)=>{const s=e.offsetHeight+"px";t[a]&&(t[a].style.height=s),i[a]&&(i[a].style.height=s)})})},getPxWidth(e){e||(e="120px");const t=String(e);if(this.colWidthCache.has(t))return this.colWidthCache.get(t);let i=120;return-1===t.indexOf("%")&&(i=parseInt(t)||120),this.colWidthCache.set(t,i),i},getCellStyle(e){if(this.isAutoWidth)return{flex:1,boxSizing:"border-box"};const t=e.width||"120px";return{width:t,minWidth:t,maxWidth:t,boxSizing:"border-box"}},handleScroll(){const e=this.$refs.scrollBody.scrollTop;this.$refs.fixedBody&&(this.$refs.fixedBody.scrollTop=e),this.syncRowHeight()},handlePageChange(e){this.$emit("page-change",e)},handleChangeRow(e,t){this.selectedRows=this.localData.map((e,t)=>({...e,index:t})).filter(e=>e.checked),this.isCheckAll=this.localData.length>0&&this.selectedRows.length===this.localData.length,this.$emit("select-change",this.selectedRows)},handleChange(e){this.selectedRows=[{...this.localData[e],index:e}],this.$emit("select-change",this.selectedRows)},handleSelectAll(e){this.localData.forEach(t=>t.checked=e),this.selectedRows=e?this.localData.map((e,t)=>({...e,index:t})):[],this.$emit("select-change",this.selectedRows)}},mounted(){this.syncRowHeight()}},J={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("van-popup",{staticClass:"select-popup",attrs:{position:"bottom","get-container":"#myForm",closeable:""},on:{close:e.close},model:{value:e.isShow,callback:function(t){e.isShow=t},expression:"isShow"}},[i("div",{staticClass:"custom-picker-container"},[i("van-sticky",[i("van-nav-bar",{attrs:{title:"选择",border:!1}})],1),e._v(" "),i("div",{staticClass:"popup-body",staticStyle:{padding:"10px"}},[i("TablePro",{attrs:{columns:e.tableColumns,data:e.tableData,page:e.page,fixedLeft:0,"show-pagination":"","show-check":"",multiple:e.multiple},on:{"page-change":e.getList,"select-change":e.selChange}})],1),e._v(" "),i("div",{staticClass:"bottom-btn"},[i("van-button",{attrs:{type:"primary",round:"",block:"",icon:"checked",disabled:0==e.selectRows.length},on:{click:e.onConfirm}},[e._v("确认")])],1)],1)])},staticRenderFns:[],props:{visible:Boolean,conf:Object},components:{TablePro:q},data(){return{isShow:this.visible,tableColumns:[],tableData:[],selectRows:[],page:{total:0,size:5,current:1},qqljUrl:"",multiple:"xzms-checkbox"==this.conf?.valueCondition?.xzms}},computed:{tableApi(){const e=this.conf.valueCondition;if("sjcxyy-table"==e.yyxxType)return{url:"/sjyy/zycx/getZycxDataList",params:{pageSize:this.page.size,pageNum:this.page.current,id:e.sjbId}};if("xtglxx"==e.yyxxType){if("user-gl"==e.xtgllx)return{url:"/sjyy/sjczgl/form/bdgl/config/getSysUserList",params:{pageSize:this.page.size,pageNum:this.page.current}};if("role-gl"==e.xtgllx)return{url:"/sjyy/sjczgl/form/bdgl/config/getSysRoleList",params:{pageSize:this.page.size,pageNum:this.page.current}}}else if("zdyApi"==e.yyxxType)return{url:this.qqljUrl,params:{pageSize:this.page.size,pageNum:this.page.current}};return{}}},watch:{visible(e){this.isShow=e},tableApi:{deep:!0,immediate:!0,handler(e){e.url?this.getTableData():this.tableData=[]}}},methods:{onConfirm(){this.$emit("confirm",this.selectRows)},close(){this.$emit("close")},getTableData(){C(this.tableApi.url,this.tableApi.params).then(e=>{0==e.code&&(this.tableData=e.rows,this.page.total=e.total)})},getTableColumns(){const e={},t=this.conf.valueCondition;"zdyApi"==t.yyxxType?(e.url="/gzt/jkgl/jkglView",e.params={id:t.jkid}):"sjcxyy-table"==t.yyxxType?(e.url="/sjyy/sjcxgl/sjxgl/getQtzsSjxList",e.params={ysjbId:t.sjbId,zxzdlx:"list"}):"xtglxx"==t.yyxxType&&("user-gl"==t.xtgllx?this.tableColumns=[{prop:"userName",label:"姓名"},{prop:"jybh",label:"警号"}]:"role-gl"==t.xtgllx&&(this.tableColumns=[{prop:"roleName",label:"角色名称"},{prop:"roleKey",label:"权限字符"}])),e&&e.url&&C(e.url,e.params).then(e=>{if(0==e.code){const i="zdyApi"==t.yyxxType?e.data.fhcsList:e.rows,a=[];let s="",n="";if("zdyApi"==t.yyxxType?(s="csjp",n="csmc"):"sjcxyy-table"==t.yyxxType&&(s="sjxbs",n="sjxmc"),i&&(i.forEach(e=>{t.colysArr.find(t=>t.sjlyColName==e[s])&&a.push({prop:e[s],label:e[n]})}),1==a.length&&(i[0][s]==a[0].prop?a.push({prop:i[1][s],label:i[1][n]}):a.push({prop:i[0][s],label:i[0][n]})),this.tableColumns=a),"zdyApi"==t.yyxxType){let t=e.data.qqlj;t=0==t.indexOf("/")?t.substring(1):t,this.qqljUrl=t}}})},getList(){},selChange(e){this.selectRows=e}},created(){this.getTableColumns()}},W={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return"view"===e.mode?i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)):i("div",[i("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":e.openModal,clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)),e._v(" "),"page"==e.fhType?i("api-popup",{attrs:{visible:e.showPicker,conf:e.conf},on:{confirm:e.onConfirm,close:function(t){e.showPicker=!1}}}):e._e()],1)},staticRenderFns:[],mixins:[L,k],data(){return{isFocused:!1,showPicker:!1,fhType:"json"==this.conf.api.fhType?"json":"page"}},components:{apiPopup:J},computed:{filterAttrs(){const{...e}=this.attrs,{widget:t}=this.conf;return e.type="password"==t?"password":"inputNumber"==t?"number":"textarea"==t?"textarea":"text","view"==this.mode&&(e.readonly=!0,e.disabled=!0,e.clearable=!1),"form-control"==e.class&&(e.class=""),e}},methods:{handleChange(e){this.innerValue=e.target.value,this.$emit("input",this.innerValue)},handleClear(){this.innerValue="",this.$emit("input",this.innerValue)},refreshCallback(){this.updateCallback()},onConfirm(e){this.showPicker=!1,this.updateCallback(e),this.$emit("input",this.innerValue)},openModal(){"page"==this.fhType?this.showPicker=!0:this.refreshData()}},mounted(){this.conf.api.immediate&&this.refreshData()}},H={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"sub-item-title",class:[e.conf.size,e.conf.align,e.conf.class].concat(e.conf.border&&e.conf.border.length>0?e.conf.border:[])},[e.conf.icon?i("span",{staticClass:"icon",class:e.conf.icon}):e._e(),e._v(" "),i(e.conf.weight?"b":"span",{ref:"editableElement",tag:"component",class:["title","preview"==e.mode?"editable":""],attrs:{contenteditable:"preview"==e.mode},on:{input:e.handleUpdateLabel}},[e._v("\n "+e._s(e.conf.label)+"\n ")])],1)},staticRenderFns:[],props:{mode:{type:String,default:"preview"},conf:{type:Object,required:!0,default:()=>({size:"",align:"",border:[],icon:"",weight:!1,label:""})}},methods:{handleUpdateLabel(){const e=this.$refs.editableElement;if(!e)return;const t=e.textContent.trim();this.$emit("updateItem","label",t)}},watch:{"conf.label"(e){const t=this.$refs.editableElement;t&&t.textContent!==e&&(t.textContent=e)}}},G={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"widget-row table-wrapper"},[i("div",{staticClass:"sub-item-title"},[i("span",{staticClass:"left-label"},[e._v(e._s(e.conf.label))]),e._v(" "),"view"!==e.mode&&(e.conf.allowAdd||e.conf.allowReferenceAdd)?i("div",{staticClass:"toolbar-btns"},[e.conf.allowNormalAdd?i("button",{staticClass:"add-btn primary-color button-none",on:{click:function(t){return t.stopPropagation(),t.preventDefault(),e.addRow.apply(null,arguments)}}},[i("van-icon",{staticStyle:{"margin-right":"2px"},attrs:{name:"plus"}}),e._v(" "+e._s(e.conf.addBtnText||"添加")+"\n ")],1):e._e(),e._v(" "),e.conf.allowNormalAdd?i("button",{staticClass:"add-btn info-color button-none",attrs:{disabled:0==e.selectRows.length},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),e.editRow.apply(null,arguments)}}},[i("van-icon",{staticStyle:{"margin-right":"2px"},attrs:{name:"edit"}}),e._v(" "+e._s("编辑")+"\n ")],1):e._e(),e._v(" "),e.conf.allowReferenceAdd?i("button",{staticClass:"add-btn primary-color button-none",on:{click:e.referenceAddRow}},[i("van-icon",{staticStyle:{"margin-right":"2px"},attrs:{name:"plus"}}),e._v(e._s(e.conf.referenceAddBtnText||"选择添加")+"\n ")],1):e._e(),e._v(" "),e.conf.allowDelete?i("button",{staticClass:"add-btn danger-color button-none",attrs:{disabled:0==e.selectRows.length},on:{click:e.deleteRow}},[i("van-icon",{attrs:{name:"delete-o"}}),e._v(e._s(e.conf.deleteBtnText||"删除")+"\n ")],1):e._e()]):e._e()]),e._v(" "),i("TablePro",{attrs:{columns:e.tableColumns,data:e.tableData,page:e.page,height:e.conf.tableHeight,fixedLeft:e.conf.fixedNumber,"show-pagination":e.conf.pagination,"show-check":"view"!==e.mode,multiple:!0},on:{"page-change":e.getList,"select-change":e.selChange},scopedSlots:e._u([{key:"cell",fn:function(e){var t=e.row,a=e.col;return[i("render",{attrs:{conf:a,value:t[a.prop],terminal:"mobile",mode:"view"}})]}}])}),e._v(" "),i("van-popup",{staticClass:"select-popup",style:{height:e.tableColumns.length>6?"60%":"50%"},attrs:{position:"bottom","get-container":"#myForm",closeable:""},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[i("van-form",{ref:"vantForm",staticClass:"custom-picker-container",attrs:{"validate-first":""},on:{submit:e.onSubmit},model:{value:e.form,callback:function(t){e.form=t},expression:"form"}},[i("van-sticky",[i("van-nav-bar",{attrs:{title:"手动添加",border:!1}})],1),e._v(" "),i("div",{staticClass:"popup-body scroll-wrap"},e._l(e.formItems,function(t,a){return i("render",{key:a,attrs:{conf:t,value:e.form[t.name],terminal:"mobile",mode:-1===e.currentIndex?"add":"edit"},on:{onInput:e.updateForm}})}),1),e._v(" "),i("div",{staticClass:"bottom-btn"},[i("van-button",{attrs:{type:"primary",round:"",block:"",icon:"checked","native-type":"submit"}},[e._v("确认")])],1)],1)],1),e._v(" "),"page"==e.fhType?i("api-popup",{attrs:{visible:e.showRPicker,conf:e.conf},on:{confirm:e.onConfirm,close:function(t){e.showRPicker=!1}}}):e._e()],1)},staticRenderFns:[],mixins:[L,k],components:{render:d,TablePro:q,apiPopup:J},data(){return{tableData:this.parseValue(this.innerValue),showPicker:!1,showRPicker:!1,form:{},selectRows:[],currentIndex:-1,fhType:"page"==this.conf.referenceAddApi?.fhType?"page":"json"}},computed:{page:()=>({total:0,size:10,current:1}),paramsChanged(){return this.prevValue!==this.formData[this.conf.formLdCol]},formItems(){return this.conf.columnsData.filter(e=>"inputHidden"!==e.widget&&!1!==e.appVisible)},tableColumns(){const e=[],{columnsData:t=[]}=this.conf;return this.conf.showIndexColumn,t.forEach(t=>{!1!==t.appVisible&&"inputHidden"!==t.widget&&e.push({prop:t.name,align:"center",...t,label:t.required?`*${t.label}`:t.label,hideLabel:!0,width:"120px"})}),e}},methods:{getList(){},selChange(e){this.selectRows=e},onSubmit(){-1==this.currentIndex?this.tableData.push({...this.form}):this.tableData.splice(this.currentIndex,1,{...this.form}),this.showPicker=!1,this.currentIndex=-1,this.innerValue=JSON.stringify(this.tableData),this.$emit("input",this.innerValue)},onConfirm(e){this.showRPicker=!1,this.tableData=[...e.map(e=>({...e,checked:!1}))],console.log(e),this.innerValue=JSON.stringify(this.tableData),this.$emit("input",this.innerValue)},rpxToPx(e){if(!e)return"auto";const t=parseInt(e);return isNaN(t)?e:t/2+"px"},parseValue(e){if(!e||""===e)return[];try{const t=JSON.parse(e);return Array.isArray(t)?t:[]}catch(e){return console.warn("解析表格数据失败,使用空数组",e),[]}},refreshCallback(){let e=Array.isArray(this.datalist)?this.datalist:[this.datalist],t=[];e.forEach(e=>{const i={};this.conf.columnsData.forEach(t=>{this.conf.api&&this.conf.api.mappings&&this.conf.api.mappings.filter(e=>e.name==t.name).length>0?i[t.name]=e[this.conf.api.mappings.filter(e=>e.name==t.name)[0].field]:i[t.name]=t.defaultValue||""}),"{}"!==JSON.stringify(i)&&t.push(i)}),this.innerValue=JSON.stringify(t),this.$emit("input",this.innerValue)},addRow(){this.tableData.length,this.tableColumns.forEach((e,t)=>{"_index"!==e.prop&&(this.form[e.prop]=e.defaultValue||"")}),this.showPicker=!0,this.currentIndex=-1},referenceAddRow(){this.showRPicker=!0},editRow(){if(!this.selectRows||0===this.selectRows.length)return void this.$toast("请选择要编辑的行");const e=this.selectRows[0];this.form={...e},this.currentIndex=e.index,this.showPicker=!0},deleteRow(){let e=this.selectRows.map(e=>e.index);e.sort((e,t)=>t-e);for(let t of e)this.tableData.splice(t,1)},updateForm(e,t){t||this.$toast("字段没有配置无法赋值!"),this.form[t]=e}}};const K=[V,T,_,A,I,F,O,P,E,N,z,M,B,U,W,H,G,{render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{class:e.conf.buttonType,style:e.style,attrs:{disabled:e.conf.disabled}},[e.conf.icon?i("i",{staticClass:"icon",class:e.conf.icon}):e._e(),e._v(" "),i("span",[e._v(e._s(e.conf.buttonText))])])},staticRenderFns:[],mixins:[L,k],data:()=>({}),computed:{style(){return void 0!==this.conf.appWidth?{width:this.conf.appWidth/12*100+"%"}:{}}},methods:{refreshCallback(){this.updateCallback()}}},{render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:["clearfix",e.conf.align].concat(e.conf.border&&e.conf.border.length>0?e.conf.border:[])},[e._t("default")],2)},staticRenderFns:[],props:{mode:{type:String,default:"preview"},conf:{type:Object,required:!0},formConf:{type:Object}},data:()=>({}),methods:{}}],Z=function(e){Z.installed||(K.forEach(t=>{e.component(t.name,t)}),e.component(x.name,x))};return{install:Z}});
|
|
5
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("vue"),require("vuex"),require("element-ui"),require("vant")):"function"==typeof define&&define.amd?define(["vue","vuex","element-ui","vant"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["app-form-view"]=t(e.Vue,e.Vuex,e.ELEMENT,e.vant)}(this,function(e,t,n,i){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=a(e);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n<t;n++)i[n]=e[n];return i}function s(e,t,n,i,a,r,o){try{var s=e[r](o),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(i,a)}function l(e){return function(){var t=this,n=arguments;return new Promise(function(i,a){var r=e.apply(t,n);function o(e){s(r,i,a,o,l,"next",e)}function l(e){s(r,i,a,o,l,"throw",e)}o(void 0)})}}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,k(i.key),i)}}function d(e,t,n){return t&&u(e.prototype,t),n&&u(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function f(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=V(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var i=0,a=function(){};return{s:a,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,r=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw r}}}}function p(e,t,n){return(t=k(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},h.apply(null,arguments)}function m(e){if(null==e)throw new TypeError("Cannot destructure "+e)}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function g(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach(function(t){p(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function y(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function b(){
|
|
6
|
+
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
7
|
+
var e,t,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function r(n,i,a,r){var l=i&&i.prototype instanceof s?i:s,c=Object.create(l.prototype);return w(c,"_invoke",function(n,i,a){var r,s,l,c=0,u=a||[],d=!1,f={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,s=0,l=e,f.n=n,o}};function p(n,i){for(s=n,l=i,t=0;!d&&c&&!a&&t<u.length;t++){var a,r=u[t],p=f.p,h=r[2];n>3?(a=h===i)&&(l=r[(s=r[4])?5:(s=3,3)],r[4]=r[5]=e):r[0]<=p&&((a=n<2&&p<r[1])?(s=0,f.v=i,f.n=r[1]):p<h&&(a=n<3||r[0]>i||i>h)&&(r[4]=n,r[5]=i,f.n=h,s=0))}if(a||n>1)return o;throw d=!0,i}return function(a,u,h){if(c>1)throw TypeError("Generator is already running");for(d&&1===u&&p(u,h),s=u,l=h;(t=s<2?e:l)||!d;){r||(s?s<3?(s>1&&(f.n=-1),p(s,l)):f.n=l:f.v=l);try{if(c=2,r){if(s||(a="next"),t=r[a]){if(!(t=t.call(r,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,s<2&&(s=0)}else 1===s&&(t=r.return)&&t.call(r),s<2&&(l=TypeError("The iterator does not provide a '"+a+"' method"),s=1);r=e}else if((t=(d=f.n<0)?l:n.call(i,f))!==o)break}catch(t){r=e,s=1,l=t}finally{c=1}}return{value:t,done:d}}}(n,a,r),!0),c}var o={};function s(){}function l(){}function c(){}t=Object.getPrototypeOf;var u=[][i]?t(t([][i]())):(w(t={},i,function(){return this}),t),d=c.prototype=s.prototype=Object.create(u);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,w(e,a,"GeneratorFunction")),e.prototype=Object.create(d),e}return l.prototype=c,w(d,"constructor",c),w(c,"constructor",l),l.displayName="GeneratorFunction",w(c,a,"GeneratorFunction"),w(d),w(d,a,"Generator"),w(d,i,function(){return this}),w(d,"toString",function(){return"[object Generator]"}),(b=function(){return{w:r,m:f}})()}function w(e,t,n,i){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}w=function(e,t,n,i){function r(t,n){w(e,t,function(e){return this._invoke(t,n,e)})}t?a?a(e,t,{value:n,enumerable:!i,configurable:!i,writable:!i}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},w(e,t,n,i)}function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i,a,r,o,s=[],l=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(i=r.call(n)).done)&&(s.push(i.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return s}}(e,t)||V(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||V(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function T(e){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},T(e)}function V(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}
|
|
8
|
+
// 表单模式枚举(与 formConf.mode 对应,控制组件显隐、只读)
|
|
9
|
+
// 组件映射:保留原PC tag,新增appTag
|
|
10
|
+
var _={input:{tag:"c-input",appTag:"c-app-input",tagIcon:"danhangwenben"},textarea:{tag:"c-textarea",appTag:"c-app-input",tagIcon:"duohangwenben"},inputNumber:{tag:"c-input-number",appTag:"c-app-input",tagIcon:"shuzhixing"},select:{tag:"c-select",appTag:"c-app-select",tagIcon:"xiala-"},radio:{tag:"c-radio",appTag:"c-app-radio",tagIcon:"duoxuan-xuanzhong"},checkbox:{tag:"c-radio",appTag:"c-app-checkbox",tagIcon:"duoxuan-xuanzhong"},datetime:{tag:"c-datetime-picker",appTag:"c-app-datetime-picker",tagIcon:"riqishijian"},datetimeRange:{tag:"c-datetime-range",appTag:"c-app-datetime-range",tagIcon:"riqishijian"},inputTree:{tag:"c-input-tree",appTag:"c-app-input-tree",tagIcon:"bumen"},inputUpload:{tag:"c-input-upload",appTag:"c-app-input-upload",tagIcon:"yunshangchuan"},subRow:{tag:"c-sub-row",appTag:"c-app-collapse",tagIcon:"zhediemianban"},textBox:{tag:"c-text-box",appTag:"c-app-text-box",tagIcon:"wenbenzuhe"},searchSelect:{tag:"c-search-select",appTag:"c-app-search-select",tagIcon:"sousuoxialacaidan"},searchApi:{tag:"c-search-api",appTag:"c-app-search-api",tagIcon:"duqushujuku"},subTitle:{tag:"c-sub-title",appTag:"c-app-sub-title",tagIcon:"biaotizhengwenqiehuan"},row:{tag:"c-row",appTag:"c-app-row",tagIcon:"zhage"},password:{tag:"c-input",appTag:"c-app-input",tagIcon:"mima2"},inputHidden:{tag:"c-input-hidden",appTag:"c-app-input-hidden",tagIcon:"yincangyu1"},table:{tag:"c-table",appTag:"c-app-table",tagIcon:"biaoge"},block:{tag:"c-block",appTag:"c-app-block",tagIcon:"biaoge"},button:{tag:"c-button",appTag:"c-app-button",tagIcon:"caozuoanniu"}},S=[{label:"单行文本",hideLabel:!1,name:"",widget:"input",type:"text",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",clearable:!0,prepend:"",prependType:"text",append:"",appendType:"text",maxlength:null,readonly:!1,disabled:!1,required:!1,preReg:"",regList:[],changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],
|
|
11
|
+
// ========== 新增APP专属配置 ==========
|
|
12
|
+
appVisible:!0,appReadonly:!1},{label:"多行文本",hideLabel:!1,name:"",widget:"textarea",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",rows:2,maxlength:null,readonly:!1,disabled:!1,required:!1,regList:[],preReg:"",changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"数值输入框",hideLabel:!1,name:"",widget:"inputNumber",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",clearable:!0,prepend:"",prependType:"text",append:"",appendType:"text",min:0,max:1e3,readonly:!1,disabled:!1,required:!1,preReg:"",regList:[],changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"下拉选择",hideLabel:!1,name:"",widget:"select",placeholder:"请选择",defaultValue:"",width:6,class:"form-control",clearable:!0,readonly:!1,disabled:!1,required:!1,regList:[],changeTag:!0,description:"",descriptionType:"icon",dataType:"dict",dict:"",dictLylx:"",options:[],sjbName:"",visible:!0,multiple:!1,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"单选框",hideLabel:!1,name:"",widget:"radio",defaultValue:"",width:6,class:"",readonly:!1,disabled:!1,required:!1,changeTag:!0,description:"",descriptionType:"icon",dataType:"dict",dict:"",dictLylx:"",options:[],sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"复选框",hideLabel:!1,name:"",widget:"checkbox",defaultValue:"",width:6,class:"",readonly:!1,disabled:!1,required:!1,changeTag:!0,description:"",descriptionType:"icon",dataType:"dict",dict:"",dictLylx:"",options:[],sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"日期时间",hideLabel:!1,name:"",widget:"datetime",defaultValue:"",placeholder:"请选择",width:6,class:"form-control",disabled:!1,readonly:!1,clearable:!0,required:!1,datetype:"date",format:"yyyy-MM-dd",changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"日期范围",hideLabel:!1,name:"",widget:"datetimeRange",defaultValue:"",width:12,class:"form-control",disabled:!1,readonly:!1,required:!1,datetype:"date",format:"yyyy-MM-dd",changeTag:!0,description:"",descriptionType:"icon",separator:"-",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"树选择器",hideLabel:!1,name:"",widget:"inputTree",defaultValue:"",placeholder:"请选择",width:12,class:"form-control",disabled:!1,readonly:!0,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",multiple:!1,api:{url:"system/dept/roleDeptTreeData",method:"get",paramsList:[],refresh:!1,fhType:"json"},async:!1,keyMap:{id:"id",name:"name",title:"title",pId:"pId",rootPId:0},expand:{enable:!0,level:"all"},separator:",",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"文件上传",hideLabel:!1,name:"",widget:"inputUpload",placeholder:"请选择",width:12,class:"",disabled:!1,readonly:!1,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",allowedFileType:["image","pdf","office","zip"],mode:0,columns:2,source:"mainTable",minFileCount:null,maxFileCount:null,multiple:!1,sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},events:[],keyMap:{path:"fileBase64",name:"fileName",type:"fileType",size:"size",bizType:"biz_type"},appVisible:!0,appReadonly:!1,maxFileSize:25600},{label:"搜索建议",hideLabel:!1,name:"",widget:"searchSelect",defaultValue:"",placeholder:"请选择",width:12,class:"form-control",disabled:!1,readonly:!1,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",api:{url:"",method:"post",paramsList:[],mappings:[],headers:[],refresh:!1},sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"API查询",hideLabel:!1,name:"",widget:"searchApi",defaultValue:"",placeholder:"点击查询",width:12,class:"form-control",disabled:!1,readonly:!0,clearable:!0,required:!1,changeTag:!0,description:"",descriptionType:"icon",append:"查询",appendType:"text",buttonType:"success",visible:!0,api:{url:"",method:"post",mappings:[],paramsList:[],refresh:!1,fhType:"json"},openType:"modal",sjbName:"",visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"密码",hideLabel:!1,name:"",widget:"password",type:"password",placeholder:"请输入",defaultValue:"",width:6,class:"form-control",clearable:!0,prepend:"",prependType:"text",append:"",appendType:"text",maxlength:null,readonly:!1,disabled:!1,required:!0,preReg:"password",regList:[],changeTag:!0,description:"",descriptionType:"icon",sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!1},readonlyByMode:{add:!1,edit:!1,view:!0},events:[],appVisible:!0,appReadonly:!1},{label:"隐藏域",hideLabel:!1,name:"",widget:"inputHidden",type:"hidden",defaultValue:"",noDrag:!0,sjbName:"",visible:!0,visibilityByMode:{add:!0,edit:!0,view:!0},readonlyByMode:{add:!0,edit:!0,view:!0},events:[],appVisible:!0,appReadonly:!0}];
|
|
13
|
+
// 基础组件:原有字段全部保留,统一新增APP端配置字段
|
|
14
|
+
function A(e){return"[object String]"===Object.prototype.toString.call(e)}
|
|
15
|
+
// 增强版:通过Base64魔数识别真实文件类型
|
|
16
|
+
// 参考https://github.com/vuejs/vue/blob/v2.6.10/src/platforms/web/server/util.js
|
|
17
|
+
var j=function(e,t){for(var n=Object.create(null),i=e.split(","),a=0;a<i.length;a++)n[i[a]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}("accept,accept-charset,accesskey,action,align,alt,async,autocomplete,autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,name,contenteditable,contextmenu,controls,coords,data,datetime,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,ismap,itemprop,keytype,kind,lang,language,list,loop,low,manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,type,usemap,value,width,wrap");var D={render:function(e){var t=this,n={props:{attrs:{},conf:{},terminal:this.terminal,mode:this.mode,value:this.value},on:{updateItem:function(e,n){t.$emit("updateItem",e,n)},
|
|
18
|
+
// 底层组件的 input 事件触发时,调用 onInput 回传新值
|
|
19
|
+
input:function(e){t.$emit("onInput",e,t.conf.name||t.attrs.name);// 触发 onInput 事件(关键)
|
|
20
|
+
}},style:{}},i=JSON.parse(JSON.stringify(this.conf)),a=[];
|
|
21
|
+
// const childObjs = componentChild[confClone.tag]
|
|
22
|
+
// if (childObjs) {
|
|
23
|
+
// Object.keys(childObjs).forEach(key => {
|
|
24
|
+
// const childFunc = childObjs[key]
|
|
25
|
+
// if (confClone[key]) {
|
|
26
|
+
// children.push(childFunc(h, confClone, key))
|
|
27
|
+
// }
|
|
28
|
+
// })
|
|
29
|
+
// }
|
|
30
|
+
return null==i.name?n={props:{conf:i,mode:this.mode},on:{
|
|
31
|
+
// 底层组件的 input 事件触发时,调用 onInput 回传新值
|
|
32
|
+
updateItem:function(e,n){t.$emit("updateItem",e,n);// 触发 onInput 事件(关键)
|
|
33
|
+
}}}:(Object.keys(i).forEach(function(e){var a=i[e];"vModel"===e?function(e,t,n){t.props.value=n,t.on.input=function(t){e.$emit("input",t)}}(t,n,t.value||i.defaultValue):n[e]?n[e]=a:j(e)?n.props.attrs[e]=a:n.props.conf[e]=a}),n.props.conf.preReg&&"mobile"!==this.terminal&&(n.props.attrs.class=n.props.attrs.class+" "+n.props.conf.preReg)),this.terminal&&"mobile"==this.terminal?e(_[this.conf.widget].appTag,n,a):e(_[this.conf.widget].tag,n,a)},props:["conf","value","mode","terminal"]};
|
|
34
|
+
// 新增:核心工具函数 - 判断组件在当前模式下是否显示
|
|
35
|
+
function I(e,t){var n;
|
|
36
|
+
// 1. 全局visible为false,直接隐藏
|
|
37
|
+
return!1!==e.appVisible&&(
|
|
38
|
+
// 2. 无模式显隐配置,默认显示
|
|
39
|
+
!e.visibilityByMode||(null===(n=e.visibilityByMode[t])||void 0===n||n))}
|
|
40
|
+
// 新增:核心工具函数 - 判断组件在当前模式下是否只读
|
|
41
|
+
var O={colFormItem:function(e,t,n,i,a){var r=this.$listeners.updateItem,o=(null==a?void 0:a.mode)||"add";
|
|
42
|
+
// 关键改动1:先判断当前组件是否显示,不显示则返回null
|
|
43
|
+
// 获取当前表单模式,默认add
|
|
44
|
+
if(!I(t,o))return null;var s="";s+="widget-"+t.widget;
|
|
45
|
+
// 关键改动2:计算当前模式下的只读状态
|
|
46
|
+
var l=function(e,t){var n;
|
|
47
|
+
// 1. 全局readonly为true,直接只读
|
|
48
|
+
return!0===e.readonly||
|
|
49
|
+
// 2. 无模式只读配置,默认使用全局readonly(false)
|
|
50
|
+
!!e.readonlyByMode&&null!==(n=e.readonlyByMode[t])&&void 0!==n&&n}(t,o),c=g(g({},t),{},{readonly:l,
|
|
51
|
+
// 额外优化:只读时通常也禁用,提升交互体验
|
|
52
|
+
disabled:t.disabled||l&&"view"==o});
|
|
53
|
+
// 合并只读状态到element(供render组件使用)
|
|
54
|
+
return null==t.name?e(D,{attrs:{conf:c,mode:o,terminal:"mobile"},key:t.renderKey,on:{updateItem:r},class:s}):e("c-app-form-item",{attrs:{conf:t,mode:o,formConf:a},on:{updateItem:r},class:s,scopedSlots:{default:function(n){return e(D,{key:t.renderKey,attrs:{conf:t,value:n.value,mode:o,terminal:"mobile"},on:{input:n.onUpdate,updateItem:r}})}}})},rowFormItem:function(e,t,n,i,a){var r=this.$listeners.updateItem,o=(null==a?void 0:a.mode)||"add";
|
|
55
|
+
// 关键改动3:布局组件(行/块/子行)也需要判断显隐
|
|
56
|
+
if(!I(t,o))return null;var s="widget-"+t.widget,l=L.apply(this,arguments);return"subRow"==t.widget?e("div",{class:s},[e("c-sub-row",{attrs:{conf:t,formConf:a,mode:o},on:{updateItem:r}},[l])]):"block"==t.widget?e("div",{class:s},[e("c-block",{attrs:{conf:t,formConf:a,mode:o},on:{updateItem:r}},[l])]):e("div",{class:s+(void 0!==t.border&&t.border.length>0?t.border.join(" "):"")},[l])}};function L(e,t,n,i,a){var r=this;return Array.isArray(t.children)?t.children.map(function(n,i){var o=O[n.layout];return o?o.call(r,e,n,i,t.children,a):F()}):null}function F(){throw new Error("没有与".concat(this.element.layout,"匹配的layout"))}var P={components:{render:D},props:["element","index","drawingList","formConf"],render:function(e){var t=O[this.element.layout||"colFormItem"];return t?t.call(this,e,this.element,this.index,this.drawingList,this.formConf):F()}},R={
|
|
57
|
+
/**
|
|
58
|
+
* 会话级缓存
|
|
59
|
+
*/
|
|
60
|
+
session:{set:function(e,t){sessionStorage&&null!=e&&null!=t&&sessionStorage.setItem(e,t)},get:function(e){return sessionStorage?null==e?null:sessionStorage.getItem(e):null},setJSON:function(e,t){null!=t&&this.set(e,JSON.stringify(t))},getJSON:function(e){var t=this.get(e);return null!=t?JSON.parse(t):null},remove:function(e){sessionStorage.removeItem(e)}},
|
|
61
|
+
/**
|
|
62
|
+
* 本地缓存
|
|
63
|
+
*/
|
|
64
|
+
local:{set:function(e,t){localStorage&&null!=e&&null!=t&&localStorage.setItem(e,t)},get:function(e){return localStorage?null==e?null:localStorage.getItem(e):null},setJSON:function(e,t){null!=t&&this.set(e,JSON.stringify(t))},getJSON:function(e){var t=this.get(e);return null!=t?JSON.parse(t):null},remove:function(e){localStorage.removeItem(e)}}};new(function(){return d(function e(){c(this,e),this.config={baseURL:"/",apiPrefix:"",staticPrefix:""},this.init()},[{key:"init",value:function(){
|
|
65
|
+
// 1. 尝试从 window 全局变量读取
|
|
66
|
+
window.APP_CONFIG&&this.mergeConfig(window.APP_CONFIG),
|
|
67
|
+
// 2. 尝试从 URL 参数读取
|
|
68
|
+
this.mergeConfig(this.getUrlConfig()),
|
|
69
|
+
// 3. 尝试从 localStorage 读取
|
|
70
|
+
this.mergeConfig(this.getLocalStorageConfig())}},{key:"getUrlConfig",value:function(){var e=new URLSearchParams(window.location.search),t={};return e.get("baseURL")&&(t.baseURL=e.get("baseURL")),e.get("apiPrefix")&&(t.apiPrefix=e.get("apiPrefix")),t}},{key:"getLocalStorageConfig",value:function(){try{return JSON.parse(localStorage.getItem("app-config"))||{}}catch(e){return{}}}},{key:"mergeConfig",value:function(e){this.config=g(g({},this.config),e)}},{key:"updateConfig",value:function(e){this.mergeConfig(e),
|
|
71
|
+
// 保存到 localStorage
|
|
72
|
+
localStorage.setItem("app-config",JSON.stringify(this.config))}},{key:"get",value:function(e){return this.config[e]}},{key:"getAll",value:function(){return g({},this.config)}}])}());function E(e){for(var t="",n=0,i=Object.keys(e);n<i.length;n++){var a=i[n],r=e[a],o=encodeURIComponent(a)+"=";if(null!==r&&""!==r&&void 0!==r)if("object"===T(r))for(var s=0,l=Object.keys(r);s<l.length;s++){var c=l[s];if(null!==r[c]&&""!==r[c]&&void 0!==r[c]){var u="".concat(a,"[").concat(c,"]");t+=encodeURIComponent(u)+"="+encodeURIComponent(r[c])+"&"}}else t+=o+encodeURIComponent(r)+"&"}return t.slice(0,-1)}var N=function(e){var t=g(g({},{url:"",method:"GET",data:null,headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"json",timeout:1e4,cache:!0,processData:!0,contentType:!0}),e);if(t.url=function(e,t){if(!t)return e;var n=e.endsWith("/"),i=t.startsWith("/");return n&&i?e+t.slice(1):n||i?e+t:e+"/"+t}("/api/",t.url),"GET"===t.method.toUpperCase()&&t.data){var i=E(t.data);t.url+=(t.url.includes("?")?"&":"?")+i,t.data=null}
|
|
73
|
+
// ---------------- 关键修复:判断是否是 FormData ----------------
|
|
74
|
+
t.data instanceof FormData?(t.contentType=!1,t.processData=!1,t.headers={}):["POST","PUT","PATCH"].includes(t.method.toUpperCase())&&t.data&&"application/x-www-form-urlencoded"===t.headers["Content-Type"]&&(t.data=E(t.data));
|
|
75
|
+
// ----------------------------------------------------------------
|
|
76
|
+
var a=function(e){var t;if(!1!==(null===(t=e.headers)||void 0===t?void 0:t.repeatSubmit)&&["POST","PUT"].includes(e.method.toUpperCase())){var n={url:e.url,data:e.data,time:(new Date).getTime()};if(JSON.stringify(n).length>=5242880)return console.warn("[".concat(e.url,"]: 请求数据超出5M限制")),e;R.session.setJSON("sessionObj",n)}return e}(t);return a?new Promise(function(e,t){$.ajax({cache:a.cache,processData:a.processData,contentType:a.contentType,url:a.url,type:a.method,data:a.data,headers:a.headers,timeout:a.timeout,success:function(i,r,o){try{var s=function(e){var t=e.data;if("blob"===e.responseType||"arraybuffer"===e.responseType)return t;var i=t.code,a=t.msg||"操作失败";return 401===i?Promise.reject("无效的会话,请重新登录"):500===i?(n.Message({message:a,type:"error"}),Promise.reject(a)):601===i?(n.Message({message:a,type:"warning"}),Promise.reject("warning")):0!==i&&void 0!==i?(n.Notification.error({title:a}),Promise.reject("error")):t}({data:i,responseType:a.responseType});e(s)}catch(e){t(e)}},error:function(e,i,a){(function(e,t,i){var a="";return a="error"===t?0===e.status?"后端接口连接异常":"系统接口".concat(e.status,"异常"):"timeout"===t?"请求超时":"请求失败: ".concat(i||t),n.Message({message:a,type:"error",duration:5e3}),Promise.reject(a)})(e,i,a).catch(t)}})}):Promise.reject("请求被拦截")};var M="sjyy/sjczgl/form/bdgl/config/",z={scene:M+"getFromConfigScene",addSave:M+"formConfigAdd",editSave:M+"formConfigEdit",view:M+"formConfigView",getData:"sjyy/sjczgl/form/bdgl/formBdglView",getSjyyFields:"sjyy/sjcxgl/sjxgl/getYsjSjxList",getDict:M+"getFormDictData",getFormInitData:"sjyy/sjczgl/sjcjh/getFormInitData",getViewData:"sjyy/sjczgl/sjcjh/getDataViewById"};function B(e,t){return N({url:e,method:"post",data:t})}var U=["class"],q={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-page",class:e.mode},[n("c-app-form",{ref:"cform",staticClass:"app-form",attrs:{conf:e.formConf,model:e.formConf.model||{},openType:e.openType,singleUploadList:e.singleUploadList,multiplySingleUploadList:e.multiplySingleUploadList},on:{updateItem:e.updateItem}},[n("div",{staticClass:"app-wrap scroll-wrap"},[n("div",{staticStyle:{padding:"15px"}},[e._l(e.hiddenList,function(t){return n("app-form-item",{key:t.renderKey,attrs:{element:t,"form-conf":e.formConf},on:{updateItem:e.updateItem}})}),e._v(" "),e._l(e.filterDrawingList,function(t){return n("app-form-item",{key:t.renderKey,attrs:{element:t,"form-conf":e.formConf},on:{updateItem:e.updateItem}})})],2)]),e._v(" "),e.formConf.buttons?n("van-goods-action",{ref:"detailBtns",staticClass:"bottom-btns"},e._l(e.formConf.buttons,function(t){return n("app-form-item",{key:t.renderKey,attrs:{element:t,"form-conf":e.formConf},on:{updateItem:e.updateItem}})}),1):e._e()],1)],1)},staticRenderFns:[],components:{AppFormItem:P},props:{formId:{type:String},buttonCode:{type:String},ywid:{type:String},formData:{type:Object,default:function(){}},mode:{}},data:function(){return{formConf:{},drawingList:[],openType:"",paddingBottom:"0px",baseWidget:S.map(function(e){return e.widget})}},computed:g(g({},t.mapState("user",["userInfo"])),{},{hiddenList:function(){return this.drawingList.filter(function(e){return e.noDrag})},filterDrawingList:function(){return this.getDrawingList(this.drawingList.filter(function(e){return!e.noDrag}))},filterList:function(){return this.flattenDrawingList(this.drawingList)},singleUploadList:function(){return this.filterList.filter(function(e){return"inputUpload"==e.widget&&"mainTable"==e.source})},tableList:function(){return this.filterList.filter(function(e){return"table"==e.widget})},multiplyUploadList:function(){var e={};return this.filterList.filter(function(e){return"inputUpload"==e.widget&&"attachedTable"==e.source}).forEach(function(t){if(t.name.split("@").length>1){var n=C(t.name.split("@"),2),i=n[0];n[1],e[i]||(e[i]=t.keyMap)}}),e},multiplySingleUploadList:function(){var e={};return this.filterList.filter(function(e){return"inputUpload"==e.widget&&"attachedTable"==e.source}).forEach(function(t){1==t.name.split("@").length&&(e[t.name]=t.keyMap)}),e},sceneName:function(){return{add:"新增",edit:"修改",view:"查看"}[this.formConf.mode]||"新增"}}),watch:{formData:{handler:function(e){e&&(this.formConf=e,this.drawingList=e.fields)},deep:!0},formId:function(){this.initData(this.formId,this.buttonCode,this.ywid)},buttonCode:function(){this.initData(this.formId,this.buttonCode,this.ywid)},ywid:function(){this.initData(this.formId,this.buttonCode,this.ywid)}},created:function(){this.userInfo&&this.userInfo.userId||this.fetchUserInfo(),this.formData&&(this.formConf=this.formData,this.drawingList=this.formData.fields);
|
|
77
|
+
// 调用修改后的方法,获取formId
|
|
78
|
+
var e=this.getFormParamsFromUrl(),t=e.formId,n=e.buttonCode,i=e.ywid;t&&this.initData(t,n,i),this.formId&&this.initData(this.formId,this.buttonCode,this.ywid),t&&this.formId||console.warn("未从URL中获取到表单ID")},mounted:function(){},methods:g(g({},t.mapActions("user",["fetchUserInfo"])),{},{initData:function(e,t,n){var i,a=this;
|
|
79
|
+
// 原有接口请求逻辑不变
|
|
80
|
+
(i={id:e},N({url:z.view,method:"post",data:i})).then(function(e){if(0==e.code){var i=e.data,r=i.formCode;a.openType=i.openType;var o=JSON.parse(i.formJson),s="add";o.sceneList&&o.sceneList.length>0&&t&&o.sceneList.filter(function(e){return e.sceneCode==t}).length>0&&(s=o.sceneList.filter(function(e){return e.sceneCode==t})[0].operationType),a.drawingList=JSON.parse(JSON.stringify(o.fields)),delete o.fields,a.formConf=o,a.formConf.mode="detail"==s?"view":s,a.formConf.model={},a.formConf&&a.formConf.buttons&&a.formConf.buttons.length>0?a.$refs.detailBtns?a.paddingBottom=a.$refs.detailBtns.offsetHeight+"px":(a.paddingBottom="60px",a.$nextTick(function(){a.$refs.detailBtns&&(a.paddingBottom=a.$refs.detailBtns.offsetHeight+"px")})):a.paddingBottom="0px","add"==a.formConf.mode?r&&function(e){return N({url:z.getFormInitData,method:"post",data:e})}({formCode:r}).then(function(e){0==e.code&&(a.formConf.model=e.data)}):"edit"!=a.formConf.mode&&"view"!=a.formConf.mode||(
|
|
81
|
+
//编辑
|
|
82
|
+
n?r&&n&&
|
|
83
|
+
//获取表单数据
|
|
84
|
+
function(e){return N({url:z.getViewData,method:"post",data:e})}({formCode:r,id:n}).then(function(e){if(0==e.code){a.formConf.model=e.data;var t={},n=function(e){var n=a.multiplyUploadList[e];if(n){var i=n.bizType;a.formConf.model[e].forEach(function(a){t[e+"@"+a[i]]||(t[e+"@"+a[i]]=[]),t[e+"@"+a[i]].push(p(p(p(p(p({},n.path,a.path.fileBase64),n.name,a.path.fileName),n.type,a.path.fileType),n.size,a.size),i,a[i]))}),delete a.multiplyUploadList[e],delete a.formConf.model[e]}var r=a.multiplySingleUploadList[e];r&&a.formConf.model[e]&&(a.formConf.model[e]=a.formConf.model[e].map(function(e){return p(p(p(p(p({},r.path,e.path.fileBase64),r.name,e.path.fileName),r.type,e.path.fileType),r.size,e.size),r.bizType,e[r.bizType])}));var o=a.tableList.filter(function(t){return t.name==e});o&&o.length>0&&(a.formConf.model[e]=JSON.stringify(a.formConf.model[e]))};for(var i in a.formConf.model)n(i);for(var r in t)a.formConf.model[r]=t[r];console.log(a.formConf.model,"回显数据")}}):$.modal.confirm("编辑状态下未从URL中获取到表单ywid,是否返回?",function(){
|
|
85
|
+
//关闭当前页面
|
|
86
|
+
//根据页面打开方式
|
|
87
|
+
if("dialog"==a.openType){var e=parent.layer.getFrameIndex(window.name);// 获取当前层的索引
|
|
88
|
+
parent.layer.close(e)}else"blank"==a.openType?window.close():$.modal.closeTab()}))}}).catch(function(e){console.error("获取表单数据失败:",e)})},onClickLeft:function(){},
|
|
89
|
+
// 抽取方法:返回处理后的 fields 数组
|
|
90
|
+
getDrawingList:function(e){
|
|
91
|
+
// 第一步:遍历处理 subTitle 与 table 联动
|
|
92
|
+
for(var t=this,n=e.length,i=x(e),a=0;a<n;a++){var r=i[a],o=i[a+1];
|
|
93
|
+
// 当前是 subTitle 且下一个存在、并且是 table
|
|
94
|
+
"subTitle"===r.widget&&o&&"table"===o.widget&&(
|
|
95
|
+
// subTitle 设为显示
|
|
96
|
+
r.appVisible=!1,
|
|
97
|
+
// table 的 label 赋值为 subTitle 的 label
|
|
98
|
+
o.label=r.label)}
|
|
99
|
+
// 直接 return map 结果
|
|
100
|
+
return i.map(function(e,a){e.class;var r=y(e,U),o=0===a,s=a===n-1,l=t.baseWidget.indexOf(e.widget)>-1,c="";
|
|
101
|
+
// 最后一个
|
|
102
|
+
if(s)l&&(c="last-cell-child");else if(o)(l||"subTitle"===e.widget)&&(c="first-cell-child");else{var u=i[a-1],d=i[a+1],f=t.baseWidget.indexOf(u.widget)>-1,p=t.baseWidget.indexOf(d.widget)>-1;"subTitle"===u.widget||f&&"subTitle"!=e.widget||(c="first-cell-child"),p||(c+=c?" last-cell-child":"last-cell-child")}return g(g({},r),{},{class:c})})},updateItem:function(e,t){
|
|
103
|
+
// 场景1:key是对象(原有逻辑,适配 name/sjbName/key 格式)
|
|
104
|
+
if("object"===T(e)){if(e.name){var n=
|
|
105
|
+
/**
|
|
106
|
+
* 递归查找嵌套列表:宽松匹配 name + 可选匹配 sjbname
|
|
107
|
+
* @param {Array} drawlist - 嵌套的列表数组(根节点)
|
|
108
|
+
* @param {string} targetName - 必匹配的 name 值
|
|
109
|
+
* @param {string} [targetSjbName] - 可选匹配的 sjbname 值(为空时仅匹配name)
|
|
110
|
+
* @param {string} childKey - 子级列表的key(默认children)
|
|
111
|
+
* @returns {Object|null} 第一个匹配的节点(无则返回null)
|
|
112
|
+
*/
|
|
113
|
+
function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"children",a=null;return function e(r){
|
|
114
|
+
// 找到目标后直接终止递归(性能优化)
|
|
115
|
+
a||
|
|
116
|
+
// 非数组直接返回,避免报错
|
|
117
|
+
Array.isArray(r)&&r.some(function(r){
|
|
118
|
+
// some:找到后立即停止当前层级遍历
|
|
119
|
+
// 核心:宽松匹配逻辑
|
|
120
|
+
// 1. 必匹配name
|
|
121
|
+
var o=r.name===t,s=null==n||""===n||r.sjbName===n;
|
|
122
|
+
// 2. sjbname匹配规则:目标为空则恒成立,否则严格相等
|
|
123
|
+
// 满足匹配条件
|
|
124
|
+
return o&&s?(a=r,!0):(
|
|
125
|
+
// 递归子级(未找到时继续遍历)
|
|
126
|
+
r[i]&&Array.isArray(r[i])&&e(r[i]),!!a)})}(e),a}(this.drawingList,e.name,e.sjbName);if(n)
|
|
127
|
+
// 逐层遍历key,直到最后一层
|
|
128
|
+
for(
|
|
129
|
+
// 解析层级key(如 api.refresh)
|
|
130
|
+
var i=e.key.split("."),a=n,r=0;r<i.length;r++)
|
|
131
|
+
// 最后一层直接赋值
|
|
132
|
+
r===i.length-1?a[i[r]]=t:(
|
|
133
|
+
// 非最后一层,若不存在则创建空对象(避免报错)
|
|
134
|
+
a[i[r]]||(a[i[r]]={}),a=a[i[r]])}}else this.activeData[e]=t},
|
|
135
|
+
/**
|
|
136
|
+
* 通用提取URL中的表单相关参数(适配两种URL格式)
|
|
137
|
+
* 格式1:/sjyy/sjczgl/form/bdgl/config/formRuntime/[formId]/[buttonCode]/[ywid](ywid可选)
|
|
138
|
+
* 格式2:/sjyy/...?id=[formId]&buttonCode=[xxx]&ywid=[xxx](ywid可选)
|
|
139
|
+
* @returns {Object} { formId: string|null, buttonCode: string|null, ywid: string|null }
|
|
140
|
+
*/
|
|
141
|
+
getFormParamsFromUrl:function(){
|
|
142
|
+
// 初始化返回结果
|
|
143
|
+
var e={formId:null,buttonCode:null,ywid:null},t=new URLSearchParams(window.location.search);
|
|
144
|
+
// ---------- 第一步:解析查询参数(格式2优先) ----------
|
|
145
|
+
// 如果查询参数中已获取到formId,直接返回(格式2优先级更高)
|
|
146
|
+
if(
|
|
147
|
+
// 提取查询参数中的formId(id)、buttonCode、ywid
|
|
148
|
+
e.formId=t.get("id")||e.formId,e.buttonCode=t.get("buttonCode")||e.buttonCode,e.ywid=t.get("ywid")||e.ywid,e.formId)return e;
|
|
149
|
+
// ---------- 第二步:解析路径参数(格式1) ----------
|
|
150
|
+
// 拆分路径并过滤空字符串
|
|
151
|
+
var n=window.location.pathname.split("/").filter(function(e){return e});if(0===n.length)return e;
|
|
152
|
+
// 找到formRuntime的索引,确定后续参数位置
|
|
153
|
+
var i=n.findIndex(function(e){return"formRuntime"===e});return-1===i||i>=n.length-1||(
|
|
154
|
+
// 格式1的路径规则:formRuntime后依次是 formId → buttonCode → ywid(ywid可选)
|
|
155
|
+
e.formId=n[i+1]||null,// formRuntime下一个是formId
|
|
156
|
+
e.buttonCode=n[i+2]||null,// 再下一个是buttonCode
|
|
157
|
+
e.ywid=n[i+3]||null,// 再下一个是ywid(可选)
|
|
158
|
+
// 可选:验证formId/ywid是否为数字(根据业务调整,不需要可删除)
|
|
159
|
+
e.formId&&!/^\d+$/.test(e.formId)&&(e.formId=null),e.ywid&&!/^\d+$/.test(e.ywid)&&(e.ywid=null)),e},
|
|
160
|
+
// 保留原有函数(如需单独使用可保留)
|
|
161
|
+
getChatIdFromUrl:function(e){var t=new URL(e).pathname.split("/").filter(function(e){return e});return t[t.length-1]},flattenDrawingList:function(e){
|
|
162
|
+
// 空值处理
|
|
163
|
+
if(!Array.isArray(e)||0===e.length)return[];
|
|
164
|
+
// 递归拍平数组
|
|
165
|
+
var t=function(e){var n=[];return e.forEach(function(e){
|
|
166
|
+
// 如果item是对象,提取name和label
|
|
167
|
+
if("object"===T(e)&&null!==e){
|
|
168
|
+
// 只保留name和label字段(无则返回空字符串)
|
|
169
|
+
"inputUpload"!=e.widget&&"table"!=e.widget||n.push(e);
|
|
170
|
+
// 处理嵌套数组(支持children/items等常见嵌套字段)
|
|
171
|
+
["children","columnsData"].forEach(function(i){Array.isArray(e[i])&&(n=n.concat(t(e[i])))})}}),n};return t(e)}})},J={data:function(){return{originCompConfig:{},eventMixinInited:!1,eventHandlersCache:{}}},watch:{"conf.events":{deep:!0,handler:function(e,t){this.eventMixinInited&&JSON.stringify(e)!==JSON.stringify(t)&&(this.unbindAllEvents(),this.initEventHandlers(),this.saveOriginCompConfig())}},value:{deep:!0,handler:function(e,t){this.eventMixinInited&&e!==t&&this.triggerEvent("change",{value:e,oldValue:t})}}},mounted:function(){this.conf?this.initEventMixin():console.warn("表单组件未配置 conf 参数,事件 mixin 初始化失败")},beforeDestroy:function(){this.unbindAllEvents(),this.eventMixinInited=!1},methods:{initEventMixin:function(){this.saveOriginCompConfig(),this.initEventHandlers(),this.triggerEvent("rendered"),this.eventMixinInited=!0},saveOriginCompConfig:function(){var e,t,n;this.originCompConfig={visible:!1!==this.conf.visible,disabled:!0===(null===(e=this.attrs)||void 0===e?void 0:e.disabled),required:!0===(null===(t=this.attrs)||void 0===t?void 0:t.required),readonly:!0===(null===(n=this.attrs)||void 0===n?void 0:n.readonly),value:this.value,refresh:this.conf.refresh||!1}},initEventHandlers:function(){var e,t=this,n=(null===(e=this.conf)||void 0===e?void 0:e.events)||[];Array.isArray(n)&&0!==n.length&&n.forEach(function(e){var n=e.type,i=e.rules;if(n&&Array.isArray(i))switch(n){case"change":break;case"click":case"focus":case"blur":t.bindDomEvent(n,i);break;case"rendered":t.executeRules(i);break;default:console.warn("不支持的事件类型:".concat(n))}})},bindDomEvent:function(e,t){var n=this,i=this.$el.querySelector("input, textarea, select, button, a");if(!i){var a=this.$el.tagName.toLowerCase();if(!["input","textarea","select","button","a"].includes(a))return;i=this.$el}var r=function(i){var a;i.stopPropagation(),i.preventDefault(),n.executeRules(t,{field:null===(a=n.attrs)||void 0===a?void 0:a.name,eventType:e,value:n.value})},o="".concat(e,"-").concat(this.uid||this.conf.id||Date.now());this.eventHandlersCache[o]={el:i,type:e,handler:r},i.addEventListener(e,r)},unbindAllEvents:function(){this.eventHandlersCache&&(Object.values(this.eventHandlersCache).forEach(function(e){e.el&&e.type&&e.handler&&e.el.removeEventListener(e.type,e.handler)}),this.eventHandlersCache={})},triggerEvent:function(e){var t,n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=((null===(t=this.conf)||void 0===t?void 0:t.events)||[]).find(function(t){return t.type===e});a&&Array.isArray(a.rules)&&this.executeRules(a.rules,g(g({},i),{},{field:null===(n=this.attrs)||void 0===n?void 0:n.name,eventType:e,component:this}))},executeRules:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Array.isArray(e)&&0!==e.length&&e.forEach(function(e){t.checkConditionGroups(e.conditionGroups,n)?t.executeActions(e.actions):t.restoreCompOriginState(e.actions)})},checkConditionGroups:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Array.isArray(e)||0===e.length)return!0;var i=!0;return e.forEach(function(e,a){var r=t.checkSingleConditionGroup(e,n);i=0===a?r:"and"===e.groupLogic?i&&r:i||r}),i},checkSingleConditionGroup:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=(null==e?void 0:e.conditions)||[];if(!Array.isArray(i)||0===i.length)return!0;var a=!0;return i.forEach(function(e,i){var r=t.checkSingleCondition(e,n);a=0===i?r:"and"===e.logic?a&&r:a||r}),a},checkSingleCondition:function(e){var t=e.field,n=e.operator,i=e.valueType,a=e.value;if(!t||!n)return!1;var r=this.getTargetFieldValue(t),o=this.getCompareValue(i,a);switch(n){case"=":return this.compareValues(r,o,"=");case"!=":return this.compareValues(r,o,"!=");case"like":return this.compareValues(r,o,"like");case">":return this.compareValues(r,o,">");case"<":return this.compareValues(r,o,"<");case">=":return this.compareValues(r,o,">=");case"<=":return this.compareValues(r,o,"<=");case"in":return this.compareValues(r,o,"in");case"is null":return null==r||""===r;case"is not null":return null!=r&&""!==r;default:return console.warn("不支持的运算符:".concat(n)),!1}},getTargetFieldValue:function(e){var t;return this.formData?this.formData[e]:e===(null===(t=this.attrs)||void 0===t?void 0:t.name)?this.value:void 0},getCompareValue:function(e,t){var n=this;if("fixed"===e)return t;if("form"===e){var i;if(Array.isArray(t)){var a=[];return t.forEach(function(e){void 0!==n.formData[e]&&a.push(n.formData[e])}),a}return(null===(i=this.formData)||void 0===i?void 0:i[t])||""}return t},compareValues:function(e,t,n){var i=null==e?"":String(e),a=null==t?"":String(t);switch(n){case"=":return i==a;case"!=":return i!==a;case"like":return i.includes(a);case">":return Number(i)>Number(a);case"<":return Number(i)<Number(a);case">=":return Number(i)>=Number(a);case"<=":return Number(i)<=Number(a);case"in":return Array.isArray(t)?t.includes(e):a.includes(i);default:return!1}},executeActions:function(e){var t=this;Array.isArray(e)&&0!==e.length&&e.forEach(function(e){var n=e.type,i=e.fields,a=e.setValueType,r=e.setFixedValue,o=e.setFormValue,s=e.message;
|
|
172
|
+
// 全局表单动作(走自己这一层)
|
|
173
|
+
["saveForm","saveAndCloseForm","closeForm","resetForm"].includes(n)?t.triggerGlobalFormEvent(n):
|
|
174
|
+
// ===================== 核心修改 =====================
|
|
175
|
+
// 直接执行当前组件自己的方法
|
|
176
|
+
"refreshData"!==n?"openModal"!==n?
|
|
177
|
+
// ====================================================
|
|
178
|
+
n&&Array.isArray(i)&&i.forEach(function(e){switch(n){case"show":t.updateCompProp(e,"visible",!0);break;case"hide":t.updateCompProp(e,"visible",!1);break;case"editable":t.updateCompProp(e,"disabled",!1),t.updateCompProp(e,"readonly",!1);break;case"required":t.updateCompProp(e,"required",!0);break;case"readonly":t.updateCompProp(e,"readonly",!0),t.updateCompProp(e,"disabled",!0);break;case"showError":t.showCompError(e,s||"操作失败!");break;case"setValue":t.setCompValue(e,a,r,o);break;case"refreshComponent":t.updateCompProp(e,"api.refresh",!0);break;default:console.warn("不支持的动作类型:".concat(n))}}):"function"==typeof t.openModal?t.openModal():console.warn("当前组件未实现 openModal 方法"):"function"==typeof t.refreshData?t.refreshData():console.warn("当前组件未实现 refreshData 方法")})},triggerGlobalFormEvent:function(e){var t,n=this.findParentFormComponent();n?"function"==typeof n[e]?n[e]({formData:this.formData,field:null===(t=this.attrs)||void 0===t?void 0:t.name,component:this}):console.warn("Form 组件未实现 ".concat(e," 方法")):console.warn("未找到外层 Form 组件,无法执行表单全局操作")},findParentFormComponent:function(){for(var e=this.$parent;e;){if(!0===e.isForm)return e;e=e.$parent}return null},restoreCompOriginState:function(e){var t=this;Array.isArray(e)&&0!==e.length&&e.forEach(function(e){var n=e.type,i=e.fields;n&&Array.isArray(i)&&i.forEach(function(e){switch(n){case"show":t.updateCompProp(e,"visible",!1);break;case"hide":t.updateCompProp(e,"visible",!0);break;case"editable":case"readonly":t.updateCompProp(e,"disabled",t.originCompConfig.disabled),t.updateCompProp(e,"readonly",t.originCompConfig.readonly);break;case"required":t.updateCompProp(e,"required",t.originCompConfig.required)}})})},updateCompProp:function(e,t,n){this.$emit("updateItem",{name:e,sjbName:null,key:t},n)},setCompValue:function(e,t,n,i){if("fixed"===t)this.updateFormData(e,n);else if("form"===t){var a;this.updateFormData(e,(null===(a=this.formData)||void 0===a?void 0:a[i])||"")}},showCompError:function(e,t){var n,i=this;this.$parent&&this.$parent.$refs.form?this.$parent.$refs.form.validateField(this.conf.value,function(){i.$message.error(t)}):(null===(n=this.$message)||void 0===n?void 0:n.error(t))||console.error(t)}}},W={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("van-form",{ref:"vantForm",attrs:{"validate-first":""},model:{value:e.formModel,callback:function(t){e.formModel=t},expression:"formModel"}},[n("van-nav-bar",{staticClass:"top-nav-bar",attrs:{title:e.conf.showName&&e.conf.name?e.sceneName+e.conf.name:"","left-arrow":""},on:{"click-left":e.onClickLeft}}),e._v(" "),e._t("default")],2)},staticRenderFns:[],name:"Form",mixins:[J],provide:function(){
|
|
179
|
+
// Vue 2 中 provide 是函数
|
|
180
|
+
return{formData:r.default.observable(this.formModel),
|
|
181
|
+
// 向子组件暴露当前 Form 实例
|
|
182
|
+
updateFormData:this.updateFormData}},props:{conf:{
|
|
183
|
+
// 表单数据对象
|
|
184
|
+
type:Object,required:!0},openType:{type:String},singleUploadList:{type:Array},multiplySingleUploadList:{type:Object},model:{type:Object,default:function(){
|
|
185
|
+
// 返回一个全新的空对象(每次组件实例化都会执行这个函数,得到独立的对象)
|
|
186
|
+
return{}}}},data:function(){return{isForm:!0,formModel:this.model,initialFormModel:JSON.stringify(this.model),formItems:[],
|
|
187
|
+
// 收集所有 FormItem 实例
|
|
188
|
+
ywid:"",back:!1,lastSubmitTime:0,
|
|
189
|
+
// 上次提交时间戳
|
|
190
|
+
submitInterval:1e3}},watch:{model:{handler:function(e,t){var n=this;Object.keys(this.formModel).forEach(function(e){r.default.delete(n.formModel,e)}),Object.keys(e).forEach(function(t){r.default.set(n.formModel,t,e[t])})},deep:!0}},computed:{saveUrl:function(){var e,t,n=this;return this.ywid?null===(e=this.conf.sceneList.filter(function(e){return"edit"==e.operationType})[0])||void 0===e?void 0:e.operationUrl:null===(t=this.conf.sceneList.filter(function(e){return e.operationType==n.conf.mode})[0])||void 0===t?void 0:t.operationUrl},sceneName:function(){return{add:"新增",edit:"修改",view:"查看"}[this.conf.mode]||"新增"}},methods:{onClickLeft:function(){var e=this;"view"==this.conf.mode?this.closeForm():this.$dialog.confirm({message:"是否保存到草稿箱?",confirmButtonText:"保存",cancelButtonText:"不保存,直接返回"}).then(function(){e.back=!0,e.saveHandler()}).catch(function(){
|
|
191
|
+
// 用户点击取消时的处理(可选)
|
|
192
|
+
e.closeForm()})},updateFormData:function(e,t){r.default.set(this.formModel,e,t),this.$emit("updateModel",e,t)},
|
|
193
|
+
// 注册 FormItem 实例
|
|
194
|
+
register:function(e){this.formItems.push(e)},
|
|
195
|
+
// 提交处理:触发整体校验
|
|
196
|
+
saveForm:function(){var e=this;this.$dialog.confirm({message:"保存此次编辑?",confirmButtonText:"保存",cancelButtonText:"不保存"}).then(function(){e.back=!1,e.saveHandler()})},saveHandler:function(){var e=this;this.$refs.vantForm.validate().then(function(){var t=e.convertVueFormToNativeFormData(g({},e.formModel));e.$toast.loading({forbidClick:!0,message:"保存中…"});try{
|
|
197
|
+
// 2. 转换 Vue 响应式 formData 为原生 FormData
|
|
198
|
+
//const nativeFormData = this.convertVueFormToNativeFormData(JSON.parse(JSON.stringify(this.formModel)));
|
|
199
|
+
e.ywid&&!e.formModel[e.conf.primaryKeyName]&&t.append(e.conf.primaryKeyName||"id",e.ywid),N({url:e.saveUrl,
|
|
200
|
+
// cache: false,
|
|
201
|
+
// contentType: false,
|
|
202
|
+
// processData: false,
|
|
203
|
+
method:"POST",data:t}).then(function(t){"add"==e.conf.mode&&(e.ywid=t.data),e.$toast.clear(),e.$toast.success("保存成功!"),e.back&&e.closeForm()}).catch(function(t){e.$toast.clear(),e.$toast.fail("保存失败!"),e.back=!1})}catch(t){e.$toast.fail("保存失败!")}}).catch(function(){e.$toast.fail("表单校验失败!")})},
|
|
204
|
+
// 提交处理:触发整体校验
|
|
205
|
+
saveAndCloseForm:function(){var e=this,t=Date.now();
|
|
206
|
+
// 检查是否在间隔时间内
|
|
207
|
+
t-this.lastSubmitTime<this.submitInterval?this.$toast.fail("请勿重复提交"):(
|
|
208
|
+
// 更新提交时间
|
|
209
|
+
this.lastSubmitTime=t,this.$refs.vantForm.validate().then(function(){var t=e.convertVueFormToNativeFormData(g({},e.formModel));e.$toast.loading({forbidClick:!0,message:"保存中…"}),e.ywid&&!e.formModel[e.conf.primaryKeyName]&&t.append(e.conf.primaryKeyName||"id",e.ywid),N({url:e.saveUrl,method:"POST",data:t}).then(function(t){e.$toast.clear(),e.$toast.success("提交成功!"),e.closeForm()}).catch(function(e){$.modal.msgError("提交失败!")})}).catch(function(){e.$toast.fail("表单校验失败!")}))},closeForm:function(){this.goBack?this.goBack():this.$router?this.$router.go(-1):window.history.back()},
|
|
210
|
+
// Form 组件的 methods 中替换 resetForm 方法
|
|
211
|
+
resetForm:function(){var e=this;try{var t;
|
|
212
|
+
// 1. 备份初始 model(在 data 初始化时保存,避免重置时丢失初始值)
|
|
213
|
+
// 2. 重置 Vue 响应式 formModel 到初始值(核心)
|
|
214
|
+
// 先清空现有数据,再深拷贝初始值
|
|
215
|
+
// 3. 重置 jQuery Validate 表单验证状态(清空错误提示)
|
|
216
|
+
if(Object.keys(this.formModel).forEach(function(t){r.default.delete(e.formModel,t)}),Object.assign(this.formModel,JSON.parse(this.initialFormModel)),this.$refs.cform){var n=$(this.$refs.cform).validate();n&&(
|
|
217
|
+
// 清空验证错误提示
|
|
218
|
+
n.resetForm(),
|
|
219
|
+
// 移除表单元素的错误样式(兼容 jQuery Validate 样式)
|
|
220
|
+
$(this.$refs.cform).find(".error").removeClass("error"),$(this.$refs.cform).find(".valid").removeClass("valid"))}
|
|
221
|
+
// 5. 提示重置成功
|
|
222
|
+
(null===(t=this.$message)||void 0===t?void 0:t.success("表单已重置"))||$.modal.msgSuccess("表单已重置")}catch(e){var i;(null===(i=this.$message)||void 0===i?void 0:i.error("表单重置失败"))||$.modal.msgError("表单重置失败")}},convertVueFormToNativeFormData:function(e){var t=this,n=[];for(var i in e)if(i.split("@").length>1){var a=C(i.split("@"),2),r=a[0];a[1];var o,s=A(e[i])?JSON.parse(e[i]):e[i];if(e[r]||(e[r]=[]),Array.isArray(s))(o=e[r]).push.apply(o,x(s));else e[r].push(s);delete e[i],-1==n.indexOf(r)&&n.push(r)}if(n.forEach(function(t){e[t]=JSON.stringify(e[t])}),this.multiplySingleUploadList)for(var l in this.multiplySingleUploadList)e[l]=JSON.stringify(e[l]);var c=new FormData;
|
|
223
|
+
// 遍历 Vue 响应式 formData,追加到原生 FormData
|
|
224
|
+
return Object.entries(e).forEach(function(e){var n=C(e,2),i=n[0],a=n[1],r=t.singleUploadList.filter(function(e){return e.name==i});r.length>0&&(a=A(a)?JSON.parse(a):a),
|
|
225
|
+
// 处理数组(如多选框、复选框的值)
|
|
226
|
+
Array.isArray(a)?a.forEach(function(e){null!=e&&c.append(i,r.length>0?t.getFile(r[0],e):e)}):null!=a&&
|
|
227
|
+
// 处理普通字段(排除 undefined/null)
|
|
228
|
+
c.append(i,r.length>0?t.getFile(r[0],a):a)}),c},getFile:function(e,t){for(var n=e.keyMap.path||"path",i=atob(t[n].split(",")[1]),a=t[n].split(",")[0].split(":")[1].split(";")[0],r=new ArrayBuffer(i.length),o=new Uint8Array(r),s=0;s<i.length;s++)o[s]=i.charCodeAt(s);var l=new Blob([r],{type:a});return new File([l],t[e.keyMap.name]||"file",{type:a})}}},G={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return"inputHidden"==e.conf.widget&&"preview"==e.mode?n("label",{staticClass:"form-item_label",staticStyle:{width:"auto"}},[n("span",{ref:"editableDiv",class:"preview"==e.mode?"editable":"",attrs:{contenteditable:!0},on:{input:e.handleUpdateLabel}},[e._v(e._s(e.conf.label))]),e._v(" "),e._t("default",null,{value:e.fieldValue,onUpdate:e.handleInput})],2):e._t("default",null,{value:e.fieldValue,onUpdate:e.handleInput})},staticRenderFns:[],inject:["formData","updateFormData"],
|
|
229
|
+
// 接收 Form 实例
|
|
230
|
+
props:{conf:{type:Object},mode:{type:String,default:"preview"},
|
|
231
|
+
// 错误提示信息(由外部传入或校验生成)
|
|
232
|
+
errorMsg:{type:String,default:""},formConf:{type:Object}},data:function(){return{tooltipInstance:null}},computed:g({
|
|
233
|
+
// 关联 Form.model 中当前字段的值(双向响应)
|
|
234
|
+
fieldValue:function(){return this.conf.name&&this.formData?this.formData[this.conf.name]:""}},t.mapState("user",["userInfo"])),mounted:function(){
|
|
235
|
+
//条件设置部分
|
|
236
|
+
//requiredCondition是否必填 查看模式时才需要判断
|
|
237
|
+
this.conf.requiredCondition&&"tjsz"==this.conf.requiredCondition.tjlxFlag&&this.setCondition(this.conf.requiredCondition,"required",!0),
|
|
238
|
+
//是否显示visibleCondition
|
|
239
|
+
this.conf.visibleCondition&&"tjsz"==this.conf.visibleCondition.tjlxFlag&&this.setCondition(this.conf.visibleCondition,"visible",!0),
|
|
240
|
+
//是否可编辑 editableCondition
|
|
241
|
+
this.conf.editableCondition&&"tjsz"==this.conf.editableCondition.tjlxFlag&&this.setCondition(this.conf.editableCondition,"readonly",!1)},methods:{handleUpdateLabel:function(){this.$emit("updateItem","label",this.$refs.editableDiv.innerText)},setCondition:function(e,t,n){
|
|
242
|
+
//字段控制来源类别 zdkzsxwDict conditionContextType : 当前用户:'USER';用户角色:'USER_ROLE';表单自身数据:'FORM_DATA';单位部门:'DEPT';工作流上下文:'WORKFLOW';
|
|
243
|
+
var i=e.conditionContextType,a=e.conditions;if("USER"==i){var r=a.field.split(".").length>1?a.field.split(".")[1]:a.field;this.userInfo&&a.usersx&&this.userInfo[a.usersx]==this.formData[r]?this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},n):"visible"==t&&this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},!n)}else if("DEPT"==i)this.userInfo&&this.userInfo.deptId&&a.length>0&&a.includes(this.userInfo.deptId)?this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},n):"visible"==t&&this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},!n);
|
|
244
|
+
//{"tjlxFlag":"tjsz","conditions":[{"0":true,"searchValue":null,"createBy":null,"createTime":"2024-01-29 11:00:00","updateBy":null,"updateTime":null,"remark":"数据资源管理人员","params":{},"roleId":"2024012900","roleName":"数据资源管理角色","roleKey":"sjzy_zygl","roleSort":"02","dataScope":"4","status":"0","delFlag":"0","flag":false,"menuIds":null,"deptIds":null,"admin":false}],"conditionContextType":"USER_ROLE"}
|
|
245
|
+
else if("USER_ROLE"==i){var o=a.map(function(e){return e.roleId});if(this.userInfo.roles&&this.userInfo.roles.length>0){for(var s=0;s<this.userInfo.roles.length;s++)if(o.includes(this.userInfo.roles[s].roleId))return void this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},n);this.$emit("updateItem",t,!n)}else"visible"==t&&this.$emit("updateItem",{name:this.conf.name,sjbName:null,key:t},!n)}},handleInput:function(e,t){
|
|
246
|
+
//console.log(newVal, 'handleInputform', this.conf.name)
|
|
247
|
+
// 同步 Input 回传的值到 Form.model 对应字段
|
|
248
|
+
this.conf.name?this.updateFormData(this.conf.name,e):t&&this.updateFormData(t,e)}}},H={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"form",staticClass:"sub-form",class:1==e.conf.collapse?"open-pane":""},[e.conf.hideLabel?e._e():n("div",{staticClass:"sub-title"},[2!=e.formConf.subRow||e.conf.icon?e._e():n("span",{staticClass:"blue-xian"}),e._v(" "),e.conf.icon?n("span",{staticClass:"icon",class:e.conf.icon}):e._e(),e._v(" "),n("span",{ref:"editableDiv",class:"preview"==e.mode?"editable title":"title",attrs:{contenteditable:"preview"==e.mode},on:{input:e.handleUpdateLabel}},[e._v(e._s(e.conf.label))]),e._v(" "),1==e.conf.collapse||2==e.conf.collapse?n("a",{staticClass:"arrow-right",on:{click:e.toggleCollapse}},[n("i",{staticClass:"fa fa-angle-right"})]):e._e()]),e._v(" "),n("div",{ref:"collapse",staticClass:"sub-con",class:1==e.conf.collapse?"collapse in":2==e.conf.collapse?"collapse":""},[e._t("default")],2)])},staticRenderFns:[],props:{mode:{type:String,default:"preview"},conf:{
|
|
249
|
+
// 表单数据对象
|
|
250
|
+
type:Object,required:!0},formConf:{type:Object}},data:function(){return{}},methods:{handleUpdateLabel:function(){this.$emit("updateItem","label",this.$refs.editableDiv.innerText)},toggleCollapse:function(){$(this.$refs.collapse).collapse("toggle"),$(this.$refs.form).toggleClass("open-pane")}}},K={props:{conf:{type:Object,default:function(){return{}}},attrs:{type:Object,default:function(){return{}}},value:{},
|
|
251
|
+
// 允许任意类型(包含数组)
|
|
252
|
+
mode:{type:String,default:"preview"}},
|
|
253
|
+
// 注入父组件提供的 formData(可设置默认值,防止未提供时报错)
|
|
254
|
+
inject:["formData","updateFormData"],
|
|
255
|
+
// 接收 Form 实例
|
|
256
|
+
data:function(){return{innerValue:this.displayValue}},watch:{
|
|
257
|
+
// 监听父组件传入的 value 变化,同步到 innerValue
|
|
258
|
+
value:{immediate:!0,
|
|
259
|
+
// 初始化时立即执行
|
|
260
|
+
handler:function(e){
|
|
261
|
+
// 核心修改:先判断是否为数组,是则转逗号连接字符串
|
|
262
|
+
if(Array.isArray(e))
|
|
263
|
+
// 数组非空则转逗号连接,空数组则置空(兼容默认值逻辑)
|
|
264
|
+
this.innerValue=e.length>0?e.join(","):this.conf.defaultValue||"";else{
|
|
265
|
+
// 原有逻辑:非数组时,空值用默认值,否则用原值
|
|
266
|
+
var t=""===e||null==e;this.innerValue=t?this.conf.defaultValue||"":e}}},
|
|
267
|
+
// 监听 conf.defaultValue 变化(可选,如需动态修改默认值)
|
|
268
|
+
"conf.defaultValue":function(e){
|
|
269
|
+
// 同步修改逻辑:先判断当前 value 类型
|
|
270
|
+
Array.isArray(this.value)?
|
|
271
|
+
// value 是数组时,只有数组为空才更新默认值
|
|
272
|
+
this.innerValue=this.value.length>0?this.value.join(","):e||"":(""===this.value||null===this.value||void 0===this.value)&&(this.innerValue=e||"")}},computed:{rules:function(){var e=this.conf.preReg,t=[];return"tel"==e?t.push({pattern:/^(0\d{2,3}-)?\d{7,8}$/g,message:"请输入正确的座机号码"}):"idCard"==e?t.push({pattern:/^\d{15}$|^\d{17}[\dXx]$/g,message:"请输入正确的15或18位身份证号"}):"email"==e?t.push({pattern:/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/g,message:"请输入正确的邮箱地址"}):"isChinese"==e?t.push({pattern:/^[\u4e00-\u9fa5]{0,}$/,message:"请输入汉字"}):"english"==e?t.push({pattern:/^[a-zA-Z]{0,}$/,message:"请输入英文字母"}):"url"==e?t.push({pattern:/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/,message:"请输入正确的网址"}):"port"==e?t.push({pattern:/^([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/,message:"请输入正确的端口号"}):"plateNumber"==e?t.push({pattern:/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/,message:"请输入正确的车牌号"}):"zinteger"==e?t.push({pattern:/^([1-9]\d*|[0]{1,1})$/,message:"请输入非负整数"}):"floatNumber"==e?t.push({pattern:/^(([1-9]\d*)|0)(\.\d{1,2})?$/,message:"请输入最多2位小数的正数"}):"floatNumberOne"==e?t.push({pattern:/^(([1-9]\d*)|0)(\.\d{1,1})?$/,message:"请输入最多1位小数的正数"}):"password"==e?t.push({pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,14}$/,message:"请输入包含大小写字母、数字、特殊符号的8位-14位密码"}):"password1"==e?t.push({pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/,message:"请输入至少8位,包含大小写字母和数字的密码"}):"password2"==e?t.push({pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,message:"请输入至少8位,大小写字母、数字、特殊字符各至少一个的密码"}):"password3"==e&&t.push({pattern:/^(?!.*(.{2,}).*\1)[a-zA-Z0-9~!@#$%^&*()_+`\-={}:";'<>?,./]{12,}$/,message:"请输入至少12位,不允许连续重复字符的密码"}),this.attrs.required&&t.push({required:!0,message:"必填项",trigger:"blur"}),t},displayValue:function(){
|
|
273
|
+
// 核心修改:计算属性同步支持数组转逗号连接
|
|
274
|
+
return Array.isArray(this.value)?this.value.length>0?this.value.join(","):this.conf.defaultValue||"":""===this.value||null===this.value||void 0===this.value?this.conf.defaultValue||"":this.value}}},Z={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:"view"==e.mode?[]:e.rules},on:{input:e.handleChange,clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1))},staticRenderFns:[],mixins:[K,J],computed:{filterAttrs:function(){var e=h({},(m(this.attrs),this.attrs)),t=this.conf,n=t.preReg,i=t.widget,a=t.clearable;e.type="password"==i?"password":"inputNumber"==i?"number":"textarea"==i?"textarea":"text";var r={mobile:"tel",integer:"digit"};return n&&r[n]&&(e.type=r[n]),e.maxlength&&(e.showWordLimit=!0),a&&(e.disabled||e.readonly)&&(e.clearable=!0),"view"==this.mode&&(e.readonly=!0),"form-control"==e.class&&(e.class=""),e}},methods:{handleChange:function(e){this.$emit("input",this.innerValue)},handleClear:function(){this.innerValue="",this.$emit("input",this.innerValue)}}},Y=function(){
|
|
275
|
+
/**
|
|
276
|
+
* 主数据获取方法
|
|
277
|
+
* @param {Object} config - 完整配置对象
|
|
278
|
+
* @returns {Promise<Array>} - 标准化后的数据数组
|
|
279
|
+
*/
|
|
280
|
+
return d(function e(t,n){c(this,e),this.http=t,this.socket=null},[{key:"fetch",value:(t=l(b().m(function e(t,n){var i,a,r,o,s=arguments;return b().w(function(e){for(;;)switch(e.p=e.n){case 0:if(i=s.length>2&&void 0!==s[2]?s[2]:[],e.p=1,!t){e.n=5;break}return e.p=2,e.n=3,this.fetchApiData(t,n,i);case 3:return a=e.v,e.a(2,a);case 4:e.p=4,r=e.v,console.error("动态数据获取失败,回退到静态数据:",r);
|
|
281
|
+
// 动态数据失败时继续尝试静态数据
|
|
282
|
+
case 5:e.n=7;break;case 6:throw e.p=6,o=e.v,console.error("[DataFetcher] 数据获取失败:",o),o;case 7:return e.a(2)}},e,this,[[2,4],[1,6]])})),function(e,n){return t.apply(this,arguments)})},{key:"fetchApiData",value:(e=l(b().m(function e(t,n,i){var a;return b().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.http({method:i,url:t,data:n,timeout:1e4});case 1:return a=e.v,e.a(2,0===a.code?a.data||a.rows:a)}},e,this)})),function(t,n,i){return e.apply(this,arguments)})},{key:"normalizeData",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!e)return[];if(Array.isArray(e))return e.map(function(e,i){for(
|
|
283
|
+
// 应用字段映射
|
|
284
|
+
var a={},r=0;r<n.length;r++){var o=n[r];a[o.target]=t.getValueFromSource(e,o)}return a});var i=[];return n.forEach(function(n){var a={id:n.id,name:n.name||n.sourcelabel,unit:n.unit||""};a.value=t.getValueFromSource(e,n),i.push(a)}),i}
|
|
285
|
+
// === 辅助方法 ===
|
|
286
|
+
},{key:"getValueFromSource",value:function(e,t){var n=t.source,i=t.formatter,a=t.params,r=e[n];return i&&this.executeModuleFunction(i,r,a||"")||r;
|
|
287
|
+
// if (typeof source === 'function') {
|
|
288
|
+
// return source(item);
|
|
289
|
+
// }
|
|
290
|
+
// if (typeof source === 'string') {
|
|
291
|
+
// // 支持嵌套路径如 'user.name'
|
|
292
|
+
// return source.split('.').reduce((obj, key) => obj?.[key], item);
|
|
293
|
+
// }
|
|
294
|
+
// return item[source];
|
|
295
|
+
}},{key:"generateId",value:function(e,t){
|
|
296
|
+
// 尝试常见ID字段
|
|
297
|
+
return e.id||e._id||e.key||"item-".concat(t,"-").concat(Date.now())}},{key:"formatTime",value:function(e){var t=new Date(e);return"".concat(t.getFullYear(),"-").concat((t.getMonth()+1).toString().padStart(2,"0"),"-").concat(t.getDate().toString().padStart(2,"0"))}},{key:"executeModuleFunction",value:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];var a;return"function"==typeof formatterUtils[e]?(a=formatterUtils)[e].apply(a,n):(console.error("函数 ".concat(e," 未定义")),n[0])}}]);var e,t}(),Q="undefined"!=typeof __API_PROXY_TARGET__?__API_PROXY_TARGET__:window.location.origin,X="".concat(Q,"/"),ee={props:{conf:{type:Object,default:function(){return{}}},attrs:{type:Object,default:function(){return{}}},value:{},mode:{type:String,default:"preview"}},
|
|
298
|
+
// 2. 注入父组件提供的 formData(可设置默认值,防止未提供时报错)
|
|
299
|
+
inject:["formData","updateFormData"],
|
|
300
|
+
// 接收 Form 实例
|
|
301
|
+
data:function(){return{dataFetcher:null,datalist:null,loading:!1,baseURL:X,innerValue:this.displayValue}},watch:{"conf.api":{deep:!0,handler:function(e,t){var n;"page"!==e.fhType&&((null!==(n=this.conf.api)&&void 0!==n&&n.url&&e.url!==t.url||1==e.refresh)&&this.refreshData(),void 0!==e.refresh&&this.$emit("updateItem",{name:this.attrs.name,sjbName:null,key:"api.refresh"},!1))}},
|
|
302
|
+
// 监听父组件传入的 value 变化,同步到 innerValue
|
|
303
|
+
value:{immediate:!0,
|
|
304
|
+
// 初始化时立即执行
|
|
305
|
+
handler:function(e){
|
|
306
|
+
// 核心修改:先判断是否为数组,是则转逗号连接字符串
|
|
307
|
+
if(Array.isArray(e))
|
|
308
|
+
// 数组非空则转逗号连接,空数组则置空(兼容默认值逻辑)
|
|
309
|
+
this.innerValue=e.length>0?e.join(","):this.conf.defaultValue||"";else{
|
|
310
|
+
// 原有逻辑:非数组时,空值用默认值,否则用原值
|
|
311
|
+
var t=""===e||null==e;this.innerValue=t?this.conf.defaultValue||"":e}}},
|
|
312
|
+
// 监听 conf.defaultValue 变化(可选,如需动态修改默认值)
|
|
313
|
+
"conf.defaultValue":function(e){
|
|
314
|
+
// 同步修改逻辑:先判断当前 value 类型
|
|
315
|
+
Array.isArray(this.value)?
|
|
316
|
+
// value 是数组时,只有数组为空才更新默认值
|
|
317
|
+
this.innerValue=this.value.length>0?this.value.join(","):e||"":(""===this.value||null===this.value||void 0===this.value)&&(this.innerValue=e||"")}},computed:g(g({},t.mapState("user",["userInfo"])),{},{displayValue:function(){
|
|
318
|
+
// 核心修改:计算属性同步支持数组转逗号连接
|
|
319
|
+
return Array.isArray(this.value)?this.value.length>0?this.value.join(","):this.conf.defaultValue||"":""===this.value||null===this.value||void 0===this.value?this.conf.defaultValue||"":this.value}}),methods:{
|
|
320
|
+
// 数据操作
|
|
321
|
+
refreshData:function(){var e=this;return l(b().m(function t(){var n,i;return b().w(function(t){for(;;)switch(t.p=t.n){case 0:if(e.conf.api.url){t.n=1;break}return t.a(2);case 1:return e.loading=!0,e.error=null,t.p=2,t.n=3,e.dataFetcher.fetch(e.conf.api.url,e.getParams(e.conf.api.paramsList),e.conf.api.method||"get");case 3:n=t.v,e.datalist=n,e.refreshCallback(),t.n=5;break;case 4:t.p=4,i=t.v,e.error=i;case 5:return t.p=5,e.loading=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},updateCallback:function(e){var t,n=this;if(null==e&&(e=JSON.parse(JSON.stringify(this.datalist))),this.conf.api.mappings)if(function(e){
|
|
322
|
+
// 第一步:排除非对象、null、数组
|
|
323
|
+
if(null===e||"object"!==T(e)||Array.isArray(e))return!1;
|
|
324
|
+
// 第二步:判断原型是否为 Object.prototype(排除 Date、RegExp 等)
|
|
325
|
+
var t=Object.getPrototypeOf(e);return t===Object.prototype||null===t;// 兼容 Object.create(null)
|
|
326
|
+
}(e))this.conf.api.mappings.forEach(function(t){void 0!==e[t.field]&&n.updateFormData(t.name,e[t.field])});else if(t=e,"[object Array]"===Object.prototype.toString.call(t)){var i=this.conf.separator||",",a=e.length>0?e[0]:{};this.conf.api.mappings.forEach(function(t){var r,o="";n.attrs.multiple?o=e.filter(function(e){return void 0!==e[t.field]&&null!==e[t.field]}).map(function(e){return e[t.field]}).join(i):
|
|
327
|
+
// 单选:取第一个元素的指定 field 值
|
|
328
|
+
o=null!==(r=a[t.field])&&void 0!==r?r:"";
|
|
329
|
+
// 按 mappings 的 name 更新 innerValue 对象
|
|
330
|
+
null!=o&&(t.name==n.attrs.name&&(n.innerValue=o),n.updateFormData(t.name,o))})}else this.innerValue=e,this.$emit("input",this.innerValue)},getParams:function(e){var t=this,n={};
|
|
331
|
+
// 解析 paramsList 中的动态占位符
|
|
332
|
+
return e.forEach(function(e){if(e.value&&"string"==typeof e.value){var i=e.value.match(/\$\{(\w+)\}/),a=e.value.match(/\#\{(\w+)\}/);if(i){var r=i[1];// 如 xmbh
|
|
333
|
+
// 从注入的 formData 中获取真实值
|
|
334
|
+
e.type&&"string"==e.type?n[e.name]=e.value.replace(/\$\{(\w+)\}/g,function(e,n){var i=t.formData[n];
|
|
335
|
+
// 强制转字符串,null/undefined 变成空串
|
|
336
|
+
return null==i||""===i?"":"'".concat(String(i),"'");
|
|
337
|
+
// 非空 → 加单引号
|
|
338
|
+
}):n[e.name]=t.formData[r]}else if(a){
|
|
339
|
+
//系统内置属性
|
|
340
|
+
var o=a[1];// 如 xmbh
|
|
341
|
+
// 从注入的 formData 中获取真实值
|
|
342
|
+
n[e.name]=t.userInfo[o]||""}else n[e.name]=e.value}}),n},buildUrl:function(e,t){
|
|
343
|
+
// 处理空参数的情况
|
|
344
|
+
if(e=e.replace(/\/\//g,"/"),!t||0===Object.keys(t).length)return e;
|
|
345
|
+
// 创建URLSearchParams实例,自动处理参数编码
|
|
346
|
+
for(var n=new URLSearchParams,i=0,a=Object.entries(t);i<a.length;i++){var r=C(a[i],2),o=r[0],s=r[1];
|
|
347
|
+
// 过滤掉值为undefined/null的参数(可选,根据需求调整)
|
|
348
|
+
null!=s&&n.append(o,s)}
|
|
349
|
+
// 拼接参数:判断基础URL是否已有?,避免重复拼接
|
|
350
|
+
var l=n.toString();return e+(e.includes("?")?"&":"?")+l},reset:function(){},openModal:function(){var e=this;this.conf.api.url&&$.modal.open("选择",this.buildUrl(this.baseURL+this.conf.api.url,this.getParams(this.conf.api.paramsList)),.8*window.innerWidth,.8*window.innerHeight,function(t,n){var i=n.find("iframe")[0].contentWindow.$("#bootstrap-table").bootstrapTable("getSelections");0!=i.length?(e.updateCallback(i),layer.close(t)):$.modal.alertWarning(e.attrs.multiple?"请至少选择一行记录":"请选择一行记录")})}},created:function(){this.dataFetcher=new Y(N)}},te={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"text-combination",class:[e.conf.size,e.conf.align,e.conf.weight?"fb":"",e.isEmpty&&"preview"==!e.mode?"empty-content":""].concat(e.conf.border&&e.conf.border.length>0?e.conf.border:[])},[e.loading?n("div",{staticClass:"loading"},[n("div",{staticClass:"spinner"}),e._v(" "),n("p",[e._v("正在加载数据...")])]):e.error?n("div",{staticClass:"error"},[n("div",{staticClass:"error-icon"},[e._v("!")]),e._v(" "),n("p",{staticClass:"error-message"},[e._v(e._s(e.error))]),e._v(" "),n("button",{staticClass:"refresh-btn",on:{click:e.refresh}},[e._v("重试")])]):n("div",[n("p",{staticClass:"content",domProps:{innerHTML:e._s(e.processedContent)}}),e._v(" "),e.isEmpty&&"view"!==e.mode?n("div",{staticClass:"empty-state"},[e._v("请在组件配置中添加文本组合控件内容")]):e._e()])])},staticRenderFns:[],mixins:[ee,J],data:function(){return{loading:!1,error:null,variableData:null,processedContent:""}},computed:{
|
|
351
|
+
// 判断是否为空状态
|
|
352
|
+
isEmpty:function(){return!this.conf.textContent&&!this.processedContent},
|
|
353
|
+
// 获取所有变量
|
|
354
|
+
variables:function(){return this.extractVariables(this.conf.textContent)}},watch:{"conf.textContent":{handler:function(){this.processText(),this.replaceVariables(this.datalist)},immediate:!0},"conf.api":{handler:function(){this.refreshData()},immediate:!0}},methods:{
|
|
355
|
+
// 提取文本中的变量 ${variable}
|
|
356
|
+
extractVariables:function(e){if(!e)return[];for(var t,n=/\$\{([^}]+)\}/g,i=[];null!==(t=n.exec(e));)i.push(t[1]);return x(new Set(i));// 去重
|
|
357
|
+
},refreshCallback:function(){this.replaceVariables(this.datalist)},
|
|
358
|
+
// 处理文本内容
|
|
359
|
+
processText:function(){if(this.conf.textContent){if(0!==this.extractVariables(this.conf.textContent).length)
|
|
360
|
+
// 如果有变量但没有API配置,显示错误
|
|
361
|
+
return this.conf.api&&this.conf.api.url?void 0:(this.error="配置错误:包含变量但未配置API接口",void(this.processedContent=this.conf.textContent));this.processedContent=this.conf.textContent}
|
|
362
|
+
// 如果没有变量,直接显示原始文本
|
|
363
|
+
else this.processedContent=""},
|
|
364
|
+
// 替换文本中的变量
|
|
365
|
+
replaceVariables:function(e){var t=this;if(e&&"object"===T(e)){var n=this.conf.textContent;
|
|
366
|
+
// 替换所有变量
|
|
367
|
+
this.variables.forEach(function(i){var a=new RegExp("\\$\\{".concat(i,"\\}"),"g"),r=t.getNestedValue(e,i);void 0!==r&&(n=n.replace(a,t.formatValue(r)))}),this.processedContent=n}else this.processedContent=this.conf.textContent},
|
|
368
|
+
// 获取嵌套对象的值
|
|
369
|
+
getNestedValue:function(e,t){if(t){var n,i=e,a=f(t.split("."));try{for(a.s();!(n=a.n()).done;){var r=n.value;if(!i||!i.hasOwnProperty(r))return;i=i[r]}}catch(e){a.e(e)}finally{a.f()}return i}},
|
|
370
|
+
// 格式化变量值
|
|
371
|
+
formatValue:function(e){return null==e?"":
|
|
372
|
+
// 格式化日期
|
|
373
|
+
e instanceof Date||"number"==typeof e?e.toLocaleString():
|
|
374
|
+
// 格式化对象
|
|
375
|
+
"object"===T(e)?JSON.stringify(e):String(e)},
|
|
376
|
+
// 刷新数据
|
|
377
|
+
refresh:function(){this.refreshData()},
|
|
378
|
+
// 处理值变化
|
|
379
|
+
handleChange:function(e){this.$emit("input",e)}}},ne={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("input",e._b({domProps:{value:e.innerValue},on:{change:e.handleChange}},"input",e.attrs,!1))},staticRenderFns:[],mixins:[K,J],methods:{handleChange:function(e){this.innerValue=e.target.value,this.$emit("input",this.innerValue)}},watch:{innerValue:function(e){this.$emit("input",e)}}};
|
|
380
|
+
// 根据字典类型查询字典数据信息
|
|
381
|
+
function ie(e,t){var n=e.split("/")[0];return N({url:"/sjyy/sjczgl/form/bdgl/config/getFormDictData",data:{dictType:n,dictLylx:t||e.split("/")[1]||"sys"},method:"post"})}var ae={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return"view"===e.mode?n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label},model:{value:e.innerValueLabel,callback:function(t){e.innerValueLabel=t},expression:"innerValueLabel"}},"van-field",e.filterAttrs,!1)):n("div",[n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":function(t){e.showPicker=!0}},model:{value:e.innerValueLabel,callback:function(t){e.innerValueLabel=t},expression:"innerValueLabel"}},"van-field",e.filterAttrs,!1)),e._v(" "),n("van-popup",{staticClass:"select-popup",style:{height:e.attrs.multiple?"40%":"auto"},attrs:{position:"bottom","get-container":"#myForm",closeable:""},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[n("div",{staticClass:"custom-picker-container flex flex-column h100"},[n("van-sticky",{staticClass:"w100"},[n("van-nav-bar",{attrs:{title:"选择"+e.conf.label,border:!1}})],1),e._v(" "),e.attrs.multiple?n("div",{staticClass:"popup-body scroll-wrap"},[n("div",{staticClass:"option-list",class:e.attrs.multiple?"multiple-select":"single-select"},e._l(e.selectOptions,function(t){return n("div",{key:t.value,staticClass:"option-item ",class:e.checkedValues.includes(t.value)?"active":"",on:{click:function(n){return e.handleItemClick(t.value)}}},[n("span",[e._v(e._s(t.label))]),e._v(" "),e.checkedValues.includes(t.value)&&e.attrs.multiple?n("van-icon",{attrs:{name:"success"}}):e._e()],1)}),0)]):n("van-picker",{ref:"myPicker",attrs:{columns:e.selectOptions,"value-key":"label"}}),e._v(" "),n("div",{staticClass:"bottom-btn"},[n("van-button",{attrs:{type:"primary",round:"",block:"",icon:"checked"},on:{click:e.onConfirm}},[e._v("确认")])],1)],1)])],1)},staticRenderFns:[],mixins:[K,J],data:function(){return{selectOptions:[],showPicker:!1,checkedValues:[]}},watch:{
|
|
382
|
+
// 监听静态选项变化
|
|
383
|
+
"conf.options":{immediate:!0,handler:function(e){"static"===this.conf.dataType&&(this.selectOptions=Array.isArray(e)?e:[])},deep:!0},
|
|
384
|
+
// 监听字典标识变化
|
|
385
|
+
"conf.dict":{immediate:!0,handler:function(e){"dict"===this.conf.dataType&&e&&this.loadDictData(e,this.conf.dictLylx)}}},computed:{filterAttrs:function(){var e=h({},(m(this.attrs),this.attrs)),t=this.conf.clearable;return e.maxlength&&(e.showWordLimit=!0),t&&(e.clearable=!0),"form-control"==e.class&&(e.class=""),e},columns:function(){return this.selectOptions.map(function(e){return{text:e.label,value:e.value}})},innerValueLabel:function(){var e,t=this;
|
|
386
|
+
// 单选
|
|
387
|
+
if(!this.attrs.multiple)return this.innerValue&&(null===(e=this.selectOptions.find(function(e){return e.value===t.innerValue}))||void 0===e?void 0:e.label)||"";
|
|
388
|
+
// 多选:拼接所有选中的label
|
|
389
|
+
if(this.attrs.multiple&&this.innerValue){var n=Array.isArray(this.innerValue)?this.innerValue:this.innerValue.toString().split(",");return this.selectOptions.filter(function(e){return n.includes(e.value)}).map(function(e){return e.label}).join(",")}return""}},created:function(){"dict"===this.conf.dataType&&this.conf.dict?this.loadDictData(this.conf.dict,this.conf.dictLylx):this.conf.dataType},methods:{
|
|
390
|
+
// 加载字典数据
|
|
391
|
+
loadDictData:function(e,t){var n=this;return l(b().m(function i(){var a,r;return b().w(function(i){for(;;)switch(i.p=i.n){case 0:return i.p=0,i.n=1,ie(e,t);case 1:a=i.v,n.selectOptions=(a.rows||a.data||[]).map(function(e){return{value:e.dictValue,label:e.dictLabel,id:e.dictType+e.dictCode}}),i.n=3;break;case 2:i.p=2,r=i.v,console.error("加载字典数据失败:",r),n.selectOptions=[];case 3:return i.a(2)}},i,null,[[0,2]])}))()},onConfirm:function(){if(this.attrs.multiple)this.innerValue=this.checkedValues.join(","),this.$emit("input",this.checkedValues);else{var e=this.$refs.myPicker.getColumnValue(0);this.innerValue=e?e.value:"",this.$emit("input",this.innerValue)}this.showPicker=!1},handleItemClick:function(e){this.checkedValues.includes(e)?this.checkedValues.splice(this.checkedValues.indexOf(e),1):this.checkedValues.push(e)}}},re={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("van-field",{class:e.attrs.class,attrs:{label:e.conf.hideLabel?"":e.conf.label,name:e.attrs.name,rules:e.rules},scopedSlots:e._u([{key:"input",fn:function(){return[n("van-radio-group",{attrs:{direction:"horizontal",disabled:e.attrs.readonly||e.attrs.disabled},on:{change:e.handleChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},e._l(e.selectOptions,function(t){return n("van-radio",{key:t.value,attrs:{name:t.value}},[e._v(e._s(t.label))])}),1)]},proxy:!0}])})},staticRenderFns:[],mixins:[K,J],data:function(){return{selectOptions:[]}},watch:{
|
|
392
|
+
// 监听静态选项变化
|
|
393
|
+
"conf.options":{immediate:!0,handler:function(e){"static"===this.conf.dataType&&(this.selectOptions=Array.isArray(e)?e:[])},deep:!0},
|
|
394
|
+
// 监听字典标识变化
|
|
395
|
+
"conf.dict":{immediate:!0,handler:function(e){"dict"===this.conf.dataType&&e&&this.loadDictData(e,this.conf.dictLylx)}}},methods:{
|
|
396
|
+
// 加载字典数据
|
|
397
|
+
loadDictData:function(e,t){var n=this;return l(b().m(function i(){var a,r;return b().w(function(i){for(;;)switch(i.p=i.n){case 0:return i.p=0,i.n=1,ie(e,t);case 1:a=i.v,n.selectOptions=(a.rows||a.data||[]).map(function(e){return{value:e.dictValue,label:e.dictLabel,id:e.dictType+e.dictCode}}),i.n=3;break;case 2:i.p=2,r=i.v,console.error("加载字典数据失败:",r),n.selectOptions=[];case 3:return i.a(2)}},i,null,[[0,2]])}))()},handleChange:function(){this.$emit("input",this.innerValue)}}},oe={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("van-field",{attrs:{label:e.conf.hideLabel?"":e.conf.label,name:e.attrs.name,rules:e.rules},scopedSlots:e._u([{key:"input",fn:function(){return[n("van-checkbox-group",{attrs:{direction:"horizontal",disabled:e.attrs.readonly||e.attrs.disabled},on:{change:e.handleChange},model:{value:e.arrayValue,callback:function(t){e.arrayValue=t},expression:"arrayValue"}},e._l(e.selectOptions,function(t){return n("van-checkbox",{key:t.value,attrs:{name:t.value,shape:"square"}},[e._v(e._s(t.label))])}),1)]},proxy:!0}])})},staticRenderFns:[],mixins:[K,J],data:function(){return{selectOptions:[],arrayValue:this.innerValue?Array.isArray(this.innerValue)?this.innerValue:this.innerValue.split(","):[]}},watch:{
|
|
398
|
+
// 监听静态选项变化
|
|
399
|
+
"conf.options":{immediate:!0,handler:function(e){"static"===this.conf.dataType&&(this.selectOptions=Array.isArray(e)?e:[])},deep:!0},
|
|
400
|
+
// 监听字典标识变化
|
|
401
|
+
"conf.dict":{immediate:!0,handler:function(e){"dict"===this.conf.dataType&&e&&this.loadDictData(e,this.conf.dictLylx)}}},created:function(){"dict"===this.conf.dataType&&this.conf.dict?this.loadDictData(this.conf.dict,this.conf.dictLylx):this.conf.dataType},methods:{
|
|
402
|
+
// 加载字典数据
|
|
403
|
+
loadDictData:function(e,t){var n=this;return l(b().m(function i(){var a,r;return b().w(function(i){for(;;)switch(i.p=i.n){case 0:return i.p=0,i.n=1,ie(e,t);case 1:a=i.v,n.selectOptions=(a.rows||a.data||[]).map(function(e){return{value:e.dictValue,label:e.dictLabel,id:e.dictType+e.dictCode}}),i.n=3;break;case 2:i.p=2,r=i.v,console.error("加载字典数据失败:",r),n.selectOptions=[];case 3:return i.a(2)}},i,null,[[0,2]])}))()},handleChange:function(){this.$emit("input",this.arrayValue)}}},se=["class"],le={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.filterAttrs.readonly||e.filterAttrs.disabled?n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)):n("div",[n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":function(t){e.showPicker=!0},clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)),e._v(" "),n("van-popup",{staticClass:"select-popup",attrs:{position:"bottom","get-container":"#myForm",closeable:""},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[n("van-sticky",[n("van-nav-bar",{attrs:{title:e.pickerTitle,border:!1}})],1),e._v(" "),n("van-datetime-picker",{class:"date-time-picker-"+e.conf.datetype,attrs:{type:e.dateType,"show-toolbar":!1,formatter:e.formatterDateTime},model:{value:e.currentDateTime,callback:function(t){e.currentDateTime=t},expression:"currentDateTime"}}),e._v(" "),n("div",{staticClass:"bottom-btn"},[n("van-button",{attrs:{type:"primary",round:"",block:""},on:{click:e.onConfirm}},[e._v("确认")])],1)],1)],1)},staticRenderFns:[],mixins:[K,J],data:function(){return{showPicker:!1,currentDateTime:this.syncCurrentDateTime(this.innerValue)}},computed:{filterAttrs:function(){var e=this.attrs;e.class;var t=y(e,se);return this.conf.clearable&&(t.clearable=!0),"view"==this.mode&&(t.readonly=!0),"form-control"==t.class&&(t.class=""),t},pickerTitle:function(){var e=this.conf.datetype;return"date"==e?"选择日期":"datetime"==e||"time"==e?"选择时间":"month"==e?"选择月份":"year"==e?"选择年":"选择日期"},dateType:function(){var e=this.conf.datetype;return"date"==e||"datetime"==e||"time"==e?e:"month"==e||"year"==e?"year-month":void 0},format:function(){return this.conf.format.replace(/y/g,"Y").replace(/d/g,"D")}},watch:{dateType:{handler:function(e,t){"time"==t&&(this.innerValue=""),"time"!=e&&"time"!=t||(this.currentDateTime=this.syncCurrentDateTime(this.innerValue))},immediate:!0}},methods:{handleChange:function(){this.$emit("input",this.innerValue)},onConfirm:function(){var e=this.dateType;this.innerValue="time"===e?2==this.currentDateTime.split(":").length?this.currentDateTime+":00":this.currentDateTime:this.$dayjs(this.currentDateTime).format(this.format),this.handleChange(),this.showPicker=!1},formatterDateTime:function(e,t){return"year"===e?t+"年":"month"===e?t+"月":"day"===e?t+"日":"hour"===e?t+"时":"minute"===e?t+"分":"second"===e?t+"秒":void 0},handleClear:function(){this.innerValue="",this.$emit("input",this.innerValue)},
|
|
404
|
+
// 统一同步时间(核心方法,不管是值变还是类型变都走这里)
|
|
405
|
+
syncCurrentDateTime:function(e){var t=this.dateType;return e?"time"===t?e:new Date(e):"time"===t?"00:00":new Date}}},ce=["class"],ue={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.filterAttrs.readonly||e.filterAttrs.disabled?n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)):n("div",[n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":function(t){e.showPicker=!0},clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)),e._v(" "),n("van-calendar",{staticClass:"select-popup",attrs:{type:"range","get-container":"#myForm",title:"日期范围选择","allow-same-day":!0,"min-date":e.minDate,color:"#1989fa"},on:{confirm:e.onConfirm},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}})],1)},staticRenderFns:[],mixins:[K,J],data:function(){return{startValue:"",
|
|
406
|
+
// 开始时间值
|
|
407
|
+
endValue:"",
|
|
408
|
+
// 结束时间值
|
|
409
|
+
showPicker:!1,startFieldName:"",endFieldName:"",minDate:new Date(2e3,0,1)}},watch:{
|
|
410
|
+
// 监听父组件传值变化,拆分赋值
|
|
411
|
+
innerValue:{immediate:!0,
|
|
412
|
+
// 初始化时立即执行
|
|
413
|
+
handler:function(e){this.parseValueToStartEnd(e)}},"attrs.name":{handler:function(){this.parseNameToFields()}}},computed:{filterAttrs:function(){var e=this.attrs;e.class;var t=y(e,ce);return this.conf.clearable&&(t.clearable=!0),"view"==this.mode&&(t.readonly=!0),"form-control"==t.class&&(t.class=""),t},format:function(){return this.conf.format.replace(/y/g,"Y").replace(/d/g,"D")}},mounted:function(){
|
|
414
|
+
// 初始化时先解析默认值(优先级:value > conf.defaultValue)
|
|
415
|
+
var e=this.value||this.conf.defaultValue||"";this.parseValueToStartEnd(e)},methods:{parseNameToFields:function(){var e=this.conf.separator||"-";if(!nameStr)return this.startFieldName="",void(this.endFieldName="");var t=C(this.attrs.name.split(e),2),n=t[0],i=t[1];this.startFieldName=n||"",this.endFieldName=i||""},
|
|
416
|
+
// 解析 - 分隔的字符串为开始/结束时间
|
|
417
|
+
parseValueToStartEnd:function(e){if(!e||"string"!=typeof e)return this.startValue="",void(this.endValue="");
|
|
418
|
+
// 兼容 laydate 默认的 " - " 分隔(空格+横杠+空格)和纯 "-" 分隔
|
|
419
|
+
var t="",n="";if(e.includes(" - ")){
|
|
420
|
+
// laydate 原生返回的分隔符格式
|
|
421
|
+
var i=C(e.split(" - "),2);t=i[0],n=i[1]}else{// yyyy-MM-dd 长度为10
|
|
422
|
+
e.length>=20?(t=e.substring(0,10),n=e.substring(11)):10===e.length&&(
|
|
423
|
+
// 只有单个日期的情况
|
|
424
|
+
t=e,n="")}this.startValue=t||"",this.endValue=n||""},
|
|
425
|
+
// 拼接开始/结束时间为 - 分隔的字符串
|
|
426
|
+
joinStartEndToValue:function(){return this.startValue&&this.endValue?"".concat(this.startValue," - ").concat(this.endValue):"";
|
|
427
|
+
// 统一输出为 - 分隔(无空格)
|
|
428
|
+
},handleClear:function(){this.innerValue="",this.$emit("input",this.innerValue)},handleChange:function(e){this.innerValue=this.joinStartEndToValue(),this.$emit("input",this.innerValue),this.$emit("input",this.startValue,this.startFieldName),this.$emit("input",this.endValue,this.endFieldName)},onConfirm:function(e){this.startValue=this.$dayjs(e[0]).format(this.format),this.endValue=this.$dayjs(e[1]).format(this.format),this.handleChange(),this.showPicker=!1}}},de={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return"view"===e.mode?n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label},model:{value:e.showText,callback:function(t){e.showText=t},expression:"showText"}},"van-field",e.filterAttrs,!1)):n("div",[n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{clear:e.handleClear,"click-right-icon":function(t){e.showPicker=!0}},model:{value:e.showText,callback:function(t){e.showText=t},expression:"showText"}},"van-field",e.filterAttrs,!1)),e._v(" "),n("van-popup",{staticClass:"select-popup",staticStyle:{height:"40%"},attrs:{position:"bottom","get-container":"#myForm"},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[n("div",{staticClass:"custom-picker-container"},[n("van-cascader",{staticClass:"flex-item",attrs:{title:"请选择",options:e.treeOptions,"active-color":"#1989fa"},on:{close:function(t){e.showPicker=!1},finish:e.onFinish}})],1)])],1)},staticRenderFns:[],mixins:[ee,J],data:function(){return{showPicker:!1,showText:""}},computed:{filterAttrs:function(){var e=h({},(m(this.attrs),this.attrs)),t=this.conf.clearable;return e.maxlength&&(e.showWordLimit=!0),t&&(e.clearable=!0),"form-control"==e.class&&(e.class=""),"view"==this.mode&&(e.readonly=!0),e},treeOptions:function(){return this.datalist?(e=this.datalist,t=this.conf.keyMap,n=[],i={},
|
|
429
|
+
// 先把所有数据放进 map 里
|
|
430
|
+
e.forEach(function(e){i[e[t.id]]={value:e[t.id],
|
|
431
|
+
// 给级联器用
|
|
432
|
+
text:e[t.name],
|
|
433
|
+
// 显示文字
|
|
434
|
+
id:e[t.id],pId:e[t.pId]}}),
|
|
435
|
+
// 构建父子关系
|
|
436
|
+
e.forEach(function(e){var a=i[e[t.pId]],r=i[e[t.id]];a&&(a.children||(a.children=[]),a.children.push(r)),e[t.pId]==t.rootPId&&n.push(r)}),n):[];
|
|
437
|
+
/**
|
|
438
|
+
* 一维数组 转 树形结构
|
|
439
|
+
* @param {Array} list 原始数据 [ {id, pId, name} ]
|
|
440
|
+
* @returns 树形数据(可直接给 van-cascader 使用)
|
|
441
|
+
*/
|
|
442
|
+
var e,t,n,i},multiple:function(){return this.attrs.multiple}},methods:{handleChange:function(e){this.$emit("input",this.innerValue)},handleClear:function(){this.innerValue="",this.$emit("input",this.innerValue)},
|
|
443
|
+
// 选完点“确定”触发
|
|
444
|
+
onFinish:function(e){var t=e.selectedOptions;this.innerValue=t[t.length-1].value,
|
|
445
|
+
// this.showText = selectedOptions.map(item => item.text).join(' / ');
|
|
446
|
+
this.showText=t[t.length-1].text,this.showPicker=!1}},mounted:function(){this.refreshData()}},fe={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("van-field",{class:e.attrs.class,attrs:{name:e.attrs.name,label:e.conf.hideLabel?"":e.conf.label,rules:e.rules},scopedSlots:e._u([{key:"input",fn:function(){return[n("van-uploader",e._b({attrs:{name:e.attrs.name,"after-read":e.afterRead,"upload-icon":"plus"},on:{oversize:e.onOversize,delete:e.onDelete},scopedSlots:e._u([{key:"preview-cover",fn:function(t){var i=t.file,a=t.content;return[n("div",{staticClass:"download-btn",on:{click:function(t){return t.stopPropagation(),e.handleDownload(i,a)}}},[n("van-icon",{attrs:{name:"down",color:"#fff"}})],1)]}}]),model:{value:e.fileList,callback:function(t){e.fileList=t},expression:"fileList"}},"van-uploader",e.filterAttrs,!1))]},proxy:!0}])})},staticRenderFns:[],props:{conf:{type:Object,default:function(){return{}}},attrs:{type:Object,default:function(){return{}}},value:{type:[Array,Object,String],default:""},mode:{type:String,default:"preview"}},mixins:[J],inject:["formData","updateFormData"],data:function(){return{innerValue:this.formatToJsonString(this.value),fileList:[]}},computed:{isImg:function(){var e=this.conf.allowedFileType;return!(!e.includes("image")||1!=e.length)},filterAttrs:function(){var e=this.attrs,t=e.multiple,n=e.readonly,i=e.disabled,a=this.conf,r=a.allowedFileType;a.minFileCount;var o=a.maxFileCount,s=a.maxFileSize,l=r.includes("image")&&1==r.length,c={};if(t&&(c.multiple=!0,o&&o>1&&(c.maxCount=o)),s&&(c.maxSize=1024*s),(n||i||"view"==this.mode)&&(c.deletable=!1,c.showUpload=!1,c.previewFullImage=!0),c.disabled=!1,l)c.accept="image/*";else if(r.includes("apk"))c.accept=".apk";else{var u=[];r.includes("pdf")&&u.push(".pdf"),r.includes("office")&&u.push(".doc,.docx,.xls,.xlsx,.ppt,.pptx"),r.includes("zip")&&u.push(".zip,.rar,.7z"),r.includes("image")&&u.push(".png,.jpg,.jpeg,.gif,.webp"),c.accept=u.join(",")}return c}},watch:{value:function(e){var t=this.formatToJsonString(e);this.innerValue=t,this.fileList="[]"===t||""===t?[]:this.syncFileObjectsFromBase64()}},created:function(){this.fileList=this.syncFileObjectsFromBase64()},methods:{onDelete:function(e,t){var n=t.index;this.afterRead(),console.log("已删除",e.url,n)},onOversize:function(e){this.$toast("文件大小不能超过"+this.conf.maxFileSize+"KB")},afterRead:function(e){this.getStringValue(),this.$emit("input",this.innerValue)},getStringValue:function(){var e=this;this.innerValue=JSON.stringify(this.fileList.map(function(t){var n,i={};i[e.conf.keyMap.name||"name"]=t.file.name,i[e.conf.keyMap.size||"size"]=t.file.size;var a=(null===(n=t.file.name.split(".").pop())||void 0===n?void 0:n.toLowerCase())||"";return i[e.conf.keyMap.type||"type"]=a,i[e.conf.keyMap.path||"path"]=t.content,e.attrs.name.split("@").length>1&&(i[e.conf.keyMap.bizType||"bizType"]=e.attrs.name.split("@").pop()),i}))},formatToJsonString:function(e){return e?"string"==typeof e?e.trim()||"[]":JSON.stringify(e):"[]"},parseValueToArray:function(){try{if(!this.innerValue)return[];var e="string"==typeof this.innerValue?JSON.parse(this.innerValue):this.innerValue;return Array.isArray(e)?e:e?[e]:[]}catch(e){return console.error("解析文件数据失败",e),[]}},syncFileObjectsFromBase64:function(){var e=this,t=this.parseValueToArray();if(!t.length)return[];var n=[];return t.forEach(function(t){try{var i=t[e.conf.keyMap.path||"path"];if(!i)return;var a=
|
|
447
|
+
/**
|
|
448
|
+
* 万能 Base64 转 File 对象
|
|
449
|
+
* @param {string} base64Data - 完整 base64(带前缀或纯 base64)
|
|
450
|
+
* @param {string} [fileName='file'] - 文件名(不含后缀,会自动补)
|
|
451
|
+
* @returns {File|null} File对象
|
|
452
|
+
*/
|
|
453
|
+
function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"file";if(!e)return null;
|
|
454
|
+
// 1. 分离前缀和纯 base64 内容
|
|
455
|
+
var n="",i="";if(e.includes(",")){var a=C(e.split(","),2);n=a[0],i=a[1]}else i=e;
|
|
456
|
+
// 2. 先尝试从 header 提取 MIME
|
|
457
|
+
var r="";n&&(r=n.replace("data:","").replace(";base64","")),
|
|
458
|
+
// 3. 【核心】如果是通用流或无 MIME,根据文件头(魔数)自动识别
|
|
459
|
+
r&&"application/octet-stream"!==r||(r=function(e){if(!e)return"";for(var t=0,n=[
|
|
460
|
+
// 图片
|
|
461
|
+
{mime:"image/png",magic:"iVBORw0KGgo"},{mime:"image/jpeg",magic:"/9j/"},{mime:"image/gif",magic:"R0lGODdh"},{mime:"image/gif",magic:"R0lGODlh"},{mime:"image/webp",magic:"UklGR"},{mime:"image/bmp",magic:"Qk02"},
|
|
462
|
+
// PDF
|
|
463
|
+
{mime:"application/pdf",magic:"JVBERi0xLj"},
|
|
464
|
+
// 压缩包
|
|
465
|
+
{mime:"application/zip",magic:"UEsDBBQAAAAI"},{mime:"application/zip",magic:"UEsDBBQABgAIAAAA"},
|
|
466
|
+
// Office也是zip格式
|
|
467
|
+
{mime:"application/x-rar-compressed",magic:"UmFyIRoH"},{mime:"application/x-7z-compressed",magic:"N3q8rycAAAA="},
|
|
468
|
+
// Office 老版本
|
|
469
|
+
{mime:"application/msword",magic:"0M8R4KGxGuE"},{mime:"application/vnd.ms-excel",magic:"0M8R4KGxGuE"},{mime:"application/vnd.ms-powerpoint",magic:"0M8R4KGxGuE"},
|
|
470
|
+
// 文本
|
|
471
|
+
{mime:"text/plain",magic:"5L2g5aW9"}];t<n.length;t++){var i=n[t];if(e.startsWith(i.magic))return i.mime}return""}(i));
|
|
472
|
+
// 4. 根据 MIME 自动补文件后缀
|
|
473
|
+
var o=
|
|
474
|
+
/**
|
|
475
|
+
* 根据 MIME 类型获取文件后缀
|
|
476
|
+
* @param {string} mimeType
|
|
477
|
+
* @returns {string} 后缀(不含点)
|
|
478
|
+
*/
|
|
479
|
+
function(e){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/bmp":"bmp","application/pdf":"pdf","application/zip":"zip","application/x-rar-compressed":"rar","application/x-7z-compressed":"7z","application/msword":"doc","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.ms-excel":"xls","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application/vnd.ms-powerpoint":"ppt","application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","text/plain":"txt"}[e]||"bin"}(r),s=t.includes(".")?t:"".concat(t,".").concat(o);
|
|
480
|
+
// 5. Base64 转 Blob 再转 File
|
|
481
|
+
try{for(var l=atob(i),c=new Uint8Array(l.length),u=0;u<l.length;u++)c[u]=l.charCodeAt(u);var d=new Blob([c],{type:r});return new File([d],s,{type:r})}catch(e){return console.error("Base64 转 File 失败:",e),null}}(i,t[e.conf.keyMap.name]||"file");if(a&&(a.name.endsWith(".bin")||"application/octet-stream"===a.type)){var r="",o=(t[e.conf.keyMap.name]||"").toLowerCase(),s=(t[e.conf.keyMap.type]||"").toLowerCase();if(s?r=s:o&&(o.endsWith(".png")?r="image/png":o.endsWith(".jpg")||o.endsWith(".jpeg")?r="image/jpeg":o.endsWith(".gif")?r="image/gif":o.endsWith(".pdf")?r="application/pdf":o.endsWith(".zip")?r="application/zip":o.endsWith(".docx")?r="application/vnd.openxmlformats-officedocument.wordprocessingml.document":o.endsWith(".xlsx")?r="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":o.endsWith(".pptx")?r="application/vnd.openxmlformats-officedocument.presentationml.presentation":o.endsWith(".doc")?r="application/msword":o.endsWith(".xls")?r="application/vnd.ms-excel":o.endsWith(".ppt")&&(r="application/vnd.ms-powerpoint")),!r&&i.includes("UEsDBBQ")&&(r="application/vnd.openxmlformats-officedocument.wordprocessingml.document"),r){for(var l=C(i.split(","),2)[1],c=atob(l),u=new Uint8Array(c.length),d=0;d<c.length;d++)u[d]=c.charCodeAt(d);var f=new Blob([u],{type:r}),p=e.getExtensionByMimeType(r),h=t[e.conf.keyMap.name]||"file.".concat(p);a=new File([f],h,{type:r})}}a&&n.push({file:a,content:i,url:i,message:a.name,status:""})}catch(e){console.error("回显文件失败:",e)}}),n},
|
|
482
|
+
// 下载文件
|
|
483
|
+
handleDownload:function(e,t){if(e&&t){for(var n=C(t.split(","),2),i=n[0],a=n[1],r=atob(a),o=[],s=0;s<r.length;s++)o.push(r.charCodeAt(s));var l=new Blob([new Uint8Array(o)],{type:i||"application/octet-stream"}),c=URL.createObjectURL(l),u=document.createElement("a");u.href=c,u.download=(null==e?void 0:e.name)||"file",document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(c)}else this.$toast("文件不存在")},getExtensionByMimeType:function(e){return{"image/png":"png","image/jpeg":"jpg","image/gif":"gif","application/pdf":"pdf","application/zip":"zip"}[e]||"file"}}},pe={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return"view"==e.mode?n("div",{staticClass:"view-value"},[e._v(e._s(e.innerValue||"-"))]):n("div",{staticClass:"input-group"},[n("input",e._b({ref:"suggestInput",attrs:{type:"text",placeholder:e.conf.placeholder||"请选择",disabled:e.conf.disabled||e.loading},domProps:{value:e.innerValue}},"input",e.attrs,!1)),e._v(" "),n("div",{staticClass:"input-group-btn"},[n("button",{staticClass:"btn btn-white dropdown-toggle",attrs:{type:"button","data-toggle":"dropdown",disabled:e.conf.disabled||e.loading}},[n("span",{staticClass:"caret"})]),e._v(" "),n("ul",{staticClass:"dropdown-menu dropdown-menu-right",attrs:{role:"menu"}})])])},staticRenderFns:[],mixins:[K,J],data:function(){return{loading:!1,suggestInstance:null}},mounted:function(){this.initBsSuggest()},beforeDestroy:function(){this.suggestInstance&&(this.$refs.suggestInput.bsSuggest("destroy"),this.suggestInstance=null)},methods:{initBsSuggest:function(){var e=this,t=this.conf.api,n=$(this.$refs.suggestInput),i={};t.headers.forEach(function(e){e.field&&e.label&&(i[e.field]=e.label)});
|
|
484
|
+
// 2. effectiveFields(搜索匹配的字段)
|
|
485
|
+
var a=t.headers.map(function(e){return e.name||e.field});this.suggestInstance=n.bsSuggest({
|
|
486
|
+
// data: { value: [{ xmmc: '德州一本账', xmbh: 'xmbh11111', htbh: 'htbh11111' }, { xmmc: '东营一本账', xmbh: 'xmbh22222', htbh: 'htbh22222' },] },
|
|
487
|
+
// 基础配置
|
|
488
|
+
url:t.url,method:t.method,dataType:"json",delay:300,highlightKeyword:!0,showHeader:Object.keys(i).length>0,effectiveFields:a,effectiveFieldsAlias:i,autoSelect:!1,ignorecase:!0,idField:"xmbh",keyField:this.attrs.name,
|
|
489
|
+
// 3. 处理请求参数:解析 ${xmbh} 占位符(从注入的 formData 中取值)
|
|
490
|
+
fnProcessParams:function(n){var i={};
|
|
491
|
+
// 解析 paramsList 中的动态占位符
|
|
492
|
+
return t.paramsList.forEach(function(t){if(t.value&&"string"==typeof t.value){var n=t.value.match(/\$\{(\w+)\}/);if(n){var a=n[1];// 如 xmbh
|
|
493
|
+
// 从注入的 formData 中获取真实值
|
|
494
|
+
i[t.name]=e.formData[a]||""}else i[t.name]=t.value}}),
|
|
495
|
+
// 添加关键词参数(从 mappings 中取字段)
|
|
496
|
+
t.mappings.forEach(function(e){i[e.field]=n}),i},
|
|
497
|
+
// 4. 处理后端响应数据
|
|
498
|
+
processData:function(t){e.loading=!1;var n=t.data||t,i=this.attrs.name;return{value:n.map(function(e){return e[i]||""}),
|
|
499
|
+
// 显示值
|
|
500
|
+
data:n}},
|
|
501
|
+
// 请求前钩子
|
|
502
|
+
beforeSend:function(){e.loading=!0},
|
|
503
|
+
// 请求失败钩子
|
|
504
|
+
onError:function(){e.loading=!1,console.error("bsSuggest 请求失败")}
|
|
505
|
+
// 5. 选中建议项:根据 mappings 赋值
|
|
506
|
+
}).on("onSetSelectValue",function(n,i,a){if(a&&"object"===T(a)){t.mappings.forEach(function(t){e.updateFormData(t.name,a[t.field])});
|
|
507
|
+
// 更新显示值
|
|
508
|
+
var r=e.attrs.name;e.innerValue=a[r]||"",
|
|
509
|
+
// 触发事件回传值
|
|
510
|
+
e.$emit("input",e.innerValue)}})},
|
|
511
|
+
// 可选:手动触发搜索
|
|
512
|
+
triggerSearch:function(e){this.suggestInstance&&this.$refs.suggestInput.bsSuggest("lookup",e)}}},he={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"table-pro"},[e._t("toolbar",null,{selected:e.selectedRows}),e._v(" "),n("div",{staticClass:"table-container",style:{height:e.height?e.height:"auto"}},[e.fixedLeft>0||e.showCheck?n("div",{staticClass:"fixed-left"},[n("div",{staticClass:"fixed-header"},[e.showCheck&&e.multiple?n("div",{staticClass:"cell check-cell"},[n("van-checkbox",{attrs:{shape:"square"},on:{change:e.handleSelectAll},model:{value:e.isCheckAll,callback:function(t){e.isCheckAll=t},expression:"isCheckAll"}})],1):e._e(),e._v(" "),e._l(e.leftCols,function(t,i){return n("div",{key:i,staticClass:"cell",style:e.getCellStyle(t)},[e._v(e._s(t.label))])})],2),e._v(" "),n("div",{ref:"fixedBody",staticClass:"fixed-body"},e._l(e.localData,function(t,i){return n("div",{key:i,staticClass:"row-flex",attrs:{"data-row-index":i}},[e.showCheck?n("div",{staticClass:"cell check-cell"},[e.multiple?n("van-checkbox",{attrs:{shape:"square"},on:{change:function(n){return e.handleChangeRow(t,i)}},model:{value:t.checked,callback:function(n){e.$set(t,"checked",n)},expression:"row.checked"}}):n("van-radio",{attrs:{name:"row_"+i},on:{click:function(t){return e.handleChange(i)}},model:{value:e.selectedRowId,callback:function(t){e.selectedRowId=t},expression:"selectedRowId"}})],1):e._e(),e._v(" "),e._l(e.leftCols,function(a,r){return n("div",{key:r,staticClass:"cell",style:e.getCellStyle(a)},[e.$scopedSlots.cell?e._t("cell",null,{row:t,col:a,index:i}):e.$scopedSlots[a.prop]?e._t(a.prop,null,{row:t,col:a,index:i}):a.slot&&e.$scopedSlots[a.slot]?e._t(a.slot,null,{row:t,col:a,index:i}):n("span",[e._v(e._s(t[a.prop]||"-"))])],2)})],2)}),0),e._v(" "),n("div",{staticClass:"shadow right-shadow"})]):e._e(),e._v(" "),n("div",{ref:"scrollBody",staticClass:"scroll-section",class:{"auto-width":e.isAutoWidth},on:{scroll:e.handleScroll}},[n("div",{ref:"scrollHeader",staticClass:"scroll-header"},e._l(e.centerCols,function(t){return n("div",{key:t.prop,staticClass:"cell",style:e.getCellStyle(t)},[e._v(e._s(t.label))])}),0),e._v(" "),n("div",{staticClass:"scroll-body-inner"},[n("div",{staticClass:"scroll-content",style:e.contentWidthStyle},[e._l(e.localData,function(t,i){return n("div",{key:i,staticClass:"row-flex",attrs:{"data-row-index":i}},e._l(e.centerCols,function(a){return n("div",{key:a.prop,staticClass:"cell",style:e.getCellStyle(a)},[e.$scopedSlots.cell?e._t("cell",null,{row:t,col:a,index:i}):e.$scopedSlots[a.prop]?e._t(a.prop,null,{row:t,col:a,index:i}):a.slot&&e.$scopedSlots[a.slot]?e._t(a.slot,null,{row:t,col:a,index:i}):n("span",[e._v(e._s(t[a.prop]||"-"))])],2)}),0)}),e._v(" "),e.localData.length||e.loading?e._e():n("div",{staticClass:"empty-content"},[e._v("暂无数据")])],2)])]),e._v(" "),e.fixedRight>0&&!e.isAutoWidth?n("div",{staticClass:"fixed-right"},[n("div",{staticClass:"fixed-header"},e._l(e.rightCols,function(t){return n("div",{key:t.prop,staticClass:"cell",style:e.getCellStyle(t)},[e._v(e._s(t.label))])}),0),e._v(" "),n("div",{staticClass:"fixed-body"},e._l(e.localData,function(t,i){return n("div",{key:i,staticClass:"row-flex"},e._l(e.rightCols,function(a){return n("div",{key:a.prop,staticClass:"cell",style:e.getCellStyle(a)},[e.$scopedSlots.cell?e._t("cell",null,{row:t,col:a,index:i}):e.$scopedSlots[a.prop]?e._t(a.prop,null,{row:t,col:a,index:i}):a.slot&&e.$scopedSlots[a.slot]?e._t(a.slot,null,{row:t,col:a,index:i}):n("span",[e._v(e._s(t[a.prop]||"-"))])],2)}),0)}),0),e._v(" "),n("div",{staticClass:"shadow left-shadow"})]):e._e()]),e._v(" "),e.showPagination?n("van-pagination",{staticClass:"pagination",attrs:{"total-items":e.page.total,"items-per-page":e.page.size},on:{change:e.handlePageChange},model:{value:e.page.current,callback:function(t){e.$set(e.page,"current",t)},expression:"page.current"}}):e._e()],2)},staticRenderFns:[],name:"TablePro",components:{VanPagination:i.Pagination,VanLoading:i.Loading,VanCheckbox:i.Checkbox,VanRadio:i.Radio},props:{columns:{type:Array,default:function(){return[]}},data:{type:Array,default:function(){return[]}},fixedLeft:{type:Number,default:0},fixedRight:{type:Number,default:0},height:{type:String},page:{type:Object,default:function(){return{current:1,size:10,total:0}}},showPagination:{type:Boolean,default:!0},showLoadMore:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},showCheck:{type:Boolean,default:!1},multiple:{type:Boolean,default:!0}},data:function(){return{isCheckAll:!1,selectedRowId:null,selectedRows:[],colWidthCache:new Map,localData:[]}},watch:{data:{handler:function(e){var t=this;this.localData=JSON.parse(JSON.stringify(e)).map(function(e){return void 0===e.checked&&(e.checked=!1),e}),this.isCheckAll=!1,this.selectedRows=[],this.$nextTick(function(){t.syncRowHeight()})},deep:!0,immediate:!0}},computed:{isAutoWidth:function(){return this.columns.length<=2},leftCols:function(){return this.columns.slice(0,this.fixedLeft)},centerCols:function(){var e=this.fixedLeft,t=this.fixedRight>0?this.columns.length-this.fixedRight:this.columns.length;return this.columns.slice(e,t)},rightCols:function(){return this.fixedRight>0?this.columns.slice(this.columns.length-this.fixedRight):[]},contentWidthStyle:function(){var e=this;if(this.isAutoWidth)return{};var t=0;return this.centerCols.forEach(function(n){var i=e.getPxWidth(n.width||"120px");t+=i}),{width:t+"px"}}},methods:{syncRowHeight:function(){this.$nextTick(function(){var e=document.querySelectorAll(".fixed-left .row-flex"),t=document.querySelectorAll(".scroll-section .row-flex"),n=document.querySelectorAll(".fixed-right .row-flex");e.forEach(function(e,i){var a=e.offsetHeight+"px";t[i]&&(t[i].style.height=a),n[i]&&(n[i].style.height=a)})})},getPxWidth:function(e){e||(e="120px");var t=String(e);if(this.colWidthCache.has(t))return this.colWidthCache.get(t);var n=120;return-1===t.indexOf("%")&&(n=parseInt(t)||120),this.colWidthCache.set(t,n),n},getCellStyle:function(e){if(this.isAutoWidth)return{flex:1,boxSizing:"border-box"};var t=e.width||"120px";return{width:t,minWidth:t,maxWidth:t,boxSizing:"border-box"}},handleScroll:function(){var e=this.$refs.scrollBody.scrollTop;this.$refs.fixedBody&&(this.$refs.fixedBody.scrollTop=e),this.syncRowHeight()},handlePageChange:function(e){this.$emit("page-change",e)},handleChangeRow:function(e,t){this.selectedRows=this.localData.map(function(e,t){return g(g({},e),{},{index:t})}).filter(function(e){return e.checked}),this.isCheckAll=this.localData.length>0&&this.selectedRows.length===this.localData.length,this.$emit("select-change",this.selectedRows)},handleChange:function(e){this.selectedRows=[g(g({},this.localData[e]),{},{index:e})],this.$emit("select-change",this.selectedRows)},handleSelectAll:function(e){this.localData.forEach(function(t){return t.checked=e}),this.selectedRows=e?this.localData.map(function(e,t){return g(g({},e),{},{index:t})}):[],this.$emit("select-change",this.selectedRows)}},mounted:function(){this.syncRowHeight()}},me={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("van-popup",{staticClass:"select-popup",attrs:{position:"bottom","get-container":"#myForm",closeable:""},on:{close:e.close},model:{value:e.isShow,callback:function(t){e.isShow=t},expression:"isShow"}},[n("div",{staticClass:"custom-picker-container"},[n("van-sticky",[n("van-nav-bar",{attrs:{title:"选择",border:!1}})],1),e._v(" "),n("div",{staticClass:"popup-body",staticStyle:{padding:"10px"}},[n("TablePro",{attrs:{columns:e.tableColumns,data:e.tableData,page:e.page,fixedLeft:0,"show-pagination":"","show-check":"",multiple:e.multiple},on:{"page-change":e.getList,"select-change":e.selChange}})],1),e._v(" "),n("div",{staticClass:"bottom-btn"},[n("van-button",{attrs:{type:"primary",round:"",block:"",icon:"checked",disabled:0==e.selectRows.length},on:{click:e.onConfirm}},[e._v("确认")])],1)],1)])},staticRenderFns:[],props:{visible:Boolean,conf:Object},components:{TablePro:he},data:function(){var e,t;return{isShow:this.visible,tableColumns:[],tableData:[],selectRows:[],page:{total:0,size:5,current:1},qqljUrl:"",multiple:"xzms-checkbox"==(null===(e=this.conf)||void 0===e||null===(t=e.valueCondition)||void 0===t?void 0:t.xzms)}},computed:{tableApi:function(){var e=this.conf.valueCondition;if("sjcxyy-table"==e.yyxxType)return{url:"/sjyy/zycx/getZycxDataList",params:{pageSize:this.page.size,pageNum:this.page.current,id:e.sjbId}};if("xtglxx"==e.yyxxType){if("user-gl"==e.xtgllx)return{url:"/sjyy/sjczgl/form/bdgl/config/getSysUserList",params:{pageSize:this.page.size,pageNum:this.page.current}};if("role-gl"==e.xtgllx)return{url:"/sjyy/sjczgl/form/bdgl/config/getSysRoleList",params:{pageSize:this.page.size,pageNum:this.page.current}}}else if("zdyApi"==e.yyxxType)return{url:this.qqljUrl,params:{pageSize:this.page.size,pageNum:this.page.current}};return{}}},watch:{visible:function(e){this.isShow=e},tableApi:{deep:!0,immediate:!0,handler:function(e){e.url?this.getTableData():this.tableData=[]}}},methods:{onConfirm:function(){this.$emit("confirm",this.selectRows)},close:function(){this.$emit("close")},getTableData:function(){var e=this;B(this.tableApi.url,this.tableApi.params).then(function(t){0==t.code&&(e.tableData=t.rows,
|
|
513
|
+
// this.tableData = res.rows.map((item, index) => {
|
|
514
|
+
// return {
|
|
515
|
+
// ...item,
|
|
516
|
+
// checked: false,
|
|
517
|
+
// _id: item.id || item.roleId || item.userId || index
|
|
518
|
+
// }
|
|
519
|
+
// })
|
|
520
|
+
e.page.total=t.total)})},getTableColumns:function(){var e=this,t={},n=this.conf.valueCondition;"zdyApi"==n.yyxxType?(t.url="/gzt/jkgl/jkglView",t.params={id:n.jkid}):"sjcxyy-table"==n.yyxxType?(t.url="/sjyy/sjcxgl/sjxgl/getQtzsSjxList",t.params={ysjbId:n.sjbId,zxzdlx:"list"}):"xtglxx"==n.yyxxType&&("user-gl"==n.xtgllx?this.tableColumns=[{prop:"userName",label:"姓名"},{prop:"jybh",label:"警号"}]:"role-gl"==n.xtgllx&&(this.tableColumns=[{prop:"roleName",label:"角色名称"},{prop:"roleKey",label:"权限字符"}])),t&&t.url&&B(t.url,t.params).then(function(t){if(0==t.code){var i="zdyApi"==n.yyxxType?t.data.fhcsList:t.rows,a=[],r="",o="";if("zdyApi"==n.yyxxType?(r="csjp",o="csmc"):"sjcxyy-table"==n.yyxxType&&(r="sjxbs",o="sjxmc"),i&&(i.forEach(function(e){n.colysArr.find(function(t){return t.sjlyColName==e[r]})&&a.push({prop:e[r],label:e[o]})}),1==a.length&&(i[0][r]==a[0].prop?a.push({prop:i[1][r],label:i[1][o]}):a.push({prop:i[0][r],label:i[0][o]})),e.tableColumns=a),"zdyApi"==n.yyxxType){var s=t.data.qqlj;s=0==s.indexOf("/")?s.substring(1):s,e.qqljUrl=s}}})},getList:function(){},selChange:function(e){this.selectRows=e}},created:function(){this.getTableColumns()}},ve={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"widget-row table-wrapper"},[n("div",{staticClass:"sub-item-title"},[n("span",{staticClass:"left-label"},[e._v(e._s(e.conf.label))]),e._v(" "),"view"!==e.mode&&(e.conf.allowAdd||e.conf.allowReferenceAdd)?n("div",{staticClass:"toolbar-btns"},[e.conf.allowNormalAdd?n("button",{staticClass:"add-btn primary-color button-none",on:{click:function(t){return t.stopPropagation(),t.preventDefault(),e.addRow.apply(null,arguments)}}},[n("van-icon",{staticStyle:{"margin-right":"2px"},attrs:{name:"plus"}}),e._v(" "+e._s(e.conf.addBtnText||"添加")+"\n ")],1):e._e(),e._v(" "),e.conf.allowNormalAdd?n("button",{staticClass:"add-btn info-color button-none",attrs:{disabled:0==e.selectRows.length},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),e.editRow.apply(null,arguments)}}},[n("van-icon",{staticStyle:{"margin-right":"2px"},attrs:{name:"edit"}}),e._v(" "+e._s("编辑")+"\n ")],1):e._e(),e._v(" "),e.conf.allowReferenceAdd?n("button",{staticClass:"add-btn primary-color button-none",on:{click:e.referenceAddRow}},[n("van-icon",{staticStyle:{"margin-right":"2px"},attrs:{name:"plus"}}),e._v(e._s(e.conf.referenceAddBtnText||"选择添加")+"\n ")],1):e._e(),e._v(" "),e.conf.allowDelete?n("button",{staticClass:"add-btn danger-color button-none",attrs:{disabled:0==e.selectRows.length},on:{click:e.deleteRow}},[n("van-icon",{attrs:{name:"delete-o"}}),e._v(e._s(e.conf.deleteBtnText||"删除")+"\n ")],1):e._e()]):e._e()]),e._v(" "),n("TablePro",{attrs:{columns:e.tableColumns,data:e.tableData,page:e.page,height:e.conf.tableHeight,fixedLeft:e.conf.fixedNumber,"show-pagination":e.conf.pagination,"show-check":"view"!==e.mode,multiple:!0},on:{"page-change":e.getList,"select-change":e.selChange},scopedSlots:e._u([{key:"cell",fn:function(e){var t=e.row,i=e.col;return[n("render",{attrs:{conf:i,value:t[i.prop],terminal:"mobile",mode:"view"}})]}}])}),e._v(" "),n("van-popup",{staticClass:"select-popup",style:{height:e.tableColumns.length>6?"60%":"50%"},attrs:{position:"bottom","get-container":"#myForm",closeable:""},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}},[n("van-form",{ref:"vantForm",staticClass:"custom-picker-container",attrs:{"validate-first":""},on:{submit:e.onSubmit},model:{value:e.form,callback:function(t){e.form=t},expression:"form"}},[n("van-sticky",[n("van-nav-bar",{attrs:{title:"手动添加",border:!1}})],1),e._v(" "),n("div",{staticClass:"popup-body scroll-wrap"},e._l(e.formItems,function(t,i){return n("render",{key:i,attrs:{conf:t,value:e.form[t.name],terminal:"mobile",mode:-1===e.currentIndex?"add":"edit"},on:{onInput:e.updateForm}})}),1),e._v(" "),n("div",{staticClass:"bottom-btn"},[n("van-button",{attrs:{type:"primary",round:"",block:"",icon:"checked","native-type":"submit"}},[e._v("确认")])],1)],1)],1),e._v(" "),"page"==e.fhType?n("api-popup",{attrs:{visible:e.showRPicker,conf:e.conf},on:{confirm:e.onConfirm,close:function(t){e.showRPicker=!1}}}):e._e()],1)},staticRenderFns:[],mixins:[ee,J],components:{render:D,TablePro:he,apiPopup:me},data:function(){var e;return{tableData:this.parseValue(this.innerValue),showPicker:!1,showRPicker:!1,form:{},selectRows:[],
|
|
521
|
+
// 选中的行
|
|
522
|
+
currentIndex:-1,fhType:"page"==(null===(e=this.conf.referenceAddApi)||void 0===e?void 0:e.fhType)?"page":"json"}},computed:{page:function(){return{total:0,size:10,current:1}},paramsChanged:function(){return this.prevValue!==this.formData[this.conf.formLdCol]},formItems:function(){return this.conf.columnsData.filter(function(e){return"inputHidden"!==e.widget&&!1!==e.appVisible})},
|
|
523
|
+
/**
|
|
524
|
+
* 转换为开源 sl-table 支持的表头格式
|
|
525
|
+
*/
|
|
526
|
+
tableColumns:function(){var e=[],t=this.conf.columnsData,n=void 0===t?[]:t;return this.conf.showIndexColumn,
|
|
527
|
+
// 业务列
|
|
528
|
+
n.forEach(function(t){!1!==t.appVisible&&"inputHidden"!==t.widget&&e.push(g(g({prop:t.name,align:"center"},t),{},{
|
|
529
|
+
// 透传合并配置 merge、rowspan、colspan
|
|
530
|
+
label:t.required?"*".concat(t.label):t.label,hideLabel:!0,width:"120px"}))}),e}},methods:{getList:function(){},selChange:function(e){this.selectRows=e},onSubmit:function(){-1==this.currentIndex?this.tableData.push(g({},this.form)):this.tableData.splice(this.currentIndex,1,g({},this.form)),this.showPicker=!1,this.currentIndex=-1,this.innerValue=JSON.stringify(this.tableData),this.$emit("input",this.innerValue)},onConfirm:function(e){var t=this;this.showRPicker=!1;var n=Array.isArray(e)?e:[e],i=[];n.forEach(function(e){var n={};t.conf.columnsData.forEach(function(i){t.conf.referenceAddApi&&t.conf.referenceAddApi.mappings&&t.conf.referenceAddApi.mappings.filter(function(e){return e.name==i.name}).length>0?n[i.name]=e[t.conf.referenceAddApi.mappings.filter(function(e){return e.name==i.name})[0].field]:n[i.name]=i.defaultValue||""}),"{}"!==JSON.stringify(n)&&i.push(n)}),this.innerValue=JSON.stringify(i),this.tableData=x(i.map(function(e){return g(g({},e),{},{checked:!1})})),console.log(e,"onConfirm",this.tableData,this.tableColumns),this.$emit("input",this.innerValue)},
|
|
531
|
+
/**
|
|
532
|
+
* rpx 转 px(H5 兼容)
|
|
533
|
+
*/
|
|
534
|
+
rpxToPx:function(e){if(!e)return"auto";var t=parseInt(e);return isNaN(t)?e:"".concat(t/2,"px")},parseValue:function(e){if(!e||""===e)return[];try{var t=JSON.parse(e);return Array.isArray(t)?t:[]}catch(e){return console.warn("解析表格数据失败,使用空数组",e),[]}},refreshCallback:function(){var e=this,t=Array.isArray(this.datalist)?this.datalist:[this.datalist],n=[];t.forEach(function(t){var i={};e.conf.columnsData.forEach(function(n){e.conf.api&&e.conf.api.mappings&&e.conf.api.mappings.filter(function(e){return e.name==n.name}).length>0?i[n.name]=t[e.conf.api.mappings.filter(function(e){return e.name==n.name})[0].field]:i[n.name]=n.defaultValue||""}),"{}"!==JSON.stringify(i)&&n.push(i)}),this.innerValue=JSON.stringify(n),this.$emit("input",this.innerValue)},addRow:function(){var e=this;this.tableData.length,this.tableColumns.forEach(function(t,n){"_index"!==t.prop&&(e.form[t.prop]=t.defaultValue||"")}),this.showPicker=!0,this.currentIndex=-1},referenceAddRow:function(){this.showRPicker=!0},editRow:function(){
|
|
535
|
+
// 1. 必须判断有没有选中行
|
|
536
|
+
if(this.selectRows&&0!==this.selectRows.length){
|
|
537
|
+
// 2. 拿到选中的第一条数据(直接用 row,不要用 index!)
|
|
538
|
+
var e=this.selectRows[0];
|
|
539
|
+
// 3. 深度拷贝赋值,保证 form 和表格数据独立
|
|
540
|
+
this.form=g({},e),
|
|
541
|
+
// 4. 记录当前编辑的 index(用于提交时更新)
|
|
542
|
+
this.currentIndex=e.index,
|
|
543
|
+
// 5. 打开弹窗
|
|
544
|
+
this.showPicker=!0}else this.$toast("请选择要编辑的行")},deleteRow:function(){
|
|
545
|
+
// 要删除的索引
|
|
546
|
+
var e=this.selectRows.map(function(e){return e.index});
|
|
547
|
+
// 🔥 关键:从大到小排序索引,避免索引错乱
|
|
548
|
+
e.sort(function(e,t){return t-e});
|
|
549
|
+
// 循环删除
|
|
550
|
+
var t,n=f(e);try{for(n.s();!(t=n.n()).done;){var i=t.value;this.tableData.splice(i,1)}}catch(e){n.e(e)}finally{n.f()}},updateForm:function(e,t){t||this.$toast("字段没有配置无法赋值!"),this.form[t]=e}}},ge=[W,G,H,Z,te,ne,ae,re,oe,le,ue,de,fe,pe,{render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return"view"===e.mode?n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)):n("div",[n("van-field",e._b({attrs:{label:e.conf.hideLabel?"":e.conf.label,rules:e.rules,"right-icon":"arrow"},on:{"click-right-icon":e.openModal,clear:e.handleClear},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},"van-field",e.filterAttrs,!1)),e._v(" "),"page"==e.fhType?n("api-popup",{attrs:{visible:e.showPicker,conf:e.conf},on:{confirm:e.onConfirm,close:function(t){e.showPicker=!1}}}):e._e()],1)},staticRenderFns:[],mixins:[ee,J],data:function(){return{isFocused:!1,
|
|
551
|
+
// 记录输入框是否聚焦
|
|
552
|
+
showPicker:!1,fhType:"json"==this.conf.api.fhType?"json":"page"}},components:{apiPopup:me},computed:{filterAttrs:function(){var e=h({},(m(this.attrs),this.attrs)),t=this.conf.widget;return e.type="password"==t?"password":"inputNumber"==t?"number":"textarea"==t?"textarea":"text","view"==this.mode&&(e.readonly=!0,e.clearable=!1),"form-control"==e.class&&(e.class=""),e}},methods:{handleChange:function(e){this.innerValue=e.target.value,this.$emit("input",this.innerValue)},handleClear:function(){this.innerValue="",this.$emit("input",this.innerValue)},refreshCallback:function(){this.updateCallback()},onConfirm:function(e){this.showPicker=!1,this.updateCallback(e),this.$emit("input",this.innerValue)},openModal:function(){"page"==this.fhType?this.showPicker=!0:this.refreshData()}},mounted:function(){this.conf.api.immediate&&this.refreshData()}},{render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"sub-item-title",class:[e.conf.size,e.conf.align,e.conf.class].concat(e.conf.border&&e.conf.border.length>0?e.conf.border:[])},[e.conf.icon?n("span",{staticClass:"icon",class:e.conf.icon}):e._e(),e._v(" "),n(e.conf.weight?"b":"span",{ref:"editableElement",tag:"component",class:["title","preview"==e.mode?"editable":""],attrs:{contenteditable:"preview"==e.mode},on:{input:e.handleUpdateLabel}},[e._v("\n "+e._s(e.conf.label)+"\n ")])],1)},staticRenderFns:[],props:{mode:{type:String,default:"preview"},conf:{type:Object,required:!0,
|
|
553
|
+
// 增加props默认结构,避免空对象/空数组导致的响应式问题
|
|
554
|
+
default:function(){return{size:"",align:"",border:[],
|
|
555
|
+
// 初始化border为空数组
|
|
556
|
+
icon:"",weight:!1,label:""}}}},methods:{handleUpdateLabel:function(){
|
|
557
|
+
// 修正:获取唯一ref的内容,兼容textContent/innerText
|
|
558
|
+
var e=this.$refs.editableElement;if(e){
|
|
559
|
+
// 用textContent避免HTML标签注入,如需富文本可用innerHTML(注意XSS)
|
|
560
|
+
var t=e.textContent.trim();
|
|
561
|
+
// 触发父组件更新,遵循单向数据流
|
|
562
|
+
this.$emit("updateItem","label",t)}}},watch:{
|
|
563
|
+
// 监听conf.label变化,同步到可编辑元素(解决父组件数据更新时子组件不刷新的问题)
|
|
564
|
+
"conf.label":function(e){var t=this.$refs.editableElement;t&&t.textContent!==e&&(t.textContent=e)}}},ve,{render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a",{class:e.conf.buttonType,style:e.style,attrs:{disabled:e.conf.disabled}},[e.conf.icon?n("i",{staticClass:"icon",class:e.conf.icon}):e._e(),e._v(" "),n("span",[e._v(e._s(e.conf.buttonText))])])},staticRenderFns:[],mixins:[ee,J],data:function(){return{}},computed:{style:function(){return void 0!==this.conf.appWidth?{width:"".concat(this.conf.appWidth/12*100,"%")}:{}}},methods:{refreshCallback:function(){this.updateCallback()}}},{render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:["clearfix",e.conf.align].concat(e.conf.border&&e.conf.border.length>0?e.conf.border:[])},[e._t("default")],2)},staticRenderFns:[],props:{mode:{type:String,default:"preview"},conf:{
|
|
565
|
+
// 表单数据对象
|
|
566
|
+
type:Object,required:!0},formConf:{type:Object}},data:function(){return{}},methods:{}}],ye=function(e){ye.installed||(
|
|
567
|
+
// 1. 注册内部子组件(给 viewAppForm 使用)
|
|
568
|
+
ge.forEach(function(t){e.component(t.name,t)}),
|
|
569
|
+
// 2. 只对外导出这一个主组件
|
|
570
|
+
e.component(q.name,q))};return{install:ye}});
|