@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
2 lines (1 loc) • 19 kB
JavaScript
(function(p,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("vue"),require("../dynamic-resolver/index.umd.js"),require("../common/index.umd.js"),require("../designer-canvas/index.umd.js"),require("lodash-es")):typeof define=="function"&&define.amd?define(["exports","vue","../dynamic-resolver/index.umd.js","../common/index.umd.js","../designer-canvas/index.umd.js","lodash-es"],m):(p=typeof globalThis<"u"?globalThis:p||self,m(p["content-container"]={},p.Vue,p.dynamicResolver,p.common,p.designerCanvas,p.LodashES))})(this,function(p,m,M,j,E,q){"use strict";var W=Object.defineProperty;var X=(p,m,M)=>m in p?W(p,m,{enumerable:!0,configurable:!0,writable:!0,value:M}):p[m]=M;var b=(p,m,M)=>X(p,typeof m!="symbol"?m+"":m,M);const N=new Map([["appearance",M.resolveAppearance]]),B={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://farris-design.gitee.io/content-container.schema.json",title:"content-container",description:"A Farris Container Component",type:"object",properties:{id:{description:"The unique identifier for a Section",type:"string"},type:{description:"The type string of Section component",type:"string",default:"content-container"},appearance:{description:"",type:"object",properties:{class:{type:"string"},style:{type:"string"}},default:{}},contents:{description:"",type:"array",default:[]},size:{description:"",type:"object",properties:{width:{type:"number"},height:{type:"number"}},default:null},visible:{description:"",type:"boolean",default:!0}},required:["id","type","contents"]};function D(l,e,t){return e}const S={customClass:{type:String,default:""},customStyle:{type:String,default:""},visible:{type:Boolean,default:!0}},$=M.createPropsResolver(S,B,N,D),U=M.getPropsResolverGenerator(S,B,N,D),k=m.defineComponent({name:"FContentContainer",props:S,emits:[],setup(l,e){return()=>l.visible&&m.createVNode("div",{class:l.customClass,style:l.customStyle},[e.slots.default&&e.slots.default()])}});function A(l){const{formSchemaUtils:e,formStateMachineUtils:t}=l;function n(r,d=""){return{path:d+r.code,field:r.id,fullPath:r.code}}function i(r,d=""){const u=e.getViewModelById(r);return u?u.states.map(g=>n(g,d)):[]}function o(r){const d=e.getRootViewModelId(),u=i(r);if(r===d)return u;const g=i(d,"root-component.");return[...u,...g]}function s(r){return r.binding&&r.binding.path||r.id||""}function a(){return t&&t.getRenderStates()||[]}return{getVariables:o,getControlName:s,getStateMachines:a}}class G{constructor(e){b(this,"sessionVariables",[{key:"CurrentSysOrgName",name:"当前组织Name",description:"当前组织Name"},{key:"CurrentSysOrgId",name:"当前组织Id",description:"当前组织Id"},{key:"CurrentUserName",name:"当前用户Name",description:"当前用户Name"},{key:"CurrentUserCode",name:"当前用户Code",description:"当前用户Code"},{key:"CurrentUserId",name:"当前用户Id",description:"当前用户Id"},{key:"CurrentLanguage",name:"当前语言编号",description:"当前登录的语言编号,例如简体中文返回'zh-CHS',英文返回'en',繁体中文'zh-CHT'"}]);b(this,"expressionNames",{compute:"计算表达式",dependency:"依赖表达式",validate:"验证表达式",dataPicking:"帮助前表达式",visible:"可见表达式",readonly:"只读表达式",required:"必填表达式"});b(this,"getExpressionConverter",(e,t)=>({convertFrom:(n,i,o,s)=>{const a=o.getExpressionRuleValue(e,t||i);return a&&a.value||""},convertTo:(n,i,o,s,a)=>{var r;if(i==="dataPicking"&&(o!=null&&o.target)){const d=`${o.target}_dataPicking`;((r=o.rules)==null?void 0:r.some(g=>g.id===d&&g.value))?n.dictPickingExpressionId=d:delete n.dictPickingExpressionId}s.updateExpression(o)}}));this.formSchemaService=e}getExpressionRule(e,t){const n=this.getExpressionData();if(!n)return"";const i=n.find(s=>s.target===e);if(!i)return"";const o=i.rules.find(s=>s.type===t);return o||""}getContextFormVariables(){const{module:e}=this.formSchemaService.getFormSchema();if(!e.viewmodels||e.viewmodels.length===0)return[];const t=this.formSchemaService.getRootViewModelId(),n=this.formSchemaService.getViewModelById(t);if(!n||!n.states||n.states.length===0)return[];const i=[];return n.states.filter(o=>o.category==="remote").forEach(o=>{i.push({key:o.code,name:o.name,description:o.name,category:o.category})}),i}createTreeNode(e,t,n="label"){return{id:e.id,name:e.name,bindingPath:e[n],parents:t,type:"field"}}buildEntityFieldsTreeData(e=null,t){const n=[];return e==null||e.forEach(i=>{var a;const o=this.createTreeNode(i,t);let s=[];(a=i.type)!=null&&a.fields&&(s=this.buildEntityFieldsTreeData(i.type.fields,[...t,i.label])),n.push({data:o,children:s,expanded:!0})}),n}buildChildEntityTreeData(e=null,t){const n=[];return e==null||e.forEach(i=>{var r,d;const o=this.createTreeNode(i,t);o.type="entity";const s=this.buildEntityFieldsTreeData((r=i.type)==null?void 0:r.fields,[...t,i.label]),a=this.buildChildEntityTreeData((d=i.type)==null?void 0:d.entities,[...t,i.label]);a!=null&&a.length&&(s==null||s.push(...a)),n.push({data:o,children:s||[],expanded:!0})}),n}getEntitiesTreeData(){const e=this.formSchemaService.getSchemaEntities();if(!(e!=null&&e.length))return[];const t=e[0];if(!(t!=null&&t.type))return[];const n=this.buildEntityFieldsTreeData(t.type.fields,[t.code]),i=this.buildChildEntityTreeData(t.type.entities,[t.code]);return i!=null&&i.length&&(n==null||n.push(...i)),{entityCode:t.code,fields:[{data:this.createTreeNode(t,[],"code"),children:n||[]}]}}getEntitiesAndVariables(){return{entities:this.getEntitiesTreeData(),variables:{session:{name:"系统变量",items:this.sessionVariables,visible:!1},forms:{name:"表单变量",items:this.getContextFormVariables(),visible:!0}}}}onBeforeOpenExpression(e,t,n){const i=n==="Field"?e.binding.field:e.id,o=this.getExpressionRule(i,t),s=this.getEntitiesAndVariables(),a={message:["validate","required","dataPicking"].includes(t)&&o?o.message:"",...s};return o.messageType!=null&&(a.messageType=o.messageType),a}buildRule(e,t,n,i){const{expression:o,message:s,messageType:a}=t,r={id:`${e}_${n}`,type:n,value:o};return(n==="validate"||n==="dataPicking"||n==="required")&&(r.message=s),n==="dataPicking"&&(r.messageType=a),n==="validate"&&i&&(r.elementId=i),r}getExpressionData(){const{expressions:e}=this.formSchemaService.getFormSchema().module;return e||[]}updateExpression(e,t,n,i){const o=t==="Field"?e.binding.field:e.id,s=this.buildRule(o,n,i,e.type==="form-group"?e.id:"");let r=this.getExpressionData().find(u=>u.targetType===t&&u.target===o);const d=u=>u.value.trim()==="";if(r){const u=r.rules.find(g=>g.id===s.id);if(u)d(s)?r.rules=r.rules.filter(g=>g.id!==s.id):(Object.assign(u,s),i==="validate"&&e.type==="form-group"&&(u.elementId=e.id));else{if(d(s))return null;r.rules=r.rules||[],r.rules.push(s)}}else{if(d(s))return null;r={target:`${o}`,rules:[s],targetType:t}}return r}getExpressionEditorOptions(e,t,n,i){return n.reduce((o,s)=>{var r,d;const a=t==="Field"?(r=e==null?void 0:e.binding)==null?void 0:r.field:e.id;return o[s]={hide:t==="Field"?!!((d=e==null?void 0:e.binding)!=null&&d.field):!1,description:"",title:this.expressionNames[s],type:"string",$converter:this.getExpressionConverter(a),refreshPanelAfterChanged:!0,editor:{type:"expression-editor",singleExpand:!1,dialogTitle:`${this.expressionNames[s]}编辑器`,showMessage:s==="validate"||s==="dataPicking"||s==="required",showMessageType:s==="dataPicking",beforeOpen:()=>this.onBeforeOpenExpression(e,s,t),onSubmitModal:u=>{const g=this.updateExpression(e,t,u,s);if(i){const C=this.buildRule(a,u,s);i(C)}return g}}},o},{})}getExpressionInfo(e,t,n){const i=t==="Field"?e.binding.field:e.id,o=this.getExpressionRule(i,n),s={value:o&&o.value,targetId:i,targetType:t,expressionType:n};return o&&o.message&&(s.message=o.message),s}getExpressionConfig(e,t,n=["compute","dependency","validate"],i){return{description:"表达式",title:"表达式",hide:!e.binding,properties:{...this.getExpressionEditorOptions(e,t,n,i)}}}getExpressionOptions(e,t,n){const i=this.getExpressionInfo(e,t,n);return{dialogTitle:`${this.expressionNames[n]||"表达式"}编辑器`,singleExpand:!1,showMessage:n==="required",beforeOpen:()=>this.onBeforeOpenExpression(e,n,t),expressionInfo:i}}}class _{constructor(e,t){b(this,"componentId");b(this,"viewModelId");b(this,"eventsEditorUtils");b(this,"formSchemaUtils");b(this,"formMetadataConverter");b(this,"designViewModelUtils");b(this,"designViewModelField");b(this,"controlCreatorUtils");b(this,"designerHostService");b(this,"designerContext");b(this,"modalService",null);b(this,"formRule",null);b(this,"schemaService",null);b(this,"metadataService",null);b(this,"propertyConfig",{type:"object",categories:{}});b(this,"expressionProperty");var n;this.componentId=e,this.designerHostService=t,this.eventsEditorUtils=t.eventsEditorUtils,this.formSchemaUtils=t.formSchemaUtils,this.formMetadataConverter=t.formMetadataConverter,this.viewModelId=((n=this.formSchemaUtils)==null?void 0:n.getViewModelIdByComponentId(e))||"",this.designViewModelUtils=t.designViewModelUtils,this.controlCreatorUtils=t.controlCreatorUtils,this.metadataService=t.metadataService,this.schemaService=t.schemaService,this.designerContext=t.designerContext,this.modalService=t.modalService,this.expressionProperty=new G(this.formSchemaUtils)}getFormDesignerInstance(){var e,t;return(t=(e=this.designerContext)==null?void 0:e.instances)==null?void 0:t.formDesigner.value}getTableInfo(){var e;return(e=this.schemaService)==null?void 0:e.getTableInfoByViewModelId(this.viewModelId)}setDesignViewModelField(e){var n;const t=e.binding&&e.binding.type==="Form"&&e.binding.field;if(t){if(!this.designViewModelField){const i=this.designViewModelUtils.getDgViewModel(this.viewModelId);this.designViewModelField=i.fields.find(o=>o.id===t)}e.updateOn=(n=this.designViewModelField)==null?void 0:n.updateOn}}getBasicPropConfig(e){return{description:"Basic Information",title:"基本信息",properties:{id:{description:"组件标识",title:"标识",type:"string",readonly:!0},type:{description:"组件类型",title:"控件类型",type:"select",editor:{type:"combo-list",textField:"name",valueField:"value",idField:"value",editable:!1,data:[{value:e.type,name:E.DgControl[e.type]&&E.DgControl[e.type].name}]}}}}}getAppearanceConfig(e=null,t={},n){const i={title:"外观",description:"Appearance"},o={class:{title:"class样式",type:"string",description:"组件的CSS样式",$converter:"/converter/appearance.converter",parentPropertyID:"appearance"},style:{title:"style样式",type:"string",description:"组件的样式",$converter:"/converter/appearance.converter",parentPropertyID:"appearance"}};for(const s in t)o[s]=Object.assign(o[s]||{},t[s]);return{...i,properties:{...o},setPropertyRelates(s,a){if(s){switch(s&&s.propertyID){case"class":case"style":{E.canvasChanged.value++;break}}n&&n(s,e,a)}}}}getPropertyEditorParams(e,t=[],n="visible",i={},o={},s=""){const{getVariables:a,getControlName:r,getStateMachines:d}=A(this.designerHostService),u=this.getRealTargetType(e),g=t&&t.length>0?t:["Const","Variable","StateMachine","Expression"],C={type:"property-editor",propertyTypes:g};return g.map(R=>{switch(R){case"Const":Object.assign(C,{constType:"enum",constEnums:[{id:!0,name:"是"},{id:!1,name:"否"}]},i);break;case"Expression":C.expressionConfig=this.getExpressionOptions(e,u,s||n);break;case"StateMachine":C.stateMachines=d();break;case"Variable":Object.assign(C,{controlName:r(e),newVariablePrefix:"is",newVariableType:"Boolean",variables:a(this.viewModelId),parentComponentId:this.componentId==="root-component"?"":"root-component",onBeforeOpenVariables:V=>{V.value=a(this.viewModelId)}},o),this.designerContext.designerMode==="PC_RTC"&&(C.newVariablePrefix="ext_"+C.newVariablePrefix);break}}),C}getVisibleProperty(e,t=""){var o;let n=["Const","Variable","StateMachine","Expression"];return t==="gridFieldEditor"?n=["Const","Expression"]:t==="form-group"&&!((o=e.binding)!=null&&o.field)&&(n=["Const","Variable","StateMachine"]),{visible:{title:"是否可见",type:"boolean",description:"运行时组件是否可见",editor:this.getPropertyEditorParams(e,n,"visible")}}}getBehaviorConfig(e,t="",n={},i){const o={title:"行为",description:""},s=this.getVisibleProperty(e,t);for(const r in n)s[r]=Object.assign(s[r]||{},n[r]);const a=this;return{...o,properties:{...s},setPropertyRelates(r,d){if(r){switch(r.propertyID){case"disabled":case"readonly":case"visible":a.afterMutilEditorChanged(e,r);break}i&&i(r,d)}}}}afterMutilEditorChanged(e,t){this.addNewVariableToViewModel(t,this.viewModelId),this.updateExpressionValue(t,e),this.clearExpression(t,e)}updateElementByParentContainer(e,t){const n=t&&t.parent&&t.parent.schema;if(!n)return;const i=n.contents.findIndex(s=>s.id===e),o=q.cloneDeep(n.contents[i]);n.contents.splice(i,1),n.contents.splice(i,0,o),E.refreshCanvas()}addNewVariableToViewModel(e,t){const n=e.propertyValue;if(!(n&&typeof n=="object")||!(n.type==="Variable"&&n.isNewVariable))return;const s={id:n.field,category:"locale",code:n.fullPath,name:n.fullPath,type:n.newVariableType||"String",isRtcVariable:this.designerContext.designerMode==="PC_RTC"?!0:void 0};delete n.newVariableType,delete n.isNewVariable,this.formSchemaUtils.getVariableByCode(s.code)||this.formSchemaUtils.getViewModelById("root-viewmodel").states.push(s)}getExpressions(){let e=[];return this.formRule?(this.formRule.expressions=this.formRule.expressions||[],e=this.formRule.expressions||[]):e=this.formSchemaUtils.getExpressions(),e}updateExpressionValue(e,t){const n=e.propertyValue;if(!((n&&n.type)==="Expression"&&n.expressionInfo))return;const{expressionId:s,expressionInfo:a}=n,{targetId:r,targetType:d,expressionType:u,value:g,message:C}=a,R=this.getExpressions();let V=R.find(I=>I.target===r);V||(V={target:r,rules:[],targetType:d},R.push(V));const T=V.rules.find(I=>I.type===u);if(T)T.value=g,T.message=C,(u==="minDate"||u==="maxDate"||u==="defaultTime")&&(T.elementId=t.id);else{const I={id:s,type:u,value:g,message:C,elementId:t.id};V.rules.push(I)}delete n.expressionInfo}clearExpression(e,t){const n=e.propertyValue;if(n&&n.type==="Expression")return;const o=e.propertyID,s=this.getExpressions(),a=t.binding?t.binding.field:t.id,r=s.find(d=>d.target===a);!r||!r.rules||(r.rules=r.rules.filter(d=>d.type!==o))}getExpressionOptions(e,t,n){return this.expressionProperty.getExpressionOptions(e,t,n)}getRealTargetType(e){return["response-toolbar-item","tab-toolbar-item","section-toolbar-item","drawer-toolbar-item"].indexOf(e.type)>-1?"Button":e.binding&&e.binding.field?"Field":"Container"}createBaseEventProperty(e){const t={};return t[this.viewModelId]={type:"events-editor",editor:{initialData:e,viewSourceHandle:n=>{var i;((i=n.controller)==null?void 0:i.label.indexOf(this.formSchemaUtils.getModule().code))>-1&&this.eventsEditorUtils.jumpToMethod(n)}}},t}}class L extends _{constructor(e,t){super(e,t)}getPropertyConfig(e){return this.propertyConfig.categories.basic=this.getBasicPropConfig(e),this.propertyConfig.categories.appearance=this.getAppearanceConfig(e),this.propertyConfig.categories.behavior=this.getBehaviorConfig(e),this.propertyConfig}}function z(l,e){const t=l.schema,n=new E.UseTemplateDragAndDropRules;function i(c){var h;const{componentType:f,sourceType:y,sourceElement:x}=c;return!!(y==="control"&&f===E.DgControl["query-solution"].type||y==="move"&&f===E.DgControl.section.type&&((h=x==null?void 0:x.className)!=null&&h.includes("f-section-scheme")))}function o(c,f){var h,w;const x=(e==null?void 0:e.schemaService).getTreeGridUdtFields(c);if(x){const v=x.find(F=>F.key===f),P=v&&v.field;if((w=(h=P==null?void 0:P.type)==null?void 0:h.name)!=null&&w.includes("PathHierarchyInfo"))return!0}}function s(){const c=e==null?void 0:e.formSchemaUtils,f=c.getComponentById("root-component");return c.selectNode(f,x=>{if(x.type==="component-ref"){const h=c.getComponentById(x.component),w=c.getViewModelById(h==null?void 0:h.viewModel);if((h==null?void 0:h.componentType)==="data-grid"&&(w==null?void 0:w.bindTo)==="/"){const v=c.selectNode(h,P=>P.type==="tree-grid");return v?o(h==null?void 0:h.viewModel,v.udtField):!0}}})}function a(){const c=e==null?void 0:e.formSchemaUtils;return c.selectNode(t,y=>{if(y.type==="component-ref"){const x=c.getComponentById(y.component);if((x==null?void 0:x.componentType)==="data-grid"&&c.selectNode(x,w=>w.contents&&w.contents.find(v=>v.type===E.DgControl["filter-bar"].type)))return!0}})}function r(){const c=e==null?void 0:e.formSchemaUtils,f=c.getComponentById("root-component");return!!c.selectNode(f,x=>x.type===E.DgControl["query-solution"].type)}function d(c){var h;const f=(h=t.appearance)==null?void 0:h.class,{sourceType:y}=c;return f&&f.split(" ").includes("f-page")?y==="control"?!r()&&!a()&&s():y==="move":!1}function u(c){const{componentType:f,sourceType:y}=c;return y==="control"&&f===E.DgControl.drawer.type}function g(c){var w,v,P,F;const f=(w=t.appearance)==null?void 0:w.class,{sourceType:y}=c;return!(f&&f.split(" ").includes("f-page"))||((F=(P=(v=l==null?void 0:l.parent)==null?void 0:v.schema)==null?void 0:P.appearance)==null?void 0:F.class)==="f-page-content-main"?!1:y==="control"?!(t.contents&&t.contents.find(K=>K.type===E.DgControl.drawer.type)):y==="move"}function C(c){if(i(c))return d(c);if(u(c))return g(c);if(!E.useDragulaCommonRule().basalDragulaRuleForContainer(c,e))return!1;const{canAccept:y}=n.getTemplateRule(l,e);return y}function R(){return t.componentType?"display:inherit;flex-direction:inherit;margin-bottom:10px":""}function V(){if(l.schema.appearance&&l.schema.appearance.class&&l.schema.appearance.class.includes("fm-page-footer-container"))return!1;const{canMove:c}=n.getTemplateRule(l,e);return c}function T(){if(l.schema.appearance&&l.schema.appearance.class&&l.schema.appearance.class.includes("fm-page-footer-container"))return!1;const{canDelete:c}=n.getTemplateRule(l,e);return c}function I(){const{canMove:c,canDelete:f}=n.getTemplateRule(l,e);return!c&&!f}function J(c){const f=new L(c,e),{schema:y}=l;return f.getPropertyConfig(y)}return{canAccepts:C,getStyles:R,checkCanMoveComponent:V,checkCanDeleteComponent:T,hideNestedPaddingInDesginerView:I,getPropsConfig:J}}const O=m.defineComponent({name:"FContentContainerDesign",props:S,emits:[],setup(l,e){const t=m.ref(),n=m.inject("designer-host-service"),i=m.inject("design-item-context"),o=z(i,n),s=E.useDesignerComponent(t,i,o),a=m.computed(()=>{const r={"drag-container":!0};return j.getCustomClass(r,l==null?void 0:l.customClass)});return m.onMounted(()=>{t.value.componentInstance=s}),e.expose(s.value),()=>m.createVNode("div",{ref:t,class:a.value,style:l.customStyle,"data-dragref":`${i.schema.id}-container`},[e.slots.default&&e.slots.default()])}}),Q={install(l){l.component(k.name,k)},register(l,e,t,n,i){l["content-container"]=k,e["content-container"]=U(i)},registerDesigner(l,e,t,n){l["content-container"]=O,e["content-container"]=U(n)}};p.ContentContainer=k,p.ContentContainerDesign=O,p.contentContainerProps=S,p.default=Q,p.propsResolver=$,p.propsResolverGenerator=U,Object.defineProperties(p,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});