general-basic-form 1.0.26 → 1.0.27

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.
@@ -0,0 +1 @@
1
+ (function(f,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("vue-router")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router"],e):(f=typeof globalThis<"u"?globalThis:f||self,e(f.Index={},f.Vue,f["vue-router"]))})(this,function(f,e,I){"use strict";const z={placeholder:"请输入",style:"width: 200px",clearable:!0},L={style:"width: 227px","start-placeholder":"开始日期","end-placeholder":"结束日期",type:"daterange"},$={placeholder:"请选择",filterable:!0,clearable:!0,style:"width: 200px"},N=e.defineComponent({components:{InputArchive:t=>{const{templateEle:n}=t;return n()}},props:{item:null},setup(){const t=e.inject("queryParams",{}),n=e.inject("getList"),o=e.inject("size");return{queryParams:t,getList:n,size:o}},data(){return{inputSetting:{...z,...this.item.inputSetting}}},methods:{currentInputComponent(){return"input-archive"}}}),h=(t,n)=>{const o=t.__vccOpts||t;for(const[i,s]of n)o[i]=s;return o};function F(t,n,o,i,s,l){const a=e.resolveComponent("el-input");return e.openBlock(),e.createBlock(a,e.mergeProps({onKeydown:e.withKeys(t.getList,["enter"]),modelValue:t.queryParams[t.item.prop],"onUpdate:modelValue":n[0]||(n[0]=r=>t.queryParams[t.item.prop]=r),size:t.size},t.inputSetting),e.createSlots({_:2},[e.renderList(t.item.template,(r,m)=>({name:m,fn:e.withCtx(()=>[r?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.currentInputComponent()),{key:m,templateEle:r},null,8,["templateEle"])):e.createCommentVNode("",!0)])}))]),1040,["onKeydown","modelValue","size"])}const V=h(N,[["render",F]]),E=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),i=e.inject("size"),s=e.ref({...z,...n.inputSetting});return(l,a)=>{const r=e.resolveComponent("el-input-number");return e.openBlock(),e.createBlock(r,e.mergeProps({modelValue:e.unref(o)[l.item.prop],"onUpdate:modelValue":a[0]||(a[0]=m=>e.unref(o)[l.item.prop]=m),size:e.unref(i)},s.value),null,16,["modelValue","size"])}}}),q=Symbol(),j={class:"input-graphic-verification"},R=["src","alt"],U=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,{graphicSrc:o="",graphicAlt:i="",getGraphic:s=()=>{},key:l}=n,{formLoading:a,updateFormLoading:r}=e.inject(q),m=async()=>{s&&!a.value&&await s()};return(p,k)=>{const u=e.resolveDirective("loading");return e.withDirectives((e.openBlock(),e.createElementBlock("div",j,[e.createVNode(V,{item:p.item,class:"input"},null,8,["item"]),e.createElementVNode("img",{class:"graphic",onClick:m,src:e.unref(o),alt:e.unref(i)||`${e.unref(l)}`},null,8,R)])),[[u,e.unref(a)]])}}}),_e="",T=h(U,[["__scopeId","data-v-006751c3"]]),g="获取验证码",G=60,A=e.defineComponent({__name:"verification-button",props:{getSmscode:{type:Function}},setup(t){const{getSmscode:n}=t,o=e.ref(g),i=e.ref(null),s=e.computed(()=>o.value===g),l=()=>{i&&(clearInterval(i.value),i.value=null,o.value=g)},a=async()=>{if(o.value===g)if(o.value=G,i.value=setInterval(()=>{if(Number(o.value)<=0||!o.value){l();return}else o.value=Number(o.value)-1},1e3),n)await n()===!1&&l();else return};return e.onBeforeUnmount(()=>{l()}),(r,m)=>{const p=e.resolveComponent("el-button");return e.openBlock(),e.createBlock(p,{class:"verifiaction-button",style:e.normalizeStyle({color:s.value?"var(--color-primary, #409EFF)":"var(--text-color-placeholder, #A8ABB2)",cursor:s.value?"pointer":"default"}),onClick:a},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value?g:o.value+"s"),1)]),_:1},8,["style"])}}}),ke="",O=h(A,[["__scopeId","data-v-4074e137"]]),Q=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=n;return o.template={append:()=>e.h(O,{getSmscode:o.getSmscode})},(i,s)=>(e.openBlock(),e.createBlock(V,{item:e.unref(o),class:"input"},null,8,["item"]))}}),K=e.defineComponent({components:{slotArchive:t=>{const{templateEle:n}=t;return n()}},props:{item:null},setup(){},data(){return{dividerSetting:{...this.item.dividerSetting}}},methods:{currentInputComponent(){return"slot-archive"}}});function M(t,n,o,i,s,l){const a=e.resolveComponent("el-divider");return e.openBlock(),e.createBlock(a,e.normalizeProps(e.guardReactiveProps(t.dividerSetting)),e.createSlots({_:2},[e.renderList(t.item.template,(r,m)=>({name:m,fn:e.withCtx(()=>[r?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.currentInputComponent()),{key:m,templateEle:r},null,8,["templateEle"])):e.createCommentVNode("",!0)])}))]),1040)}const J=h(K,[["render",M]]),W=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),i=e.inject("size"),s=e.ref({...n.radioGroupSetting});return(l,a)=>{const r=e.resolveComponent("el-radio"),m=e.resolveComponent("el-radio-group");return e.openBlock(),e.createBlock(m,e.mergeProps({modelValue:e.unref(o)[l.item.prop],"onUpdate:modelValue":a[0]||(a[0]=p=>e.unref(o)[l.item.prop]=p),size:e.unref(i)},s.value),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.item.option||[],p=>(e.openBlock(),e.createBlock(r,e.mergeProps({size:e.unref(i),key:p.label},p),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),_:2},1040,["size"]))),128))]),_:1},16,["modelValue","size"])}}}),H=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),i=e.inject("size"),s=e.ref({...n.checkboxGroupSetting});return(l,a)=>{const r=e.resolveComponent("el-checkbox"),m=e.resolveComponent("el-checkbox-group");return e.openBlock(),e.createBlock(m,e.mergeProps({modelValue:e.unref(o)[l.item.prop],"onUpdate:modelValue":a[0]||(a[0]=p=>e.unref(o)[l.item.prop]=p),size:e.unref(i)},s.value),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.item.option||[],p=>(e.openBlock(),e.createBlock(r,e.mergeProps({size:e.unref(i),key:p.label},p),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),_:2},1040,["size"]))),128))]),_:1},16,["modelValue","size"])}}}),X=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),i=e.inject("size"),s=e.ref({...L,...n.datePackerSetting});return(l,a)=>{const r=e.resolveComponent("el-date-picker");return e.openBlock(),e.createBlock(r,e.mergeProps({modelValue:e.unref(o)[l.item.prop],"onUpdate:modelValue":a[0]||(a[0]=m=>e.unref(o)[l.item.prop]=m),size:e.unref(i)},s.value),null,16,["modelValue","size"])}}}),Y=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),i=e.inject("size"),s=e.ref({...$,...n.selectSetting});return(l,a)=>{const r=e.resolveComponent("el-option"),m=e.resolveComponent("el-select");return e.openBlock(),e.createBlock(m,e.mergeProps({modelValue:e.unref(o)[l.item.prop],"onUpdate:modelValue":a[0]||(a[0]=p=>e.unref(o)[l.item.prop]=p),size:e.unref(i)},s.value),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.item.option||[],p=>(e.openBlock(),e.createBlock(r,{key:p.value,label:p.label,value:p.value},null,8,["label","value"]))),128))]),_:1},16,["modelValue","size"])}}}),Z=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),i=e.inject("size"),s=e.ref({...$,...n.selectSetting});return(l,a)=>{const r=e.resolveComponent("el-cascader");return e.openBlock(),e.createBlock(r,e.mergeProps({modelValue:e.unref(o)[l.item.prop],"onUpdate:modelValue":a[0]||(a[0]=m=>e.unref(o)[l.item.prop]=m),size:e.unref(i),options:l.item.options||[]},s.value),null,16,["modelValue","size","options"])}}}),v=e.defineComponent({name:"GeneralBasicForm",components:{Input:V,InputNumber:E,InputGraphicVerification:T,InputMobileVerification:Q,Divider:J,Radio:W,Checkbox:H,DatePicker:X,Select:Y,Cascader:Z},props:{showSearch:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},formOnly:{type:Boolean,default:!1},getList:{type:Function,default:()=>{}},afterReset:{type:Function,default:()=>{}},formItem:{type:Array,default:[]},size:{type:String,default:"default"},labelWidth:{type:String,default:"90px"},noUrlParameters:{type:Boolean,default:()=>!1},formData:{type:Object,default:()=>{}},noInputBlank:{type:Boolean,default:()=>!1}},data(){return{formLoading:this.loading||!1,trimRegex:/\S/}},setup(t){const{size:n,noUrlParameters:o,getList:i}=t,s=I.useRoute(),l=e.ref({...o?{}:s==null?void 0:s.query});return e.provide("queryParams",l),e.provide("size",n),e.provide("getList",i),{queryParams:l}},watch:{formData:{handler(t,n){JSON.stringify(t)!==JSON.stringify(n)&&(this.queryParams={...this.noUrlParameters?{}:this.queryParams,...t})},immediate:!0},queryParams:{handler(t){this.$emit("update:formData",t)},deep:!0},loading(t){this.formLoading!==t&&(this.formLoading=t)},formLoading(t){this.loading!==t&&this.$emit("update:loading",t)}},provide(){return{[q]:{formLoading:e.computed(()=>this.formLoading),updateFormLoading:t=>{this.formLoading=t}}}},methods:{handleQuery(){var o;const t={page:1,limit:10},n={...(o=this.$route)==null?void 0:o.query,...this.queryParams,...t};this.noUrlParameters||this.$router.push({query:{...n}}),this.getList({...n})},async resetQuery(){var n;this.$refs.queryFormRef.resetFields();const t={page:1};this.noUrlParameters||await this.$router.push({query:{...t}}),this.queryParams={...this.noUrlParameters?{}:(n=this.$route)==null?void 0:n.query},this.afterReset(),this.handleQuery()},getItemRules(t){const{type:n,rules:o=[]}=t,i=[...o];return this.noInputBlank&&n==="input"&&i.push({pattern:this.trimRegex,message:"请输入(不能仅输入空格)",trigger:"blur"}),i}}});function ee(t,n,o,i,s,l){const a=e.resolveComponent("Input"),r=e.resolveComponent("Radio"),m=e.resolveComponent("Select"),p=e.resolveComponent("Divider"),k=e.resolveComponent("Cascader"),u=e.resolveComponent("Checkbox"),C=e.resolveComponent("DatePicker"),S=e.resolveComponent("InputNumber"),P=e.resolveComponent("InputMobileVerification"),B=e.resolveComponent("InputGraphicVerification"),y=e.resolveComponent("el-form-item"),b=e.resolveComponent("el-button"),w=e.resolveComponent("el-form"),d=e.resolveDirective("loading");return e.withDirectives((e.openBlock(),e.createBlock(w,e.mergeProps({model:t.queryParams,ref:"queryFormRef",inline:"","label-position":"left","label-width":t.labelWidth},t.$attrs),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.formItem,c=>(e.openBlock(),e.createBlock(y,{label:c.label,prop:c.prop,key:c.prop,rules:t.getItemRules(c)},{default:e.withCtx(()=>[c.type==="input"?(e.openBlock(),e.createBlock(a,{key:0,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="radio"?(e.openBlock(),e.createBlock(r,{key:1,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="select"?(e.openBlock(),e.createBlock(m,{key:2,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="divider"?(e.openBlock(),e.createBlock(p,{key:3,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="cascader"?(e.openBlock(),e.createBlock(k,{key:4,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="checkbox"?(e.openBlock(),e.createBlock(u,{key:5,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="date-picker"?(e.openBlock(),e.createBlock(C,{key:6,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="input-number"?(e.openBlock(),e.createBlock(S,{key:7,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="form-item-slot"?e.renderSlot(t.$slots,c.name,{key:8}):e.createCommentVNode("",!0),c.type==="input-mobile-verification"?(e.openBlock(),e.createBlock(P,{key:9,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="input-graphic-verification"?(e.openBlock(),e.createBlock(B,{item:c,key:c.key},null,8,["item"])):e.createCommentVNode("",!0)]),_:2},1032,["label","prop","rules"]))),128)),e.renderSlot(t.$slots,"default"),t.formOnly?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(y,{key:0},{default:e.withCtx(()=>[e.withDirectives((e.openBlock(),e.createBlock(b,{type:"primary",size:t.size,onClick:t.handleQuery},{default:e.withCtx(()=>[e.createTextVNode("查询")]),_:1},8,["size","onClick"])),[[d,t.formLoading]]),e.createVNode(b,{size:t.size,onClick:t.resetQuery},{default:e.withCtx(()=>[e.createTextVNode("重置")]),_:1},8,["size","onClick"])]),_:1})),e.renderSlot(t.$slots,"behind-the-button")]),_:3},16,["model","label-width"])),[[e.vShow,t.showSearch]])}const te=h(v,[["render",ee]]),oe=["infinite-scroll-disabled"],ne=["infinite-scroll-disabled"],re={class:"checkbox"},le=e.defineComponent({__name:"InfiniteScrollList",props:{search:{type:Function,required:!0},checkbox:{type:Boolean,required:!1},id:{type:String,required:!0},name:{type:String,required:!0},extra:{type:null,required:!1},defaultSelection:{type:Array,required:!1}},setup(t,{expose:n}){const o=t,{search:i,id:s,name:l,extra:a}=o,r=e.ref([]),m=e.ref(1),p=e.ref(!1),k=e.ref([]),u=e.ref(!1),C=(d,c)=>{const{i:x}=d;return a&&a!=="false"?a(x):""},S=d=>{k.value=d.map(c=>typeof c=="object"?c[s]:c)};e.watch(()=>o.defaultSelection,(d=[],c=[])=>{S(d)},{immediate:!0});const P=()=>{B(),k.value=[]},B=()=>{m.value=1,r.value=[],p.value=!1},y=async()=>{if(u.value||p.value)return;u.value=!0;const d=await i(m.value);d&&d.length>0?(r.value=[...r.value,...d],m.value+=1):p.value=!0,u.value=!1},b=()=>{B(),y()},w=e.computed(()=>r.value.filter(d=>k.value.includes(d[s])))||{};return n({reset:P,lowReset:B,loadList:y,selectInfo:w,list:r,ifbottom:p,refreshList:b}),(d,c)=>{const x=e.resolveComponent("el-checkbox"),de=e.resolveComponent("el-checkbox-group"),D=e.resolveDirective("infinite-scroll"),fe=e.resolveDirective("loading");return o.checkbox?e.withDirectives((e.openBlock(),e.createBlock(de,e.mergeProps({key:0,modelValue:k.value,"onUpdate:modelValue":c[0]||(c[0]=_=>k.value=_)},o),{default:e.withCtx(()=>[e.withDirectives((e.openBlock(),e.createElementBlock("ul",{class:"list","infinite-scroll-disabled":p.value},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,_=>(e.openBlock(),e.createElementBlock("li",{key:_[e.unref(s)],class:"list-item"},[e.createVNode(x,{label:_[e.unref(s)],class:"checkbox"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_[e.unref(l)])+" ",1),o.extra?(e.openBlock(),e.createBlock(C,{key:0,i:_},null,8,["i"])):e.createCommentVNode("",!0)]),_:2},1032,["label"])]))),128))],8,oe)),[[D,y]])]),_:1},16,["modelValue"])),[[fe,u.value]]):e.withDirectives((e.openBlock(),e.createElementBlock("ul",e.mergeProps({key:1,class:"list","infinite-scroll-disabled":p.value},o),[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,_=>(e.openBlock(),e.createElementBlock("li",{key:_[e.unref(s)],class:"list-item"},[e.createElementVNode("div",re,[e.createTextVNode(e.toDisplayString(_[e.unref(l)])+" ",1),o.extra?(e.openBlock(),e.createBlock(C,{key:0,i:_},null,8,["i"])):e.createCommentVNode("",!0)])]))),128))],16,ne)),[[D,y]])}}}),ue="",ie=h(le,[["__scopeId","data-v-fa74e9b9"]]),se={key:1},ae=e.defineComponent({__name:"Descriptions",props:{formData:{type:Object,required:!0},formItem:{type:Array,required:!0}},setup(t){const n=t,o=(i,s)=>{const{i:l,render:a,formData:r}=i;return a({row:r,$index:l})};return(i,s)=>{const l=e.resolveComponent("el-descriptions-item"),a=e.resolveComponent("el-descriptions");return e.openBlock(),e.createBlock(a,e.mergeProps({column:1,border:"",class:"form-width"},n),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.formItem,(r,m)=>(e.openBlock(),e.createBlock(l,e.mergeProps({key:r.prop,label:r.label},r.descriptionsItemProps),{default:e.withCtx(()=>[r.render?(e.openBlock(),e.createBlock(o,{key:0,i:m,render:r.render,formData:t.formData},null,8,["i","render","formData"])):(e.openBlock(),e.createElementBlock("span",se,e.toDisplayString(t.formData[r.prop]),1))]),_:2},1040,["label"]))),128))]),_:1},16)}}}),ce=te,pe=ie,me=ae;f.VDescriptions=me,f.VGeneralBasicForm=ce,f.VInfiniteScrollList=pe,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .input-graphic-verification[data-v-006751c3]{display:flex;gap:12px;width:100%}.input-graphic-verification .input[data-v-006751c3]{flex:auto}.input-graphic-verification .graphic[data-v-006751c3]{width:109px;height:43px;object-fit:fill;flex:none}.verifiaction-button[data-v-4074e137]{width:109px}.list[data-v-fa74e9b9]{height:272px;overflow:auto;padding:8px 0}.list .checkbox[data-v-fa74e9b9]{width:calc(100% - 32px);padding:0 16px}
package/package.json CHANGED
@@ -1,12 +1,20 @@
1
1
  {
2
2
  "name": "general-basic-form",
3
- "version": "1.0.26",
3
+ "version": "1.0.27",
4
4
  "description": "",
5
- "main": "./src/index.js",
5
+ "main": "./src/index.ts",
6
+ "type": "module",
6
7
  "scripts": {
7
- "serve": "webpack-dev-server --config config/webpack.dev.js",
8
- "build": "webpack --config config/webpack.prod.js",
9
- "test": "echo \"Error: no test specified\" && exit 1"
8
+ "build": "cross-env CURRENT_ENV=prod run-p type-check && run-p build-only",
9
+ "test:e2e": "playwright test",
10
+ "build-only": "vite build",
11
+ "type-check": "tsc --noEmit -p tsconfig.json --composite false",
12
+ "link": "tsx script/link.ts && yarn link",
13
+ "unlink": "tsx script/unlinkModule.ts && yarn unlink && run-p build",
14
+ "linkNode": "tsx script/linkNode.ts && yarn link && run-p dev",
15
+ "unlinkNode": "tsx script/unlinkNode.ts && yarn unlink && run-p buildts",
16
+ "dev": "tsc -w -p .",
17
+ "buildts": "rimraf dist && tsc -p ."
10
18
  },
11
19
  "keywords": [
12
20
  "general-basic-form",
@@ -15,18 +23,28 @@
15
23
  "vue2",
16
24
  "vue3",
17
25
  "element-plus",
18
- "element-plus"
26
+ "typescript"
19
27
  ],
20
28
  "author": "chendeli419287484@qq.com",
21
29
  "license": "ISC",
22
30
  "repository": {
23
31
  "type": "git",
24
- "url": "https://github.com/Alan1034/GeneralBasicForm"
32
+ "url": "git+https://github.com/Alan1034/GeneralBasicForm.git"
25
33
  },
26
34
  "devDependencies": {
27
- "babel-eslint": "^10.1.0",
28
- "eslint": "^7.32.0",
29
- "eslint-plugin-vue": "^7.14.0"
35
+ "@playwright/test": "^1.36.1",
36
+ "@types/node": "^20.8.10",
37
+ "@vitejs/plugin-legacy": "^4.1.1",
38
+ "@vitejs/plugin-vue": "^4.2.3",
39
+ "@vitejs/plugin-vue-jsx": "^3.0.1",
40
+ "cross-env": "^7.0.3",
41
+ "less": "^4.2.0",
42
+ "chalk": "^2.4.2",
43
+ "npm-run-all": "^4.1.5",
44
+ "rimraf": "^5.0.5",
45
+ "tsx": "^4.0.0",
46
+ "typescript": "^5.2.2",
47
+ "vite-plugin-image-optimizer": "^1.1.6"
30
48
  },
31
- "dependencies": {}
49
+ "typings": "./publish/index.d.ts"
32
50
  }
@@ -0,0 +1,17 @@
1
+ /*
2
+ * @Author: 陈德立*******419287484@qq.com
3
+ * @Date: 2023-11-07 17:55:59
4
+ * @LastEditTime: 2023-11-08 10:24:14
5
+ * @LastEditors: 陈德立*******419287484@qq.com
6
+ * @Github: https://github.com/Alan1034
7
+ * @Description:
8
+ * @FilePath: \GeneralBasicForm\public\index.d.ts
9
+ *
10
+ */
11
+ /// <reference types="vite/client" />
12
+ declare module "*.vue" {
13
+ import { DefineComponent } from "vue"
14
+ const component: DefineComponent<{}, {}, any>
15
+ export default component
16
+ }
17
+ declare module "general-basic-form";
@@ -0,0 +1,24 @@
1
+ import path from "path";
2
+ import fs from 'fs'
3
+ import chalk from 'chalk'
4
+ import { fileURLToPath } from 'url'
5
+ const __filenameNew = fileURLToPath(import.meta.url)
6
+ const __dirnameNew = path.dirname(__filenameNew)
7
+ export const updateMain = (mainDir:string) => {
8
+ try {
9
+ const packageTxt = fs.readFileSync(path.join(__dirnameNew, '../package.json'), 'utf8');
10
+ const packageJson = JSON.parse(packageTxt);
11
+
12
+ delete packageJson.files
13
+ delete packageJson.module
14
+ delete packageJson.exports
15
+ packageJson.typings = "./publish/index.d.ts"
16
+ packageJson.main = mainDir
17
+ const versionData = JSON.stringify(packageJson, null, 2);
18
+ fs.writeFileSync(path.join(__dirnameNew, '../package.json'), versionData, 'utf8');
19
+ console.log(chalk.green.bold('修改入口配置成功!当前入口路径为为:' + mainDir));
20
+ } catch (error) {
21
+ console.log(chalk.red.bold('修改入口配置出错:', error.toString()));
22
+ }
23
+
24
+ }
package/script/link.ts ADDED
@@ -0,0 +1,14 @@
1
+ /*
2
+ * @Author: 陈德立*******419287484@qq.com
3
+ * @Date: 2023-11-10 09:39:59
4
+ * @LastEditTime: 2023-11-15 18:38:43
5
+ * @LastEditors: 陈德立*******419287484@qq.com
6
+ * @Github: https://github.com/Alan1034
7
+ * @Description: link处理流程
8
+ * @FilePath: \VueNpmFrame\script\link.ts
9
+ *
10
+ */
11
+ import { updateMain } from "./initialization";
12
+
13
+
14
+ updateMain("./src/index.ts")
@@ -0,0 +1,14 @@
1
+ /*
2
+ * @Author: 陈德立*******419287484@qq.com
3
+ * @Date: 2023-11-10 09:39:59
4
+ * @LastEditTime: 2024-03-01 11:27:02
5
+ * @LastEditors: 陈德立*******419287484@qq.com
6
+ * @Github: https://github.com/Alan1034
7
+ * @Description: link处理流程
8
+ * @FilePath: \VueNpmFrame\script\linkNode.ts
9
+ *
10
+ */
11
+ import { updateMain } from "./initialization";
12
+
13
+
14
+ updateMain("./dist/src/index.js")
@@ -0,0 +1,48 @@
1
+ /*
2
+ * @Author: 陈德立*******419287484@qq.com
3
+ * @Date: 2023-11-10 09:39:59
4
+ * @LastEditTime: 2023-11-25 23:52:27
5
+ * @LastEditors: 陈德立*******419287484@qq.com
6
+ * @Github: https://github.com/Alan1034
7
+ * @Description: unlink处理流程
8
+ * @FilePath: \vite-plugin-update-version\script\unlinkModule.ts
9
+ *
10
+ */
11
+ import path from "path";
12
+ import fs from 'fs'
13
+ import chalk from 'chalk'
14
+ import { fileURLToPath } from 'url'
15
+ const __filenameNew = fileURLToPath(import.meta.url)
16
+ const __dirnameNew = path.dirname(__filenameNew)
17
+ const updateMain = () => {
18
+ try {
19
+ const packageTxt = fs.readFileSync(path.join(__dirnameNew, '../package.json'), 'utf8');
20
+ const packageJson = JSON.parse(packageTxt);
21
+ const umdDir = "./dist/index.umd.cjs"
22
+ const esDir = "./dist/index.js"
23
+ const types = "./dist/index.d.ts"
24
+ packageJson.type = "module"
25
+ packageJson.main = umdDir
26
+ packageJson.module = esDir
27
+ packageJson.exports = {
28
+ ".": {
29
+ "import": esDir,
30
+ "require": umdDir,
31
+ "types": types
32
+ },
33
+ "./style": "./dist/style.css"
34
+ }
35
+ packageJson.typings = types
36
+ packageJson.files = [
37
+ "/dist"
38
+ ]
39
+ const versionData = JSON.stringify(packageJson, null, 2);
40
+ fs.writeFileSync(path.join(__dirnameNew, '../package.json'), versionData, 'utf8');
41
+ console.log(chalk.green.bold('修改入口配置成功!当前入口路径为为:' + umdDir));
42
+ } catch (error) {
43
+ console.log(chalk.red.bold('修改入口配置出错:', error.toString()));
44
+ }
45
+
46
+ }
47
+
48
+ updateMain()
@@ -0,0 +1,38 @@
1
+ /*
2
+ * @Author: 陈德立*******419287484@qq.com
3
+ * @Date: 2023-11-10 09:39:59
4
+ * @LastEditTime: 2024-03-01 11:33:05
5
+ * @LastEditors: 陈德立*******419287484@qq.com
6
+ * @Github: https://github.com/Alan1034
7
+ * @Description: unlink处理流程
8
+ * @FilePath: \VueNpmFrame\script\unlinkNode.ts
9
+ *
10
+ */
11
+ import path from "path";
12
+ import fs from 'fs'
13
+ import chalk from 'chalk'
14
+ import { fileURLToPath } from 'url'
15
+ const __filenameNew = fileURLToPath(import.meta.url)
16
+ const __dirnameNew = path.dirname(__filenameNew)
17
+ const updateMain = () => {
18
+ try {
19
+ const packageTxt = fs.readFileSync(path.join(__dirnameNew, '../package.json'), 'utf8');
20
+ const packageJson = JSON.parse(packageTxt);
21
+ const cjsDir = "./dist/src/index.js"
22
+ const types = "./dist/src/index.d.ts"
23
+ delete packageJson.type
24
+ packageJson.main = cjsDir
25
+ packageJson.typings = types
26
+ packageJson.files = [
27
+ "/dist"
28
+ ]
29
+ const versionData = JSON.stringify(packageJson, null, 2);
30
+ fs.writeFileSync(path.join(__dirnameNew, '../package.json'), versionData, 'utf8');
31
+ console.log(chalk.green.bold('修改入口配置成功!当前入口路径为为:' + cjsDir));
32
+ } catch (error) {
33
+ console.log(chalk.red.bold('修改入口配置出错:', error.toString()));
34
+ }
35
+
36
+ }
37
+
38
+ updateMain()
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "include": [
3
+ "public/index.d.tsex.d.ts",
4
+ "src/**/*",
5
+ "src/**/*.vue",
6
+ "public/*",
7
+ ],
8
+ "exclude": [],
9
+ "compilerOptions": {
10
+ "declaration": true,
11
+ "allowJs": true,
12
+ "composite": true
13
+ }
14
+ }
package/vite.config.js ADDED
@@ -0,0 +1,121 @@
1
+ import legacy from '@vitejs/plugin-legacy'
2
+ import { fileURLToPath } from 'url'
3
+ import { defineConfig, loadEnv, splitVendorChunkPlugin } from 'vite'
4
+ import vue from '@vitejs/plugin-vue'
5
+ import vueJsx from '@vitejs/plugin-vue-jsx'
6
+ import { ViteImageOptimizer } from 'vite-plugin-image-optimizer';
7
+ import path from 'path';
8
+ const __filenameNew = fileURLToPath(import.meta.url)
9
+ const __dirnameNew = path.dirname(__filenameNew)
10
+ const resolve = (dir) => path.resolve(__dirnameNew, dir);
11
+ // https://vitejs.dev/config/
12
+ export default defineConfig(({ command, mode }) => {
13
+ // 根据当前工作目录中的 `mode` 加载 .env 文件
14
+ // 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。
15
+ const env = loadEnv(mode, process.cwd(), '')
16
+ // console.log(command)
17
+ // console.log(env)
18
+ // console.log(env.CURRENT_ENV)
19
+ // console.log(env.APP_ENV)
20
+ // console.log(env.VUE_APP_BASE_API)
21
+ return {
22
+ // vite环境变量配置
23
+ define: {
24
+ "CURRENT_ENV": JSON.stringify(env.CURRENT_ENV),
25
+ },
26
+ server: {
27
+ open: true,
28
+ },
29
+ resolve: {
30
+ alias: {
31
+ '@': resolve('src'),//路径化名
32
+ },
33
+
34
+ extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
35
+ },
36
+
37
+ plugins: [
38
+ /**
39
+ * @description: vite自带的文件分割配置
40
+ * @return {*}
41
+ */
42
+ {
43
+ ...splitVendorChunkPlugin(),
44
+ apply: 'build',
45
+ },
46
+ /**
47
+ * @description: 图片压缩插件
48
+ * @return {*}
49
+ */
50
+ {
51
+ ...ViteImageOptimizer({
52
+ /* pass your config */
53
+ }),
54
+ // enforce: 'pre',
55
+ apply: 'build',
56
+ },
57
+ /**
58
+ * @description: 兼容旧版本浏览器
59
+ * @return {*}
60
+ */
61
+ {
62
+ ...legacy({
63
+ targets: ['defaults'],
64
+ }),
65
+ apply: 'build',
66
+ },
67
+ vue(),
68
+ vueJsx(),
69
+ ],
70
+ css: {
71
+ preprocessorOptions: {
72
+ less: {
73
+ // 支持内联 JavaScript
74
+ javascriptEnabled: true,
75
+ },
76
+ },
77
+ },
78
+ /**
79
+ * @description: 打包时才调用
80
+ * @return {*}
81
+ */
82
+ build: {
83
+ lib: {
84
+ // Could also be a dictionary or array of multiple entry points
85
+ // 添加打包入口文件夹
86
+ entry: resolve(`${__dirnameNew}/src`, 'index.ts'),
87
+ // formats: ['es', 'cjs', 'umd', 'iife'],
88
+ name: 'Index',
89
+ // the proper extensions will be added
90
+ // fileName: (format) => `index.${format}.js`,
91
+ fileName: "index",
92
+ },
93
+ rollupOptions: {
94
+ // 确保外部化处理那些你不想打包进库的依赖
95
+ external: ['vue'],
96
+ output: {
97
+ // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
98
+ globals: {
99
+ vue: 'Vue',
100
+ },
101
+ },
102
+ },
103
+ // minify: 'terser',
104
+ //打包环境移除console.log,debugger
105
+ // terserOptions: {
106
+ // compress: {
107
+ // drop_console: true,
108
+ // drop_debugger: true,
109
+ // },
110
+ // },
111
+ //打包文件按照类型分文件夹显示(貌似会导致性能下降)
112
+ // rollupOptions: {
113
+ // output: {
114
+ // chunkFileNames: 'js/[name]-chunk-[hash:7].js',
115
+ // entryFileNames: 'js/[name]-app-[hash:7].js',
116
+ // assetFileNames: '[ext]/[name]-chunk-[hash:7].[ext]',
117
+ // },
118
+ // },
119
+ },
120
+ }
121
+ })
@@ -1,98 +0,0 @@
1
- const path = require("path");
2
- const webpack = require("webpack");
3
- const { VueLoaderPlugin } = require('vue-loader')
4
-
5
- module.exports = {
6
- entry: "./src/index.js",
7
- module: {
8
- rules: [
9
- {
10
- test: /\.js$/,
11
- exclude: file => (
12
- /node_modules/.test(file) &&
13
- !/\.vue\.js/.test(file)
14
- ),
15
- use: [
16
- // "thread-loader",// 多线程编译,可能会导致报错
17
- {
18
- loader: 'babel-loader',
19
- options: {
20
- presets: ['@babel/preset-env']
21
- }
22
- }
23
- ],
24
- },
25
-
26
- {
27
- test: /\.css$/,
28
- use: ['vue-style-loader', 'css-loader']
29
- },
30
- {
31
- test: /\.less$/,
32
- use: ['vue-style-loader', 'css-loader', 'less-loader']
33
- },
34
- {
35
- test: /\.scss$/,
36
- use: [
37
- 'vue-style-loader',
38
- 'css-loader',
39
- 'sass-loader'
40
- ]
41
- },
42
- {
43
- test: /\.(eot|svg|ttf|woff|woff2)$/,
44
- use: {
45
- loader: 'file-loader',
46
- options: {
47
- outputPath: 'fonts/',
48
- esModule: false
49
- }
50
- }
51
- },
52
- {
53
- test: /\.(png|jpg|gif)$/,
54
- use: {
55
- loader: 'file-loader',
56
- options: {
57
- outputPath: 'assets/',
58
- esModule: false
59
- }
60
- }
61
- },
62
- {
63
- test: /\.vue$/,
64
- loader: 'vue-loader',
65
- options: {
66
- use: [
67
- // "thread-loader",// 多线程编译,可能会导致报错
68
- {
69
- loader: 'babel-loader',
70
- options: {
71
- presets: ['@babel/preset-env']
72
- }
73
- }
74
- ],
75
- }
76
- },
77
- ]
78
- },
79
- resolve: {
80
- extensions: ['\*', '.js', '.jsx', '.vue'],// 能够使用户在引入模块时不带扩展
81
- alias: {
82
- "@": path.resolve(__dirname, '../src'),
83
- },
84
- },
85
- output: {
86
- path: path.resolve(__dirname, "../dist/"),
87
- publicPath: "/",
88
- filename: "bundle.js"
89
- },
90
- //why:https://github.com/vuejs/vue-next/tree/master/packages/vue#bundler-build-feature-flags
91
- plugins: [
92
- new webpack.HotModuleReplacementPlugin(),
93
- new VueLoaderPlugin(),
94
- new webpack.DefinePlugin({
95
- "__VUE_OPTIONS_API__": true,
96
- "__VUE_PROD_DEVTOOLS__": false,
97
- })]
98
- };
@@ -1,15 +0,0 @@
1
- const path = require("path");
2
- const { merge } = require('webpack-merge');
3
- const common = require('./webpack.common.js');
4
-
5
- module.exports = merge(common, {
6
- mode: 'development',
7
- devtool: 'inline-source-map',
8
- devServer: {
9
- contentBase: path.join(__dirname, "dist"),
10
- port: 3000,
11
- hot: true,
12
- open: true, //自动打开浏览器
13
- // host: '0.0.0.0',//开启项目本地服务
14
- },
15
- });
@@ -1,16 +0,0 @@
1
- const { merge } = require('webpack-merge');
2
- const common = require('./webpack.common.js');
3
- const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
4
- const { CleanWebpackPlugin } = require('clean-webpack-plugin');
5
-
6
- module.exports = merge(common, {
7
- mode: 'production',
8
- plugins: [
9
- new UglifyJsPlugin({
10
- uglifyOptions: {
11
- comments: "some", //去掉部分注释
12
- }
13
- }),
14
- new CleanWebpackPlugin(),// 构筑前清理dist文件夹
15
- ]
16
- });