general-basic-form 2.0.11 → 2.0.13

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 w={placeholder:"请输入",style:"width: 200px",clearable:!0},$={style:"width: 227px","start-placeholder":"开始日期","end-placeholder":"结束日期",type:"daterange"},z={placeholder:"请选择",filterable:!0,clearable:!0,style:"width: 200px"},D=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:{...w,...this.item.inputSetting}}},methods:{currentInputComponent(){return"input-archive"}}}),u=(t,n)=>{const o=t.__vccOpts||t;for(const[a,l]of n)o[a]=l;return o};function L(t,n,o,a,l,s){const r=e.resolveComponent("el-input");return e.openBlock(),e.createBlock(r,e.mergeProps({onKeydown:e.withKeys(t.getList,["enter"]),modelValue:t.queryParams[t.item.prop],"onUpdate:modelValue":n[0]||(n[0]=i=>t.queryParams[t.item.prop]=i),size:t.size},t.inputSetting),e.createSlots({_:2},[e.renderList(t.item.template,(i,p)=>({name:p,fn:e.withCtx(()=>[i?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.currentInputComponent()),{key:p,templateEle:i},null,8,["templateEle"])):e.createCommentVNode("",!0)])}))]),1040,["onKeydown","modelValue","size"])}const C=u(D,[["render",L]]),N=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),a=e.inject("size"),l=e.ref({...w,...n.inputSetting});return(s,r)=>{const i=e.resolveComponent("el-input-number");return e.openBlock(),e.createBlock(i,e.mergeProps({modelValue:e.unref(o)[s.item.prop],"onUpdate:modelValue":r[0]||(r[0]=p=>e.unref(o)[s.item.prop]=p),size:e.unref(a)},l.value),null,16,["modelValue","size"])}}}),q=Symbol(),x={class:"input-graphic-verification"},F=["src"],j=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,{graphicSrc:o="",getGraphic:a=()=>{}}=n,{formLoading:l,updateFormLoading:s}=e.inject(q),r=async()=>{a&&!l.value&&await a()};return(i,p)=>{const m=e.resolveDirective("loading");return e.withDirectives((e.openBlock(),e.createElementBlock("div",x,[e.createVNode(C,{item:i.item,class:"input"},null,8,["item"]),e.createElementVNode("img",{class:"graphic",onClick:r,src:e.unref(o)},null,8,F)])),[[m,e.unref(l)]])}}}),ie="",E=u(j,[["__scopeId","data-v-500ec9b0"]]),h="获取验证码",U=60,T=e.defineComponent({__name:"verification-button",props:{getSmscode:{type:Function}},setup(t){const{getSmscode:n}=t,o=e.ref(h),a=e.ref(null),l=e.computed(()=>o.value===h),s=()=>{a&&(clearInterval(a.value),a.value=null,o.value=h)},r=async()=>{if(o.value===h)if(o.value=U,a.value=setInterval(()=>{if(Number(o.value)<=0||!o.value){s();return}else o.value=Number(o.value)-1},1e3),n)await n()===!1&&s();else return};return e.onBeforeUnmount(()=>{s()}),(i,p)=>{const m=e.resolveComponent("el-button");return e.openBlock(),e.createBlock(m,{class:"verifiaction-button",style:e.normalizeStyle({color:l.value?"var(--color-primary, #409EFF)":"var(--text-color-placeholder, #A8ABB2)",cursor:l.value?"pointer":"default"}),onClick:r},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value?h:o.value+"s"),1)]),_:1},8,["style"])}}}),se="",G=u(T,[["__scopeId","data-v-4074e137"]]),R=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=n;return o.template={append:()=>e.h(G,{getSmscode:o.getSmscode})},(a,l)=>(e.openBlock(),e.createBlock(C,{item:e.unref(o),class:"input"},null,8,["item"]))}}),O=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 A(t,n,o,a,l,s){const r=e.resolveComponent("el-divider");return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.dividerSetting)),e.createSlots({_:2},[e.renderList(t.item.template,(i,p)=>({name:p,fn:e.withCtx(()=>[i?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.currentInputComponent()),{key:p,templateEle:i},null,8,["templateEle"])):e.createCommentVNode("",!0)])}))]),1040)}const Q=u(O,[["render",A]]),K=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),a=e.inject("size"),l=e.ref({...n.radioSetting}),s=e.ref({...n.radioGroupSetting});return(r,i)=>{const p=e.resolveComponent("el-radio"),m=e.resolveComponent("el-radio-group");return e.openBlock(),e.createBlock(m,e.mergeProps({modelValue:e.unref(o)[r.item.prop],"onUpdate:modelValue":i[0]||(i[0]=d=>e.unref(o)[r.item.prop]=d),size:e.unref(a)},s.value),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.item.option||[],d=>(e.openBlock(),e.createBlock(p,e.mergeProps({size:e.unref(a),label:d.label,key:d.label},l.value),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),_:2},1040,["size","label"]))),128))]),_:1},16,["modelValue","size"])}}}),M=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),a=e.inject("size"),l=e.ref({...$,...n.datePackerSetting});return(s,r)=>{const i=e.resolveComponent("el-date-picker");return e.openBlock(),e.createBlock(i,e.mergeProps({modelValue:e.unref(o)[s.item.prop],"onUpdate:modelValue":r[0]||(r[0]=p=>e.unref(o)[s.item.prop]=p),size:e.unref(a)},l.value),null,16,["modelValue","size"])}}}),W=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),a=e.inject("size"),l=e.ref({...z,...n.selectSetting});return(s,r)=>{const i=e.resolveComponent("el-option"),p=e.resolveComponent("el-select");return e.openBlock(),e.createBlock(p,e.mergeProps({modelValue:e.unref(o)[s.item.prop],"onUpdate:modelValue":r[0]||(r[0]=m=>e.unref(o)[s.item.prop]=m),size:e.unref(a)},l.value),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.item.option||[],m=>(e.openBlock(),e.createBlock(i,{key:m.value,label:m.label,value:m.value},null,8,["label","value"]))),128))]),_:1},16,["modelValue","size"])}}}),H=e.defineComponent({__name:"index",props:{item:{}},setup(t){const{item:n}=t,o=e.inject("queryParams",{}),a=e.inject("size"),l=e.ref({...z,...n.selectSetting});return(s,r)=>{const i=e.resolveComponent("el-cascader");return e.openBlock(),e.createBlock(i,e.mergeProps({modelValue:e.unref(o)[s.item.prop],"onUpdate:modelValue":r[0]||(r[0]=p=>e.unref(o)[s.item.prop]=p),size:e.unref(a),options:s.item.options||[]},l.value),null,16,["modelValue","size","options"])}}}),J=e.defineComponent({name:"GeneralBasicForm",components:{Input:C,InputNumber:N,InputGraphicVerification:E,InputMobileVerification:R,Divider:Q,Radio:K,DatePicker:M,Select:W,Cascader:H},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:()=>{}}},data(){return{formLoading:this.loading||!1}},setup(t){const{size:n,noUrlParameters:o,getList:a}=t,l=I.useRoute(),s=e.ref({...o?{}:l==null?void 0:l.query});return e.provide("queryParams",s),e.provide("size",n),e.provide("getList",a),{queryParams:s}},watch:{formData:{handler(t){this.queryParams={...this.noUrlParameters?{}:this.queryParams,...t}},immediate:!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()}}});function X(t,n,o,a,l,s){const r=e.resolveComponent("Input"),i=e.resolveComponent("Radio"),p=e.resolveComponent("Select"),m=e.resolveComponent("Divider"),d=e.resolveComponent("Cascader"),y=e.resolveComponent("DatePicker"),b=e.resolveComponent("InputNumber"),B=e.resolveComponent("InputMobileVerification"),V=e.resolveComponent("InputGraphicVerification"),_=e.resolveComponent("el-form-item"),g=e.resolveComponent("el-button"),S=e.resolveComponent("el-form"),P=e.resolveDirective("loading");return e.withDirectives((e.openBlock(),e.createBlock(S,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(_,{label:c.label,prop:c.prop,key:c.prop,rules:c.rules},{default:e.withCtx(()=>[c.type==="input"?(e.openBlock(),e.createBlock(r,{key:0,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="radio"?(e.openBlock(),e.createBlock(i,{key:1,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="select"?(e.openBlock(),e.createBlock(p,{key:2,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="divider"?(e.openBlock(),e.createBlock(m,{key:3,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="cascader"?(e.openBlock(),e.createBlock(d,{key:4,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="date-picker"?(e.openBlock(),e.createBlock(y,{key:5,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="input-number"?(e.openBlock(),e.createBlock(b,{key:6,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="input-mobile-verification"?(e.openBlock(),e.createBlock(B,{key:7,item:c},null,8,["item"])):e.createCommentVNode("",!0),c.type==="input-graphic-verification"?(e.openBlock(),e.createBlock(V,{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(_,{key:0},{default:e.withCtx(()=>[e.withDirectives((e.openBlock(),e.createBlock(g,{type:"primary",size:t.size,onClick:t.handleQuery},{default:e.withCtx(()=>[e.createTextVNode("查询")]),_:1},8,["size","onClick"])),[[P,t.formLoading]]),e.createVNode(g,{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 Y=u(J,[["render",X]]),Z=["infinite-scroll-disabled"],v=e.defineComponent({__name:"InfiniteScrollList",props:{search:{type:Function,required:!0},id:{type:String,required:!0},name:{type:String,required:!0},extra:{type:Function,required:!1}},setup(t,{expose:n}){const o=t,{search:a,id:l,name:s,extra:r}=o,i=e.ref([]),p=e.ref(1),m=e.ref(!1),d=e.ref([]),y=e.ref(!1),b=()=>{p.value=1,i.value=[],d.value=[],m.value=!1},B=async()=>{if(y.value||m.value)return;y.value=!0;const _=await a(p.value);_&&_.length>0?(i.value=[...i.value,..._],p.value+=1):m.value=!0,y.value=!1},V=e.computed(()=>i.value.filter(_=>d.value.includes(_[l])))||{};return n({reset:b,loadList:B,selectInfo:V}),(_,g)=>{const S=e.resolveComponent("el-checkbox"),P=e.resolveComponent("el-checkbox-group"),c=e.resolveDirective("infinite-scroll"),le=e.resolveDirective("loading");return e.withDirectives((e.openBlock(),e.createBlock(P,e.mergeProps({modelValue:d.value,"onUpdate:modelValue":g[0]||(g[0]=k=>d.value=k)},o),{default:e.withCtx(()=>[e.withDirectives((e.openBlock(),e.createElementBlock("ul",{class:"list","infinite-scroll-disabled":m.value},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,k=>(e.openBlock(),e.createElementBlock("li",{key:k[e.unref(l)],class:"list-item"},[e.createVNode(S,{label:k[e.unref(l)],class:"checkbox"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k[e.unref(s)])+" "+e.toDisplayString(e.unref(r)&&e.unref(r)(k)),1)]),_:2},1032,["label"])]))),128))],8,Z)),[[c,B]])]),_:1},16,["modelValue"])),[[le,y.value]])}}}),ae="",ee=u(v,[["__scopeId","data-v-fda8f794"]]),te=e.defineComponent({__name:"Descriptions",props:{formData:{type:Object,required:!0},descriptionsItemProps:{type:Object,required:!1},formItem:{type:Array,required:!0}},setup(t){const n=t;return(o,a)=>{const l=e.resolveComponent("el-descriptions-item"),s=e.resolveComponent("el-descriptions");return e.openBlock(),e.createBlock(s,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,i)=>(e.openBlock(),e.createBlock(l,e.mergeProps({key:r.prop,label:r.label},n.descriptionsItemProps),{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.render?r.render({row:t.formData,$index:i}):t.formData[r.prop]),1)]),_:2},1040,["label"]))),128))]),_:1},16)}}}),oe=Y,ne=ee,re=te;f.VDescriptions=re,f.VGeneralBasicForm=oe,f.VInfiniteScrollList=ne,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .input-graphic-verification[data-v-500ec9b0]{display:flex;gap:12px;width:100%}.input-graphic-verification .input[data-v-500ec9b0]{flex:auto}.input-graphic-verification .graphic[data-v-500ec9b0]{width:109px;height:43px;object-fit:fill;flex:none}.verifiaction-button[data-v-4074e137]{width:109px}.list[data-v-fda8f794]{height:272px;overflow:auto;padding:8px 0}.list .checkbox[data-v-fda8f794]{width:calc(100% - 32px);padding:0 16px}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "general-basic-form",
3
- "version": "2.0.11",
3
+ "version": "2.0.13",
4
4
  "description": "",
5
- "main": "./src/index.ts",
5
+ "main": "./dist/index.umd.cjs",
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "build": "cross-env CURRENT_ENV=prod run-p type-check build-only",
@@ -46,5 +46,16 @@
46
46
  "vue": ">=3.3.4",
47
47
  "vue-router": ">=4.2.4"
48
48
  },
49
- "typings": "./publish/index.d.ts"
49
+ "typings": "./dist/index.d.ts",
50
+ "module": "./dist/index.js",
51
+ "exports": {
52
+ ".": {
53
+ "import": "./dist/index.js",
54
+ "require": "./dist/index.umd.cjs"
55
+ },
56
+ "./style": "./dist/style.css"
57
+ },
58
+ "files": [
59
+ "/dist"
60
+ ]
50
61
  }
package/script/link.ts DELETED
@@ -1,36 +0,0 @@
1
- /*
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2023-11-10 09:39:59
4
- * @LastEditTime: 2023-11-15 18:04:19
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description: link处理流程
8
- * @FilePath: \GeneralBasicForm\script\link.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 mainDir = "./src/index.ts"
22
- delete packageJson.files
23
- delete packageJson.module
24
- delete packageJson.exports
25
- packageJson.typings = "./publish/index.d.ts"
26
- packageJson.main = mainDir
27
- const versionData = JSON.stringify(packageJson, null, 2);
28
- fs.writeFileSync(path.join(__dirnameNew, '../package.json'), versionData, 'utf8');
29
- console.log(chalk.green.bold('修改入口配置成功!当前入口路径为为:' + mainDir));
30
- } catch (error) {
31
- console.log(chalk.red.bold('修改入口配置出错:', error.toString()));
32
- }
33
-
34
- }
35
-
36
- updateMain()
package/script/unlink.ts DELETED
@@ -1,45 +0,0 @@
1
- /*
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2023-11-10 09:39:59
4
- * @LastEditTime: 2023-11-16 15:09:53
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description: unlink处理流程
8
- * @FilePath: \GeneralBasicForm\script\unlink.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
- packageJson.main = umdDir
24
- packageJson.module = esDir
25
- packageJson.exports = {
26
- ".": {
27
- "import": esDir,
28
- "require": umdDir
29
- },
30
- "./style": "./dist/style.css"
31
- }
32
- packageJson.typings = "./dist/index.d.ts"
33
- packageJson.files = [
34
- "/dist"
35
- ]
36
- const versionData = JSON.stringify(packageJson, null, 2);
37
- fs.writeFileSync(path.join(__dirnameNew, '../package.json'), versionData, 'utf8');
38
- console.log(chalk.green.bold('修改入口配置成功!当前入口路径为为:' + umdDir));
39
- } catch (error) {
40
- console.log(chalk.red.bold('修改入口配置出错:', error.toString()));
41
- }
42
-
43
- }
44
-
45
- updateMain()
@@ -1,246 +0,0 @@
1
- <!--
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2021-08-20 17:14:53
4
- * @LastEditTime: 2023-12-07 17:07:44
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description:
8
- * @FilePath: \GeneralBasicForm\src\GeneralBasicForm.vue
9
- *
10
- -->
11
- /** 通用基本表单。用在表单页面搜索栏 */
12
-
13
- <template>
14
- <el-form
15
- :model="queryParams"
16
- ref="queryFormRef"
17
- v-show="showSearch"
18
- inline
19
- label-position="left"
20
- :label-width="labelWidth"
21
- v-bind="$attrs"
22
- >
23
- <el-form-item
24
- v-for="item in formItem"
25
- :label="item.label"
26
- :prop="item.prop"
27
- :key="item.prop"
28
- :rules="item.rules"
29
- >
30
- <Input v-if="item.type === 'input'" :item="item" />
31
- <Radio v-if="item.type === 'radio'" :item="item" />
32
- <Select v-if="item.type === 'select'" :item="item" />
33
- <Divider v-if="item.type === 'divider'" :item="item" />
34
- <Cascader v-if="item.type === 'cascader'" :item="item" />
35
- <DatePicker v-if="item.type === 'date-picker'" :item="item" />
36
- <InputNumber v-if="item.type === 'input-number'" :item="item" />
37
- <InputMobileVerification
38
- v-if="item.type === 'input-mobile-verification'"
39
- :item="item"
40
- />
41
- <InputGraphicVerification
42
- v-if="item.type === 'input-graphic-verification'"
43
- :item="item"
44
- :key="item.key"
45
- />
46
- </el-form-item>
47
- <slot></slot>
48
- <el-form-item v-if="!formOnly">
49
- <el-button
50
- type="primary"
51
- :size="size"
52
- @click="handleQuery"
53
- v-loading="formLoading"
54
- >查询</el-button
55
- >
56
- <el-button :size="size" @click="resetQuery">重置</el-button>
57
- </el-form-item>
58
- <slot name="behind-the-button" />
59
- </el-form>
60
- </template>
61
-
62
- <script lang="ts">
63
- import { provide, ref, PropType, defineComponent, computed } from "vue";
64
- import type { ItemType } from "./types/basicFrom";
65
- import { useRoute } from "vue-router";
66
- import Input from "./components/VBasic/input/index.vue";
67
- import InputNumber from "./components/VBasic/input-number/index.vue";
68
- import InputGraphicVerification from "./components/VBasic/input-graphic-verification/index.vue";
69
- import InputMobileVerification from "./components/VBasic/input-mobile-verification/index.vue";
70
- import Divider from "./components/VBasic/divider/index.vue";
71
- import Radio from "./components/VBasic/radio/index.vue";
72
- import DatePicker from "./components/VBasic/date-picker/index.vue";
73
- import Select from "./components/VBasic/select/index.vue";
74
- import Cascader from "./components/VBasic/cascader/index.vue";
75
- import { formLoadingKey } from "./injectKey";
76
-
77
- export default defineComponent({
78
- name: "GeneralBasicForm",
79
- components: {
80
- Input,
81
- InputNumber,
82
- InputGraphicVerification,
83
- InputMobileVerification,
84
- Divider,
85
- Radio,
86
- DatePicker,
87
- Select,
88
- Cascader,
89
- },
90
- props: {
91
- showSearch: {
92
- // 是否展示所有元素
93
- type: Boolean,
94
- default: true,
95
- },
96
- loading: {
97
- // 加载动画
98
- type: Boolean,
99
- default: false,
100
- },
101
- formOnly: {
102
- // 是否只展示表单不展示按钮
103
- type: Boolean,
104
- default: false,
105
- },
106
- getList: {
107
- // 查找数据调用的函数
108
- type: Function,
109
- default: () => {},
110
- },
111
- afterReset: {
112
- // 在重置按钮点击完后但还没重新请求时触发的的函数
113
- type: Function,
114
- default: () => {},
115
- },
116
- formItem: {
117
- // 定义表单的数据
118
- type: Array as unknown as PropType<ItemType[]>,
119
- default: [],
120
- },
121
- size: {
122
- // 控制按钮大小
123
- type: String,
124
- default: "default",
125
- },
126
- labelWidth: {
127
- // 表单文字宽度
128
- type: String,
129
- default: "90px",
130
- },
131
- noUrlParameters: {
132
- // 不接受和不改变url的参数
133
- type: Boolean,
134
- default: () => false,
135
- },
136
- formData: {
137
- // 外部传入的表单数据,用于回填
138
- type: Object,
139
- default: () => {},
140
- },
141
- },
142
- data() {
143
- return {
144
- formLoading: this.loading || false,
145
- };
146
- },
147
- setup(props) {
148
- const { size, noUrlParameters, getList } = props;
149
- const route = useRoute();
150
- const queryParams = ref({
151
- ...(noUrlParameters ? {} : route?.query),
152
- }); // form表单数据
153
- provide(/* 注入名 */ "queryParams", /* 值 */ queryParams);
154
- provide(/* 注入名 */ "size", /* 值 */ size);
155
- provide(/* 注入名 */ "getList", /* 值 */ getList);
156
- // const { formItem } = toRefs(props);
157
- // const { formItem } = props;
158
- // console.log(formItem);
159
- // const queryParams = {};
160
- // formItem.forEach((item) => {
161
- // queryParams[item.prop] = "";
162
- // });
163
- return {
164
- queryParams,
165
- };
166
- },
167
- watch: {
168
- formData: {
169
- handler(val) {
170
- // console.log(val);
171
- this.queryParams = {
172
- ...(this.noUrlParameters ? {} : this.queryParams),
173
- ...val,
174
- };
175
- // console.log(this.queryParams);
176
- },
177
- // watch 默认是懒执行的:仅当数据源变化时,才会执行回调。但在某些场景中,我们希望在创建侦听器时,立即执行一遍回调。举例来说,我们想请求一些初始数据,然后在相关状态更改时重新请求数据。
178
- // https://cn.vuejs.org/guide/essentials/watchers.html#deep-watchers
179
- immediate: true,
180
- // deep: true,
181
- },
182
- loading(val) {
183
- // console.log("loading", val);
184
- if (this.formLoading === val) {
185
- return;
186
- }
187
- this.formLoading = val;
188
- },
189
- formLoading(val) {
190
- // console.log("formLoading", val);
191
- if (this.loading === val) {
192
- return;
193
- }
194
- this.$emit("update:loading", val);
195
- },
196
- },
197
- provide() {
198
- return {
199
- // 显式提供一个计算属性
200
- [formLoadingKey]: {
201
- formLoading: computed(() => this.formLoading),
202
- updateFormLoading: (val) => {
203
- this.formLoading = val;
204
- },
205
- },
206
- };
207
- },
208
- methods: {
209
- /** 搜索按钮操作 */
210
- handleQuery() {
211
- const params = { page: 1, limit: 10 };
212
- const searchParams = {
213
- ...this.$route?.query,
214
- ...this.queryParams,
215
- ...params,
216
- };
217
- if (!this.noUrlParameters) {
218
- this.$router.push({
219
- query: { ...searchParams },
220
- });
221
- }
222
- this.getList({
223
- ...searchParams,
224
- });
225
- },
226
- /** 重置按钮操作 */
227
- async resetQuery() {
228
- this.$refs.queryFormRef.resetFields();
229
- const params = { page: 1 };
230
- if (!this.noUrlParameters) {
231
- await this.$router.push({
232
- query: { ...params },
233
- });
234
- }
235
- this.queryParams = {
236
- ...(this.noUrlParameters ? {} : this.$route?.query),
237
- };
238
- this.afterReset();
239
- this.handleQuery();
240
- },
241
- },
242
- });
243
- </script>
244
-
245
- <style scoped>
246
- </style>
Binary file
@@ -1,31 +0,0 @@
1
- <!--
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2023-11-08 18:03:42
4
- * @LastEditTime: 2023-12-07 17:06:11
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description:
8
- * @FilePath: \GeneralBasicForm\src\components\VBasic\cascader\index.vue
9
- *
10
- -->
11
- <script setup lang="ts">
12
- import { selectDefaultSetting } from "../../setting";
13
- import { ref, inject } from "vue";
14
- import { BasicFormComponentsProps } from "../../../types/componentsProps";
15
- const { item } = defineProps<{ item: any }>();
16
- const queryParams = inject("queryParams", {});
17
- const size = inject("size");
18
- const selectSetting = ref({
19
- ...selectDefaultSetting,
20
- ...item.selectSetting,
21
- });
22
- </script>
23
-
24
- <template>
25
- <el-cascader
26
- v-model="queryParams[item.prop]"
27
- :size="size"
28
- :options="item.options || []"
29
- v-bind="selectSetting"
30
- ></el-cascader>
31
- </template>
@@ -1,30 +0,0 @@
1
- <!--
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2023-11-08 18:03:42
4
- * @LastEditTime: 2023-12-07 16:49:21
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description:
8
- * @FilePath: \GeneralBasicForm\src\components\VBasic\date-picker\index.vue
9
- *
10
- -->
11
- <script setup lang="ts">
12
- import { datePackerDefaultSetting } from "../../setting";
13
- import { ref, inject } from "vue";
14
- import { BasicFormComponentsProps } from "../../../types/componentsProps";
15
- const { item } = defineProps<{ item: any }>();
16
- const queryParams = inject("queryParams", {});
17
- const size = inject("size");
18
- const datePackerSetting = ref({
19
- ...datePackerDefaultSetting,
20
- ...item.datePackerSetting,
21
- });
22
- </script>
23
-
24
- <template>
25
- <el-date-picker
26
- v-model="queryParams[item.prop]"
27
- :size="size"
28
- v-bind="datePackerSetting"
29
- />
30
- </template>
@@ -1,52 +0,0 @@
1
- <!--
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2023-11-09 10:01:20
4
- * @LastEditTime: 2023-11-10 16:51:18
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description: 分割线
8
- * @FilePath: \deal-front-endd:\work\GeneralBasicForm\src\components\VBasic\divider\index.vue
9
- *
10
- -->
11
-
12
- <template>
13
- <el-divider v-bind="dividerSetting">
14
- <template v-for="(templateEle, name) in item.template" #[name]>
15
- <component
16
- :key="name"
17
- v-if="templateEle"
18
- :is="currentInputComponent()"
19
- :templateEle="templateEle"
20
- />
21
- </template>
22
- </el-divider>
23
- </template>
24
-
25
- <script lang="ts">
26
- import { defineComponent } from "vue";
27
-
28
- export default defineComponent({
29
- components: {
30
- slotArchive: (props) => {
31
- const { templateEle } = props;
32
- return templateEle();
33
- },
34
- },
35
- props: {
36
- item: null, // null就是any
37
- },
38
- setup() {},
39
- data() {
40
- return {
41
- dividerSetting: {
42
- ...this.item.dividerSetting,
43
- },
44
- };
45
- },
46
- methods: {
47
- currentInputComponent() {
48
- return "slot-archive";
49
- },
50
- },
51
- });
52
- </script>
@@ -1,67 +0,0 @@
1
- <template>
2
- <el-input
3
- @keydown.enter="getList"
4
- v-model="queryParams[item.prop]"
5
- :size="size"
6
- v-bind="inputSetting"
7
- >
8
- <template v-for="(templateEle, name) in item.template" #[name]>
9
- <component
10
- :key="name"
11
- v-if="templateEle"
12
- :is="currentInputComponent()"
13
- :templateEle="templateEle"
14
- />
15
- </template>
16
- </el-input>
17
- </template>
18
-
19
- <script lang="ts">
20
- import { defineComponent, inject } from "vue";
21
- import { inputDefaultSetting } from "../../setting";
22
- export default defineComponent({
23
- components: {
24
- InputArchive: (props) => {
25
- const { templateEle } = props;
26
- return templateEle();
27
- },
28
- },
29
- props: {
30
- item: null, // null就是any
31
- },
32
- setup() {
33
- const queryParams = inject("queryParams", {});
34
- const getList = inject("getList");
35
- const size = inject("size");
36
- return { queryParams, getList, size };
37
- },
38
- data() {
39
- return {
40
- inputSetting: {
41
- ...inputDefaultSetting,
42
- ...this.item.inputSetting,
43
- },
44
- };
45
- },
46
- // created() {
47
- // console.log("new", this.item);
48
- // console.log("new", this.inputSetting);
49
- // },
50
- methods: {
51
- currentInputComponent() {
52
- return "input-archive";
53
- },
54
- },
55
- // watch: {
56
- // item(val) {
57
- // console.log("item", val);
58
- // },
59
- // size(val) {
60
- // console.log(val);
61
- // },
62
- // },
63
- });
64
- </script>
65
-
66
- <style>
67
- </style>
@@ -1,56 +0,0 @@
1
- <!--
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2023-11-09 10:01:20
4
- * @LastEditTime: 2023-11-16 10:52:01
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description: 图形验证码组件
8
- * @FilePath: \GeneralBasicForm\src\components\VBasic\input-graphic-verification\index.vue
9
- *
10
- -->
11
-
12
- <script setup lang="ts">
13
- import Input from "../input/index.vue";
14
- import { inject } from "vue";
15
- import { formLoadingKey } from "../../../injectKey";
16
- import type {
17
- BasicFormComponentsProps,
18
- InputGraphicVerification,
19
- } from "../../../types/componentsProps";
20
- const { item } = defineProps<{ item: any }>();
21
- const { graphicSrc = "", getGraphic = () => {} }: InputGraphicVerification =
22
- item;
23
-
24
- const { formLoading, updateFormLoading } = inject<any>(formLoadingKey);
25
- // console.log(formLoading.value, "formLoading.value");
26
- const graphicClick = async () => {
27
- // console.log('click', getGraphic);
28
- if (getGraphic && !formLoading.value) {
29
- await getGraphic();
30
- }
31
- };
32
- </script>
33
-
34
- <template>
35
- <div class="input-graphic-verification" v-loading="formLoading">
36
- <Input :item="item" class="input" />
37
- <img class="graphic" @click="graphicClick" :src="graphicSrc" />
38
- </div>
39
- </template>
40
-
41
- <style lang="less" scoped>
42
- .input-graphic-verification {
43
- display: flex;
44
- gap: 12px;
45
- width: 100%;
46
- .input {
47
- flex: auto;
48
- }
49
- .graphic {
50
- width: 109px;
51
- height: 43px;
52
- object-fit: fill;
53
- flex: none;
54
- }
55
- }
56
- </style>
@@ -1,31 +0,0 @@
1
- <!--
2
- * @Author: 陈德立*******419287484@qq.com
3
- * @Date: 2023-11-09 10:01:20
4
- * @LastEditTime: 2023-11-14 15:35:16
5
- * @LastEditors: 陈德立*******419287484@qq.com
6
- * @Github: https://github.com/Alan1034
7
- * @Description: 手机验证码组件
8
- * @FilePath: \GeneralBasicForm\src\components\VBasic\input-mobile-verification\index.vue
9
- *
10
- -->
11
-
12
- <script setup lang="ts">
13
- import Input from "../input/index.vue";
14
- import { h, watch, onBeforeUpdate, nextTick } from "vue";
15
- import { BasicFormComponentsProps } from "../../../types/componentsProps";
16
- import VerificationButton from "./verification-button.vue";
17
- const { item } = defineProps<{item:any}>();
18
- // 重新赋值一下触发下面的代码,否则响应会在内部进行
19
- const mobileItem = item;
20
- mobileItem.template = {
21
- append: () => {
22
- return h(VerificationButton, {
23
- getSmscode: mobileItem.getSmscode,
24
- });
25
- },
26
- };
27
- </script>
28
-
29
- <template>
30
- <Input :item="mobileItem" class="input"> </Input>
31
- </template>