(i.clipWidth||i.width)/(i.clipWidth||i.height)?(h=i.clipHeight||i.height,c=t/e*h):(c=i.clipWidth||i.width,h=e/t*c);else{c=(i._SYS_INFO||wx.getSystemInfoSync()).windowWidth,h=0}return{imageWidth:c,imageHeight:h}}export function calcPythagoreanTheorem(t,e){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2))}export function clipTouchMoveOfCalculate(t,e){const i=e.touches[0].clientX,c=e.touches[0].clientY,{clipWidth:h,clipHeight:a,cutY:n,cutX:r,_CUT_START:l,lockRatio:o}=t;let{maxWidth:g,minWidth:u,maxHeight:d,minHeight:p}=t;g/=2,u/=2,p/=2,d/=2;let m=h,f=a,s=n,x=r,w=()=>{m=m<=g?m>=u?m:u:g,f=f<=d?f>=p?f:p:d},W=()=>(m>g||md||f1&&l.corner<4?1:-1)*(l.y-c),l.corner){case 1:if(m=l.width-l.x+i,o&&(f=m/(h/a)),!W())return;break;case 2:if(m=l.width-l.x+i,o&&(f=m/(h/a)),!W())return;s=l.cutY-(f-l.height);break;case 3:if(m=l.width+l.x-i,o&&(f=m/(h/a)),!W())return;s=l.cutY-(f-l.height),x=l.cutX-(m-l.width);break;case 4:if(m=l.width+l.x-i,o&&(f=m/(h/a)),!W())return;x=l.cutX-(m-l.width)}return{width:m,height:f,cutX:x,cutY:s}}export function imageTouchMoveOfCalcOffset(t,e,i){return{left:e-t._touchRelative[0].x,top:i-t._touchRelative[0].y}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/close.png b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/close.png
new file mode 100644
index 0000000..a1c6c99
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/close.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/photo.png b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/photo.png
new file mode 100644
index 0000000..80928c3
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/photo.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/rotate-along.png b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/rotate-along.png
new file mode 100644
index 0000000..7c51905
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/rotate-along.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/rotate-inverse.png b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/rotate-inverse.png
new file mode 100644
index 0000000..ec77b6b
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/rotate-inverse.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/sure.png b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/sure.png
new file mode 100644
index 0000000..05f5955
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/images/sure.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.js b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.js
new file mode 100644
index 0000000..acd9a2f
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.js
@@ -0,0 +1 @@
+import dataUtil from"../core/utils/data-util";import eventUtil from"../core/utils/event-util";import{determineDirection,calcImageOffset,calcImageScale,calcImageSize,calcPythagoreanTheorem,clipTouchMoveOfCalculate,imageTouchMoveOfCalcOffset}from"./calculate";const detail=!0,IMAGE_TYPE={base64:"base64",url:"url"};Component({externalClasses:["l-class"],relations:{"../image-clipper-tools/index":{type:"child"}},options:{pureDataPattern:/^_/},properties:{show:{type:Boolean,value:!1},zIndex:{type:Number,value:99},imageUrl:{type:String},type:{type:String,options:["url","base64"],value:"url"},quality:{type:Number,value:1},width:{type:Number,value:400},height:{type:Number,value:400},minWidth:{type:Number,value:200},maxWidth:{type:Number,value:600},minHeight:{type:Number,value:200},maxHeight:{type:Number,value:600},lockWidth:{type:Boolean,value:!1},lockHeight:{type:Boolean,value:!1},lockRatio:{type:Boolean,value:!0},scaleRatio:{type:Number,value:1},minRatio:{type:Number,value:.5},maxRatio:{type:Number,value:2},disableScale:{type:Number,value:!1},disableRotate:{type:Number,value:!1},limitMove:{type:Boolean,value:!1},checkImage:{type:Boolean,value:!0},checkImageIcon:{type:String,value:"./images/photo.png"},rotateAlong:{type:Boolean,value:!0},rotateAlongIcon:{type:String,value:"./images/rotate-along.png"},rotateInverse:{type:Boolean,value:!0},rotateInverseIcon:{type:String,value:"./images/rotate-inverse.png"},sure:{type:Boolean,value:!0},sureIcon:{type:String,value:"./images/sure.png"},close:{type:Boolean,value:!0},closeIcon:{type:String,value:"./images/close.png"},rotateAngle:{type:Number,value:90}},data:{CANVAS_WIDTH:0,CANVAS_HEIGHT:0,cutX:0,cutY:0,clipWidth:0,clipHeight:0,cutAnimation:!1,imageWidth:0,imageHeight:0,imageTop:0,imageLeft:0,scale:1,angle:0,_SYS_INFO:{},_MOVE_THROTTLE:null,_MOVE_THROTTLE_FLAG:!0,_TIME_CUT_CENTER:null,_flagCutTouch:!1,_flagEndTouch:!1,_CUT_START:{},_cutAnimationTime:null,_touchRelative:[{x:0,y:0}],_hypotenuseLength:0,_ctx:null},observers:{imageUrl(t){t&&(this.imageReset(),wx.showLoading({title:"请稍候...",mask:!0}),wx.getImageInfo({src:t,success:t=>{this.imgComputeSize(t.width,t.height),this.properties.limitMove&&(this.imgMarginDetectionScale(),eventUtil.emit(this,"linimageready",t))},fail:()=>{this.imgComputeSize(),this.properties.limitMove&&this.imgMarginDetectionScale()}}))},"clipWidth, clipHeight"(t,e){let{minWidth:i,minHeight:a}=this.data;i/=2,a/=2,t{dataUtil.setDiffData(this,{cutAnimation:!1})},260);dataUtil.setDiffData(this,{_cutAnimationTime:t})}},limitMove(t){t&&(this.data.angle%90&&dataUtil.setDiffData(this,{angle:90*Math.round(this.data.angle/90)}),this.imgMarginDetectionScale())},"cutY, cutX"(){this.cutDetectionPosition()},"width, height"(t,e){t!==this.width&&dataUtil.setDiffData(this,{clipWidth:t/2}),e!==this.height&&dataUtil.setDiffData(this,{clipHeight:e/2})}},methods:{setCutInfo(){const{width:t,height:e}=this.properties,{_SYS_INFO:i}=this.data,a=t/2,s=e/2,o=(i.windowHeight-s)/2,h=(i.windowWidth-a)/2,l=i.windowWidth/2,n=i.windowHeight/2,c=wx.createCanvasContext("image-clipper",this);this.setData({clipWidth:a,clipHeight:s,cutX:h,cutY:o,CANVAS_HEIGHT:s,CANVAS_WIDTH:a,_ctx:c,imageLeft:l,imageTop:n})},setCutCenter(){const{sysInfo:t,clipHeight:e,clipWidth:i,imageTop:a,imageLeft:s}=this.data;let o=t||wx.getSystemInfoSync(),h=.5*(o.windowHeight-e),l=.5*(o.windowWidth-i);this.setData({imageTop:a-this.data.cutY+h,imageLeft:s-this.data.cutX+l,cutY:h,cutX:l})},clipTouchStart(t){if(!this.properties.imageUrl)return void wx.showToast({title:"请选择图片",icon:"none"});const e=t.touches[0].clientX,i=t.touches[0].clientY,{cutX:a,cutY:s,clipWidth:o,clipHeight:h}=this.data,l=determineDirection(a,s,o,h,e,i);this.moveDuring();const n={width:o,height:h,x:e,y:i,cutY:s,cutX:a,corner:l};this.setData({_flagCutTouch:!0,_flagEndTouch:!0,_CUT_START:n})},clipTouchMove(t){if(!this.properties.imageUrl)return void wx.showToast({title:"请选择图片",icon:"none"});if(1!==t.touches.length)return;const{_flagCutTouch:e,_MOVE_THROTTLE_FLAG:i}=this.data;if(e&&i){const{lockRatio:e,lockHeight:i,lockWidth:a}=this.properties;if(e&&(a||i))return;dataUtil.setDiffData(this,{_MOVE_THROTTLE_FLAG:!1}),this.moveThrottle();const s=clipTouchMoveOfCalculate(this.data,t);if(s){const{width:t,height:e,cutX:o,cutY:h}=s;a||i?a?i||dataUtil.setDiffData(this,{clipHeight:e,cutY:h}):dataUtil.setDiffData(this,{clipWidth:t,cutX:o}):dataUtil.setDiffData(this,{clipWidth:t,clipHeight:e,cutX:o,cutY:h}),this.imgMarginDetectionScale()}}},clipTouchEnd(){this.moveStop(),this.setData({_flagCutTouch:!1})},moveDuring(){clearTimeout(this.data._TIME_CUT_CENTER)},moveStop(){clearTimeout(this.data._TIME_CUT_CENTER);const t=setTimeout(()=>{this.data.cutAnimation||dataUtil.setDiffData(this,{cutAnimation:!0}),this.setCutCenter()},800);dataUtil.setDiffData(this,{_TIME_CUT_CENTER:t})},moveThrottle(){if("android"===this.data._SYS_INFO.platform){clearTimeout(this.data._MOVE_THROTTLE);const t=setTimeout(()=>{dataUtil.setDiffData(this,{_MOVE_THROTTLE_FLAG:!0})},20);dataUtil.setDiffData(this,{_MOVE_THROTTLE:t})}else dataUtil.setDiffData(this,{_MOVE_THROTTLE_FLAG:!0})},imageReset(){const t=this.data._SYS_INFO||wx.getSystemInfoSync();this.setData({scale:1,angle:0,imageTop:t.windowHeight/2,imageLeft:t.windowWidth/2})},imageLoad(){this.imageReset(),wx.hideLoading(),eventUtil.emit(this,"linimageload",!0)},imgComputeSize(t,e){const{imageWidth:i,imageHeight:a}=calcImageSize(t,e,this.data);this.setData({imageWidth:i,imageHeight:a})},imgMarginDetectionScale(t){if(!this.properties.limitMove)return;const e=calcImageScale(this.data,t);this.imgMarginDetectionPosition(e)},imgMarginDetectionPosition(t){if(!this.properties.limitMove)return;const{scale:e,left:i,top:a}=calcImageOffset(this.data,t);dataUtil.setDiffData(this,{imageLeft:i,imageTop:a,scale:e})},imageTouchStart(t){this.setData({_flagEndTouch:!1});const{imageLeft:e,imageTop:i}=this.data,a=t.touches[0].clientX,s=t.touches[0].clientY;let o=[];if(1===t.touches.length)o[0]={x:a-e,y:s-i},this.setData({_touchRelative:o});else{const h=t.touches[1].clientX,l=t.touches[1].clientY;let n=Math.abs(a-h),c=Math.abs(s-l);const u=calcPythagoreanTheorem(n,c);o=[{x:a-e,y:s-i},{x:h-e,y:l-i}],this.setData({_touchRelative:o,_hypotenuseLength:u})}},imageTouchMove(t){const{_flagEndTouch:e,_MOVE_THROTTLE_FLAG:i}=this.data;if(e||!i)return;const a=t.touches[0].clientX,s=t.touches[0].clientY;if(dataUtil.setDiffData(this,{_MOVE_THROTTLE_FLAG:!1}),this.moveThrottle(),this.moveDuring(),1===t.touches.length){const{left:t,top:e}=imageTouchMoveOfCalcOffset(this.data,a,s);dataUtil.setDiffData(this,{imageLeft:t,imageTop:e}),this.imgMarginDetectionPosition()}else{const e=t.touches[1].clientX,i=t.touches[1].clientY;let o=Math.abs(a-e),h=Math.abs(s-i),l=calcPythagoreanTheorem(o,h),n=this.data.scale*(l/this.data._hypotenuseLength);this.properties.disableScale?n=1:(n=n<=this.properties.minRatio?this.properties.minRatio:n,n=n>=this.properties.maxRatio?this.properties.maxRatio:n,eventUtil.emit(this,"linsizechange",{imageWidth:this.data.imageWidth*n,imageHeight:this.data.imageHeight*n})),this.imgMarginDetectionScale(n),dataUtil.setDiffData(this,{_hypotenuseLength:Math.sqrt(Math.pow(o,2)+Math.pow(h,2)),scale:n})}},imageTouchEnd(){dataUtil.setDiffData(this,{_flagEndTouch:!0}),this.moveStop()},cutDetectionPosition(){const{cutX:t,cutY:e,_SYS_INFO:i,clipHeight:a,clipWidth:s}=this.data;let o=()=>{e<0&&dataUtil.setDiffData(this,{cutY:0}),e>i.windowHeight-a&&dataUtil.setDiffData(this,{cutY:i.windowHeight-a})},h=()=>{t<0&&dataUtil.setDiffData(this,{cutX:0}),t>i.windowWidth-s&&dataUtil.setDiffData(this,{cutX:i.windowWidth-s})};if(null===e&&null===t){let t=.5*(i.windowHeight-a),e=.5*(i.windowWidth-s);dataUtil.setDiffData(this,{cutX:e,cutY:t})}else null!==e&&null!==t?(o(),h()):null!==e&&null===t?(o(),dataUtil.setDiffData(this,{cutX:(i.windowWidth-s)/2})):null===e&&null!==t&&(h(),dataUtil.setDiffData(this,{cutY:(i.windowHeight-a)/2}))},computeCutSize(){const{clipHeight:t,clipWidth:e,_SYS_INFO:i,cutX:a,cutY:s}=this.data;e>i.windowWidth?dataUtil.setDiffData(this,{clipWidth:i.windowWidth}):e+a>i.windowWidth&&dataUtil.setDiffData(this,{cutX:i.windowWidth-a}),t>i.windowHeight?dataUtil.setDiffData(this,{clipHeight:i.windowHeight}):t+s>i.windowHeight&&dataUtil.setDiffData(this,{cutY:i.windowHeight-s})},getImageData(){if(!this.properties.imageUrl)return void wx.showToast({title:"请选择图片",icon:"none"});wx.showLoading({title:"加载中"});const{clipHeight:t,clipWidth:e,_ctx:i,scale:a,imageLeft:s,imageTop:o,cutX:h,cutY:l,angle:n}=this.data;let{CANVAS_HEIGHT:c,CANVAS_WIDTH:u}=this.data;const{scaleRatio:g,imageUrl:r,quality:d,type:m}=this.properties,p=()=>{const c=this.data.imageWidth*a*g,u=this.data.imageHeight*a*g,p=s-h,f=o-l;i.translate(p*g,f*g),i.rotate(n*Math.PI/180),i.drawImage(r,-c/2,-u/2,c,u),i.draw(!1,()=>{let i={width:e*g,height:Math.round(t*g),destWidth:e*g,destHeight:Math.round(t)*g,fileType:"png",quality:d},a={url:"",base64:"",width:e*g,height:t*g};IMAGE_TYPE.base64===m?wx.canvasGetImageData({canvasId:"image-clipper",x:0,y:0,width:e*g,height:Math.round(t*g),success:t=>{const e=new Uint8Array(t.data),i=wx.arrayBufferToBase64(e);a.url=i,a.base64=i,wx.hideLoading(),eventUtil.emit(this,"linclip",a)}}):wx.canvasToTempFilePath({...i,canvasId:"image-clipper",success:t=>{a.url=t.tempFilePath,a.base64=t.tempFilePath,wx.hideLoading(),eventUtil.emit(this,"linclip",a)},fail(t){throw t}},this)})};u!==e||c!==t?(u=e,c=t,i.draw(),setTimeout(()=>{p()},100)):p()},uploadImage(){wx.chooseImage({count:1,sizeType:["original","compressed"],sourceType:["album","camera"],success:t=>{const e=t.tempFilePaths;this.setData({imageUrl:e})}})},rotate(t){if(this.properties.disableRotate)return;if(!this.properties.imageUrl)return void wx.showToast({title:"请选择图片",icon:"none"});const{rotateAngle:e}=this.properties,i=this.data.angle;"along"===t.currentTarget.dataset.type?this.setData({angle:i+e}):this.setData({angle:i-e}),eventUtil.emit(this,"linrotate",{currentDeg:this.data.angle})},close(){this.setData({show:!1})},doNothing(){}},lifetimes:{ready(){const t=wx.getSystemInfoSync();this.setData({_SYS_INFO:t}),this.setCutInfo(),this.setCutCenter(),this.computeCutSize(),this.cutDetectionPosition()}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.json b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.wxml
new file mode 100644
index 0000000..44fa600
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.wxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.wxss
new file mode 100644
index 0000000..bed0533
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-clipper/index.wxss
@@ -0,0 +1 @@
+.container{width:100vw;height:100vh;background-color:rgba(0,0,0,.6);position:fixed;top:0;left:0;z-index:1}.container .clip-wrapper{position:absolute;width:100vw;height:100vh}.container .clip-wrapper .clip-content{width:100vw;height:100vh;position:absolute;z-index:99;display:flex;flex-direction:column;pointer-events:none}.container .clip-wrapper .clip-content .flex-auto{flex:auto}.container .clip-wrapper .clip-content .clip-content-footer,.container .clip-wrapper .clip-content .clip-content-top{width:100%;pointer-events:none}.container .clip-wrapper .clip-content .clip-content-middle{width:100%;height:400rpx;display:flex;box-sizing:border-box}.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-left,.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-right{height:100%}.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-center{position:relative;border:1px solid;box-sizing:border-box}.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-center .clip-edge{position:absolute;left:6rpx;width:34rpx;height:34rpx;border:2rpx solid #fff;pointer-events:auto;box-sizing:border-box}.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-center .clip-edge.clip-edge-top-left{border-bottom-width:0!important;border-right-width:0!important}.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-center .clip-edge.clip-edge-top-right{border-bottom-width:0!important;border-left-width:0!important}.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-center .clip-edge.clip-edge-bottom-left{border-top-width:0!important;border-right-width:0!important}.container .clip-wrapper .clip-content .clip-content-middle .clip-content-middle-center .clip-edge.clip-edge-bottom-right{border-top-width:0!important;border-left-width:0!important}.container .clip-wrapper .bg-transparent{background-color:rgba(0,0,0,.6);transition-duration:.35s}.container .cropper-image{width:100%;border-style:none;position:absolute;top:0;left:0;z-index:2;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-origin:center}.container .clipper-canvas{position:fixed;z-index:10;left:-2000px;top:-2000px;pointer-events:none}.container .footer-tools{position:absolute;left:0;bottom:0;width:100%;z-index:99}.container .footer-tools .tools-icon{display:flex;align-items:center;justify-content:space-between;width:100%;padding:20rpx 40rpx;box-sizing:border-box}.container .footer-tools .tools-icon-image{display:block;width:50rpx;height:50rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-picker/image/add.png b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/image/add.png
new file mode 100644
index 0000000..8b5dc49
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/image/add.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.js b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.js
new file mode 100644
index 0000000..7190bed
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.js
@@ -0,0 +1 @@
+import nodeUtil from"../core/utils/node-util";import deviceUtil from"../utils/device-util";import eventUtil from"../core/utils/event-util";import{promisic}from"../utils/util";Component({options:{pureDataPattern:/urls|cells|preview|remove|sizeType|maxImageSize|clear/},behaviors:["wx://form-field"],externalClasses:["l-class","l-item-class"],properties:{urls:{type:Array,value:null},cells:{type:Array,value:null},size:{type:Number,value:null},mode:{type:String,value:"aspectFit"},preview:{type:Boolean,value:!0},remove:{type:Boolean,value:!0},count:{type:Number,value:9},sizeType:{optionalTypes:[Array,String],value:["original","compressed"]},maxImageSize:{type:Number,value:0},clear:{type:Boolean,value:!1},custom:{type:Boolean,value:!1},value:{type:Array,value:[]}},data:{itemSizePercentage:null},observers:{clear(e){e&&(console.warn("clear 属性已废弃,请使用 linClearImage 函数 或 urls 属性清空图片\n 详情信息参考:"),this.setData({value:[],clear:!1}))},"urls,cells":function(e,t){if(!e&&!t)return;let a=[];if(e)a=e;else if(t)for(const e of t)Object.prototype.hasOwnProperty.call(e,"url")&&a.push(e.url);this.setData({value:a.slice(0,this.data.count)})},async size(e){if(!e)return void this.setData({itemSizePercentage:null});const t=await nodeUtil.getNodeRectFromComponent(this,".lin-image-picker__container"),a=10/e*10-20/deviceUtil.px2rpx(t.right-t.left)*100+"%;";this.setData({itemSizePercentage:a})},custom(e){e&&console.warn("custom 已弃用,请勿使用该属性,直接传入 slot 即可")}},methods:{onTapImage(e){const t=this,a=this.data.value,i=e.currentTarget.dataset.imageIndex,l=a[i],r={all:a,index:i,current:l};eventUtil.emit(this,"lintap",r),this.data.preview&&wx.previewImage({urls:a,current:l,success(){eventUtil.emit(t,"linpreview",r)}},!0)},onTapRemove(e){const t=this.data.value,a=e.currentTarget.dataset.imageIndex,i={all:t,index:a,current:t[a]};eventUtil.emit(this,"linremovetap",i),this.data.remove&&this._removeImageByIndex(a)},async onTapAdd(){let{value:e,count:t,sizeType:a,maxImageSize:i}=this.data;const l=t-e.length;if(e.length>=t||l<=0)return;const r=await promisic(wx.chooseImage)({count:l,sizeType:a,sourceType:["album","camera"]}),s=[],n=[];r.tempFiles.forEach(e=>{const{path:t,size:a}=e;a>i&&i>0?n.push(t):s.push(t)}),this.setData({value:e.concat(s)},()=>{const e={all:this.data.value,current:s,oversize:n};eventUtil.emit(this,"linadd",e),eventUtil.emit(this,"linchange",e),eventUtil.emit(this,"linoversize",e)})},getValues(){return this.data.value},_removeImageByIndex(e){const t=this.data.value,a=t[e];t.splice(e,1);const i={index:e,current:a,all:t};this.setData({value:t},()=>{eventUtil.emit(this,"linremove",i)})},linRemoveImage(e){this._removeImageByIndex(e)},linClearImage(){this.setData({value:[]})},linGetValue(){return this.data.value}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.json b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.json
new file mode 100644
index 0000000..b87c41e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.json
@@ -0,0 +1 @@
+{"component":true,"styleIsolation":"apply-shared","usingComponents":{"l-icon":"../icon/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.wxml
new file mode 100644
index 0000000..90d5123
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.wxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.wxss
new file mode 100644
index 0000000..7acd0f2
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/image-picker/index.wxss
@@ -0,0 +1 @@
+.lin-image-picker__container{position:relative;display:flex;flex-wrap:wrap}.lin-image-picker__item{position:relative;width:220rpx;padding-bottom:220rpx;height:0}.lin-image-picker__item--2:nth-of-type(n+3){margin-top:20rpx}.lin-image-picker__item--2:not(:nth-of-type(2n+1)){margin-left:20rpx}.lin-image-picker__item--3:nth-of-type(n+4){margin-top:20rpx}.lin-image-picker__item--3:not(:nth-of-type(3n+1)){margin-left:20rpx}.lin-image-picker__item--4:nth-of-type(n+5){margin-top:20rpx}.lin-image-picker__item--4:not(:nth-of-type(4n+1)){margin-left:20rpx}.lin-image-picker__item--5:nth-of-type(n+6){margin-top:20rpx}.lin-image-picker__item--5:not(:nth-of-type(5n+1)){margin-left:20rpx}.lin-image-picker__item--6:nth-of-type(n+7){margin-top:20rpx}.lin-image-picker__item--6:not(:nth-of-type(6n+1)){margin-left:20rpx}.lin-image-picker__item--7:nth-of-type(n+8){margin-top:20rpx}.lin-image-picker__item--7:not(:nth-of-type(7n+1)){margin-left:20rpx}.lin-image-picker__item--8:nth-of-type(n+9){margin-top:20rpx}.lin-image-picker__item--8:not(:nth-of-type(8n+1)){margin-left:20rpx}.lin-image-picker__item--9:nth-of-type(n+10){margin-top:20rpx}.lin-image-picker__item--9:not(:nth-of-type(9n+1)){margin-left:20rpx}.lin-image-picker__item--10:nth-of-type(n+11){margin-top:20rpx}.lin-image-picker__item--10:not(:nth-of-type(10n+1)){margin-left:20rpx}.lin-image-picker__item--null:nth-of-type(n+4){margin-top:20rpx}.lin-image-picker__item--null:not(:nth-of-type(3n+1)){margin-left:20rpx}.lin-image-picker__image{position:absolute;left:0;top:0;width:100%;height:100%;border:1rpx solid #eee;border-radius:4rpx}.lin-image-picker__remove{position:absolute;right:10rpx;top:10rpx;height:40rpx;width:40rpx;border-radius:50%;background:rgba(0,0,0,.4);display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box}.lin-image-picker__item--add{border:1rpx solid #eee;border-radius:4rpx;background-color:#fff}.lin-image-picker__image--add{visibility:hidden;position:absolute;width:50%;height:50%;top:50%;left:50%;transform:translate(-50%,-50%)}.lin-image-picker__item-slot-wrapper{display:flex;justify-content:center;align-items:center;position:absolute;width:100%;height:100%;top:0;left:0}.lin-image-picker__item-slot-wrapper:empty+.lin-image-picker__image--add{visibility:visible}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.js b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.js
new file mode 100644
index 0000000..426dc28
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.js
@@ -0,0 +1 @@
+import nodeUtil from"../core/utils/node-util";Component({externalClasses:["l-anchor-class"],options:{multipleSlots:!0,pureDataPattern:/^_/},relations:{"../index-list/index":{type:"parent"}},data:{anchorSlot:{height:-1},anchor:{height:0},anchorText:"",anchorStyle:"",anchorWrapperStyle:""},lifetimes:{attached(){this.parseAnchorSlotRect()}},methods:{async parseAnchorSlotRect(){const t=await nodeUtil.getNodeRectFromComponent(this,".anchor-slot");t?this.setData({"anchorSlot.height":t.height}):this.setData({"anchorSlot.height":0})},async parseAnchorRect(){const t=await nodeUtil.getNodeRectFromComponent(this,".anchor");t&&this.setData({"anchor.height":t.height})},setFixed(t,e){const a=`\n position:fixed;\n top:${t}rpx;\n `,o=`height:${e}px;`;this.setData({anchorStyle:a,anchorWrapperStyle:o})},setRelative(t){const e=`\n position:relative;\n transform: translate3d(0, ${t}px, 0);\n `;this.setData({anchorStyle:e})},clearStyle(){this.setData({anchorStyle:"",anchorWrapperStyle:""})},isRelative(){return this.data.anchorStyle.indexOf("relative")>0},isFixed(){return this.data.anchorStyle.indexOf("fixed")>0}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.json b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.json
new file mode 100644
index 0000000..8d97f7d
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-index-list":"../index-list/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.wxml
new file mode 100644
index 0000000..44729cb
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.wxml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ {{anchorText}}
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.wxss
new file mode 100644
index 0000000..1b449e9
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-anchor/index.wxss
@@ -0,0 +1 @@
+.anchor-wrapper{width:100%}.anchor-wrapper .anchor{width:100%}.anchor-wrapper .anchor-default{width:100%;background-color:#f7f8fa;display:flex;align-items:center;padding:8rpx 0 8rpx 30rpx;font-size:26rpx;font-weight:700;color:#323132;box-sizing:border-box}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.js b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.js
new file mode 100644
index 0000000..01e0504
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.js
@@ -0,0 +1 @@
+import nodeUtil from"../core/utils/node-util";import dataUtil from"../core/utils/data-util";import eventUtil from"../core/utils/event-util";import pixelUtil from"../core/utils/pixel-util";const defaultSidebarData=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];Component({externalClasses:["l-tip-class","l-tip-text-class","l-sidebar-class","l-selected-class","l-unselected-class","l-sidebar-item-class"],relations:{"../index-anchor/index":{type:"child"}},options:{multipleSlots:!0,pureDataPattern:/^_/},lifetimes:{attached(){this.init()}},properties:{isStick:{type:Boolean,value:!1},scrollTop:{type:Number,value:0},sidebarData:{type:Array,value:defaultSidebarData},showSidebar:{type:Boolean,value:!0},stickOffsetTop:{type:Number,value:0}},data:{_sidebar:{top:0,height:0,sidebarItemCenterPoints:[],isMoving:!1,sidebarItemRect:{}},_anchor:{anchorTopLocations:[],indexAnchorComponents:[],currentStickAnchorIndex:-1,anchorItemsHeight:[]},_stickOffsetTopPx:0,activeSidebarItem:0,tipTop:0,showTip:!1,tipHeight:0},observers:{scrollTop:function(t){this.setIndexListStyle(t)},stickOffsetTop:function(t){this.setData({_stickOffsetTopPx:pixelUtil.rpx2px(t)})}},methods:{async init(){await this.parseSidebarRect(),await this.parseSidebarItemRect(),await this.parseIndexAnchors(),this.parseAnchorRect(),wx.lin=wx.lin||{},wx.lin.setScrollTop=t=>{dataUtil.setDiffData(this,{scrollTop:t})}},async parseSidebarRect(){const t=await nodeUtil.getNodeRectFromComponent(this,".sidebar");this.setData({"_sidebar.height":t.height,"_sidebar.top":t.top})},async parseSidebarItemRect(){const t=this.data.sidebarData.length,e=await nodeUtil.getNodeRectFromComponent(this,".sidebar-item"),i=this.data._sidebar.height/t,a=e.height,s=await nodeUtil.getNodeFieldsFromComponent(this,".sidebar-item",{computedStyle:["margin-top"]}),o=await nodeUtil.getNodeFieldsFromComponent(this,".tip",{computedStyle:["height"]}),n=[],r=s["margin-top"].replace("px","");for(let e=1;e<=t;e++)n.push((2*e-1)*a/2+e*parseInt(r));const h=parseInt(o.height.replace("px",""));this.setData({tipHeight:h,tipHeightOverflow:.205*h,"_sidebar.sidebarItemRect":e,"_sidebar.sidebarItemHeight":i,"_sidebar.sidebarItemRealHeight":a,"_sidebar.sidebarItemCenterPoints":n})},parseIndexAnchors(){const t=this.getRelationNodes("../index-anchor/index");if(t){this.setData({"_anchor.indexAnchorComponents":t});for(let e=0;e=n&&t+c<=h-r&&!o.isFixed()){o.setFixed(this.data.stickOffsetTop,r);for(let t=0;th-r&&t+ca-1&&(o=a-1);const n=this.data.sidebarData[o];dataUtil.setDiffData(this,{tipText:n,activeSidebarItem:o,tipTop:this.data._sidebar.sidebarItemCenterPoints[o]});let r=this.data._anchor.anchorTopLocations[o]-this.data._stickOffsetTopPx;wx.pageScrollTo({duration:0,scrollTop:r}),"tap"===t.type&&setTimeout(()=>{this.switchIsMovingSidebar(!1)},100),eventUtil.emit(this,"linselected",{index:o,tipText:n})},onTouchend(){setTimeout(()=>{this.switchTipShow(!1)},500),this.switchIsMovingSidebar(!1)},onTapSidebar(t){this.onTouchMove(t)}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.json b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.wxml
new file mode 100644
index 0000000..b2ca0a8
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.wxml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.wxss
new file mode 100644
index 0000000..aaecbd0
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/index-list/index.wxss
@@ -0,0 +1 @@
+.index-list .sidebar{font-size:24rpx;position:fixed;right:30rpx;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center}.index-list .sidebar-item{width:40rpx;height:40rpx;border-radius:50%;display:flex;justify-content:center;align-items:center;margin-top:8rpx}.index-list .sidebar-item-active{color:#fff;background-color:#3963bc}.index-list .tip{width:90rpx;height:90rpx;background-color:#d8d8d8;border-radius:90px 90px 0;display:flex;justify-content:center;align-items:center;position:absolute;left:-160rpx;transform:rotate(-45deg) translateY(-35%)}.index-list .tip-text{font-size:30rpx;transform:rotate(45deg)}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/input/index.js b/HR/AIproject/miniprogram_npm/lin-ui/input/index.js
new file mode 100644
index 0000000..45f0c7b
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/input/index.js
@@ -0,0 +1 @@
+import eventBus from"../core/utils/event-bus.js";import validator from"../behaviors/validator";import rules from"../behaviors/rules";Component({options:{multipleSlots:!0},behaviors:["wx://form-field",validator,rules],externalClasses:["l-class","l-label-class","l-error-text","l-error-text-class","l-input-class","l-row-class"],properties:{label:String,hideLabel:Boolean,labelCustom:Boolean,showRow:{type:Boolean,value:!0},required:Boolean,placeholder:String,type:{type:String,value:"text",options:["text","idcard","digit","password","number"]},value:String,colon:Boolean,focus:Boolean,clear:Boolean,maxlength:{type:Number,value:140},width:{type:Number,value:null},labelWidth:{type:Number,value:200},labelLayout:{type:String,value:"left",options:["left","right"]},disabled:Boolean,placeholderStyle:String,showEye:{type:Boolean,value:!1},adjustPosition:{type:Boolean,value:!0}},data:{},attached(){},methods:{handleInputChange(e){const{detail:t={}}=e,{value:a=""}=t;this.setData({value:a}),eventBus.emit("lin-form-change-"+this.id,this.id),this.triggerEvent("lininput",e.detail)},handleInputFocus(e){this.triggerEvent("linfocus",e.detail)},handleInputBlur(e){this.validatorData({[this.data.name]:e.detail.value}),eventBus.emit("lin-form-blur-"+this.id,this.id),this.triggerEvent("linblur",e.detail)},handleInputConfirm(e){const{detail:t={}}=e,{value:a=""}=t;this.setData({value:a}),this.triggerEvent("linconfirm",e.detail)},onClearTap(e){this.setData({value:""}),this.triggerEvent("linclear",e.detail)},getValues(){return this.data.value},reset(){this.setData({value:""})},onTapEyeIcon(){const e=this.data.type;"text"===e?this.setData({type:"password"}):"password"===e&&this.setData({type:"text"})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/input/index.json b/HR/AIproject/miniprogram_npm/lin-ui/input/index.json
new file mode 100644
index 0000000..a70bd9b
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/input/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-error-tip":"../error-tip/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/input/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/input/index.wxml
new file mode 100644
index 0000000..db5ce1c
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/input/index.wxml
@@ -0,0 +1,23 @@
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/input/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/input/index.wxss
new file mode 100644
index 0000000..89c6970
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/input/index.wxss
@@ -0,0 +1 @@
+.form-item{position:relative;font-size:28rpx;color:#333;height:88rpx;display:flex;flex-direction:row;align-items:center;padding-right:25rpx;box-sizing:border-box}.row{position:absolute;bottom:0;right:0;height:2rpx;width:730rpx;background:#f3f3f3}.text-require{color:#e23;vertical-align:middle}.form-label{display:flex;flex-direction:row;align-items:center;height:88rpx;padding-left:25rpx;padding-right:15rpx;box-sizing:border-box}.disabled{color:#9a9a9a!important}.mask{position:absolute;z-index:999;height:100%;width:100%}.form-label-right{justify-content:flex-end}.form-label-left{justify-content:flex-start}.input{height:100%;line-height:100%;flex:1}.close{height:36rpx;width:36rpx;background:#ddd;display:flex;flex-direction:row;align-items:center;justify-content:center;border-radius:50%;margin-right:20rpx}.pls-class{color:#9a9a9a}.hideLabel{padding-left:25rpx}.l-eye{padding:10rpx}.l-eye-text{color:#3963bc!important}.l-eye-password{color:rgba(57,99,188,.6)!important}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/list/index.js b/HR/AIproject/miniprogram_npm/lin-ui/list/index.js
new file mode 100644
index 0000000..f70ae4d
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/list/index.js
@@ -0,0 +1 @@
+import hover from"../behaviors/hover";Component({behaviors:[hover],relations:{"../list/index":{type:"parent",linked(){},linkChanged(){},unlinked(){}}},options:{multipleSlots:!0},externalClasses:["l-class","l-class-icon","l-icon-class","l-class-image","l-image-class","l-class-right","l-right-class","l-class-content","l-content-class","l-class-desc","l-desc-class","l-link-icon-class"],properties:{icon:String,iconColor:{type:String,value:"#3963BC"},iconSize:{type:String,value:"28"},image:String,title:String,desc:String,tagPosition:{type:String,value:"left"},tagContent:String,tagShape:{type:String,value:"square"},tagColor:String,tagPlain:Boolean,badgePosition:{type:String,value:"left"},dotBadge:Boolean,badgeCount:Number,badgeMaxCount:{type:Number,value:99},badgeCountType:{type:String,value:"overflow"},rightDesc:String,gap:Number,leftGap:Number,rightGap:Number,isLink:{type:Boolean,value:!0},linkType:{type:String,value:"navigateTo"},url:String},methods:{tapcell:function(e){const{linkType:t,url:l}=e.currentTarget.dataset;l&&wx[t]({url:l}),this.triggerEvent("lintap",{e:e},{bubbles:!0,composed:!0})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/list/index.json b/HR/AIproject/miniprogram_npm/lin-ui/list/index.json
new file mode 100644
index 0000000..32f4c75
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/list/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-badge":"../badge/index","l-tag":"../tag/index"} }
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/list/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/list/index.wxml
new file mode 100644
index 0000000..ca41278
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/list/index.wxml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{title}}
+ {{desc}}
+
+ {{tagContent}}
+ {{tagContent}}
+
+
+
+
+
+
+ {{tagContent}}
+ {{tagContent}}
+ {{rightDesc}}
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/list/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/list/index.wxss
new file mode 100644
index 0000000..bdc88a3
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/list/index.wxss
@@ -0,0 +1 @@
+.l-list{width:100%;min-height:88rpx;display:flex;justify-content:space-between;align-items:center;color:#333;font-size:28rpx;border-bottom:1px solid #f3f3f3;box-sizing:border-box}.l-list-hover{opacity:.8}.l-list .left-section{display:flex;justify-content:space-between;align-items:center}.l-list .left-section .l-icon{margin-right:20rpx}.l-list .left-section .l-desc{color:#d1d3d7;font-size:24rpx}.l-list .left-section .cell-tag{margin-left:20rpx}.l-list .left-section .l-image{width:44rpx;height:44rpx;margin-right:20rpx}.l-list .right-section{display:flex;justify-content:space-between;align-items:center;line-height:1.2}.l-list .right-section .l-text{margin-right:20rpx}.l-list .right-section .cell-tag{margin-right:20rpx}.l-list .badge-right{border-radius:28rpx;min-width:28rpx;left:-20rpx;right:auto;top:0;bottom:0;transform:translate(-100%,2rpx)}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loading/index.js b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.js
new file mode 100644
index 0000000..520dd88
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.js
@@ -0,0 +1 @@
+import computeOffset from"../behaviors/computeOffset";import validator from"../behaviors/validator";Component({behaviors:[computeOffset,validator],externalClasses:["l-container-class","l-class"],properties:{show:{type:Boolean,value:!1},opacity:{type:String,value:"1"},bgColor:String,zIndex:{type:String,value:"776"},type:{type:String,value:"rotate",options:["flash","flip","change","rotate","circle"]},color:{type:String,value:""},size:{type:String,value:"medium"},custom:Boolean,fullScreen:Boolean},attached(){this._init()},pageLifetimes:{show(){this._init()}},methods:{_init(){wx.lin=wx.lin||{},wx.lin.showLoading=e=>{const{custom:t=!1,fullScreen:o=!1,color:i="",type:a="rotate",size:s="medium",opacity:l="1"}={...e};this.setData({custom:t,fullScreen:o,color:i,type:a,size:s,opacity:l,show:!0})},wx.lin.hideLoading=()=>{this.setData({show:!1})}},doNothingMove(){}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loading/index.json b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loading/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.wxml
new file mode 100644
index 0000000..3fad241
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.wxml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loading/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.wxss
new file mode 100644
index 0000000..bb44cf0
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loading/index.wxss
@@ -0,0 +1 @@
+.container-loading{position:fixed;height:100%;width:100%;top:0;left:0}.content{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;height:100%}.spinner-flash-medium{width:60rpx;height:60rpx}.spinner-flash-mini{width:40rpx;height:40rpx}.spinner-flash-large{width:80rpx;height:80rpx}.spinner-flip-medium{width:60rpx;height:60rpx}.spinner-flip-mini{width:40rpx;height:40rpx}.spinner-flip-large{width:80rpx;height:80rpx}.spinner-change-medium{width:30rpx;height:30rpx}.spinner-change-mini{width:20rpx;height:20rpx}.spinner-change-large{width:50rpx;height:50rpx}.flash-spinner{position:relative}.flash-bounce1,.flash-bounce2{width:100%;height:100%;border-radius:50%;background-color:#3963bc;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:bounce 2s infinite ease-in-out;animation:bounce 2s infinite ease-in-out}.flash-bounce2{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes bounce{0%,100%{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes bounce{0%,100%{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}.flip-bounce1{background-color:#3963bc;-webkit-animation:rotateplane 1.2s infinite ease-in-out;animation:rotateplane 1.2s infinite ease-in-out}@-webkit-keyframes rotateplane{0%{-webkit-transform:perspective(120px)}50%{-webkit-transform:perspective(120px) rotateY(180deg)}100%{-webkit-transform:perspective(120px) rotateY(180deg) rotateX(180deg)}}@keyframes rotateplane{0%{transform:perspective(120px) rotateX(0) rotateY(0);-webkit-transform:perspective(120px) rotateX(0) rotateY(0)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0);-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.change-spinner{width:240rpx;text-align:center}.change-bounce1{background-color:#3963bc;border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-delay:-.32s;animation-delay:-.32s}.change-bounce2{background-color:#3963bc;border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-delay:-.16s;animation-delay:-.16s}.change-bounce3{background-color:#3963bc;border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes bouncedelay{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.spinner-circle{position:relative}.spinner-circle-mini{width:40rpx;height:40rpx}.spinner-circle-medium{width:60rpx;height:60rpx}.spinner-circle-large{width:70rpx;height:70rpx}.container1>.container-view,.container2>.container-view,.container3>.container-view{border-radius:50%;position:absolute;background-color:#3963bc;-webkit-animation:bouncedelay4 1.2s infinite ease-in-out;animation:bouncedelay4 1.2s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.circle-mini{width:12rpx;height:12rpx}.circle-medium{width:15rpx;height:15rpx}.circle-large{width:20rpx;height:20rpx}.spinner-circle .spinner-container{position:absolute;width:100%;height:100%}.container2{-webkit-transform:rotateZ(45deg);transform:rotateZ(45deg)}.container3{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.circle1{top:0;left:0}.circle2{top:0;right:0}.circle3{right:0;bottom:0}.circle4{left:0;bottom:0}.container2 .circle1{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.container3 .circle1{-webkit-animation-delay:-1s;animation-delay:-1s}.container1 .circle2{-webkit-animation-delay:-.9s;animation-delay:-.9s}.container2 .circle2{-webkit-animation-delay:-.8s;animation-delay:-.8s}.container3 .circle2{-webkit-animation-delay:-.7s;animation-delay:-.7s}.container1 .circle3{-webkit-animation-delay:-.6s;animation-delay:-.6s}.container2 .circle3{-webkit-animation-delay:-.5s;animation-delay:-.5s}.container3 .circle3{-webkit-animation-delay:-.4s;animation-delay:-.4s}.container1 .circle4{-webkit-animation-delay:-.3s;animation-delay:-.3s}.container2 .circle4{-webkit-animation-delay:-.2s;animation-delay:-.2s}.container3 .circle4{-webkit-animation-delay:-.1s;animation-delay:-.1s}@-webkit-keyframes bouncedelay4{0%,100%,80%{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes bouncedelay4{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.rotate{border-radius:50%;animation:rotate .7s linear infinite}.rotate-mini{height:40rpx;width:40rpx;border-top:6rpx solid #3963bc;border-right:6rpx solid transparent!important;border-bottom:6rpx solid #3963bc;border-left:6rpx solid #3963bc}.rotate-medium{height:50rpx;width:50rpx;border-top:6rpx solid #3963bc;border-right:6rpx solid transparent!important;border-bottom:6rpx solid #3963bc;border-left:6rpx solid #3963bc}.rotate-large{height:70rpx;width:70rpx;border-top:8rpx solid #3963bc;border-right:8rpx solid transparent!important;border-bottom:8rpx solid #3963bc;border-left:8rpx solid #3963bc}@keyframes rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.js b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.js
new file mode 100644
index 0000000..750de9c
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.js
@@ -0,0 +1 @@
+import validator from"../behaviors/validator";Component({externalClasses:["l-class","l-loading-class","l-end-class","l-line-class"],options:{multipleSlots:!0},behaviors:[validator],properties:{show:Boolean,custom:Boolean,line:Boolean,color:String,size:{type:String,value:"28"},type:{type:String,value:"loading",options:["loading","end"]},endText:{type:String,value:"我是有底线的~"},loadingText:{type:String,value:"加载中..."}},data:{},attached(){this._init()},pageLifetimes:{show(){this._init()}},methods:{_init(){wx.lin=wx.lin||{},wx.lin.showLoadmore=e=>{const{custom:o=!1,line:t=!1,color:i="",size:l="28",type:a="loading",endText:n="我是有底线的",loadingText:s="加载中..."}={...e};this.setData({custom:o,line:t,color:i,size:l,type:a,endText:n,loadingText:s,show:!0})},wx.lin.hideLoadmore=()=>{this.setData({show:!1})}},onLoadmore(){this.triggerEvent("lintap",{},{bubbles:!0,composed:!0})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.json b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.json
new file mode 100644
index 0000000..68ad645
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-loading":"../loading/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.wxml
new file mode 100644
index 0000000..9405776
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.wxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{loadingText}}
+ {{endText}}
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.wxss
new file mode 100644
index 0000000..d8c4964
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/loadmore/index.wxss
@@ -0,0 +1 @@
+.loadmore-container{display:flex;flex-direction:column;background-color:transparent}.loading{display:flex;flex-direction:row;width:100%;height:72rpx;align-items:center;justify-content:center;background-color:transparent}.loading .loading-view:nth-child(2){margin-left:36rpx}.loading-text{color:#bbb;font-size:28rpx;margin:0 12rpx}.line{width:80rpx;height:2rpx;background-color:#d1d3d7}.rotate{border-radius:50%;animation:rotate .7s linear infinite;height:28rpx;width:28rpx;border-top:4rpx solid #bbb;border-right:4rpx solid transparent!important;border-bottom:4rpx solid #bbb;border-left:4rpx solid #bbb;margin-left:12rpx}@keyframes rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/mask/index.js b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.js
new file mode 100644
index 0000000..50fc3b0
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.js
@@ -0,0 +1 @@
+import zIndex from"../behaviors/zIndex";Component({behaviors:[zIndex],externalClasses:["l-class","l-mask-class"],properties:{show:{type:Boolean,value:!1},opacity:{optionalTypes:[String,Number],value:.4},zIndex:{type:Number,value:99},center:{type:Boolean,value:!1},locked:{type:Boolean,value:!0},fullScreen:{type:String,value:""},NavColor:{type:String,value:""}},data:{},methods:{doNothingMove(){},onMaskTap(){!0!==this.data.locked&&this.setData({show:!1}),this.triggerEvent("lintap",!0,{bubbles:!0,composed:!0})}},attached:function(){}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/mask/index.json b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/mask/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.wxml
new file mode 100644
index 0000000..a6b8986
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.wxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/mask/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.wxss
new file mode 100644
index 0000000..f2dbe42
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/mask/index.wxss
@@ -0,0 +1 @@
+.container-mask{position:fixed;top:0;left:0;width:100%;height:100%;transition:all .3s}.mask-bg{height:100%;width:100%;background:#fff;z-index:99}.mask-content{display:inline-block;z-index:101;overflow:hidden}.center{display:flex;flex-direction:row;align-items:center;justify-content:center}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/message/index.js b/HR/AIproject/miniprogram_npm/lin-ui/message/index.js
new file mode 100644
index 0000000..9fc381a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/message/index.js
@@ -0,0 +1 @@
+import zIndex from"../behaviors/zIndex";import watchShow from"../behaviors/watchShow";import validator from"../behaviors/validator";Component({behaviors:[zIndex,watchShow,validator],externalClasses:["l-class","l-image-class","l-class-image"],properties:{show:Boolean,icon:String,iconColor:{type:String,value:"#fff"},iconSize:{type:String,value:"28"},image:String,content:String,type:{type:String,value:"primary",options:["primary","warning","success","error"]},duration:{type:Number,value:1500},openApi:{type:Boolean,value:!0},top:{type:Number,value:0}},data:{status:!1},observers:{icon:function(){}},attached(){this.initMessage()},pageLifetimes:{show(){this.initMessage()}},methods:{initMessage(){wx.lin=wx.lin||{},wx.lin.showMessage=(t={})=>{const{content:e="",icon:i="",image:a="",type:s="primary",duration:o=1500,success:n=null,top:r=0}=t;return this.data.success=n,this.setData({content:e,icon:i,image:a,duration:o,type:s,top:r}),this.changeStatus(),this},wx.lin.hideMessage=()=>{this.setData({status:!1})}}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/message/index.json b/HR/AIproject/miniprogram_npm/lin-ui/message/index.json
new file mode 100644
index 0000000..e11651a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/message/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/message/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/message/index.wxml
new file mode 100644
index 0000000..860c611
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/message/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ {{content}}
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/message/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/message/index.wxss
new file mode 100644
index 0000000..f0f56f4
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/message/index.wxss
@@ -0,0 +1 @@
+.l-message{width:750rpx;height:0;border-radius:0rpx 0rpx 16rpx 16rpx;display:flex;justify-content:center;align-items:center;position:fixed;left:50%;font-size:28rpx;color:#fff;opacity:0;box-shadow:0rpx 6rpx 16rpx 0rpx rgba(217,212,191,.5);transform:translateX(-50%) translateZ(0) translateY(-100%);transition:all .4s ease-in-out}.l-message-success{background-color:#34bfa3}.l-message-error{background-color:#f4516c}.l-message-warning{background-color:#ffe57f;color:#333}.l-message-primary{background-color:#3963bc}.l-message-show{transform:translateX(-50%) translateZ(0) translateY(0);height:72rpx;opacity:1}.l-message-image{width:30rpx;height:30rpx;margin-right:15rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.js b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.js
new file mode 100644
index 0000000..ef8da99
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.js
@@ -0,0 +1 @@
+import nodeUtil from"../core/utils/node-util";Component({externalClasses:["l-class","l-icon-class"],properties:{type:{type:String,value:"still"},swipArr:Array,frontIconName:{type:String,value:""},frontIconSize:{type:Number,value:28},frontIconColor:{type:String,value:"#3683D6"},endIconName:{type:String,value:""},endIconSize:{type:Number,value:28},endIconColor:{type:String,value:"#3683D6"},backgroundcolor:{type:String,value:"#DFEDFF"},color:{type:String,value:"#3683D6"},speed:{type:Number,value:1500},show:{type:Boolean,value:!0},close:{type:Boolean,value:!1}},data:{wrapWidth:0,width:0,duration:0,animation:null,timer:null},detached(){this.destroyTimer()},ready(){"roll"===this.properties.type&&this.properties.show&&this.initAnimation()},methods:{async initAnimation(){const t=await nodeUtil.getNodeRectFromComponent(this,".l-noticebar-content"),i=await nodeUtil.getNodeRectFromComponent(this,".l-noticebar-content-wrap"),a=t.width/40*this.data.speed,e=wx.createAnimation({duration:a,timingFunction:"linear"});this.setData({wrapWidth:i.width,width:t.width,duration:a,animation:e},()=>{this.startAnimation()})},startAnimation(){if(0!==this.data.animation.option.transition.duration){this.data.animation.option.transition.duration=0;const t=this.data.animation.translateX(this.data.wrapWidth).step();this.setData({animationData:t.export()})}this.data.animation.option.transition.duration=this.data.duration;const t=this.data.animation.translateX(-this.data.width).step();setTimeout(()=>{this.setData({animationData:t.export()})},100);const i=setTimeout(()=>{this.startAnimation()},this.data.duration);this.setData({timer:i})},destroyTimer(){this.data.timer&&clearTimeout(this.data.timer)},handleTap(){this.triggerEvent("lintap",{},{bubbles:!0,composed:!0}),this.setData({timer:null})},onSwip(t){this.triggerEvent("lintap",{...t.currentTarget.dataset},{bubbles:!0,composed:!0})},onIconTap(){this.triggerEvent("linicontap",{},{bubbles:!0,composed:!0}),this.setData({timer:null})},onClose(){this.setData({timer:null,show:!1})},linFlush(){this.destroyTimer(),this.initAnimation()}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.json b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.json
new file mode 100644
index 0000000..e11651a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.wxml
new file mode 100644
index 0000000..958b947
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.wxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.wxss
new file mode 100644
index 0000000..3844270
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/notice-bar/index.wxss
@@ -0,0 +1 @@
+.l-noticebar{display:flex;height:72rpx;width:750rpx;line-height:72rpx;font-size:28rpx;color:#3963bc;background-color:#dfedff;overflow:hidden;box-shadow:0 2px 5px 0 rgba(218,224,233,.4);border-radius:0 0 8px 8px}.l-noticebar-icon{display:flex;margin-left:20rpx;margin-right:18rpx;align-items:center}.l-noticebar-icon+.l-noticebar-content-wrap-view{margin-left:5rpx}.l-noticebar-operation{display:flex;margin-right:16rpx;margin-left:8rpx;align-items:center}.l-noticebar-content-wrap{display:flex;margin-left:5rpx;flex:1;height:72rpx;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.l-noticebar-content-wrap .l-noticebar-content{position:absolute;transition-duration:20s}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/popup/index.js b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.js
new file mode 100644
index 0000000..a006e69
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.js
@@ -0,0 +1 @@
+import zIndex from"../behaviors/zIndex";import validator from"../behaviors/validator";import eventUtil from"../core/utils/event-util";import doNothing from"../core/behaviors/doNothingBehavior";Component({behaviors:[zIndex,validator,doNothing],externalClasses:["l-bg-class","l-panel-class","l-class"],properties:{show:{type:Boolean,value:!1},animation:{type:Boolean,value:!0},transition:{type:Boolean,value:null},contentAlign:{type:String,value:"center",options:["top","right","left","bottom","center"]},direction:{type:String,value:null,options:["top","right","left","bottom","center"]},locked:{type:Boolean,value:!1}},attached(){this._init()},pageLifetimes:{show(){this._init()}},data:{status:"hide"},observers:{show(t){t&&this.setData({status:"show"})}},methods:{_init(){wx.lin=wx.lin||{},wx.lin.showPopup=t=>{console.warn("wx.lin 方法已废弃,请使用开放函数代替 https://doc.mini.talelin.com/start/open-function.html"),this.linShow(t)},wx.lin.hidePopup=()=>{console.warn("wx.lin 方法已废弃,请使用开放函数代替 https://doc.mini.talelin.com/start/open-function.html"),this.linHide()}},onPopupTap(){!0!==this.data.locked&&this._hidePopup(),eventUtil.emit(this,"lintap")},_hidePopup(){this.data.animation?(this.setData({status:"hide"}),setTimeout(()=>{this.setData({show:!1})},300)):this.setData({show:!1,status:"hide"})},linShow(t){const{zIndex:i=99,animation:o=!0,contentAlign:e="center",locked:n=!1}={...t};this.setData({zIndex:i,animation:o,contentAlign:e,locked:n,show:!0})},linHide(){this._hidePopup()}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/popup/index.json b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/popup/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.wxml
new file mode 100644
index 0000000..55930c6
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.wxml
@@ -0,0 +1,8 @@
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/popup/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.wxss
new file mode 100644
index 0000000..5849fbb
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/popup/index.wxss
@@ -0,0 +1 @@
+.popup-fade-center-active-show{animation:popup-center-fadein .3s forwards}.popup-fade-center-active-hide{animation:popup-center-fadeout .3s forwards}.popup-fade-top-active-show{animation:popup-top-fadein .3s forwards}.popup-fade-top-active-hide{animation:popup-top-fadeout .3s forwards}.popup-fade-left-active-show{animation:popup-left-fadein .3s forwards}.popup-fade-left-active-hide{animation:popup-left-fadeout .3s forwards}.popup-fade-right-active-show{animation:popup-right-fadein .3s forwards}.popup-fade-right-active-hide{animation:popup-right-fadeout .3s forwards}.popup-fade-bottom-active-show{animation:popup-bottom-fadein .3s forwards}.popup-fade-bottom-active-hide{animation:popup-bottom-fadeout .3s forwards}@keyframes popup-top-fadein{0%{transform:translate3d(0,-100%,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes popup-top-fadeout{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-100%,0);opacity:.1}}@keyframes popup-left-fadein{0%{transform:translate3d(-100%,0,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes popup-left-fadeout{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(-100%,0,0);opacity:.1}}@keyframes popup-right-fadein{0%{transform:translate3d(100%,0,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes popup-right-fadeout{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(100%,0,0);opacity:.1}}@keyframes popup-bottom-fadein{0%{transform:translate3d(0,100%,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes popup-bottom-fadeout{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,100%,0);opacity:.1}}@keyframes popup-center-fadein{0%{transform:scale(.8);opacity:0}50%{transform:scale(1.1)}100%{transform:scale(1);opacity:1}}@keyframes popup-center-fadeout{0%{transform:scale(1);opacity:1}50%{transform:scale(1.1)}100%{transform:scale(.8);opacity:0}}@keyframes bg-fadein{0%{opacity:0}100%{opacity:1}}@keyframes bg-fadeout{0%{opacity:1}100%{opacity:0}}.container-popup{position:fixed;top:0;left:0;right:0;bottom:0}.container-bg-show{animation:bg-fadein .3s forwards}.container-bg-hide{animation:bg-fadeout .3s forwards}.container-bg{display:block;position:fixed;top:0;left:0;right:0;bottom:0;z-index:6;background:rgba(0,0,0,.4)}.popup-content{position:absolute;z-index:100;width:100%;max-width:100%;height:100%}.center{display:flex;height:100%;width:100%;flex-direction:row;align-items:center;justify-content:center}.left{display:flex;flex-direction:row;height:100%}.right{display:flex;flex-direction:row;justify-content:flex-end;height:100%}.bottom{display:flex;flex-direction:column-reverse;width:100%}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/price/index.js b/HR/AIproject/miniprogram_npm/lin-ui/price/index.js
new file mode 100644
index 0000000..3b01f6d
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/price/index.js
@@ -0,0 +1 @@
+import validator from"../behaviors/validator";Component({externalClasses:["l-deleted-class","l-unit-class","l-value-class","l-class","l-decimal-class","l-dot-class"],behaviors:[validator],properties:{unit:{type:String,value:"¥"},size:{type:String,value:"28"},color:{type:String,value:"#3963BC"},bold:{type:String,value:"500"},unitColor:String,unitSize:String,unitBold:String,value:{type:String,value:"0.00"},mode:{type:String,value:"number",options:["number","text"]},valueColor:String,valueSize:String,valueBold:String,deleted:Boolean,delColor:String,reserveDigit:{type:Number,value:2},autofix:Boolean},data:{priceInteger:{type:String,value:"0"},priceDecimal:{type:String,value:"00"}},observers:{value:function(){this.reserveNumber()}},methods:{reserveNumber(){this.setData({priceInteger:null,priceDecimal:null});const e=Number(this.data.value);if(!(isNaN(Number(e))||"text"===this.data.mode)&&this.data.autofix){const t=e.toFixed(this.data.reserveDigit).toString().split(".");this._setPrice(t)}else{const e=this.data.value.split(".");this._setPrice(e)}},_setPrice(e){if(1===e.length)this.setData({priceInteger:e[0]});else{if(2!==e.length)throw"price 格式有误,请仔细检查!";this.setData({priceInteger:e[0],priceDecimal:e[1]})}}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/price/index.json b/HR/AIproject/miniprogram_npm/lin-ui/price/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/price/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/price/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/price/index.wxml
new file mode 100644
index 0000000..e4aa2a7
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/price/index.wxml
@@ -0,0 +1,6 @@
+
+
+ {{unit}}
+
+ {{priceInteger}}{{priceDecimal?'.':''}}{{priceDecimal?priceDecimal:''}}
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/price/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/price/index.wxss
new file mode 100644
index 0000000..892dfbd
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/price/index.wxss
@@ -0,0 +1 @@
+.price-del{text-decoration:line-through!important}.price-container{display:inline-block;text-align:center;color:#3963bc;font-size:28rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/progress/index.js b/HR/AIproject/miniprogram_npm/lin-ui/progress/index.js
new file mode 100644
index 0000000..3894e64
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/progress/index.js
@@ -0,0 +1 @@
+import{px2rpx}from"../utils/util.js";import validator from"../behaviors/validator";Component({externalClasses:["l-class","l-text-class","l-active-class","l-background-class"],behaviors:[validator],properties:{percent:{type:Number,value:0},strokeWidth:{type:Number,value:12},borderRadius:{type:Number,value:6},activeColor:{type:String},backgroundColor:{type:String,value:"#EBEBEB"},showInfo:{type:Boolean,value:!1},textPosition:{type:String,value:"right",options:["left","right"]},textColor:{type:String},interval:{type:Number,value:20},active:{type:Boolean,value:!1},duration:{type:Number,value:30}},options:{multipleSlots:!0,pureDataPattern:/^_/},data:{_slotWidth:0,_slotHeight:0,_progressWidth:0,_progressHeight:0,_marginBottom:0,marginLeft:0,marginTop:0,_useSlot:!1},observers:{"_slotWidth, _slotHeight, _progressWidth, _progressHeight, percent,_useSlot":function(t,e,r,i,s,a){if(a){const a=-(e-i)/2,o=(r-t)*s/100;this.setData({marginTop:a,marginLeft:o})}}},lifetimes:{attached(){this.data.percent>100&&this.setData({percent:100});wx.createSelectorQuery().in(this).select(".slot").boundingClientRect(t=>{let e=this.data._useSlot;t.width&&(e=!0),this.setData({_useSlot:e,_slotWidth:px2rpx(t.width),_slotHeight:px2rpx(t.height)})}).exec();wx.createSelectorQuery().in(this).select(".progress").boundingClientRect(t=>{this.setData({_progressHeight:px2rpx(t.height),_progressWidth:px2rpx(t.width)})}).exec();const t=this.data.percent;let e=0;this.data.active&&setInterval(()=>{e
+
+ {{percent}}%
+
+
+
+
+
+
+
+
+
+ {{percent}}%
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/progress/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/progress/index.wxss
new file mode 100644
index 0000000..af1cb39
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/progress/index.wxss
@@ -0,0 +1 @@
+.container{display:flex;flex-direction:row;align-items:center}.progress{position:relative;width:100%;transition:all .25s ease-in-out}.percent{position:absolute;z-index:1}.active{background-color:#3963bc}.text{color:#3963bc;font-size:30rpx}.background{position:absolute;width:100%}.header{position:absolute!important;z-index:2}.slot{position:absolute;z-index:2}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.js b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.js
new file mode 100644
index 0000000..8936ab8
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.js
@@ -0,0 +1 @@
+import eventBus from"../core/utils/event-bus";import rules from"../behaviors/rules";Component({externalClasses:["l-class","l-error-text","l-error-text-class"],behaviors:["wx://form-field",rules],relations:{"../radio/index":{type:"child",linked(){this.init()},linkChanged(){},unlinked(){this.init()}}},properties:{current:{type:String},noneChecked:{type:Boolean,value:!0},placement:{type:String,value:"column"}},data:{currentLength:0},methods:{checkedKeyRepeat(e){let t=e.map(e=>e.data.key);const r=this.isRepeat(t);if(!1!==r)throw new Error("keys有重复元素, radio的key属性不能重复:"+r)},isRepeat(e){let t={};for(let r in e){if(t[e[r]])return e[r];t[e[r]]=!0}return!1},init(){const e=this.getRelationNodes("../radio/index");this.checkedKeyRepeat(e),this.onChangeHandle(e)},onChangeHandle(e){e.forEach(e=>{let t=this.properties.current===e.data.key;e.setChecked(t,e.data.key)})},onEmitEventHandle(e,t){this.properties.current=t?e.key:null;const r=this.getRelationNodes("../radio/index");this.onChangeHandle(r),Object.assign(e,{currentKey:this.properties.current}),this.validatorData({[this.data.name]:this.data.current}),this.triggerEvent("linchange",e,{bubbles:!0,composed:!0}),eventBus.emit("lin-form-change-"+this.id,this.id)},getValues(){return this.data.current},reset(){this.data.current=""}},observers:{current:function(){this.init()}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.json b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.json
new file mode 100644
index 0000000..e63668b
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-error-tip":"../error-tip/index","l-radio":"../radio/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.wxml
new file mode 100644
index 0000000..f22eb96
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.wxml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.wxss
new file mode 100644
index 0000000..ab2973e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio-group/index.wxss
@@ -0,0 +1 @@
+.radio-group{width:100%}.radio-group-row{display:flex;flex-direction:row}.radio-group-column{display:flex;flex-direction:column}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio/index.js b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.js
new file mode 100644
index 0000000..e4be4c8
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.js
@@ -0,0 +1 @@
+Component({externalClasses:["l-class","l-disabled-class"],behaviors:["wx://form-field"],relations:{"../radio-group/index":{type:"parent"}},properties:{key:String,cell:Object,size:{type:String,value:"38rpx"},disabled:{type:Boolean},custom:Boolean,color:{type:String,value:"#ccc"},selectColor:{type:String,value:"#3963BC"},disabledColor:{type:String,value:"#ccc"},placement:{type:String,value:"left"},transition:{type:Boolean,value:!0}},data:{checked:!1},methods:{setChecked(e){this.setData({checked:e})},onRadioChangeTap(){if(this.properties.disabled)return;const e=this.getRelationNodes("../radio-group/index")[0],t=e.properties.noneChecked;let r=!0;if(this.isCurrentSelectedKey(e)&&(r=!1,!t))return;const i=!this.data.checked;this.data.checked=i;const s={checked:i,key:this.properties.key,cell:this.properties.cell};e&&e.onEmitEventHandle(s,r)},isCurrentSelectedKey(e){return e.properties.current===this.properties.key}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio/index.json b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.wxml
new file mode 100644
index 0000000..3fedd1f
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.wxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/radio/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.wxss
new file mode 100644
index 0000000..ef79dc8
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/radio/index.wxss
@@ -0,0 +1 @@
+.label{display:flex;flex:1;align-items:center;font-size:30rpx;color:#333;width:100%}.label-left{flex-direction:row}.label-right{flex-direction:row-reverse;justify-content:space-between}.label-disabled{color:#ccc}.radio{margin-right:20rpx}.iconfont{font-family:iconfont!important;display:inline-flex;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@font-face{font-family:iconfont;src:url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMMAAsAAAAABwQAAAK9AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgqBaIFyATYCJAMMCwgABCAFhG0HOxs9BsgekiQlqiBBkCKqgBDbFA9f+72eu7sf0SUKUEYCjq8CJBWhqlrpakx5POtO5RtaczeTEm4dEZ0nl3vZ/P4QsbZQwBuhkJZZe0ElkSkAzf+5nN4oP2/Mb1kucw086gUYBxToHtgmK5FAPIXhtYt1GOcJtC1qIDsxOz1Aq6DTAvGYpZNAm4sqilRoCvWatUW8V9NMb9Mt4F34/firLbQktYzOPXN3MgNGfhz/9uXVatVlHyGbzw1pExlbgEJcrfWep4izWxTahlppdgJ1RUhzJaqKUGrq6zv94yWijtZ3wRo06aZkroDgZ58ENGRb3WvkdwEvYZyONecufVjvlP/yCN9e6dcv/syKok+S/ILg5fk4v+4VjvzShk88ZPlDX7WRthx5hXV881Hg5krDX9Z84j7MqK4cjZR1JuLFnjJtMX7ePssP3xVQnfFiKPkScCUeVTcdonq0qYhT/P/M8y4Q5ZkuBeY3m1/gqWk5FFo2LcA/s72GnXZzDSQAVPNPvhv+Qobg0R/V/2uDnX/NTgHftl/fyIRqAfkuAJr34wv+r6xnVzEV1JaLLnWltj9bvld3AmI5oEKDYy/j9bPeaUIzJ5MgaViArGkJLdQtqOnYhrqmfWjbZNncMYEpRGlhwxaBMHQNSd8HyIbqaKE+Q83cH9QNQwFtZ2OyZ8dKsPpjjJIEZWBqDrLpUpFyHEQfNboQPZVP4qwiZPsQ5tgEbG1qKRYsqIjwHAu4abqNEApSuFSAZnIZyudLsIxLWZQmTQwh5b7mZqruTU3pUgHoHcOQJALJgFLmQKy0kiLK70/oS593QWhT8pJwC6kh7INgHHZ4qFWTlh6oRVvsRbqXazjTaG0IggJRsJICyExGIXl5JVC5flQWkkY0YUaky/o0s15UX23T+vrC9x2ANrogR4ocRfNNkUP5u9SpAwsAAAAA') format('woff2')}.icon-unselect:before{content:"\e6a1"}.icon-select:before{content:"\e73a"}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/rate/index.js b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.js
new file mode 100644
index 0000000..ad1a1d0
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.js
@@ -0,0 +1 @@
+import eventBus from"../core/utils/event-bus";Component({externalClasses:["l-class","l-class-icon","l-class-image","l-icon-class","l-image-class"],options:{multipleSlots:!0},properties:{count:{type:Number,value:5},score:{type:Number,value:0},size:{type:String,value:"36"},disabled:Boolean,activeColor:{type:String,value:"#FF5252"},inActiveColor:{type:String,value:"#FFE5E5"},name:{type:String,value:"favor-fill"},activeImage:String,inActiveImage:String,itemGap:{type:Number,value:10}},data:{},methods:{handleClick(e){if(this.data.disabled)return;const{index:t}=e.currentTarget.dataset;this.setData({score:t+1}),this.triggerEvent("linchange",{score:t+1}),eventBus.emit("lin-form-change-"+this.id,this.id)},getValues(){return this.data.score},reset(){this.setData({score:0})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/rate/index.json b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.json
new file mode 100644
index 0000000..a1fa4d6
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index"} }
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/rate/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.wxml
new file mode 100644
index 0000000..edb6f34
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/rate/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.wxss
new file mode 100644
index 0000000..e9d8204
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/rate/index.wxss
@@ -0,0 +1 @@
+.l-rate,.l-rate-star{display:inline-flex}.l-rate-star{position:relative}.icon-checked{position:absolute;overflow:hidden;display:flex}.image-item{width:80rpx;height:80rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.js b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.js
new file mode 100644
index 0000000..bd4fb75
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.js
@@ -0,0 +1 @@
+import validator from"../behaviors/validator";Component({externalClasses:["l-class","l-container-class","l-placeholder-class","l-icon-class","l-input-class","l-cancel-class"],behaviors:[validator],options:{multipleSlots:!0},properties:{confirmType:{type:String,value:"search"},placeholder:String,cancelText:{type:String,value:"取消"},frontText:String,custom:Boolean,value:String,type:String,icon:{type:String,value:"research"},iconColor:{type:String,value:"#bdbdbd"},iconSize:{type:String,value:"28"},bgColor:{type:String,value:"#f3f3f3"},showCancel:{type:Boolean,value:!0},shape:{type:String,value:"primary",options:["circle","primary"]},textAlign:{type:String,value:"left",options:["left","right"]},focus:Boolean,clear:{type:Boolean,value:!0},maxlength:{type:Number,value:140},disabled:Boolean,placeholderStyle:String},data:{},methods:{onCancel(){this.triggerEvent("lincancel",{},{bubbles:!0,composed:!0})},handleInputChange(e){const{detail:t={}}=e,{value:l=""}=t;this.setData({value:l}),this.triggerEvent("linchange",t)},handleInputFocus(e){this.triggerEvent("linfocus",e.detail)},handleInputBlur(e){this.triggerEvent("linblur",e.detail)},handleInputConfirm(e){const{detail:t={}}=e,{value:l=""}=t;this.setData({value:l}),this.triggerEvent("linconfirm",t)},onClearTap(e){this.setData({value:""}),this.triggerEvent("linclear",e.detail,{bubbles:!0,composed:!0})},handleTapFrontText(e){this.triggerEvent("linfronttap",e.detail)}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.json b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.json
new file mode 100644
index 0000000..2c7a387
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-input":"../input/index","l-icon":"../icon/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.wxml
new file mode 100644
index 0000000..bed097a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.wxml
@@ -0,0 +1,21 @@
+
+
+
+ {{frontText}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{cancelText}}
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.wxss
new file mode 100644
index 0000000..28df7eb
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/search-bar/index.wxss
@@ -0,0 +1 @@
+.search-bar{display:flex;flex-direction:row;align-items:center;padding:0 20rpx;box-sizing:border-box;width:100%}.search-input{height:60rpx;background-color:#f3f3f3;display:flex;flex-direction:row;flex:1;align-items:center;padding-left:30rpx;box-sizing:border-box}.search-input-primary{border-radius:8rpx}.search-input-circle{border-radius:30rpx}.cancel{font-size:28rpx;color:#666;display:flex;align-items:center;width:60rpx;justify-content:center;height:60rpx;margin-left:15rpx}.input{height:40rpx;line-height:40rpx;flex:1;margin-left:15rpx;font-size:28rpx;color:#666}.input-center{text-align:center}.input-left{text-align:left}.close-wrap{padding:10rpx}.close{height:30rpx;width:30rpx;background:#ddd;display:flex;align-items:center;justify-content:center;border-radius:50%;padding-top:3rpx;box-sizing:border-box;margin-right:15rpx}.pls-class{color:#bdbdbd;font-size:28rpx}.icon-container{display:flex;flex-direction:row;align-items:center;margin-right:15rpx}.city{font-size:28rpx;color:#333;margin-right:10rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.js b/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.js
new file mode 100644
index 0000000..a10eeda
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.js
@@ -0,0 +1 @@
+Component({options:{multipleSlots:!0},relations:{"../segment/index":{type:"parent",linked(){},unlinked(){}}},properties:{tab:String,key:String,icon:String,iconSize:{type:String,value:"20"},image:Object,picPlacement:{type:String,value:"top"},dotBadge:Boolean,badgeCount:{type:Number},badgeMaxCount:{type:Number,value:99},badgeCountType:{type:String,value:"overflow"}},observers:{"**":function(e){this.updateData(e)}},data:{},methods:{updateData(e){let t=this.getRelationNodes("../segment/index")[0];if(!t)return;const a=t.data.tabList;if(!(a&&a.length>0))return;const n=a.findIndex(e=>e.key===this.data.key);a[n]=e,t.setData({tabList:a},()=>{t.data.scrollable&&t.queryMultipleNodes()})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.json b/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.json
new file mode 100644
index 0000000..64c7367
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{} }
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.wxml
new file mode 100644
index 0000000..49aeb95
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/segment-item/index.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment/index.js b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.js
new file mode 100644
index 0000000..249442e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.js
@@ -0,0 +1 @@
+import scrollCenter from"../behaviors/scrollCenter";Component({behaviors:[scrollCenter],externalClasses:["l-class","l-header-class","l-class-active","l-active-class","l-class-inactive","l-inactive-class","l-class-tabimage","l-tab-image-class","l-class-header-line","l-header-line-class","l-class-line","l-line-class","l-class-icon","l-icon-class","l-class-badge","l-badge-class"],options:{multipleSlots:!0,pureDataPattern:/^_/},relations:{"../segment-item/index":{type:"child",linked(e){this.initTabs(e)}}},properties:{activeKey:{type:String,value:"",observer:"changeCurrent"},placement:{type:String,value:"top"},scrollable:Boolean,hasLine:{type:Boolean,value:!0},animatedForLine:Boolean,activeColor:{type:String},inactiveColor:{type:String},equalWidth:{type:Boolean,value:!0},even:{type:Boolean,value:!0},width:Number,height:Number,itemHeight:Number,itemWidth:Number},observers:{activeKey:function(e){if(!e)return;const t=this.data.tabList.findIndex(t=>t.key===e);this.setData({currentIndex:t},()=>{this.data.scrollable&&this.queryMultipleNodes()})}},data:{_cells:[],tabList:[],currentIndex:0,_segmentItemInstances:[]},methods:{initTabs(e){const t=this.data.activeKey;let a=this.getRelationNodes("../segment-item/index");if(a.length>0){if(a.length===this.data.tabList.length&&this.data._segmentItemInstances.indexOf(e)>0)return;let s=t,l=this.data.currentIndex,i=[];const n=a.map((e,a)=>(s=t||0!==a?s:e.data.key,l=e.data.key===s?a:l,i[a]=e.dataset.cell,{...e.data}));this.setData({_cells:i,activeKey:s,tabList:n,currentIndex:l,_segmentItemInstances:a},()=>{this.data.scrollable&&this.queryMultipleNodes()})}},handleChange(e){const t=e.currentTarget.dataset.key,a=e.currentTarget.dataset.index;this._setChangeData({activeKey:t,currentIndex:a})},_setChangeData({activeKey:e,currentIndex:t}){this.setData({activeKey:e,currentIndex:t},()=>{this.data.scrollable&&this.queryMultipleNodes()}),this.triggerEvent("linchange",{activeKey:e,currentIndex:t,cell:this.data._cells[t]})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment/index.json b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.json
new file mode 100644
index 0000000..1d57b03
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-badge":"../badge/index","l-segment-item":"../segment-item/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.wxml
new file mode 100644
index 0000000..825edd0
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.wxml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+ {{item.tab}}
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/segment/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.wxss
new file mode 100644
index 0000000..42ccee5
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/segment/index.wxss
@@ -0,0 +1 @@
+.l-tabs{overflow:auto;width:100%;-webkit-overflow-scrolling:touch}.l-tabs-header{display:flex;width:100%;flex-direction:row;align-items:center}.l-tabs-header .l-tabs-item{font-size:28rpx;text-align:center;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.l-tabs-header .l-icon-active,.l-tabs-header .l-tabs-active{color:#333}.l-tabs-header .l-icon-active,.l-tabs-header .l-icon-inactive{font-size:28rpx}.l-tabs-header .l-icon-inactive,.l-tabs-header .l-tabs-inactive{color:#bbb}.l-tabs-header .l-tabsitems-row{flex-direction:row}.l-tabs-header .l-tabsitems-row .l-icon-active,.l-tabs-header .l-tabsitems-row .l-icon-inactive{margin-right:10rpx}.l-tabs-header .l-tabsitems-row-reverse{flex-direction:row-reverse}.l-tabs-header .l-tabsitems-row-reverse .l-icon-active,.l-tabs-header .l-tabsitems-row-reverse .l-icon-inactive{margin-left:10rpx}.l-placement-bottom,.l-placement-top{height:80rpx}.l-placement-bottom .l-tabs-header,.l-placement-top .l-tabs-header{height:100%}.l-placement-bottom .l-tabs-header .l-tabs-item,.l-placement-top .l-tabs-header .l-tabs-item{min-height:100%}.l-placement-right{flex-direction:row-reverse}.l-placement-bottom{flex-direction:column-reverse}.l-tabs-scroll.l-tabs-horizontal .l-tabs-header{-webkit-overflow-scrolling:touch;white-space:nowrap}.l-tabs-scroll.l-tabs-horizontal .l-tabs-header .l-tabs-item{overflow:visible}.l-tabs-vertical{width:160rpx}.l-tabs-vertical .l-tabsscroll{width:160rpx;box-sizing:border-box}.l-tabs-vertical .l-tabs-equal-header{height:100%}.l-tabs-vertical .l-tabs-header{width:100%;flex-direction:column;-webkit-overflow-scrolling:touch;white-space:nowrap;overflow-x:hidden}.l-tabs-vertical .l-tabs-header .l-tabs-item.l-tabs-active{background:#fff}.l-tabs-vertical .l-tabs-header .l-tabs-unequal-width{height:80rpx}.l-tabs-vertical .l-tabs-header .l-tabs-item{overflow:visible;background:#f6f8fa;width:100%}.l-tabs-item{position:relative}.l-tab-line{position:absolute;bottom:0;left:0;background:#000}.l-tabs-horizontal .l-tabs-equal-width{flex:1}.l-tabs-horizontal .l-tabs-unequal-width{padding:0 20rpx}.l-tabs-horizontal .l-tabsscroll{height:100%;box-sizing:border-box}.l-tabs-horizontal .l-tab-line{height:4rpx;width:0;left:100%;right:0;margin:0 auto}.l-tabs-horizontal .l-line-aminmated{transition:.2s all linear}.l-tabs-horizontal .l-tabs-active.l-tabs-item~.l-tabs-item .l-tab-line{left:0}.l-tabs-horizontal .l-tabs-active .l-tab-line{width:100%;left:0}.l-tabs-horizontal .l-tabs-active .l-line-aminmated{transition-delay:.1s}.l-placement-top .l-tab-line{bottom:0;transform:translateY(-100%)}.l-placement-top .l-tabs-header-line{border-bottom:1px solid #f3f3f3}.l-placement-bottom .l-tab-line{top:0}.l-placement-bottom .l-tabs-header-line{border-top:1px solid #f3f3f3}.l-tabs-vertical .l-tab-line{width:6rpx;height:0;border-radius:0 6rpx 6rpx 0;top:0;margin:auto 0}.l-tabs-vertical .l-line-aminmated{transition:.2s all linear}.l-tabs-vertical .l-tabs-active .l-tab-line{height:40rpx}.l-tabs-vertical .l-tabs-active .l-line-aminmated{transition-delay:.1s}.l-tabs-vertical .l-tabs-active.l-tabs-item~.l-tabs-item .l-tab-line{height:0;top:0}.l-placement-left .l-tab-line{right:auto}.l-placement-left .l-tabs-header-line{border-left:1px solid #f3f3f3}.l-placement-right .l-tab-line{right:0;left:auto}.l-placement-right .l-tabs-header-line{border-right:1px solid #f3f3f3}.l-tab-image{width:100rpx;height:100rpx}.l-tab-image-placement-top{flex-direction:column}.l-tab-image-placement-bottom{flex-direction:column-reverse}.l-tab-image-placement-left{flex-direction:row}.l-tab-image-placement-right{flex-direction:row-reverse}.l-tabs-header .badge-view{top:-20rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/skeleton/index.js b/HR/AIproject/miniprogram_npm/lin-ui/skeleton/index.js
new file mode 100644
index 0000000..4e8f016
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/skeleton/index.js
@@ -0,0 +1 @@
+import validator from"../behaviors/validator";Component({externalClasses:["l-class","l-title-class","l-avatar-class","l-row-class"],behaviors:[validator],properties:{loading:{type:Boolean,value:!0},title:{type:Boolean,value:!0},paragraph:{type:Boolean,value:!0},active:{type:Boolean,value:!0},avatar:Boolean,titleWidth:String,avatarSize:String,avatarShape:{type:String,value:"circle",options:["circle","square"]},rowsWidth:{type:Array,optionalTypes:[Array,String],value:"60%"},rowsHeight:{type:Array,optionalTypes:[Array,String],value:"34rpx"},rows:Number},observers:{"rows,rowsWidth,rowsHeight":function(t,a,e){this._getResult(t,a,"rowsW","100%"),this._getResult(t,e,"rowsH","34rpx"),this._toRows(t)}},data:{},methods:{_arrRepeat(t,a){const e=[];for(let r=0;r
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/skeleton/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/skeleton/index.wxss
new file mode 100644
index 0000000..8ce96a2
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/skeleton/index.wxss
@@ -0,0 +1 @@
+.l-skeleton-container{width:100%;display:flex;flex-direction:row;box-sizing:border-box}.l-skeleton-avatar{height:72rpx;width:72rpx;margin-right:20rpx}.l-skeleton-avatar-circle{border-radius:50%}.l-skeleton-right{display:flex;flex-direction:column;flex:1}.l-skeleton-title{width:100%;height:34rpx}.l-skeleton-title-container{height:72rpx;width:50%;display:flex;align-items:center}.l-skeleton-rows{margin-top:20rpx}.bg{background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%}.active{animation:loading 1.4s ease infinite}@keyframes loading{0%{background-position:100% 50%}100%{background-position:0 50%}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.js b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.js
new file mode 100644
index 0000000..1a349fb
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.js
@@ -0,0 +1 @@
+const _windowWidth=wx.getSystemInfoSync().windowWidth;Component({options:{multipleSlots:!0},properties:{width:{type:Number,value:_windowWidth},height:{type:Number,value:100},slideWidth:{type:Number,value:0},threshold:{type:Number,value:0},disabled:{type:Boolean,value:!1},autoClose:{type:Boolean,value:!1},close:{type:Boolean,value:!1,observer:function(t){t&&(this.setData({popup:!1,x:0}),this.onCloseTap())}}},data:{viewWidth:_windowWidth,x:0,out:!1},ready(){this.updateRight()},methods:{updateRight(){const t=this;wx.createSelectorQuery().in(this).select(".right").boundingClientRect((function(e){t._slideWidth=e.width;let i=e.width<=50?e.width:50;t._threshold=t.properties.threshold?t.properties.threshold:i,t._viewWidth=t.data.width+e.width*(750/_windowWidth),t.setData({viewWidth:t._viewWidth})})).exec()},onTouchStart(t){this._startX=t.changedTouches[0].pageX},onTouchEnd(t){if(this.properties.disabled)return;this._endX=t.changedTouches[0].pageX,this._length=this._endX-this._startX;const{_endX:e,_startX:i,_threshold:s}=this;this._length>s&&(this.setData({popup:!1,x:0}),this.onCloseTap()),e>i&&!1===this.data.out||(i-e>=s?(this.setData({x:-this._slideWidth,popup:!0,close:!1}),this.onOpenTap()):i-e0&&!0!==this.data.popup||e-i>=s?(this.setData({x:0}),this.onCloseTap()):e-i0&&(this.setData({x:-this._slideWidth,close:!1}),this.onOpenTap()))},onChange(t){!this.data.out&&t.detail.x<-this._threshold?this.setData({out:!0}):this.data.out&&t.detail.x>=-this._threshold&&this.setData({out:!1})},onRightTap(){this.properties.autoClose&&(this.setData({popup:!1,x:0}),this.onCloseTap()),this.triggerEvent("lintap","click right",{bubbles:!0,composed:!0})},onOpenTap(){this.triggerEvent("slideopen",!0,{bubbles:!0,composed:!0})},onCloseTap(){this.triggerEvent("slideclose",!1,{bubbles:!0,composed:!0})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.json b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.wxml
new file mode 100644
index 0000000..7adfe70
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.wxml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.wxss
new file mode 100644
index 0000000..581bd5c
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/slide-view/index.wxss
@@ -0,0 +1 @@
+.movable-content{display:flex;direction:row;overflow:hidden}.container{overflow:hidden}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/spin/index.js b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.js
new file mode 100644
index 0000000..8e916e3
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.js
@@ -0,0 +1 @@
+Component({externalClasses:["l-class"],properties:{color:String,show:Boolean,type:{type:String,value:"flash"},custom:Boolean,size:{type:String,value:"default"}},methods:{}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/spin/index.json b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/spin/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.wxml
new file mode 100644
index 0000000..598103c
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/spin/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.wxss
new file mode 100644
index 0000000..8bd139a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/spin/index.wxss
@@ -0,0 +1 @@
+.spinner-flash-default{width:60rpx;height:60rpx}.spinner-flash-mini{width:40rpx;height:40rpx}.spinner-flash-large{width:80rpx;height:80rpx}.spinner-flip-default{width:60rpx;height:60rpx}.spinner-flip-mini{width:40rpx;height:40rpx}.spinner-flip-large{width:80rpx;height:80rpx}.spinner-change-default{width:50rpx;height:50rpx}.spinner-change-mini{width:30rpx;height:30rpx}.spinner-change-large{width:70rpx;height:70rpx}.flash-spinner{position:relative}.flash-bounce1,.flash-bounce2{width:100%;height:100%;border-radius:50%;background-color:#3963bc;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:bounce 2s infinite ease-in-out;animation:bounce 2s infinite ease-in-out}.flash-bounce2{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes bounce{0%,100%{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes bounce{0%,100%{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}.flip-bounce1{background-color:#3963bc;-webkit-animation:rotateplane 1.2s infinite ease-in-out;animation:rotateplane 1.2s infinite ease-in-out}@-webkit-keyframes rotateplane{0%{-webkit-transform:perspective(120px)}50%{-webkit-transform:perspective(120px) rotateY(180deg)}100%{-webkit-transform:perspective(120px) rotateY(180deg) rotateX(180deg)}}@keyframes rotateplane{0%{transform:perspective(120px) rotateX(0) rotateY(0);-webkit-transform:perspective(120px) rotateX(0) rotateY(0)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0);-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0)}100%{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.change-spinner{width:240rpx;text-align:center}.change-bounce1{background-color:#3963bc;border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-delay:-.32s;animation-delay:-.32s}.change-bounce2{background-color:#3963bc;border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-delay:-.16s;animation-delay:-.16s}.change-bounce3{background-color:#3963bc;border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes bouncedelay{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/address.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/address.png
new file mode 100644
index 0000000..add1bcf
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/address.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/cart.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/cart.png
new file mode 100644
index 0000000..a7cd892
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/cart.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/data.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/data.png
new file mode 100644
index 0000000..6c9baf3
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/data.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/error.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/error.png
new file mode 100644
index 0000000..900ae9d
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/error.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/network.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/network.png
new file mode 100644
index 0000000..f82ec6d
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/network.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/order.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/order.png
new file mode 100644
index 0000000..8e95de8
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/order.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/product.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/product.png
new file mode 100644
index 0000000..5574a24
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/product.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/success.png b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/success.png
new file mode 100644
index 0000000..d03f7e9
Binary files /dev/null and b/HR/AIproject/miniprogram_npm/lin-ui/status-show/image/success.png differ
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.js b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.js
new file mode 100644
index 0000000..c458d65
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.js
@@ -0,0 +1 @@
+Component({externalClasses:["l-class","l-image-class","l-button-class","l-describe-class"],properties:{show:Boolean,type:{type:String,value:"success",observer:"_changeStatus"},image:String,describe:String,buttonText:String,bgColor:{type:String,value:"#fff"},fullScreen:{type:Boolean,value:!0},openApi:{type:Boolean,value:!0},custom:{type:Boolean,value:!1}},data:{},attached(){this._changeStatus(),this.data.openApi&&this._init()},pageLifetimes:{show(){this._init()}},methods:{_init(){wx.lin=wx.lin||{},wx.lin.showStatusShow=e=>{const{type:t="success",image:a="",describe:s="",buttonText:i="",bgColor:r="#fff",fullScreen:o=!0}={...e};this.setData({show:!0,type:t,image:a,describe:s,buttonText:i,bgColor:r,fullScreen:o})},wx.lin.hideStatusShow=()=>{this.setData({show:!1})}},_changeStatus(){const e=this.data.type;if(e)switch(e){case"success":this.setData({typeImage:"image/success.png",typeText:"操作成功~"});break;case"error":this.setData({typeImage:"image/error.png",typeText:"操作失败~"});break;case"cart":this.setData({typeImage:"image/cart.png",typeText:"购物车空空如也,去逛逛吧~"});break;case"order":this.setData({typeImage:"image/order.png",typeText:"您暂时还没有订单哦~"});break;case"network":this.setData({typeImage:"image/network.png",typeText:"糟糕!网络错误~"});break;case"address":this.setData({typeImage:"image/address.png",typeText:"您暂时还没有地址哦~"});break;case"product":this.setData({typeImage:"image/product.png",typeText:"暂时还没有商品哦~~"});break;case"data":this.setData({typeImage:"image/data.png",typeText:"暂时还没有相关数据哦~~"});break;default:console.warn(e+" is not a valid value")}},tapStatusShow(){this.triggerEvent("lincorvertap",{},{bubbles:!0,composed:!0})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.json b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.json
new file mode 100644
index 0000000..6dc91e3
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-button":"../button/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.wxml
new file mode 100644
index 0000000..7b49ab3
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+ {{describe}}
+ {{typeText}}
+
+ {{buttonText}}
+
+
+ 重新加载
+
+
+ 去逛逛
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.wxss
new file mode 100644
index 0000000..0bcda9a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/status-show/index.wxss
@@ -0,0 +1 @@
+.l-status-container{background-color:#fff;flex-direction:column;display:flex;justify-content:center}.content{position:fixed;top:0;left:0;background:#fff;height:100%;width:100%}.ad-img{width:198rpx!important;height:204rpx!important}.top-img{width:264rpx;height:204rpx}.left-img{width:120rpx;height:184rpx}.image_margin_top{margin-top:-250rpx}.status-text{font-size:30rpx;color:#45526b;margin-top:40rpx}.button_margin_top{margin-top:80rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/step/index.js b/HR/AIproject/miniprogram_npm/lin-ui/step/index.js
new file mode 100644
index 0000000..e925366
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/step/index.js
@@ -0,0 +1 @@
+Component({externalClasses:["l-class","l-step-class","l-title-class","l-describe-class","l-line-class"],options:{multipleSlots:!0},relations:{"../steps/index":{type:"parent"}},properties:{icon:String,title:String,describe:String,iconSize:{type:Number,value:24},iconColor:String,custom:Boolean},data:{},methods:{updateDataChange(e){this.setData({...e})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/step/index.json b/HR/AIproject/miniprogram_npm/lin-ui/step/index.json
new file mode 100644
index 0000000..e11651a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/step/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/step/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/step/index.wxml
new file mode 100644
index 0000000..315fc8e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/step/index.wxml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
+ {{title}}
+
+
+ {{describe}}
+
+
+
+
+
+
+
+
+var setStatus = function(activeIndex,index,status){
+ if(activeIndex===index){
+ return status || 'process'
+ } else if(activeIndex>index){
+ return 'finish'
+ }else{
+ return 'wait'
+ }
+}
+
+var statusStyle = function(activeIndex,index,color,status){
+ if(activeIndex===index){
+ return status==='error'?'':('background-color:' + color)
+ } else if(activeIndex>index){
+ return ('border-color:' + color + ';color:' + color)
+ }else{
+ return ''
+ }
+}
+
+var dotStyle = function(activeIndex,index,color){
+ if(activeIndex>=index){
+ return ('background-color:' + color)
+ } else{
+ return ''
+ }
+}
+
+var isReverse = function(reverse,activeIndex,index) {
+ if(reverse){
+ return (activeIndex>=index)
+ }
+ return (activeIndex>index)
+}
+
+module.exports = {
+ setStatus:setStatus,
+ statusStyle:statusStyle,
+ dotStyle:dotStyle,
+ isReverse:isReverse
+}
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/step/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/step/index.wxss
new file mode 100644
index 0000000..767b8eb
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/step/index.wxss
@@ -0,0 +1 @@
+.step{display:flex;position:relative}.step-custom{z-index:2}.step-row{flex-direction:column;align-items:center}.step-column{flex-direction:row;padding-left:30rpx;box-sizing:border-box}.step-container{display:flex;justify-content:center;z-index:2;align-items:center;background-color:#fff}.step-container-row{width:70rpx;height:40rpx}.step-container-column{height:60rpx;width:40rpx}.step-icon{width:40rpx;height:40rpx;display:flex;align-items:center;justify-content:center;font-size:22rpx;transition:.5s;box-sizing:border-box}.step-process{color:#fff;background-color:#3963bc;border-radius:50%}.step-error{background-color:#fff;border:1px solid #f4516c;color:#f4516c;border-radius:50%}.step-finish{background-color:#fff;color:#3963bc;border:1px solid #3963bc;border-radius:50%}.step-wait{background-color:#fff;color:#c4c9d2;border:1px solid #c4c9d2;border-radius:50%}.step-dot{width:24rpx;height:24rpx;border-radius:50%;transition:.5s}.step-dot-process{background-color:#3963bc}.step-dot-wait{background-color:#c4c9d2}.step-dot-error{background-color:#f4516c}.step-dot-finish{background-color:#3963bc}.step-line{background:#c4c9d2;transition:.5s;position:absolute;z-index:0}.step-line-row{height:2rpx;width:100%;left:50%;top:18rpx}.step-line-column{width:2rpx;height:100%;top:20rpx;left:48rpx}.step-line-wait{background-color:#e8e8e8}.step-line-finish{background-color:#3963bc}.step-content{display:flex;flex-direction:column}.step-content-row{align-items:center;width:100%}.step-content-column{margin-left:15rpx}.step-title{color:#595959;font-size:26rpx;line-height:40rpx;margin:10rpx 0}.step-title-process{color:#333;font-size:28rpx;line-height:40rpx;margin:10rpx 0}.step-describe{color:#8c98ae;font-size:22rpx}@font-face{font-family:iconfont;src:url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAK8AAsAAAAABpQAAAJvAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgp8gQsBNgIkAwwLCAAEIAWEbQc2G9EFyK4wbuGJaCgrSmkBCSe/ZeUtviBzEXztx/bd3f+oNEiuzaerJhKN6WQSJFqlZELxTOZqTS9l0hsflgVC/bD3z/dzv8lMXAksyeryeByfVkhgV93EvwdIwC+b/hetH5jPyAA+z+X0JtCBXONbltMcw496AcYBBbYnRoEEXEQBcAqyOwK15PsEmg2KiewMTy6yCoWzLBD3lqGwilJKUaRqo1C37C3iRaUxPaUnPMffj18LUUFSZc7a3bshnfV++DD/2GVISBPo4QoZU5hCXLeWThULiSvWbCrpb64VIS2VhYlVpqU+6B8vETWnsxWM0XLiI19G8OGABDKoy5VBzDRje98gRHertt+2fLx2cdC6ZJwcnK226Ifh0uzy4vzK8sLSytxprqHAHexGbz8/6za6C3ePjwW29viP3ailnm7Zz+SntAd5IV0IBHuvvy3Xd/41thTw/osdBRahcefh4Gepwb5iah13LrrKV9mRrBsIJKhCjvrnxLq9Trf0wb2ERn0TIg0GcmSNhsjCTqHSYgm1RutoNmnkcIseUrEoTZiwRRA63SBp94as0zNZ2BdU+v2h1hnFaHYczWe2GAmrakCiQqiDmgdLEz73vFSVdM+jkXUVWdTG/DLK0MpCOpGqVkfQR7nEhjBnZIg4cCk8GCaPoesKCKSwUaOESRS0J5O87UUJTXisyjYJKQjSAVUesGgEHw+Hk6ra5+chQ5ZLIXsEDfllSApZ44O0hBRAjph8SPAoz4RyDBmEcICTBA8YJrOQyyWAoH2WDWlIgjmhEGiXdAdx1JTY3uL93xFo5kzMkSJHUT+g+5BNxVpWMAYAAA==') format('woff2')}.iconfont{font-family:iconfont!important;font-size:24rpx;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-finish:before{content:"\e600"}.icon-error:before{content:"\e6cf"}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/steps/index.js b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.js
new file mode 100644
index 0000000..46145f8
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.js
@@ -0,0 +1 @@
+import validator from"../behaviors/validator";Component({externalClasses:["l-class"],behaviors:[validator],options:{multipleSlots:!0},relations:{"../step/index":{type:"child",linked(){this._initSteps()},unlinked(){this._initSteps()}}},properties:{direction:{type:String,value:"row",options:["row","column"]},activeIndex:{type:Number,value:0},color:String,stepMinHeight:{type:String,value:"120"},status:{type:String,value:"process",options:["process","error"]},dot:Boolean,reverse:Boolean},observers:{activeIndex:function(){this._initSteps()}},data:{},methods:{_initSteps(){wx.createSelectorQuery().in(this).select(".steps-container").boundingClientRect().exec(e=>{let t=this.getRelationNodes("../step/index");this.data.length=t.length,this.data.length>0&&t.forEach((t,i)=>{t.updateDataChange({index:i,...this.data,stepsWidth:e[0].width})})})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/steps/index.json b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.json
new file mode 100644
index 0000000..2240858
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-step":"../step/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/steps/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.wxml
new file mode 100644
index 0000000..7cdb05f
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/steps/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.wxss
new file mode 100644
index 0000000..c05d83e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/steps/index.wxss
@@ -0,0 +1 @@
+.steps-container{display:flex;width:100%}.steps-container-row{flex-direction:row}.steps-container-row-reverse{flex-direction:row-reverse}.steps-container-column{flex-direction:column}.steps-container-column-reverse{flex-direction:column-reverse}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/sticky-item/index.js b/HR/AIproject/miniprogram_npm/lin-ui/sticky-item/index.js
new file mode 100644
index 0000000..e13ba88
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/sticky-item/index.js
@@ -0,0 +1 @@
+import nodeUtil from"../core/utils/node-util";Component({externalClasses:["l-class","l-header-wrapper-class","l-header-class","l-header-sticky-class","l-body-class"],options:{multipleSlots:!0},relations:{"../sticky/index":{type:"parent"}},properties:{top:{type:Number,value:0}},data:{mode:void 0,index:void 0,isFixedTop:!1,stickyItemTop:0,stickyItemHeight:0,stickyItemWrapperHeight:void 0},lifetimes:{ready:function(){const t=this.getParentComponent().data.mode;this.setData({mode:t})}},methods:{updateStickyItemPosition(t){const e=this.getParentComponent(),{index:i,stickyItemTop:s,stickyItemHeight:o,top:a}=this.data,n=t>s-a&&t
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/sticky-item/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/sticky-item/index.wxss
new file mode 100644
index 0000000..94929ff
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/sticky-item/index.wxss
@@ -0,0 +1 @@
+.l-sticky-item{display:flex;flex-direction:column}.l-sticky-wrapper{overflow:visible}.l-sticky-item-header{width:100%}.l-sticky-item-header-fixed{position:fixed;top:0}@supports (position:sticky){.l-sticky-item-header-sticky{position:sticky}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.js b/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.js
new file mode 100644
index 0000000..cb2c4d2
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.js
@@ -0,0 +1 @@
+import validator from"../behaviors/validator";Component({externalClasses:["l-class"],behaviors:[validator],relations:{"../sticky-item/index":{type:"child",linked(){this.checkSupportCssSticky().then(t=>{t||this.updateStickyItemsSizeData()}).catch(t=>{console.error(t)})},linkChanged(){this.checkSupportCssSticky().then(t=>{t||this.updateStickyItemsSizeData()}).catch(t=>{console.error(t)})},unlinked(){this.checkSupportCssSticky().then(t=>{t||this.updateStickyItemsSizeData()}).catch(t=>{console.error(t)})}}},properties:{mode:{type:String,value:"js",options:["js","css"]},scrollTop:Number},observers:{scrollTop:function(){this.checkSupportCssSticky().then(t=>{t||this.updateStickyItemsPosition()}).catch(t=>{console.error(t)})}},lifetimes:{attached(){this.checkSupportCssSticky().then(t=>{t||this.initSticky()}).catch(t=>{console.error(t)})}},methods:{initSticky(){wx.lin=wx.lin||{},wx.lin.flushSticky=()=>{this.updateStickyItemsSizeData()},wx.lin.setScrollTop=t=>{this.data.scrollTop=t,this.checkSupportCssSticky().then(t=>{t||this.updateStickyItemsPosition()}).catch(t=>{console.error(t)})}},updateStickyItemsPosition(){const t=this.getStickyItemNodes();for(let e of t)e.updateStickyItemPosition(this.data.scrollTop)},updateStickyItemsSizeData(){this.getStickyItemNodes().forEach((t,e)=>{t.updateStickyItemBaseData(e)})},getStickyItemNodes(){return this.getRelationNodes("../sticky-item/index")},checkSupportCssSticky(){return new Promise(t=>{const e=this.getStickyItemNodes();0===e.length&&t(!1),wx.createSelectorQuery().in(e[0]).select(".l-sticky-item-header").fields({computedStyle:["position"]}).exec(e=>{null===e[0]?t(!1):t("sticky"===e[0].position)})})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.json b/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.wxml
new file mode 100644
index 0000000..39b9072
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/sticky/index.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/switch/index.js b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.js
new file mode 100644
index 0000000..f3ec324
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.js
@@ -0,0 +1 @@
+import eventBus from"../core/utils/event-bus";Component({externalClasses:["l-class","l-disabled-class"],properties:{checked:{type:null,optionalTypes:[Boolean,String,Number],value:!1},size:{type:String,value:"38rpx"},color:{type:String,value:"#fff"},selectColor:{type:String,value:"#3963BC"},activeValue:{type:null,value:!0},inactiveValue:{type:null,value:!1},disabled:{type:Boolean,value:!1}},methods:{onClick(){const{activeValue:e,inactiveValue:t,disabled:a}=this.data;if(a)return;const l=this.data.checked===e?t:e;this.setData({checked:l}),this.triggerEvent("linchange",{checked:l}),eventBus.emit("lin-form-change-"+this.id,this.id)},getValues(){return this.data.checked},reset(){this.setData({checked:this.data.inactiveValue})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/switch/index.json b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/switch/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.wxml
new file mode 100644
index 0000000..ef61b40
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.wxml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/switch/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.wxss
new file mode 100644
index 0000000..71091d9
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/switch/index.wxss
@@ -0,0 +1 @@
+.switch{position:relative;display:inline-block;box-sizing:content-box;width:2em;height:1em;background-color:#fff;border:1px solid rgba(0,0,0,.1);border-radius:1em;transition:background-color .3s}.switch-node{position:absolute;top:0;left:0;border-radius:100%;z-index:1;width:1em;height:1em;background-color:#fff;box-shadow:0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05);transition:.3s cubic-bezier(.3,1.05,.4,1.05)}.switch-on .switch-node{transform:translateX(calc(1em))}.switch-disabled{opacity:.5}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tab-bar/index.js b/HR/AIproject/miniprogram_npm/lin-ui/tab-bar/index.js
new file mode 100644
index 0000000..3b41594
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tab-bar/index.js
@@ -0,0 +1 @@
+import eventUtil from"../core/utils/event-util";Component({properties:{bgColor:{type:String,value:null},bgImg:{type:String,value:null},selectedIndex:{type:Number,value:0},list:{type:Array,value:[]},textSelectedColor:{type:String,value:""},textColor:{type:String,value:"#666"}},pageLifetimes:{show:function(){this.parseCurrentPage()}},methods:{parseCurrentPage(){const t="/"+getCurrentPages()[0].route,e=this.data.list;let i;for(let a=0;a
+
+
+
+
+
+
+
+
+ {{item.text}}
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tab-bar/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/tab-bar/index.wxss
new file mode 100644
index 0000000..e7ef8e4
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tab-bar/index.wxss
@@ -0,0 +1 @@
+.lu-tab-bar{left:0;right:0;bottom:0;position:fixed;z-index:9999;width:750rpx;height:106rpx;display:flex;background-color:#fff;background-size:100% 100%;background-repeat:no-repeat;padding-bottom:constant(safe-area-inset-bottom)!important;padding-bottom:env(safe-area-inset-bottom)!important}.lu-tab-bar__item-wrapper{display:flex;height:100%;justify-content:center;padding-bottom:constant(safe-area-inset-bottom)!important;padding-bottom:env(safe-area-inset-bottom)!important}.lu-tab-bar__item-container{display:flex;flex-direction:column;align-items:center;justify-content:center}.lu-tab-bar__item-image{display:block;width:52rpx;height:52rpx}.lu-tab-bar__item-text{margin-top:4rpx;font-size:24rpx;line-height:1}.lu-tab-bar__item-text--selected{color:#3963bc}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.js b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.js
new file mode 100644
index 0000000..4828bd5
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.js
@@ -0,0 +1 @@
+Component({relations:{"../tabs/index":{type:"parent",linked:function(t){!this.data.parent&&this.setData({parent:t})}},"../combined-tabs/index":{type:"parent",linked:function(t){!this.data.parent&&this.setData({parent:t})}}},properties:{tab:String,subTab:String,subKey:String,key:String,icon:String,iconSize:{type:String,value:"20"},image:Object,picPlacement:{type:String,value:"top"},dotBadge:{type:Boolean,value:!1},badgeCount:{type:Number},badgeMaxCount:{type:Number,value:99},badgeCountType:{type:String,value:"overflow"}},observers:{"**":function(t){this.updateData(t)}},data:{isCurrent:!1,index:0,parent:null},methods:{updateData(){let t=this.data.parent;t&&t.initTabs()}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.json b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.json
new file mode 100644
index 0000000..1450e2e
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.wxml
new file mode 100644
index 0000000..a915dac
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.wxml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.wxss
new file mode 100644
index 0000000..a77a4fa
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabpanel/index.wxss
@@ -0,0 +1 @@
+.l-tabpanel-content{width:100%;height:100%}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.js b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.js
new file mode 100644
index 0000000..0ec6000
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.js
@@ -0,0 +1 @@
+import scrollCenter from"../behaviors/scrollCenter";Component({behaviors:[scrollCenter],externalClasses:["l-class-tabs","l-class-header","l-class-active","l-class-content","l-class-inactive","l-class-line","l-class-tabimage","l-class-header-line","l-class-icon","l-tabs-class","l-header-class","l-active-class","l-content-class","l-inactive-class","l-line-class","l-tabimage-class","l-header-line-class","l-icon-class","l-tabpanel-class","l-badge-class"],relations:{"../tabpanel/index":{type:"child",linked(){this.initTabs()}}},options:{multipleSlots:!0},properties:{activeKey:{type:String,value:""},placement:{type:String,value:"top"},animated:Boolean,swipeable:Boolean,scrollable:Boolean,hasLine:{type:Boolean,value:!0},animatedForLine:Boolean,activeColor:{type:String,value:"#333333"},inactiveColor:{type:String,value:"#bbbbbb"},equalWidth:{type:Boolean,value:!0},contentHeight:Number},data:{tabList:[],currentIndex:0,transformX:0,transformY:0},observers:{activeKey:function(e){if(!e)return;const t=this.data.tabList.findIndex(t=>t.key===e);this.setData({currentIndex:t},()=>{this.data.scrollable&&this.queryMultipleNodes()})}},ready(){this.initTabs()},methods:{initTabs(e=this.data.activeKey){let t=this.getRelationNodes("../tabpanel/index");if(t.length>0){let a=e,s=this.data.currentIndex;const l=t.map((t,l)=>(a=e||0!==l?a:t.data.key,s=t.data.key===a?l:s,{...t.data}));this.setData({tabList:l,activeKey:a,currentIndex:s},()=>{this.data.scrollable&&this.queryMultipleNodes()})}},swiperChange(e){const{source:t,current:a}=e.detail;if("touch"===t){const e=a,t=this.data.tabList[a].key;this._setChangeData({activeKey:t,currentIndex:e})}},handleChange(e){const t=e.currentTarget.dataset.key,a=e.currentTarget.dataset.index;this._setChangeData({activeKey:t,currentIndex:a})},_setChangeData({activeKey:e,currentIndex:t}){this.setData({activeKey:e,currentIndex:t},()=>{this.data.scrollable&&this.queryMultipleNodes()}),this.triggerEvent("linchange",{activeKey:e,currentIndex:t})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.json b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.json
new file mode 100644
index 0000000..860cdf7
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-badge":"../badge/index","l-tabpanel":"../tabpanel/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.wxml
new file mode 100644
index 0000000..0296bf5
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.wxml
@@ -0,0 +1,31 @@
+
+
+
+ {{item.tab}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.wxss
new file mode 100644
index 0000000..d58b4e3
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tabs/index.wxss
@@ -0,0 +1 @@
+.l-tabs{display:flex;border-radius:8rpx;box-sizing:border-box;overflow:hidden;flex-direction:column;height:100%}.l-tabs .l-tabs-header{display:flex;width:100%;flex-direction:row;background:#fff;align-items:center}.l-tabs .l-tabs-header .l-tabs-item{font-size:28rpx;text-align:center;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.l-tabs .l-tabs-header .l-tabs-equal-width{flex:1}.l-tabs .l-tabs-header .l-tabs-unequal-width{padding:0 20rpx}.l-tabs .l-tabs-header .l-icon-active,.l-tabs .l-tabs-header .l-tabs-active{color:#333;font-size:28rpx}.l-tabs .l-tabs-header .l-icon-inactive,.l-tabs .l-tabs-header .l-tabs-inactive{font-size:28rpx;color:#bbb}.l-tabs .l-tabs-header .l-tabsitems-row{flex-direction:row}.l-tabs .l-tabs-header .l-tabsitems-row .l-icon-active,.l-tabs .l-tabs-header .l-tabsitems-row .l-icon-inactive{margin-right:10rpx}.l-tabs .l-tabs-header .l-tabsitems-row-reverse{flex-direction:row-reverse}.l-tabs .l-tabs-header .l-tabsitems-row-reverse .l-icon-active,.l-tabs .l-tabs-header .l-tabsitems-row-reverse .l-icon-inactive{margin-left:10rpx}.l-placement-bottom .l-tabs-header,.l-placement-top .l-tabs-header{height:80rpx}.l-placement-bottom .l-tabs-header .l-tabs-item,.l-placement-top .l-tabs-header .l-tabs-item{min-height:100%}.l-placement-left,.l-placement-right{flex-direction:row}.l-placement-left .l-tabs-header,.l-placement-right .l-tabs-header{flex-direction:column;width:160rpx}.l-placement-left .l-tabs-header>.l-tabs-item,.l-placement-right .l-tabs-header>.l-tabs-item{width:100%;height:80rpx;background:#f6f8fa}.l-placement-left .l-tabs-header>.l-tabs-active,.l-placement-right .l-tabs-header>.l-tabs-active{background:#fff}.l-placement-right{flex-direction:row-reverse}.l-placement-bottom{flex-direction:column-reverse}.l-tabpanel-content{display:flex}.l-placement-left .l-tabpanel-content,.l-placement-right .l-tabpanel-content{width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;position:relative;will-change:transform;transition:transform .3s cubic-bezier(.645,.045,.355,1)}.l-placement-bottom .l-tabpanel-content,.l-placement-top .l-tabpanel-content{width:100%;min-height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.l-aminmated.l-placement-bottom .l-tabpanel-content,.l-aminmated.l-placement-top .l-tabpanel-content{will-change:margin-left;-webkit-transition:margin-left .3s cubic-bezier(.645,.045,.355,1);transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.l-tabpanel{width:100%;height:100%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;opacity:1;text-overflow:ellipsis}.l-tabpanel-inactive{opacity:0;height:0;padding:0!important;pointer-events:none}.l-tabs-scroll.l-tabs-horizontal .l-tabs-header{-webkit-overflow-scrolling:touch;white-space:nowrap}.l-tabs-scroll.l-tabs-horizontal .l-tabs-header .l-tabs-item{overflow:visible}.l-tabs-vertical .l-tabsscroll{width:160rpx}.l-tabs-vertical .l-tabs-header{height:100%;min-height:80rpx;-webkit-overflow-scrolling:touch;white-space:nowrap}.l-tabs-vertical .l-tabs-header .l-tabs-item{overflow:visible;min-height:80rpx}.l-tabs-item{position:relative}.l-tab-line{position:absolute;bottom:0;left:0;background:#000}.l-tabs-horizontal .l-tab-line{height:4rpx;width:0;left:100%;right:0;margin:0 auto}.l-tabs-horizontal .l-line-aminmated{transition:.2s all linear}.l-tabs-horizontal .l-tabs-active.l-tabs-item~.l-tabs-item .l-tab-line{left:0}.l-tabs-horizontal .l-tabs-active .l-tab-line{width:100%;left:0}.l-tabs-horizontal .l-tabs-active .l-line-aminmated{transition-delay:.1s}.l-placement-top .l-tab-line{bottom:0}.l-placement-top .l-tabs-header-line{border-bottom:1px solid #f3f3f3}.l-placement-bottom .l-tab-line{top:0}.l-placement-bottom .l-tabs-header-line{border-top:1px solid #f3f3f3}.l-tabs-vertical .l-tab-line{width:6rpx;height:0;border-radius:0 6rpx 6rpx 0;top:0;margin:auto 0}.l-tabs-vertical .l-line-aminmated{transition:.2s all linear}.l-tabs-vertical .l-tabs-active .l-tab-line{height:40rpx}.l-tabs-vertical .l-tabs-active .l-line-aminmated{transition-delay:.1s}.l-tabs-vertical .l-tabs-active.l-tabs-item~.l-tabs-item .l-tab-line{height:0;top:0}.l-placement-left .l-tab-line{right:auto}.l-placement-left .l-tabs-header-line{border-left:1px solid #f3f3f3}.l-placement-right .l-tab-line{right:0;left:auto}.l-placement-right .l-tabs-header-line{border-right:1px solid #f3f3f3}.l-tab-image{width:100rpx;height:100rpx}.l-tab-image-placement-top{flex-direction:column}.l-tab-image-placement-bottom{flex-direction:column-reverse}.l-tab-image-placement-left{flex-direction:row}.l-tab-image-placement-right{flex-direction:row-reverse}.l-tabs-header .badge-view{top:-20rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tag/index.js b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.js
new file mode 100644
index 0000000..9ef734a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.js
@@ -0,0 +1 @@
+import validator from"../behaviors/validator";Component({externalClasses:["l-class","l-select-class","l-image-class"],behaviors:[validator],properties:{name:String,cell:Object,type:{type:String,value:"touch",options:["reading","touch"]},bgColor:String,fontColor:String,disable:Boolean,shape:{type:String,value:"square",options:["square","circle"]},select:Boolean,plain:Boolean,size:{type:String,value:"medium",options:["large","medium","mini","super-mini"]},location:{type:String,value:"left",options:["left","right"]},icon:String,iconSize:{type:String,value:"20"},iconColor:{type:String,value:"#3683D6"},image:String,iconStyle:{type:String,value:"size:20;color:#3683D6"},height:Number},methods:{handleTap(){if(this.data.disable)return;let e={name:this.data.name,cell:this.data.cell,select:this.data.select};this.triggerEvent("lintap",e,{bubbles:!0,composed:!0})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tag/index.json b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.json
new file mode 100644
index 0000000..e11651a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tag/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.wxml
new file mode 100644
index 0000000..851691f
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/tag/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.wxss
new file mode 100644
index 0000000..d51ec93
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/tag/index.wxss
@@ -0,0 +1 @@
+.l-tag{display:inline-flex;justify-content:center;align-items:center;color:#fff;background-color:#3963bc}.l-tag-touch{min-width:80rpx}.l-tag-super-mini{height:32rpx;font-size:20rpx}.l-tag-mini{height:42rpx;font-size:20rpx}.l-tag-medium{height:50rpx;font-size:24rpx;letter-spacing:2rpx}.l-tag-large{height:60rpx;font-size:24rpx;letter-spacing:2rpx}.l-tag-super-mini-square{border-radius:2rpx;padding:0 6rpx}.l-tag-mini-square{border-radius:2rpx;padding:0 12rpx}.l-tag-medium-square{border-radius:2rpx;padding:0 16rpx}.l-tag-large-square{border-radius:2rpx;padding:0 18rpx}.l-tag-super-mini-circle{border-radius:16rpx;padding:0 12rpx}.l-tag-mini-circle{border-radius:21rpx;padding:0 16rpx}.l-tag-medium-circle{border-radius:25rpx;padding:0 20rpx}.l-tag-large-circle{border-radius:30rpx;padding:0 24rpx}.l-tag-plain{background-color:#fff;color:#3963bc;border:2rpx solid #3963bc}.l-tag-plain-super-mini{height:28rpx;font-size:20rpx}.l-tag-plain-mini{height:38rpx;font-size:20rpx}.l-tag-plain-medium{height:46rpx;font-size:24rpx;letter-spacing:2rpx}.l-tag-plain-large{height:56rpx;font-size:24rpx;letter-spacing:2rpx}.l-tag-disable{background-color:#dee2e6;color:#fff;border-color:#dee2e6}.select{background-color:#3963bc;color:#fff}.content{display:inline-flex;align-items:center;justify-content:center}.content-l{display:inline-flex;flex-direction:row-reverse;align-items:center;justify-content:center}.tag-image-mini{width:20rpx;height:20rpx}.tag-image-large{width:24rpx;height:24rpx}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.js b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.js
new file mode 100644
index 0000000..58b204a
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.js
@@ -0,0 +1 @@
+import rules from"../behaviors/rules";import eventBus from"../core/utils/event-bus";Component({behaviors:["wx://form-field",rules],externalClasses:["l-class","l-error-text","l-error-text-class","l-inner-class"],properties:{placeholder:{type:String,value:""},value:{type:String,value:""},focus:{type:Boolean,value:!1},maxlength:{type:Number,value:140},indicator:{type:Boolean,value:!0},autoHeight:{type:Boolean,value:!1},disabled:{type:Boolean,value:!1},border:{type:Boolean,value:!0},rules:{type:Object},placeholderStyle:{type:String,value:""},cursorSpacing:{type:Number,value:0}},data:{},attached(){this.initRules()},methods:{handleInputChange(e){const{detail:t={}}=e,{value:a=""}=t;this.setData({value:a}),eventBus.emit("lin-form-change-"+this.id,this.id),this.triggerEvent("lininput",e.detail)},handleInputFocus(e){this.triggerEvent("linfocus",e.detail)},handleInputBlur(e){this.validatorData({[this.data.name]:e.detail.value}),eventBus.emit("lin-form-blur-"+this.id,this.id),this.triggerEvent("linblur",e.detail)},handleInputConfirm(e){this.triggerEvent("linconfirm",e.detail)},getValues(){return this.data.value},reset(){this.data.value=""}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.json b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.json
new file mode 100644
index 0000000..a70bd9b
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-error-tip":"../error-tip/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.wxml
new file mode 100644
index 0000000..6a0c826
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.wxml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.wxss
new file mode 100644
index 0000000..2079527
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/textarea/index.wxss
@@ -0,0 +1 @@
+.form-item{position:relative;font-size:28rpx;color:#333;width:100%;display:flex;flex-direction:column;align-items:center;box-sizing:border-box}.disabled{color:#9a9a9a!important}.mask{position:absolute;z-index:999;height:100%;width:100%}.textarea{width:100%;box-sizing:border-box;font-size:28rpx;color:#333;height:200rpx;line-height:40rpx;flex:1;min-height:88rpx}.textarea-auto-height{width:100%;box-sizing:border-box;font-size:28rpx;color:#333}.default-border{position:relative;font-size:28rpx;color:#333;width:100%;display:flex;flex-direction:column;align-items:center;box-sizing:border-box;padding:25rpx}.border{border-radius:4rpx;border:1rpx solid #d8dee5}.pls-class{color:#9a9a9a}.indicator{width:95%;text-align:right;margin-bottom:15rpx;color:#9a9a9a}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/toast/index.js b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.js
new file mode 100644
index 0000000..6c97691
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.js
@@ -0,0 +1 @@
+import computeOffset from"../behaviors/computeOffset";import zIndex from"../behaviors/zIndex";import watchShow from"../behaviors/watchShow";Component({behaviors:[computeOffset,zIndex,watchShow],externalClasses:["l-bg-class","l-icon-class","l-class","l-image-class","l-title-class "],properties:{show:{type:Boolean,value:!1},title:String,icon:String,iconSize:String,iconColor:String,image:String,placement:{type:String,value:"bottom"},duration:{type:Number,value:1500},zIndex:{type:Number,value:777},center:{type:Boolean,value:!0},mask:{type:Boolean,value:!1},openApi:{type:Boolean,value:!0},offsetX:Number,offsetY:Number},data:{status:!1,success:"",fail:"",complete:""},observers:{icon:function(){}},attached(){this.data.openApi&&this.initToast()},pageLifetimes:{show(){this.data.openApi&&this.initToast(),this.offsetMargin()}},methods:{initToast(){wx.lin=wx.lin||{},wx.lin.showToast=(t={})=>(console.warn("wx.lin 已废弃,请使用开放函数代替:https://doc.mini.talelin.com//start/open-function.html"),this.linShow(t),this),wx.lin.hideToast=()=>{console.warn("wx.lin 已废弃,请使用开放函数代替:https://doc.mini.talelin.com//start/open-function.html"),this.linHide()}},strlen(t){for(var e=0,o=0;o="0x0001"&&i<="0x007e"||"0xff60"<=i&&i<="0xff9f"?e++:e+=2}return e},doNothingMove(){},onMaskTap(){!0!==this.data.locked&&this.setData({fullScreen:"hide",status:"hide"}),this.triggerEvent("lintap",!0,{bubbles:!0,composed:!0})},linShow(t){t||(t={});const{title:e="",icon:o="",image:i="",placement:s="bottom",duration:n=1500,center:a=!0,mask:l=!1,success:c=null,complete:r=null,offsetX:h=0,offsetY:m=0,iconSize:p="60",iconColor:f=""}=t;this.setData({title:e,icon:o,image:i,placement:s,duration:n,center:a,mask:l,success:c,complete:r,offsetY:m,offsetX:h,iconSize:p,iconColor:f}),this.changeStatus()},linHide(){this.setData({status:!1})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/toast/index.json b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.json
new file mode 100644
index 0000000..e03b6d4
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-mask":"../mask/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/toast/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.wxml
new file mode 100644
index 0000000..291ab69
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+ {{ title }}
+
+
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/toast/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.wxss
new file mode 100644
index 0000000..7f87987
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/toast/index.wxss
@@ -0,0 +1 @@
+.container{position:fixed}.containerNoMask{left:50%;top:50%;transform:translate(-50%,-50%)}.containerShowMask{height:100%;width:100%;top:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:999}.container .toast-bg{height:100%;width:100%;background:rgba(255,255,255,.5);position:absolute;top:0;left:0}.container .toast-top{flex-direction:column-reverse}.container .toast-right{flex-direction:row}.container .toast-bottom{flex-direction:column}.container .toast-left{flex-direction:row-reverse}.container .toast{display:flex;align-items:center;justify-content:center;max-width:400rpx;min-width:280rpx;min-height:88rpx;background:rgba(0,0,0,.7);border-radius:12rpx;color:#fff;font-size:28rpx;line-height:40rpx;box-sizing:border-box;padding:30rpx 50rpx;z-index:999}.container .toast .toast-icon{margin-top:20rpx;margin-bottom:20rpx}.container .toast .toast-icon-loading{animation:loading-fadein 1.5s linear 0s infinite}.container .toast .toast-text{display:inline-block;text-align:center}.container .toast .toast-text-right{display:inline-block;text-align:center;margin-left:20rpx}.container .toast .toast-text-left{display:inline-block;text-align:center;margin-right:20rpx}.container .toast .toast-text-top{margin-bottom:10rpx}@keyframes loading-fadein{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/transition/index.js b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.js
new file mode 100644
index 0000000..9395ae9
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.js
@@ -0,0 +1 @@
+import transition from"../behaviors/transition";Component({behaviors:[transition(!0)],externalClasses:["l-class","l-enter-class","l-enter-active-class","l-enter-to-class","l-leave-class","l-leave-active-class","l-leave-to-class"],methods:{}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/transition/index.json b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.json
new file mode 100644
index 0000000..e03b6d4
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{"l-icon":"../icon/index","l-mask":"../mask/index"}}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/transition/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.wxml
new file mode 100644
index 0000000..35345fd
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/transition/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.wxss
new file mode 100644
index 0000000..56b5899
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/transition/index.wxss
@@ -0,0 +1 @@
+.l-transition{transition-timing-function:ease}.l-fade-enter-active,.l-fade-leave-active{transition-property:opacity}.l-fade-enter,.l-fade-leave-to{opacity:0}.l-fade-down-enter-active,.l-fade-down-leave-active,.l-fade-left-enter-active,.l-fade-left-leave-active,.l-fade-right-enter-active,.l-fade-right-leave-active,.l-fade-up-enter-active,.l-fade-up-leave-active{transition-property:opacity,transform}.l-fade-up-enter,.l-fade-up-leave-to{transform:translate3d(0,100%,0);opacity:0}.l-fade-down-enter,.l-fade-down-leave-to{transform:translate3d(0,-100%,0);opacity:0}.l-fade-left-enter,.l-fade-left-leave-to{transform:translate3d(-100%,0,0);opacity:0}.l-fade-right-enter,.l-fade-right-leave-to{transform:translate3d(100%,0,0);opacity:0}.l-slide-down-enter-active,.l-slide-down-leave-active,.l-slide-left-enter-active,.l-slide-left-leave-active,.l-slide-right-enter-active,.l-slide-right-leave-active,.l-slide-up-enter-active,.l-slide-up-leave-active{transition-property:transform}.l-slide-up-enter,.l-slide-up-leave-to{transform:translate3d(0,100%,0)}.l-slide-down-enter,.l-slide-down-leave-to{transform:translate3d(0,-100%,0)}.l-slide-left-enter,.l-slide-left-leave-to{transform:translate3d(-100%,0,0)}.l-slide-right-enter,.l-slide-right-leave-to{transform:translate3d(100%,0,0)}
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/utils/device-util.js b/HR/AIproject/miniprogram_npm/lin-ui/utils/device-util.js
new file mode 100644
index 0000000..5397524
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/utils/device-util.js
@@ -0,0 +1 @@
+class DeviceUtil{constructor(t){this.systemInfo=t}px2rpx(t){return 750/this.systemInfo.windowWidth*t}rpx2px(t){return this.systemInfo.windowWidth/750*t}getNavigationBarHeight(){return this.getTitleBarHeight()+this.getStatusBarHeight()}getStatusBarHeight(){return this.px2rpx(this.systemInfo.statusBarHeight)}getTitleBarHeight(){const t=this.systemInfo.statusBarHeight,e=wx.getMenuButtonBoundingClientRect(),i=e.top-t;return this.px2rpx(2*i+e.height)}}const deviceUtil=new DeviceUtil(wx.getSystemInfoSync());export default deviceUtil;
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/utils/util.js b/HR/AIproject/miniprogram_npm/lin-ui/utils/util.js
new file mode 100644
index 0000000..0315c6b
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/utils/util.js
@@ -0,0 +1 @@
+const promisic=function(n){return function(t={}){return new Promise((c,r)=>{const s=Object.assign(t,{success:n=>{c(n)},fail:n=>{r(n)}});n(s)})}},px2rpx=function(n){const{screenWidth:t}=wx.getSystemInfoSync();return 750/t*n};export{promisic,px2rpx};
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.js b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.js
new file mode 100644
index 0000000..bf8ecb1
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.js
@@ -0,0 +1 @@
+import eventUtil from"../core/utils/event-util";Component({properties:{columnGap:{type:String,value:"20rpx"}},data:{data:[],leftData:[],rightData:[]},attached(){this._init()},pageLifetimes:{show(){this._init()}},methods:{_init(){wx.lin=wx.lin||{},wx.lin.renderWaterFlow=(t=[],e=!1,a)=>{if("[object Array]"!==Object.prototype.toString.call(t))return console.error("[data]参数类型错误,渲染失败"),!1;this.setData({data:t}),e&&(this.data.leftData=[],this.data.rightData=[]),this._select(t,e).then(()=>{a&&a()}).catch(t=>{console.error(t)})}},_select(t,e){const a=wx.createSelectorQuery().in(this);return this.columnNodes=a.selectAll("#left, #right"),new Promise(a=>{this._render(t,0,e,()=>{a()})})},_render(t,e,a,i){(t.length>e||a)&&0!==this.data.data.length?this.columnNodes.boundingClientRect().exec(h=>{const r=h[0];this.data.leftHeight=r[0].height,this.data.rightHeight=r[1].height,this.data.leftHeight<=this.data.rightHeight||a?this.data.leftData.push(t[e]):this.data.rightData.push(t[e]),this.setData({leftData:this.data.leftData,rightData:this.data.rightData},()=>{this._render(t,++e,!1,i)})}):i&&i()},onTapItem(t){eventUtil.emit(this,"linitemtap",{item:t.currentTarget.dataset.item})}}});
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.json b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.json
new file mode 100644
index 0000000..46931a7
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.json
@@ -0,0 +1 @@
+{"component":true,"usingComponents":{},"componentGenerics":{"l-water-flow-item":true} }
\ No newline at end of file
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.wxml b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.wxml
new file mode 100644
index 0000000..5bc6332
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.wxss b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.wxss
new file mode 100644
index 0000000..7a853fc
--- /dev/null
+++ b/HR/AIproject/miniprogram_npm/lin-ui/water-flow/index.wxss
@@ -0,0 +1 @@
+.water-flow-container{display:flex;width:100%;box-sizing:border-box;background:0 0}.water-column{flex:1}
\ No newline at end of file
diff --git a/HR/AIproject/package-lock.json b/HR/AIproject/package-lock.json
new file mode 100644
index 0000000..03b11d4
--- /dev/null
+++ b/HR/AIproject/package-lock.json
@@ -0,0 +1,33 @@
+{
+ "name": "aiproject",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "aiproject",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "@vant/area-data": "^1.5.1",
+ "@vant/weapp": "^1.11.1",
+ "lin-ui": "^0.9.13"
+ }
+ },
+ "node_modules/@vant/area-data": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@vant/area-data/-/area-data-1.5.1.tgz",
+ "integrity": "sha512-gR5TPEzTbxN1cTK1aDhCoyikSCLX7DAacxyXoKyI4SAsYYTZrDl/nLgQFIm9vLsvWzlPIda8xV8/U3x7M9k6ww=="
+ },
+ "node_modules/@vant/weapp": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@vant/weapp/-/weapp-1.11.1.tgz",
+ "integrity": "sha512-2QddSq3MsozbTBAgEmW1rhzsEJNWPF2VS427M5pOOn0a7/f6lW+tymwdTcOQCzQONavhFwBv6Lebbs/UjE3Yig=="
+ },
+ "node_modules/lin-ui": {
+ "version": "0.9.13",
+ "resolved": "https://registry.npmjs.org/lin-ui/-/lin-ui-0.9.13.tgz",
+ "integrity": "sha512-RFRq1D+jCkhFzVCe/Y4C/NnWEK21ZiY961/HJR3mHmHmdq5IkrNBt/39WsUuWcDPty48WaY/3IipOPBBD+7ttw=="
+ }
+ }
+}
diff --git a/HR/AIproject/package.json b/HR/AIproject/package.json
new file mode 100644
index 0000000..347f4dd
--- /dev/null
+++ b/HR/AIproject/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "aiproject",
+ "version": "1.0.0",
+ "description": "",
+ "main": ".eslintrc.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@vant/area-data": "^1.5.1",
+ "@vant/weapp": "^1.11.1",
+ "lin-ui": "^0.9.13"
+ }
+}
diff --git a/HR/AIproject/pages/home/home.js b/HR/AIproject/pages/home/home.js
new file mode 100644
index 0000000..3371b6b
--- /dev/null
+++ b/HR/AIproject/pages/home/home.js
@@ -0,0 +1,158 @@
+// pages/home.js
+import {
+ myhttp
+} from "../../utils/service";
+const url = require("../../utils/url")
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ companycode:"",
+ notice:"选拔人才是组织成功的关键部分。以下是一些用于有效选拔人才的好办法:明确的招聘需求: 在开始招聘之前,确保你明确了你的招聘需求,包括职位描述、技能要求和经验水平。综合招聘渠道: 利用多种招聘渠道,包括在线招聘网站、社交媒体、校园招聘和员工推荐等,以吸引不同来源的候选人。筛选简历: 使用有效的简历筛选方法,以便快速排除不符合要求的候选人,只留下有潜力的候选人。面试技巧: 培训面试官,使他们能够提问有针对性的问题,评估技能和文化适应性。文化匹配度: 考虑候选人是否适应组织文化和价值观,以确保他们与团队和公司的合作。技术测试和评估: 对技术和职位相关的技能进行测试和评估,以确保候选人具备所需的技能。综合面试: 在面试中涵盖不同方面,包括技术、沟通、问题解决和团队合作等。参考调查: 进行参考调查,以获取有关候选人的过去表现和可靠性的信息。多样性: 致力于多样性和包容性,以确保招聘到来自不同背景和文化的候选人。招聘数据分析: 使用数据分析工具来跟踪和分析招聘过程的效率,以便不断改进。培训和发展: 为新员工提供适当的培训和发展计划,以帮助他们融入组织并提高绩效。持续反馈: 与新员工保持开放的沟通,以了解他们的需求和关注,并提供支持。员工推荐计划: 奖励员工推荐优秀的候选人,以鼓励员工积极参与招聘。定期审核和改进: 定期审查招聘流程,寻找改进的机会,并确保招聘策略与组织目标保持一致。",
+ list: [
+ {
+ pagePath: "/pages/home/home",
+ text: "首页",
+ iconPath: "/icons/tab-bar/home.png",
+ selectedIconPath: "/icons/tab-bar/home.png",
+ redDot:true
+ },
+ {
+ pagePath: "/pages/mine/mine",
+ text: "我的",
+ iconPath: "/icons/tab-bar/user.png",
+ selectedIconPath: "/icons/tab-bar/user.png",
+ }
+ ],
+ grids1:[
+ {
+ index:"1",
+ image:"comment",
+ text:"AI面试结果",
+ url:"/subpackages1/pages/AIresult/AIresult/AIresult"
+ },
+ {
+ index:"2",
+ image:"setting",
+ text:"AI面试设置",
+ url:"/subpackages1/pages/AIsetting/AIsetting/AIsetting"
+ },
+ {
+ index:"3",
+ image:"order",
+ text:"求职者信息",
+ url:"/subpackages1/pages/AIinformation/AIinformation/AIinformation"
+ }
+ ],
+ helplist: [
+ { helpTitle: '如何安排面试日程?' },
+ { helpTitle: '面试前的准备工作' },
+ { helpTitle: '评估候选人技能的方法' },
+ { helpTitle: '如何录用最合适的候选人?' },
+ { helpTitle: '了解面试官的责任和角色' },
+ { helpTitle: '如何处理候选人的提问?' },
+ { helpTitle: '面试结束后的跟进步骤' },
+ { helpTitle: '候选人背调的流程' },
+ { helpTitle: '使用招聘系统的技巧' },
+ { helpTitle: '如何处理不合适的候选人?' },
+ // 添加更多数据
+ ]
+
+ },
+ jumpPage(e) {
+ console.log(e)
+ var index = e.currentTarget.dataset.index
+ var helpTitle = this.data.helplist[index].helpTitle;
+ var content = this.data.helplist[index].content;
+ console.log(content)
+ wx.navigateTo({
+ url: '/subHelp/pages/help1/help1?helpTitle='+helpTitle+"&content="+content,
+ })
+
+ },
+
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.showLoading({
+ title: '加载中...',
+ mask: true
+ });
+
+ // 模拟一些异步操作
+ setTimeout(() => {
+ wx.hideLoading();
+ }, 500);
+ this.setData({
+ companycode :wx.getStorageSync("companycode")
+ })
+ console.log(this.data.companycode)
+ this.getHelpList()
+ },
+ getHelpList() {
+ myhttp({
+ url: url.backUrl+"/vxUser/getHelpList",
+ data: {
+
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log(res)
+ this.setData({
+ helplist : res.data
+ })
+ })
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/pages/home/home.json b/HR/AIproject/pages/home/home.json
new file mode 100644
index 0000000..2d452ec
--- /dev/null
+++ b/HR/AIproject/pages/home/home.json
@@ -0,0 +1,7 @@
+{
+ "usingComponents": {
+ "l-tab-bar":"/miniprogram_npm/lin-ui/tab-bar/index",
+ "l-search-bar":"/miniprogram_npm/lin-ui/search-bar/index",
+ "l-tabs":"/miniprogram_npm/lin-ui/tabs/index"
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/pages/home/home.wxml b/HR/AIproject/pages/home/home.wxml
new file mode 100644
index 0000000..574fbe4
--- /dev/null
+++ b/HR/AIproject/pages/home/home.wxml
@@ -0,0 +1,48 @@
+
+
+
+
+
+ {{notice}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.text}}
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/pages/home/home.wxss b/HR/AIproject/pages/home/home.wxss
new file mode 100644
index 0000000..e42f1d0
--- /dev/null
+++ b/HR/AIproject/pages/home/home.wxss
@@ -0,0 +1,21 @@
+/* pages/home.wxss */
+.swiper-container{
+ width: 100%;
+ border-radius: 30rpx;
+}
+.item{
+ height: 200px;
+ border-radius: 10rpx;
+}
+.item image{
+ width: 100%;
+ height: 100%;
+ border-radius: 10rpx;
+}
+.text{
+ width: 210rpx;
+}
+.help{
+ margin: 10px;
+}
+
diff --git a/HR/AIproject/pages/mine/aboutus.js b/HR/AIproject/pages/mine/aboutus.js
new file mode 100644
index 0000000..95cd647
--- /dev/null
+++ b/HR/AIproject/pages/mine/aboutus.js
@@ -0,0 +1,66 @@
+// pages/mine/aboutus.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/aboutus.json b/HR/AIproject/pages/mine/aboutus.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/pages/mine/aboutus.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/aboutus.wxml b/HR/AIproject/pages/mine/aboutus.wxml
new file mode 100644
index 0000000..5ab6921
--- /dev/null
+++ b/HR/AIproject/pages/mine/aboutus.wxml
@@ -0,0 +1,13 @@
+
+
+
+
+ 迎来到扬城直聘,一家致力于为求职者和雇主搭建桥梁的专业招聘平台。我们的使命是为您提供卓越的职业机会,同时帮助企业发掘优秀的人才。
+ 对于求职者,扬城直聘提供了广泛的职位选择,从初级职位到高级管理职位,覆盖各种行业和领域。我们帮助您建立职业生涯,提供职业建议和资源,以使您更好地实现职业目标。对于雇主,我们提供了精选的人才库,帮助您找到与您的业务需求匹配的候选人。我们的招聘解决方案涵盖了招聘流程的各个环节,以确保您能够轻松招募到最佳的人才。
+
+ 扬城直聘致力于创造一个连接求职者和雇主的平台,让每个人都能实现自己的职业梦想,同时帮助企业壮大和成功。加入我们,开始您的职业之旅或寻找理想的人才。扬城直聘,您的成功之旅从这里开始!
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/aboutus.wxss b/HR/AIproject/pages/mine/aboutus.wxss
new file mode 100644
index 0000000..f20b2e6
--- /dev/null
+++ b/HR/AIproject/pages/mine/aboutus.wxss
@@ -0,0 +1 @@
+/* pages/mine/aboutus.wxss */
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/back.js b/HR/AIproject/pages/mine/back.js
new file mode 100644
index 0000000..88056ae
--- /dev/null
+++ b/HR/AIproject/pages/mine/back.js
@@ -0,0 +1,66 @@
+// pages/mine/back.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/back.json b/HR/AIproject/pages/mine/back.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/pages/mine/back.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/back.wxml b/HR/AIproject/pages/mine/back.wxml
new file mode 100644
index 0000000..8bfde7d
--- /dev/null
+++ b/HR/AIproject/pages/mine/back.wxml
@@ -0,0 +1,11 @@
+
+
+
+
+提交反馈
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/back.wxss b/HR/AIproject/pages/mine/back.wxss
new file mode 100644
index 0000000..42158d7
--- /dev/null
+++ b/HR/AIproject/pages/mine/back.wxss
@@ -0,0 +1 @@
+/* pages/mine/back.wxss */
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/infset.js b/HR/AIproject/pages/mine/infset.js
new file mode 100644
index 0000000..a89bd0e
--- /dev/null
+++ b/HR/AIproject/pages/mine/infset.js
@@ -0,0 +1,66 @@
+// pages/mine/infset.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/infset.json b/HR/AIproject/pages/mine/infset.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/pages/mine/infset.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/infset.wxml b/HR/AIproject/pages/mine/infset.wxml
new file mode 100644
index 0000000..0ded1e7
--- /dev/null
+++ b/HR/AIproject/pages/mine/infset.wxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+修改并保存
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/infset.wxss b/HR/AIproject/pages/mine/infset.wxss
new file mode 100644
index 0000000..6a78ae0
--- /dev/null
+++ b/HR/AIproject/pages/mine/infset.wxss
@@ -0,0 +1 @@
+/* pages/mine/infset.wxss */
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/mine.js b/HR/AIproject/pages/mine/mine.js
new file mode 100644
index 0000000..3c8ca6c
--- /dev/null
+++ b/HR/AIproject/pages/mine/mine.js
@@ -0,0 +1,119 @@
+// pages/mine/mine.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ imageurl:wx.getStorageSync('avatar'),
+ list: [
+ {
+ pagePath: "/pages/home/home",
+ text: "首页",
+ iconPath: "/icons/tab-bar/home.png",
+ selectedIconPath: "/icons/tab-bar/home.png",
+ },
+ {
+ pagePath: "/pages/mine/mine",
+ text: "我的",
+ iconPath: "/icons/tab-bar/user.png",
+ selectedIconPath: "/icons/tab-bar/user.png",
+ redDot:true
+ },
+ ]
+ ,
+ image:"https://th.bing.com/th/id/R.b130c87b75a17febd7f7ff8934238178?rik=sVqYsZWZ9sOmVA&riu=http%3a%2f%2fpic.baike.soso.com%2fp%2f20131221%2f20131221174024-912240027.jpg&ehk=TiyBsTIzWYVfwoi8BrKTPVZeble44GPuqAXOrQdC2Hk%3d&risl=&pid=ImgRaw&r=0",
+ company:"小米科技有限责任公司",
+ name:"赵锐",
+ introduction:"一个资深的计算机领域HR",
+ function:[{
+ title:"个人资料设置",
+ icon:"setting",
+ url:"/pages/mine/infset"
+ },{
+ title:"帮助",
+ icon:"help",
+ url:"/subHelp/pages/helphome/helphome"
+ },{
+ title:"反馈",
+ icon:"order",
+ url:"/pages/mine/back"
+ },{
+ title:"关于我们",
+ icon:"user",
+ url:"/pages/mine/aboutus"
+ }]
+ },
+ switchtologin(){
+ wx.redirectTo({
+ url: '/subHelp/pages/login/login',
+ })
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.showLoading({
+ title: '加载中...',
+ mask: true
+ });
+
+ // 模拟一些异步操作
+ setTimeout(() => {
+ wx.hideLoading();
+ }, 500);
+ this.setData({
+ name:wx.getStorageSync("name"),
+ sex:wx.getStorageSync("sex"),
+ company:wx.getStorageSync("company")
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/mine.json b/HR/AIproject/pages/mine/mine.json
new file mode 100644
index 0000000..1c29bfe
--- /dev/null
+++ b/HR/AIproject/pages/mine/mine.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "l-tab-bar":"/miniprogram_npm/lin-ui/tab-bar/index"
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/pages/mine/mine.wxml b/HR/AIproject/pages/mine/mine.wxml
new file mode 100644
index 0000000..aee065b
--- /dev/null
+++ b/HR/AIproject/pages/mine/mine.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+ {{name}}
+
+ 公司:{{company}}
+
+
+
+
+
+
+ 退出登陆
+
+
diff --git a/HR/AIproject/pages/mine/mine.wxss b/HR/AIproject/pages/mine/mine.wxss
new file mode 100644
index 0000000..a65d7d7
--- /dev/null
+++ b/HR/AIproject/pages/mine/mine.wxss
@@ -0,0 +1,26 @@
+/* pages/mine/mine.wxss */
+
+.v1{
+ margin-bottom: 10px;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+.v2{
+ margin-top: 60px;
+ margin-left: 10px;
+}
+.profile-container {
+ padding: 20px;
+ text-align: left;
+ padding: 15px; /* 增加内边距 */
+}
+.name-sex {
+ font-size: 18px;
+ font-weight: bold;
+ color: rgb(253, 250, 250);
+}
+
+.info {
+ font-size: 16px;
+ color: rgb(71, 67, 67);
+}
\ No newline at end of file
diff --git a/HR/AIproject/pages/test/test.js b/HR/AIproject/pages/test/test.js
new file mode 100644
index 0000000..7418ae9
--- /dev/null
+++ b/HR/AIproject/pages/test/test.js
@@ -0,0 +1,66 @@
+// pages/test/test.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/pages/test/test.wxml b/HR/AIproject/pages/test/test.wxml
new file mode 100644
index 0000000..42a34de
--- /dev/null
+++ b/HR/AIproject/pages/test/test.wxml
@@ -0,0 +1,2 @@
+
+pages/test/test.wxml
\ No newline at end of file
diff --git a/HR/AIproject/project.config.json b/HR/AIproject/project.config.json
new file mode 100644
index 0000000..c069e17
--- /dev/null
+++ b/HR/AIproject/project.config.json
@@ -0,0 +1,57 @@
+{
+ "description": "项目配置文件",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "setting": {
+ "bundle": false,
+ "userConfirmedBundleSwitch": false,
+ "urlCheck": true,
+ "scopeDataCheck": false,
+ "coverView": true,
+ "es6": true,
+ "postcss": true,
+ "compileHotReLoad": false,
+ "lazyloadPlaceholderEnable": false,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "autoAudits": false,
+ "newFeature": false,
+ "uglifyFileName": false,
+ "uploadWithSourceMap": true,
+ "useIsolateContext": true,
+ "nodeModules": false,
+ "enhance": true,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "showShadowRootInWxmlPanel": true,
+ "enableEngineNative": false,
+ "minifyWXSS": true,
+ "showES6CompileOption": false,
+ "minifyWXML": true,
+ "packNpmManually": true,
+ "packNpmRelationList": [
+ {
+ "packageJsonPath": "./package.json",
+ "miniprogramNpmDistDir": "./"
+ }
+ ],
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "condition": false
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.19.4",
+ "appid": "wx7c972ceb65b45c49",
+ "projectname": "miniprogram-92",
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/project.private.config.json b/HR/AIproject/project.private.config.json
new file mode 100644
index 0000000..887eb9b
--- /dev/null
+++ b/HR/AIproject/project.private.config.json
@@ -0,0 +1,238 @@
+{
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "projectname": "AIproject",
+ "setting": {
+ "compileHotReLoad": true,
+ "urlCheck": false
+ },
+ "condition": {
+ "miniprogram": {
+ "list": [
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIresult/AIresult1/AIresultp1",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIresult/AIresult1/AIresultp1",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIresult/AIresult/AIresult",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIinformation/AIinformation/AIinformation",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/home/home",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIinformation/person/person",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIinformation/person/person",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addjob/addjob",
+ "query": "id=7&jobName=%E5%89%8D%E7%AB%AFvue&detail=%E5%81%9A%E7%BD%91%E9%A1%B5&jobTips=%5BHTML%2C%20CSS%2C%20JavaScript%5D&number=20-50&salary=5K-10K&address=%E6%B2%B3%E5%8C%97%E7%9C%81%E5%94%90%E5%B1%B1%E5%B8%82%E8%B7%AF%E5%8C%97%E5%8C%BA21%E6%A5%BC&status=1&jobType=3",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/AIsetting/AIsetting",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addjob/addjob",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addaihr/addaihr",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addaihr/addaihr",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addaihr/addaihr",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/AIsetting/AIsetting",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/form/form",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addjob/addjob",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addjob/addjob",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/addjob/addjob",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/AIsetting/AIsetting",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIinformation/AIinformation/AIinformation",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subHelp/pages/login/login",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/home/home",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/home/home",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/form/form",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/form1/form1",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIsetting/form/form",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/mine/mine",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "pages/mine/mine",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIresult/AIresult1/AIresultp1",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIinformation/person/person",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIinformation/person/person",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "",
+ "pathName": "subpackages1/pages/AIresult/AIresult1/AIresultp1",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/sitemap.json b/HR/AIproject/sitemap.json
new file mode 100644
index 0000000..ca02add
--- /dev/null
+++ b/HR/AIproject/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help1/help1.js b/HR/AIproject/subHelp/pages/help1/help1.js
new file mode 100644
index 0000000..0a955a5
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help1/help1.js
@@ -0,0 +1,74 @@
+// pages/help/help1.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ title:"如何获取求职者简历",
+ content:""
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ console.log(options)
+ const helpTitle = options.helpTitle || ''
+ const content = options.content || ''
+ // console.log(content)
+ this.setData({
+ title:helpTitle,
+ content:content
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help1/help1.json b/HR/AIproject/subHelp/pages/help1/help1.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help1/help1.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help1/help1.wxml b/HR/AIproject/subHelp/pages/help1/help1.wxml
new file mode 100644
index 0000000..8894de4
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help1/help1.wxml
@@ -0,0 +1,14 @@
+
+
+
+
+{{title}}
+
+
+ {{content}}
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help1/help1.wxss b/HR/AIproject/subHelp/pages/help1/help1.wxss
new file mode 100644
index 0000000..ff1d58b
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help1/help1.wxss
@@ -0,0 +1 @@
+/* pages/help/help1.wxss */
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help2/help2.js b/HR/AIproject/subHelp/pages/help2/help2.js
new file mode 100644
index 0000000..a7dbc39
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help2/help2.js
@@ -0,0 +1,66 @@
+// subHelp/pages/help2/help2.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help2/help2.wxml b/HR/AIproject/subHelp/pages/help2/help2.wxml
new file mode 100644
index 0000000..38df160
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help2/help2.wxml
@@ -0,0 +1,2 @@
+
+subHelp/pages/help2/help2.wxml
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help3/help3.js b/HR/AIproject/subHelp/pages/help3/help3.js
new file mode 100644
index 0000000..dd9c203
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help3/help3.js
@@ -0,0 +1,66 @@
+// subHelp/pages/help3/help3.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/help3/help3.wxml b/HR/AIproject/subHelp/pages/help3/help3.wxml
new file mode 100644
index 0000000..5c170c1
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/help3/help3.wxml
@@ -0,0 +1,2 @@
+
+subHelp/pages/help3/help3.wxml
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/helphome/helphome.js b/HR/AIproject/subHelp/pages/helphome/helphome.js
new file mode 100644
index 0000000..b73153b
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/helphome/helphome.js
@@ -0,0 +1,92 @@
+// pages/help/helphome.js
+import {
+ myhttp
+} from "../../../utils/service";
+const url = require("../../../utils/url")
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ helplist:[]
+ },
+ jumpPage(e) {
+ console.log(e)
+ var index = e.currentTarget.dataset.index
+ var helpTitle = this.data.helplist[index].helpTitle;
+ var content = this.data.helplist[index].content;
+ console.log(content)
+ wx.navigateTo({
+ url: '/subHelp/pages/help1/help1?helpTitle='+helpTitle+"&content="+content,
+ })
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+this.getHelpList()
+ },
+ getHelpList() {
+ myhttp({
+ url: url.backUrl+"/vxUser/getHelpList",
+ data: {
+
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log(res)
+ this.setData({
+ helplist : res.data
+ })
+ })
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/helphome/helphome.json b/HR/AIproject/subHelp/pages/helphome/helphome.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/helphome/helphome.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/helphome/helphome.wxml b/HR/AIproject/subHelp/pages/helphome/helphome.wxml
new file mode 100644
index 0000000..3da7074
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/helphome/helphome.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/HR/AIproject/subHelp/pages/helphome/helphome.wxss b/HR/AIproject/subHelp/pages/helphome/helphome.wxss
new file mode 100644
index 0000000..01c99dc
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/helphome/helphome.wxss
@@ -0,0 +1 @@
+/* pages/help/helphome.wxss */
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/login/login.js b/HR/AIproject/subHelp/pages/login/login.js
new file mode 100644
index 0000000..e6f073e
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/login/login.js
@@ -0,0 +1,142 @@
+// homeSub/pages/login/login.js
+const url=require('../../../utils/url')
+import {
+ myhttp
+} from "../../../utils/service";
+Page({
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ account:"13196786137",
+ code:"786137",
+ companycode:"333",
+ checked:false,
+ list:[],
+ },
+ Login() {
+ myhttp({
+ url: url.backUrl+"/admin/login",
+ data: {
+ phone:this.data.account,
+ encoding:this.data.companycode,
+ password:this.data.code
+ },
+ method: "POST"
+ }).then((res) => {
+ console.log("aaaaaaaaaaaaaa")
+ console.log(res)
+ console.log("aaaaaaaaaaaaaa")
+ this.setData({
+ list : res.data
+ })
+ console.log(this.data.list.userInfo.username)
+ var name = this.data.list.userInfo.username
+ var sex=this.data.list.userInfo.sex
+ var company=res.data.companyName
+ var companycode=this.data.list.userInfo.companyEncoding
+ var userid=this.data.list.userInfo.id
+ var token=res.data.token
+ var avatar=res.data.userInfo.avatar
+ wx.setStorageSync("name", name);
+ wx.setStorageSync("sex", sex);
+ wx.setStorageSync("company", company);
+ wx.setStorageSync("companycode", companycode);
+ wx.setStorageSync("userid", userid);
+ wx.setStorageSync("token", token);
+ wx.setStorageSync("avatar", avatar);
+ console.log(token)
+ wx.switchTab({
+ url: '/pages/mine/mine',
+ })
+ })
+ },
+ checked: function (e) {
+ var check = this.data.checked;
+ if (check) {
+ this.data.checked = false;
+ console.log("已取消选中");
+ } else {
+ this.data.checked = true;
+ console.log("已选中");
+ }
+ this.setData({
+ "checked": this.data.checked,
+ });
+ },
+ getCode(e){
+
+ },
+ submit(e){
+ wx.switchTab({
+ url: '/pages/mine/mine',
+ })
+ console.log(e)
+ this.data.account=e.detail.values.account
+ this.data.code=e.detail.values.code
+ this.data.companycode=e.detail.values.companycode
+ if(this.data.checked == true){
+ this.Login()
+ }else{
+ this.setData({
+ noConfirm:true
+ })
+
+ }
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.lin.initValidateForm(this)
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/login/login.json b/HR/AIproject/subHelp/pages/login/login.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/login/login.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/login/login.wxml b/HR/AIproject/subHelp/pages/login/login.wxml
new file mode 100644
index 0000000..9299c15
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/login/login.wxml
@@ -0,0 +1,38 @@
+
+
+
+ HR登陆
+ 请用下发的公司账号登陆管理人才
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我已阅读并同意《xxx服务协议》《个人隐私保护政策》
+
+
+
+ 进入小程序
+
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subHelp/pages/login/login.wxss b/HR/AIproject/subHelp/pages/login/login.wxss
new file mode 100644
index 0000000..563858d
--- /dev/null
+++ b/HR/AIproject/subHelp/pages/login/login.wxss
@@ -0,0 +1,56 @@
+/* homeSub/pages/login/login.wxss */
+page {
+ background-color: #ffffff;
+}
+
+.out-box {
+ width: 650rpx;
+ margin-left: 50rpx;
+ margin-top: 80rpx;
+ height: 600rpx;
+}
+
+.login-title-box {
+ width: 600rpx;
+ margin: 25rpx;
+ height: 160rpx;
+}
+
+.load-input-box {
+ height: 300rpx;
+ width: 600rpx;
+ margin-left: 25rpx;
+}
+
+.inputView {
+ line-height: 45px;
+ border-bottom: 1px solid #999999;
+}
+
+.title {
+ width: 80%;
+ font-weight: bold;
+ font-size: 30px;
+}
+
+.line {
+ border: 1px solid #ccc;
+ border-radius: 20px;
+ float: right;
+ margin-top: 9px;
+ color: #cccccc;
+}
+
+.loginBtn {
+ margin-top: 40px;
+ border-radius: 10px;
+}
+
+.inputText {
+ display: inline-block;
+ line-height: 45px;
+ padding-left: 10px;
+ margin-top: 11px;
+ color: #cccccc;
+ font-size: 14px;
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.js b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.js
new file mode 100644
index 0000000..1ee8bfd
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.js
@@ -0,0 +1,420 @@
+// pages/AIimformation/AIinformation.js
+
+import {
+ myhttp
+} from "../../../../utils/service";
+const url = require("../../../../utils/url")
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ showpop: false,
+ showpop1: false,
+ showflag: false,
+ selectedDate: '',
+ textmessage: "",
+ flag1: "0",
+ flag2: "0",
+ jobid: '7',
+ currentPerson:{},
+ status1Array: [],
+ status2Array: [],
+ status3Array: [],
+ promote: {},
+ jobs: [{
+ }],
+ steps: [
+ {
+ text: '步骤一',
+ desc: '设置面试题目',
+ },
+ {
+ text: '步骤二',
+ desc: '填写面试promote',
+ },
+ ],
+ personlist: [],
+ items: [{
+ value: 'Q1',
+ name: 'JAVA前端开发工程师'
+ },
+ {
+ value: 'Q2',
+ name: 'JAVA后端开发工程师',
+ },
+ {
+ value: 'Q3',
+ name: 'python后端开发工程师'
+ }
+ ],
+ person: [
+ {
+ name: "张伟",
+ sex: "男",
+ years: "五年",
+ age: "28",
+ phone: "13196786136",
+ money: "6-8k",
+ school: "扬州大学",
+ degree: "本科",
+ major: "计算机科学与技术",
+ url: "https://gss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/4b90f603738da977f682875eb451f8198618e312.jpg",
+ flag: '+邀请面试'
+ },
+ {
+ flag: '+邀请面试',
+ name: "李逍",
+ sex: "女",
+ years: "四年",
+ age: "28",
+ money: "10-12k",
+ school: "北京大学",
+ degree: "硕士",
+ major: "计算机科学",
+ url: "https://file.100chui.com/upload/user/image/202105/9a3e7cca-4804-4f98-b810-5e88668202f3.png",
+ },
+ {
+ flag: '+邀请面试',
+ name: "王智慧",
+ sex: "女",
+ years: "三年",
+ age: "23",
+ money: "8-10k",
+ school: "上海交通大学",
+ degree: "本科",
+ major: "信息工程",
+ url: "https://img.zcool.cn/community/01cf695e71cda9a80120a8953bb057.jpg?x-oss-process=image/auto-orient,1/resize,m_lfit,w_1280,limit_1/sharpen,100",
+ },
+ {
+ flag: '+邀请面试',
+ name: "李思思",
+ sex: "女",
+ years: "五年",
+ age: "23",
+ money: "12-15k",
+ school: "扬州大学",
+ degree: "本科",
+ major: "计算机科学与技术",
+ url: "http://117.88.94.226:5380/upload/picture/1E3E5B18-6545-434F-93A1-CBDE17CCCD8F.jpg",
+ },
+ {
+ flag: '+邀请面试',
+ name: "赵子",
+ sex: "女",
+ years: "五年",
+ age: "30",
+ money: "12-15k",
+ school: "浙江大学",
+ degree: "博士",
+ major: "电子科学与技术",
+ url: "https://pic.huke88.com/task/images/2018-06-05/1BEAA53E-B0EB-3FB7-DCE8-B3D66A5D6771.jpg",
+ },
+ {
+ flag: '+邀请面试',
+ name: "刘帅",
+ sex: "男",
+ years: "四年",
+ age: "26",
+ money: "9-11k",
+ school: "南京大学",
+ degree: "硕士",
+ major: "通信工程",
+ url: "https://img.zcool.cn/community/016a2955454ce90000019ae90018bb.jpg@1280w_1l_2o_100sh.jpg",
+ },
+ {
+ flag: '+邀请面试',
+ name: "陈芳",
+ sex: "女",
+ years: "三年",
+ age: "24",
+ money: "7-9k",
+ school: "复旦大学",
+ degree: "本科",
+ major: "计算机科学与技术",
+ url: "https://img.zcool.cn/community/01eb9c59daf04fa80121ae0c48819e.jpg@800w_1l_2o_100sh.jpg",
+ },
+ ]
+ },
+ submit(e) {
+ console.log(e)
+ this.setData({
+ showpop1: false
+ })
+ },
+ changeTabs(event) {
+ console.log(event)
+ const key1 = this.data.list[event.detail.currentIndex].id
+ this.setData({
+ jobid: key1
+ })
+ console.log(key1)
+ this.setData({
+ flag1: key1
+ });
+ this.getperson()
+ },
+ changeTabs1(event) {
+ const key2 = event.detail.currentIndex
+ this.setData({
+ flag2: key2
+ });
+ this.getperson()
+ },
+ showpop(e) {
+ console.log(e)
+ const index = e.currentTarget.dataset.index;
+ // 获取当前person数组中的对应项
+ const currentPerson = this.data.person[index];
+ this.setData({
+ currentPerson:currentPerson,
+ showpop: true
+ })
+ console.log(this.data.currentPerson)
+ console.log(this.data.currentPerson.jobId)
+ myhttp({
+ url: url.backUrl + "/recruitment/get_jobSettingByJobId?jobId="+this.data.currentPerson.jobId,
+ data: {
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log(res)
+ this.setData({
+ })
+ })
+ },
+ showpop1() {
+ this.setData({
+ showpop: false,
+ showpop1: true
+ })
+ },
+ showDatePicker: function () {
+ wx.datePicker({
+ success: (res) => {
+ if (res.errMsg === 'datePicker:ok') {
+ const selectedDate = res.year + '-' + res.month + '-' + res.day;
+ this.setData({
+ selectedDate: selectedDate
+ });
+ }
+ }
+ });
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.lin.initValidateForm(this)
+ wx.setNavigationBarTitle({
+ title: '求职者信息',
+ success: (res) => { },
+ fail: (res) => { },
+ complete: (res) => { },
+ })
+ this.getJobList()
+ this.getperson()
+ },
+ getperson() {
+ myhttp({
+ url: url.backUrl + "/recruitment/getApplicationList?encoding=" + 123 + '&jobId=' + this.data.jobid,
+ data: {
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log(res, "aa")
+ const dataList = res.data
+ const personList = dataList.map(item => ({
+ name: item.userName,
+ sex: item.resume.gender === "1" ? '女' : '男',
+ years: item.resume.experience,
+ age: item.resume.resume.age,
+ phone: item.resume.phone,
+ money: JSON.parse(item.resume.resume.jobExpectation)[0].minSalary + "~" + JSON.parse(item.resume.resume.jobExpectation)[0].maxSalary + "k",
+ school: item.resume.school,
+ degree: item.resume.eduBack,
+ major: item.resume.major,
+ url: item.resume.userImgUrl,
+ status: item.status,
+ flag: item.status == "1" ? '+邀请面试' : '已邀请',
+ userId: item.userId,
+ jobId: item.jobId,
+ postId: item.postingId,
+ id: item.id
+ }))
+ this.setData({
+ person: personList
+ })
+ console.log(this.data.person)
+ const status1Array = personList.filter(item => item.status === 1);
+ const status2Array = personList.filter(item => item.status === 2);
+ const status3Array = personList.filter(item => item.status === 3);
+ console.log("Status 1 Array:", status1Array);
+ console.log("Status 2 Array:", status2Array);
+ console.log("Status 3 Array:", status3Array);
+ this.setData({
+ status1Array: status1Array,
+ status2Array: status2Array,
+ status3Array: status3Array,
+ })
+ })
+ },
+ getJobList() {
+ myhttp({
+ url: url.backUrl + "/recruitment/get_jobList?encoding=" + 123,
+ data: {
+
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log("res")
+ console.log(res)
+ this.setData({
+ list: res.data
+ })
+ })
+ },
+ switchtoperson() {
+ wx.navigateTo({
+ url: '/subpackages1/pages/AIinformation/person/person',
+ })
+ },
+ checkboxChange(e) {
+ console.log('checkbox发生change事件,携带value值为:', e.detail.value)
+ const items = this.data.items
+ const values = e.detail.value
+ for (let i = 0, lenI = items.length; i < lenI; ++i) {
+ items[i].checked = false
+ for (let j = 0, lenJ = values.length; j < lenJ; ++j) {
+ if (items[i].value === values[j]) {
+ items[i].checked = true
+ break
+ }
+ }
+ }
+ this.setData({
+ items
+ })
+ if (e.detail.value.length == 6) {
+ console.log(this.data.checkedAll);
+ this.setData({
+ checkedAll: true
+ })
+ } else {
+ this.setData({
+ checkedAll: ""
+ })
+ }
+ },
+ checkboxAll(e) {
+ if (e.detail.value.length == 1) {
+ // 全选状态
+ const items = this.data.items
+ for (let i = 0; i < items.length; i++) {
+ items[i].checked = true
+ }
+ this.setData({
+ items
+ })
+ } else {
+ // 没有全选状态
+ const items = this.data.items
+ for (let i = 0; i < items.length; i++) {
+ items[i].checked = false
+ }
+ this.setData({
+ items
+ })
+ }
+ },
+ invitation(event) {
+ console.log(this.data.currentPerson)
+ myhttp({
+ url:url.backUrl + "/interview/VxSendInterviewNotice",
+ data: {
+ encoding: wx.getStorageSync('companycode'),
+ recipient: this.data.currentPerson.userId,
+ jobId: this.data.currentPerson.jobId,
+ postId: this.data.currentPerson.postId,
+ userId: wx.getStorageSync('userid'),
+ promote: "{'systemPromote':'我是系统的promote','qustionsPromote':[['你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“什么是面向对象编程中的封装?”'],['你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“在面向对象编程中,什么是继承?”'],['你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请解释一下面向对象编程中的多态性是什么”'],['你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请问您的目标薪资是多少?”'],['你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请问您有过什么项目经历吗?”,不要追问,只需对项目经历进行评价']]}",
+ selectQuestions: "[23,24,34,61,62]",
+ applicationId:this.data.currentPerson.id,
+ endTime:"2023-12-25",
+ },
+ method: "POST"
+ }).then((res) => {
+ console.log(res)
+ this.getperson()
+ })
+ // if (currentPerson.flag === '+邀请面试') {
+ // currentPerson.flag = '已邀请';
+ // // 更新数据
+ // this.setData({
+ // [`person[${index}].flag`]: '已邀请',
+ // });
+ // console.log(`已投递面试邀请给 ${currentPerson.name}`);
+ // this.setData({
+ // textmessage: `已将投递面试邀请给${currentPerson.name}`,
+ // showflag: true,
+ // });
+ // setTimeout(() => {
+ // this.setData({
+ // showflag: false,
+ // });
+ // }, 2000);
+ // }
+
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.json b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.json
new file mode 100644
index 0000000..2e0f4fd
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "l-search-bar":"/miniprogram_npm/lin-ui/search-bar/index"
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.wxml b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.wxml
new file mode 100644
index 0000000..a137618
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.wxml
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 工作经验:{{item.years}}
+ 年龄:{{item.age}}
+
+
+ 期望薪资:{{item.money}}
+ 学历:{{item.degree}}
+
+
+ 毕业院校:{{item.school}}
+ 电话:{{item.phone}}
+
+
+ 专业:{{item.major}}
+
+
+
+
+ 下载简历
+
+
+ {{item.flag}}
+
+
+
+
+
+
+
+
+
+
+ 工作经验:{{item.years}}
+ 年龄:{{item.age}}
+
+
+ 期望薪资:{{item.money}}
+ 学历:{{item.degree}}
+
+
+ 毕业院校:{{item.school}}
+ 电话:{{item.phone}}
+
+
+ 专业:{{item.major}}
+
+
+
+
+ 下载简历
+
+
+ {{item.flag}}
+
+
+
+
+
+
+
+
+
+
+ 工作经验:{{item.years}}
+ 年龄:{{item.age}}
+
+
+ 期望薪资:{{item.money}}
+ 学历:{{item.degree}}
+
+
+ 毕业院校:{{item.school}}
+ 电话:{{item.phone}}
+
+
+ 专业:{{item.major}}
+
+
+
+
+ 下载简历
+
+
+ 通过面试
+
+
+
+
+
+
+
+
+
+ 专业面试
+
+ 全选
+
+
+
+
+ 综合面试
+
+ 全选
+
+
+
+
+ 心理面试
+
+ 全选
+
+
+
+
+ 下一步
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择的日期:{{selectedDate}}
+
+
+ 邀请面试
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.wxss b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.wxss
new file mode 100644
index 0000000..0997904
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/AIinformation/AIinformation.wxss
@@ -0,0 +1,9 @@
+/* pages/AIimformation/AIinformation.wxss */
+.v2{
+ margin: 10px;
+}
+.avter-content{
+ font-size: 12px;
+ display:flex;
+ flex-direction: column;
+}
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/person/person.js b/HR/AIproject/subpackages1/pages/AIinformation/person/person.js
new file mode 100644
index 0000000..b700113
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/person/person.js
@@ -0,0 +1,155 @@
+// subpackages1/pages/AIinformation/person/person.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ name: "李思思",
+ sex: "女",
+ years: "五年",
+ age: "23",
+ money: "12-15k",
+ school: "扬州大学",
+ degree: "本科",
+ major: "计算机科学与技术",
+ url: "http://117.88.94.226:5380/upload/picture/1E3E5B18-6545-434F-93A1-CBDE17CCCD8F.jpg",
+ list:[
+ {
+ title: "职业人格",
+ score: "5.1",
+ tags: [
+ { text: "卓越追求" },
+ { text: "善于沟通" },
+ { text: "阳光开朗" },
+ ],
+ },
+ {
+ title: "批判思维",
+ score: "8.1",
+ tags: [
+ { text: "批判性思维" },
+ { text: "逻辑清晰" },
+
+ ],
+ },
+ {
+ title: "工作经验",
+ score: "9.6",
+ tags: [
+ { text: "丰富经验" },
+
+ { text: "团队合作" },
+ ],
+ },
+ {
+ title: "工作能力",
+ score: "4.1",
+ tags: [
+ { text: "灵活应变" },
+ { text: "学习能力" },
+ { text: "创新思维" },
+ ],
+ },
+ {
+ title: "心理健康",
+ score: "7.2",
+ tags: [
+ { text: "心理平衡" },
+ { text: "压力管理" },
+ { text: "情绪稳定" },
+ ],
+ },
+ {
+ title: "综合评分",
+ score: "8.8",
+ tags: [
+ { text: "全面发展" },
+ { text: "团队协作" },
+ { text: "自我驱动" },
+ ],
+ },
+ ]
+
+},
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ var Charts = require('../../../../utils/wxcharts.js');
+ let windowWidth = 320;
+ try {
+ let res = wx.getSystemInfoSync();
+ windowWidth = res.windowWidth;
+ } catch (e) {
+ // do something when get system info failed
+ }
+ new Charts({
+ canvasId: 'radarCanvas',
+ type: 'radar',
+ categories: ['职业人格', '批判思维', '工作经验', '工作能力', '心理健康', '综合评分'],
+ series: [{
+ name: this.data.name,
+ data: [this.data.list[0].score,this.data.list[1].score, this.data.list[2].score, this.data.list[3]
+ .score, this.data.list[4].score, this.data.list[5].score]
+ }],
+ width: windowWidth,
+ height: 150,
+ extra: {
+ radar: {
+ max: 10
+ }
+ }
+ });
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/person/person.json b/HR/AIproject/subpackages1/pages/AIinformation/person/person.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/person/person.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/person/person.wxml b/HR/AIproject/subpackages1/pages/AIinformation/person/person.wxml
new file mode 100644
index 0000000..83c9249
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/person/person.wxml
@@ -0,0 +1,48 @@
+
+
+
+
+ 工作经验:{{years}}
+ 年龄:{{age}}
+
+
+ 期望薪资:{{money}}
+ 学历:{{degree}}
+
+
+ 毕业院校:
+ {{school}}
+
+
+ 专业:
+ {{major}}
+
+
+
+
+
+
+
+
+
+
+ 综合评价:李思思在面试中表现出了对面向对象编程概念的深入理解,对封装、继承和多态性的回答都很准确。她对自己的目标薪资和福利要求也很明确。然而,她在回答项目经历时过于简洁,没有提供具体的项目内容和自己在项目中的角色和贡献。这可能给面试官留下对她实际工作经验和能力的疑问。总体而言,李思思在技术方面表现良好,但需要更详细地展示自己的项目经验和能力。
+
+
+
+
+
+ 综合得分:{{item.score}}
+
+
+ {{item.text}}
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIinformation/person/person.wxss b/HR/AIproject/subpackages1/pages/AIinformation/person/person.wxss
new file mode 100644
index 0000000..e56985d
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIinformation/person/person.wxss
@@ -0,0 +1,31 @@
+/* subpackages1/pages/AIinformation/person/person.wxss */
+.person-info-brief-box {
+ display: flex;
+ width: 100%;
+ height: 200rpx;
+}
+.person-detail-box{
+ margin-left: 30rpx;
+ margin-top: 20rpx;
+ margin-right: 30rpx;
+}
+.person-image-name {
+ display: flex;
+ margin-left: 20rpx;
+ margin-top: 20rpx;
+ width: 560rpx;
+ height: 180rpx;
+}
+.person-label-box {
+ width: 100%;
+ height: 100rpx;
+ display: flex;
+}
+.label-dif {
+ margin-left: 20rpx;
+ margin-top: 20rpx;
+}
+.canvas{
+ transform: translate(-15%, 0%);
+}
+
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.js b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.js
new file mode 100644
index 0000000..0c8113a
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.js
@@ -0,0 +1,220 @@
+// pages/AIresult/AIresult.js
+import {
+ myhttp
+} from "../../../../utils/service";
+const url=require('../../../../utils/url')
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ list1:[],
+ list2:[],
+ list3:[],
+ list: [
+ {
+ "name": "潜力发掘与职业道路面试",
+ "time": "2023-12-09",
+ "flag": "进行中"
+ },
+ {
+ "name": "技术研发之星选拔面试",
+ "time": "2023-12-10",
+ "flag": "已结束"
+ },
+ {
+ "name": "未来领袖发现之旅面试",
+ "time": "2023-12-10",
+ "flag": "进行中"
+ },
+ {
+ "name": "高端人才聚焦面试",
+ "time": "2023-12-08",
+ "flag": "进行中"
+ },
+ {
+ "name": "多元文化团队加入面试",
+ "time": "2023-12-08",
+ "flag": "已结束"
+ },
+ {
+ "name": "行业精英选拔挑战",
+ "time": "2023-12-05",
+ "flag": "已结束"
+ },
+ {
+ "name": "未来领袖选拔面试",
+ "time": "2023-12-05",
+ "flag": "已结束"
+ },
+ {
+ "name": "专业峰会与高端面试",
+ "time": "2023-11-25",
+ "flag": "已结束"
+ },
+ {
+ "name": "金秋社会招聘面试",
+ "time": "2022-12-01",
+ "flag": "已结束"
+ },
+ {
+ "name": "创业者之路招聘",
+ "time": "2022-12-01",
+ "flag": "已结束"
+ }
+ ]
+
+ },
+ getlist(){
+ myhttp({
+ url:url.backUrl + "/interview/getPostingInfoList?encoding="+wx.getStorageSync('companycode'),
+ data: {
+
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log(res)
+ })
+ },
+ datalist() {
+ // 示例数组
+ const list = this.data.list;
+
+ // 获取当前日期
+ const currentDate = new Date();
+
+ // 将日期字符串转换为日期对象
+ const parseDate = (dateString) => {
+ const [year, month, day] = dateString.split('-');
+ return new Date(year, parseInt(month) - 1, day);
+ };
+
+ // 定义日期范围
+ const threeDaysAgo = new Date(currentDate.getTime());
+ threeDaysAgo.setDate(currentDate.getDate() - 3);
+
+ const sevenDaysAgo = new Date(currentDate.getTime());
+ sevenDaysAgo.setDate(currentDate.getDate() - 7);
+
+ const thirtyDaysAgo = new Date(currentDate.getTime());
+ thirtyDaysAgo.setDate(currentDate.getDate() - 30);
+
+ // 根据日期范围进行分组
+ const groupedData = {
+ threeDays: [],
+ sevenDays: [],
+ thirtyDays: [],
+ all: [],
+ };
+
+ // 分类数据
+ list.forEach(item => {
+ const itemDate = parseDate(item.time);
+
+ if (itemDate >= threeDaysAgo) {
+ groupedData.threeDays.push(item);
+ }
+
+ if (itemDate >= sevenDaysAgo) {
+ groupedData.sevenDays.push(item);
+ }
+
+ if (itemDate >= thirtyDaysAgo) {
+ groupedData.thirtyDays.push(item);
+ }
+
+ groupedData.all.push(item);
+ });
+
+ list.forEach((item) => {
+ const itemDate = parseDate(item.time);
+
+ if (itemDate >= threeDaysAgo) {
+ groupedData.threeDays.push(item);
+ }
+
+ if (itemDate >= sevenDaysAgo) {
+ groupedData.sevenDays.push(item);
+ }
+
+ if (itemDate >= thirtyDaysAgo) {
+ groupedData.thirtyDays.push(item);
+ }
+
+ groupedData.all.push(item);
+ });
+
+ console.log('三日内:', groupedData.threeDays);
+ console.log('七日内:', groupedData.sevenDays);
+ console.log('30日内:', groupedData.thirtyDays);
+ console.log('全部:', groupedData.all);
+ this.setData({
+ list1:groupedData.threeDays,
+ list2:groupedData.sevenDays,
+ list3:groupedData.thirtyDays,
+ })
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ this.getlist()
+ wx.setNavigationBarTitle({
+ title: 'AI面试结果',
+ success: (res) => { },
+ fail: (res) => { },
+ complete: (res) => { },
+ })
+ this.datalist()
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.json b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.json
new file mode 100644
index 0000000..2e0f4fd
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "l-search-bar":"/miniprogram_npm/lin-ui/search-bar/index"
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.wxml b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.wxml
new file mode 100644
index 0000000..9264f9a
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.wxml
@@ -0,0 +1,68 @@
+
+
+
+
+ "3月25日,创业者之路招聘面试已结束。"
+ "4月5日,专业峰会与高端面试已成功结束。"
+ "6月10日,技术研发之星选拔面试已圆满结束。"
+ "7月20日,行业精英选拔挑战已圆满落幕。"
+ "8月30日,潜力发掘与职业道路面试已圆满结束。"
+ "9月8日,多元文化团队加入面试已顺利结束。"
+ "9月15日,高端人才聚焦面试已结束。"
+ "10月25日,金秋社会招聘面试已结束。"
+ "11月5日,未来领袖选拔面试已结束。"
+ "11月20日,未来领袖发现之旅面试已胜利落幕。"
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.flag}}
+
+
+
+
+
+
+
+
+
+
+ {{item.flag}}
+
+
+
+
+
+
+
+
+
+
+ {{item.flag}}
+
+
+
+
+
+
+
+
+
+
+ {{item.flag}}
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.wxss b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.wxss
new file mode 100644
index 0000000..04620f3
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult/AIresult.wxss
@@ -0,0 +1 @@
+/* pages/AIresult/AIresult.wxss */
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.js b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.js
new file mode 100644
index 0000000..c265faf
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.js
@@ -0,0 +1,213 @@
+// pages/AIresult/AIresultp1.js
+import {
+ myhttp
+} from "../../../../utils/service";
+const url=require('../../../../utils/url')
+let Charts = require('../../../../utils/wxcharts.js');
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+
+ data: {
+ checked: true,
+ ueerid:"",
+ companycode:"",
+ checkedAll:"",
+ showflag:false,
+ person: [
+ { name: "赵锐", s1: "4.3", s2: "4.1", s3: "4.0", s4: "93.2%", value: "P1", checked: false },
+ { name: "李思思", s1: "4.5", s2: "4.2", s3: "4.1", s4: "95.0%", value: "P2", checked: false },
+ { name: "王芳", s1: "4.0", s2: "3.8", s3: "3.9", s4: "90.5%", value: "P3", checked: false },
+ { name: "张良", s1: "4.2", s2: "4.0", s3: "4.2", s4: "92.8%", value: "P1", checked: false },
+ { name: "刘娟", s1: "4.1", s2: "4.2", s3: "3.8", s4: "91.5%", value: "P2", checked: false },
+ { name: "陈浩", s1: "4.4", s2: "4.0", s3: "4.3", s4: "94.2%", value: "P3", checked: false },
+ { name: "张伟", s1: "4.2", s2: "4.3", s3: "4.1", s4: "92.5%", value: "P1", checked: false },
+ { name: "王刚", s1: "4.1", s2: "4.2", s3: "4.0", s4: "91.8%", value: "P2", checked: false },
+ { name: "杨梅", s1: "4.3", s2: "3.9", s3: "4.2", s4: "93.0%", value: "P3", checked: false },
+ { name: "刘辉", s1: "4.0", s2: "4.1", s3: "3.8", s4: "90.7%", value: "P1", checked: false },
+ { name: "周洁", s1: "4.2", s2: "4.0", s3: "4.1", s4: "92.3%", value: "P2", checked: false },
+ ],
+
+ },
+ getlist(){
+ myhttp({
+ url:url.backUrl + "/interview/getInterviewRecordList?postId="+12+"&jobId="+19+"&encoding="+"333"+"&status="+2,
+ data: {
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log(res,"666")
+ })
+ },
+ sort(){
+ const newlist= this.data.person.sort((a, b) => {
+ // 将匹配率从高到低排序
+ const matchRateA = parseFloat(a.s4); // 转换为数字进行比较
+ const matchRateB = parseFloat(b.s4);
+ return matchRateB - matchRateA;
+ });
+ this.setData({
+ person:newlist
+ })
+ },
+ agree(){
+ this.setData({
+ showflag: true,
+ });
+
+ // 延时清空提示
+ setTimeout(() => {
+ this.setData({
+ showflag: false,
+ });
+ }, 2000); // 设置延时时间,这里是 2000 毫秒,即 2 秒
+ },
+ checkboxAll(e) {
+ if (e.detail.value.length === 1) {
+ // 全选状态
+ const person = this.data.person;
+ for (let i = 0; i < person.length; i++) {
+ person[i].checked = true;
+ }
+ this.setData({
+ person
+ });
+ } else {
+ // 没有全选状态
+ const person = this.data.person;
+ for (let i = 0; i < person.length; i++) {
+ person[i].checked = false;
+ }
+ this.setData({
+ person
+ });
+ }
+},
+checkboxChange(e) {
+ console.log('checkbox发生change事件,携带value值为:', e.detail.value)
+ const items = this.data.person
+ const values = e.detail.value
+ for (let i = 0, lenI = items.length; i < lenI; ++i) {
+ items[i].checked = false
+ for (let j = 0, lenJ = values.length; j < lenJ; ++j) {
+ if (items[i].value === values[j]) {
+ items[i].checked = true
+ break
+ }
+ }
+ }
+ this.setData({
+ items
+ })
+ if (e.detail.value.length == 6) {
+ console.log(this.data.checkedAll);
+ this.setData({
+ checkedAll: true
+ })
+ }else{
+ this.setData({
+ checkedAll: ""
+ })
+ }
+},
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ this.sort()
+ this.getlist()
+ var Charts = require('../../../../utils/wxcharts.js');
+ let windowWidth = 320;
+ try {
+ let res = wx.getSystemInfoSync();
+ windowWidth = res.windowWidth;
+ } catch (e) {
+ // do something when get system info failed
+ }
+ new Charts({
+ canvasId: 'radarCanvas',
+ type: 'radar',
+ categories: ['执行力', '抗压力', '内驱力', '匹配率', '综合评分', '人数'],
+ series: [{
+ name: '平均',
+ data: [90, 110, 125, 95, 87, 122]
+ }],
+ width: windowWidth,
+ height: 150,
+ extra: {
+ radar: {
+ max: 150
+ }
+ }
+ });
+
+
+ this.setData({
+ companycode :wx.getStorageSync("companycode"),
+ userid:wx.getStorageSync("userid")
+ })
+ console.log(this.data.userid)
+ console.log(this.data.companycode)
+ wx.setNavigationBarTitle({
+ title: 'AI面试详情',
+ success: (res) => { },
+ fail: (res) => { },
+ complete: (res) => { },
+ })
+ },
+ onChange(event) {
+ this.setData({
+ checked: event.detail,
+ });
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.json b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.json
new file mode 100644
index 0000000..e9036e7
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "van-row": "/miniprogram_npm/@vant/weapp/row/index",
+ "van-col": "/miniprogram_npm/@vant/weapp/col/index"
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.wxml b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.wxml
new file mode 100644
index 0000000..d347fb4
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.wxml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 姓名
+ 执行力
+ 内驱力
+ 抗压力
+ 匹配率
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+ {{item.s1}}
+ {{item.s2}}
+ {{item.s3}}
+ {{item.s4}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+通过面试
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.wxss b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.wxss
new file mode 100644
index 0000000..87d09fe
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIresult/AIresult1/AIresultp1.wxss
@@ -0,0 +1,17 @@
+/* pages/AIresult/AIresultp1.wxss */
+.t0{
+ font-weight: bold;
+ font-size: 10px;
+}
+.t1{
+ margin-top: 10px;
+}
+.v1{
+ border-top: 1px solid #e0e0e0; /* 上边框线 */
+ border-bottom: 1px solid #e0e0e0; /* 下边框线 */
+ border-radius: 5px;
+ margin-top: 10px;
+}
+.canvas{
+ transform: translate(-15%, 0%);
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.js b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.js
new file mode 100644
index 0000000..53803f7
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.js
@@ -0,0 +1,122 @@
+// pages/AIsetting/AIsetting.js
+import {
+ myhttp
+} from "../../../../utils/service";
+const url = require("../../../../utils/url")
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ list: [
+ {
+ jobName:"JAVA"
+ }, {
+ jobName:"Python"
+ }
+ ]
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.setNavigationBarTitle({
+ title: 'AI面试设置',
+ success: (res) => { },
+ fail: (res) => { },
+ complete: (res) => { },
+ })
+ this.getJobList()
+ },
+
+ getJobList() {
+ myhttp({
+ url:url.backUrl+"/recruitment/get_jobList?encoding="+123,
+ data: {
+
+ },
+ method: "GET"
+ }).then((res) => {
+ console.log(res)
+ this.setData({
+ list : res.data
+ })
+ })
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+ switchToForm() {
+ wx.navigateTo({
+ url: '../addjob/addjob',
+ })
+ }, switchToForm1() {
+ wx.navigateTo({
+ url: '/subpackages1/pages/AIsetting/form1/form1',
+ })
+ },
+
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ },
+ switchtosetting(e) {
+ console.log(e)
+ var index = e.currentTarget.dataset.index
+ var id = this.data.list[index].id;
+ var jobName = this.data.list[index].jobName;
+ var detail = this.data.list[index].detail;
+ var jobTips = this.data.list[index].jobTips;
+ var number = this.data.list[index].number;
+ var salary = this.data.list[index].salary;
+ var address = this.data.list[index].address;
+ var status = this.data.list[index].status;
+ var jobType = this.data.list[index].jobType;
+ wx.navigateTo({
+ url: '/subpackages1/pages/AIsetting/addjob/addjob?id='+id+"&jobName="+jobName+"&detail="+detail+"&jobTips="+jobTips+"&number="+number+"&salary="+salary+"&address="+address+"&status="+status+"&jobType="+jobType,
+ })
+ },
+})
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.json b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.json
new file mode 100644
index 0000000..2e0f4fd
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "l-search-bar":"/miniprogram_npm/lin-ui/search-bar/index"
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.wxml b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.wxml
new file mode 100644
index 0000000..1e001ec
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ +新增岗位
+
+
+ +发布面试
+
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.wxss b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.wxss
new file mode 100644
index 0000000..6e23c0a
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/AIsetting/AIsetting.wxss
@@ -0,0 +1,10 @@
+/* pages/AIsetting/AIsetting.wxss */
+.v1{
+ margin-left: 10px;
+ margin-right: 10px;
+ margin-top: 0px;
+
+}
+.v2{
+margin: 20px;
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.js b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.js
new file mode 100644
index 0000000..52b0bdc
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.js
@@ -0,0 +1,119 @@
+// subpackages1/pages/AIsetting/addaihr/addaihr.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ job:{
+ option1zy:"0",
+ option2zy:"",
+ option1xl:"0",
+ option2xl:"",
+ option1zh:"0",
+ option2zh:"",
+ },
+ optionzy: [
+ { text: '行政专业面试题库1', value: 0 },
+ { text: '行政专业面试题库2', value: 1 },
+ { text: '行政专业面试题库3', value: 2 },
+ ],
+ optionxl: [
+ { text: '心理专业面试题库1', value: 0 },
+ { text: '心理专业面试题库2', value: 1 },
+ { text: '心理专业面试题库3', value: 2 },
+ ],
+ optionzh: [
+ { text: '综合专业面试题库1', value: 0 },
+ { text: '综合专业面试题库2', value: 1 },
+ { text: '综合专业面试题库3', value: 2 },
+ ],
+ },
+ onChange(e){
+ this.data.job.option1zy=e.detail.checked
+ console.log(this.data.job.option1zy)
+ },
+ Change(e){
+ this.data.job.option2zy=e.detail
+ console.log(this.data.job.option2zy)
+ },
+ onChange1(e){
+ this.data.job.option1xl=e.detail.checked
+ console.log(this.data.job.option1xl)
+ },
+ Change1(e){
+ this.data.job.option2xl=e.detail
+ console.log(this.data.job.option2xl)
+ },
+ onChange2(e){
+ this.data.job.option1zh=e.detail.checked
+ console.log(this.data.job.option1zh)
+ },
+ Change2(e){
+ this.data.job.option2zh=e.detail
+ console.log(this.data.job.option2zh)
+ },
+ submit(e){
+ console.log(e)
+ this.data.job.name1=e.detail.values.name1
+ console.log(this.data.job)
+ wx.navigateTo({
+ url: '/subpackages1/pages/AIsetting/AIsetting/AIsetting',
+ })
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.lin.initValidateForm(this)
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.json b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.wxml b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.wxml
new file mode 100644
index 0000000..5ce3a69
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.wxml
@@ -0,0 +1,99 @@
+
+
+ 修改并保存
+
+
+
+
+
+
+数字人面试官形象
+
+
+
+
+
+
+ 企业logo
+
+
+
+
+
+
+ 面试间背景
+
+
+
+
+
+
+
+
+ 修改并保存
+
+
+
+
+ 专业面试
+
+ 是否开启专业面试
+
+
+
+
+
+ 专业面试题库
+
+
+
+
+
+
+
+
+
+
+ 心理测试
+
+ 是否开启心理测试
+
+
+
+
+
+ 心理测试题库
+
+
+
+
+
+
+
+
+
+
+ 综合面试
+
+ 是否开启综合面试
+
+
+
+
+
+ 综合面试题库
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+ 重置
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.wxss b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.wxss
new file mode 100644
index 0000000..50bcabc
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addaihr/addaihr.wxss
@@ -0,0 +1,6 @@
+/* subpackages1/pages/AIsetting/addaihr/addaihr.wxss */
+.l-form-btn-class{
+ display: flex;
+ justify-content: space-around;
+ margin-top: 10rpx;
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.js b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.js
new file mode 100644
index 0000000..6e62996
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.js
@@ -0,0 +1,481 @@
+const url = require("../../../../utils/url")
+// subpackages1/pages/AIsetting/addjob/addjob.js
+const salaryRange = {
+ 最低薪资: ['1k', '2k', '3k', '4k', '5k', '6k', '7k', '8k', '9k', '10k', '11k', '12k', '13k', '14k', '15k', '16k'],
+ 最高薪资: ['1k', '2k', '3k', '4k', '5k', '6k', '7k', '8k', '9k', '10k', '11k', '12k', '13k', '14k', '15k', '16k', '17k', '18k', '19k', '20k', '21k', '22k', '23k', '24k', '25k', '26k', '27k', '28k', '29k',
+ '30k', '31k', '32k', '33k', '34k', '35k', '36k', '37k', '38k', '39k', '40k', '41k', '42k', '43k', '44k', '45k', '46k', '47k', '48k', '49k', '50k'
+ ],
+ 最低人数: ["10人", "12人", "16人", "40人"],
+ 最高人数: ["80人", "100人", "120人", "180人"],
+ 上班时间: ["6:00", "7:00", "8:00", "9:00"],
+ 下班时间: ["18:00", "19:00", "20:00", "21:00"],
+};
+import {
+ myhttp
+} from "../../../../utils/service";
+import { areaList } from '@vant/area-data';
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ areaList,
+ id: '',
+ job: {},
+ inputValue: "",
+ minSalary: "",
+ maxSalary: "",
+ minpeoplenum: '',
+ maxpeoplenum: '',
+ mintime: '',
+ maxtime: "",
+ tipshow:false,
+ popSalarySelect: false,
+ poppeoplenumSelect: false,
+ popaddressSelect: false,
+ tips:[],
+ userRules: [{
+ required: true
+ },
+ {
+ min: 2,
+ max: 5,
+ message: '长度需要在2-5个字符之间',
+ trigger: 'blur'
+ }
+ ],
+ introductionRules: [{
+ required: true
+ },
+ {
+ message: '请填写岗位介绍'
+ }
+ ],
+ addressRules: [{
+ required: true
+ },
+ {
+ message: '请填写地址'
+ }
+ ],
+ peoplenumRules: [{
+ required: true
+ },
+ {
+ message: '请填写公司人数'
+ }
+ ],
+ salaryRules: [{
+ required: true
+ },
+ {
+ message: '请填写薪资'
+ }
+ ],
+ timeRules: [{
+ required: true
+ },
+ {
+ message: '请填写上下班时间'
+ }
+ ],
+ degreeRules: [{
+ required: true
+ },
+ {
+ message: '请选择最低学历'
+ }
+ ],
+ typeRules: [{
+ required: true
+ },
+ {
+ message: '请填写招聘类型'
+ }
+ ],
+ tipsRules: [{
+ required: true
+ },
+ {
+ message: '请填写公司标签'
+ }
+ ],
+ salaryPicker: [{
+ values: salaryRange['最低薪资'],
+ className: 'column1',
+ },
+ {
+ values: salaryRange['最高薪资'],
+ className: 'column2',
+ },
+ ],
+ peoplenumPicker: [{
+ values: salaryRange['最低人数'],
+ className: 'column3',
+ },
+ {
+ values: salaryRange['最高人数'],
+ className: 'column4',
+ },
+ ],
+ timePicker: [{
+ values: salaryRange['上班时间'],
+ className: 'column5',
+ },
+ {
+ values: salaryRange['下班时间'],
+ className: 'column6',
+ },
+ ],
+ },
+ onInput(event) {
+ const { value } = event.detail;
+ this.setData({
+ inputValue: value,
+ });
+ },
+ showDeleteConfirm(e) {
+ const index = e.currentTarget.dataset.index;
+
+ // 弹出确认弹窗
+ wx.showModal({
+ title: '提示',
+ content: '确定要删除这个标签吗?',
+ success: (res) => {
+ if (res.confirm) {
+ // 用户点击确定,执行删除操作
+ this.deleteTag(index);
+ }
+ },
+ });
+ },
+ deleteTag(index) {
+ const tipsArray = this.data.tips;
+ tipsArray.splice(index, 1);
+
+ this.setData({
+ tips: tipsArray,
+ });
+
+ console.log("删除后的tips数组:", tipsArray);
+ },
+ deletetips() {
+ // 获取当前tips数组
+ const tipsArray = this.data.tips;
+
+ // 判断tipsArray是否为空
+ if (tipsArray.length > 0) {
+ // 删除数组中最后一个元素
+ tipsArray.pop();
+
+ // 更新tips数据
+ this.setData({
+ tips: tipsArray,
+ });
+
+ // 打印删除后的tips数组
+ console.log("删除后的tips数组:", tipsArray);
+ } else {
+ console.log("tips数组为空,无法删除。");
+ }
+ },
+ addtips() {
+ // 在这里使用 this.data.inputValue 获取输入框的值
+ const inputValue = this.data.inputValue;
+
+ // 处理获取到的值,可以将它传递到其他函数或进行其他操作
+ console.log("输入框的值:", inputValue);
+
+ // 关闭弹窗等其他逻辑
+ // ...
+
+ // 将输入框的值加入 tips 数组
+ const updatedTips = this.data.tips.concat(inputValue);
+
+ this.setData({
+ inputValue: "",
+ tipshow: false, // 关闭弹窗
+ tips: updatedTips,
+ });
+ },
+ onCancelpeoplenum(e) {
+ this.setData({
+ poppeoplenumSelect: false
+ })
+ },
+ onCanceltime(e) {
+ this.setData({
+ poptimeSelect: false
+ })
+ },
+ onCancelSalary(e) {
+ this.setData({
+ popSalarySelect: false
+ })
+ },
+ showtips(){
+ this.setData({
+ tipshow:true
+ })
+ },
+ onChangeSalary(e) {
+ const value = e.detail.value;
+ const minSalaryIndex = value[0];
+ const maxSalaryIndex = value[1];
+ var numericPart1 = minSalaryIndex.slice(0, -1); // 移除 "k" 后缀
+ var salaryNumber1 = parseFloat(numericPart1); // 将字符串转换为浮点数或整数
+ var numericPart2 = maxSalaryIndex.slice(0, -1); // 移除 "k" 后缀
+ var salaryNumber2 = parseFloat(numericPart2); // 将字符串转换为浮点数或整数
+ // 检查最低薪资是否大于最高薪资,如果是,则自动调整
+ if (salaryNumber1 >= salaryNumber2) {
+ this.setData({
+ 'salaryPicker[1].values': salaryRange['最高薪资'].slice(numericPart1),
+ });
+ }
+ },
+ // onChangepeoplenum(e) {
+ // const value = e.detail.value;
+ // const minSalaryIndex = value[0];
+ // const maxSalaryIndex = value[1];
+ // var numericPart1 = minSalaryIndex.slice(0, -1); // 移除 "k" 后缀
+ // var salaryNumber1 = parseFloat(numericPart1); // 将字符串转换为浮点数或整数
+ // var numericPart2 = maxSalaryIndex.slice(0, -1); // 移除 "k" 后缀
+ // var salaryNumber2 = parseFloat(numericPart2); // 将字符串转换为浮点数或整数
+ // // 检查最低薪资是否大于最高薪资,如果是,则自动调整
+ // if (salaryNumber1 >= salaryNumber2) {
+ // this.setData({
+ // 'salaryPicker[1].values': salaryRange['最高薪资'].slice(numericPart1),
+ // });
+ // }
+ // },
+ gotoSetPosition(e) {
+ this.setData({
+ popPositionSelect: true,
+ })
+ },
+ gotoSetpeoplenum(e) {
+ this.setData({
+ poppeoplenumSelect: true,
+ })
+ },
+ gotoSetposition() {
+ this.setData({
+ popaddressSelect: true,
+ })
+ },
+ cancelPos() {
+ this.setData({
+ popaddressSelect: false,
+ })
+ },
+ confirmPos(e) {
+ console.log(e.detail.values)
+ this.setData({
+ "job.address": e.detail.values[0].name+e.detail.values[1].name+e.detail.values[2].name,
+ popaddressSelect: false
+ })
+ },
+ gotoSettime(e) {
+ this.setData({
+ poptimeSelect: true,
+ })
+ },
+ onConfirmSalary(e) {
+ const {
+ picker,
+ value,
+ index
+ } = e.detail;
+ this.setData({
+ minSalary: value[0],
+ maxSalary: value[1]
+ })
+ this.setData({
+ 'job.salary': value[0] + "-" + value[1],
+ popSalarySelect: false,
+ isChangeSalary: true
+ })
+ },
+ onConfirmtime(e) {
+ const {
+ picker,
+ value,
+ index
+ } = e.detail;
+ this.setData({
+ mintime: value[0],
+ maxtime: value[1]
+ })
+ this.setData({
+ time: value[0] + "-" + value[1],
+ poptimeSelect: false,
+ })
+ },
+ onConfirmpeoplenum(e) {
+ const {
+ picker,
+ value,
+ index
+ } = e.detail;
+ this.setData({
+ minpeoplenum: value[0],
+ maxpeoplenum: value[1]
+ })
+ this.setData({
+ 'job.peoplenum': value[0] + "-" + value[1],
+ poppeoplenumSelect: false,
+ })
+ },
+ gotoSetSalary(e) {
+ this.setData({
+ popSalarySelect: true
+ })
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.lin.initValidateForm(this)
+ if(options.address){
+ const address = options.address || ''
+ const addressParts = address.match(/^(.*?[省市自治区特别行政区])(.*?[市州])(.*?[区县])(.*)$/);
+if (addressParts && addressParts.length === 5) {
+ const province = addressParts[1];
+ const city = addressParts[2];
+ const district = addressParts[3];
+ const detailAddress = addressParts[4];
+ console.log("省:", province);
+ console.log("市:", city);
+ console.log("区:", district);
+ console.log("详细地址:", detailAddress);
+ this.setData({
+ 'job.address': province+city+district,
+ 'job.addressdetail':detailAddress,
+ })
+} else {
+ console.log("地址格式不正确");
+}
+ const detail = options.detail || ''
+ const jobName = options.jobName || ''
+ const jobTips = options.jobTips || ''
+ const number = options.number || ''
+ const salary = options.salary || ''
+ const id = options.id || ''
+ const status= options.status || ''
+ const jobType= options.jobType || ''
+ this.setData({
+ id: id,
+ "job.name": jobName,
+ 'job.introduction': detail,
+ 'job.peoplenum': number,
+ 'job.salary': salary,
+ tips:jobTips.slice(1, -1).split(', ')
+ ,
+ 'job.type':jobType,
+ 'job.degree':status,
+ })}
+ }
+ ,
+ submit(e) {
+ console.log(e)
+ if (e.detail.isValidate) {
+ myhttp({
+ url: url.backUrl+"/recruitment/add_job",
+ data: {
+ address: e.detail.values.address.split(/省|市|区/).filter(part => part !== ""),
+ encoding: wx.getStorageSync("companycode"),
+ addressDetail: e.detail.values.addressdetail,
+ jobType: parseInt(e.detail.values.type),
+ userId: wx.getStorageSync("userid"),
+ details: e.detail.values.introduction,
+ jobName: e.detail.values.name,
+ startTime: this.data.mintime,
+ endTime: this.data.maxtime,
+ minSalary: this.data.minSalary,
+ maxSalary: this.data.maxSalary,
+ minNumber: this.data.minpeoplenum,
+ maxNumber: this.data.maxpeoplenum,
+ jobTips:this.data.tips,
+ requirement: parseInt(e.detail.values.degree),
+ },
+ method: "POST"
+ }).then((res) => {
+ console.log(res)
+ wx.navigateTo({
+ url: '/subpackages1/pages/AIsetting/addaihr/addaihr',
+ })
+ })
+ }
+
+ /*
+ detail 返回三个参数
+ 1、values: 各表单项的value值
+ 2、errors: 各表单项验证后的返回的错误信息数组
+ 3、isValidate: 表单是否验证通过的boolean值
+ 具体格式示例:
+ detail = {
+ values: {
+ studentName: "",
+ studentAge: "",
+ studentAddress: ""
+ },
+ errors: {
+ studentName: [],
+ studentAge: [],
+ studentAddress: []
+ },
+ isValidate: true
+ }
+ */
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.json b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.json
new file mode 100644
index 0000000..b1cb3d1
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.wxml b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.wxml
new file mode 100644
index 0000000..6267739
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.wxml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 小学/初中
+ 高中
+ 本科
+ 研究生及以上
+
+
+
+
+
+
+
+
+
+ 行政
+ 财务
+ 技术
+ 销售
+
+
+
+
+
+ 岗位标签
+ +添加标签
+ ×删除标签
+
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+ 提交
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.wxss b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.wxss
new file mode 100644
index 0000000..eca31e2
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/addjob/addjob.wxss
@@ -0,0 +1,25 @@
+/* subpackages1/pages/AIsetting/addjob/addjob.wxss */
+.l-form-btn-class{
+ display: flex;
+ justify-content: space-around;
+ margin-top: 10rpx;
+}
+.bordered-view {
+ border: 1px solid #ccc; /* 设置边框样式,可以根据需要调整颜色和宽度 */
+ padding: 10px; /* 设置内边距,可根据需要调整 */
+ border-radius: 10px;
+ width: 700rpx;
+ height: 200rpx;
+ margin: 10rpx;
+}
+.tag-container {
+ display: flex;
+ flex-wrap: wrap;
+ margin-left: 20rpx;
+ margin-top: 10rpx;
+ max-width: 700rpx; /* 调整为你希望的容器最大宽度 */
+}
+
+l-tag {
+ margin: 10rpx;
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form/form.js b/HR/AIproject/subpackages1/pages/AIsetting/form/form.js
new file mode 100644
index 0000000..472b543
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form/form.js
@@ -0,0 +1,146 @@
+// subpackages1/pages/AIsetting/form/form.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ job:{
+ name:"",
+ introduction:"",
+ adress:"",
+ degree:"",
+ type:"",
+ name1:"",
+ option1zy:"0",
+ option2zy:"",
+ option1xl:"0",
+ option2xl:"",
+ option1zh:"0",
+ option2zh:"",
+ },
+ optionzy: [
+ { text: '行政专业面试题库1', value: 0 },
+ { text: '行政专业面试题库2', value: 1 },
+ { text: '行政专业面试题库3', value: 2 },
+ ],
+ optionxl: [
+ { text: '心理专业面试题库1', value: 0 },
+ { text: '心理专业面试题库2', value: 1 },
+ { text: '心理专业面试题库3', value: 2 },
+ ],
+ optionzh: [
+ { text: '综合专业面试题库1', value: 0 },
+ { text: '综合专业面试题库2', value: 1 },
+ { text: '综合专业面试题库3', value: 2 },
+ ],
+ },
+ onChange(e){
+ this.data.job.option1zy=e.detail.checked
+ console.log(this.data.job.option1zy)
+ },
+ Change(e){
+ this.data.job.option2zy=e.detail
+ console.log(this.data.job.option2zy)
+ },
+ onChange1(e){
+ this.data.job.option1xl=e.detail.checked
+ console.log(this.data.job.option1xl)
+ },
+ Change1(e){
+ this.data.job.option2xl=e.detail
+ console.log(this.data.job.option2xl)
+ },
+ onChange2(e){
+ this.data.job.option1zh=e.detail.checked
+ console.log(this.data.job.option1zh)
+ },
+ Change2(e){
+ this.data.job.option2zh=e.detail
+ console.log(this.data.job.option2zh)
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.lin.initValidateForm(this)
+ },
+ submit(e){
+ console.log(e)
+ this.data.job.name=e.detail.values.name
+ this.data.job.name1=e.detail.values.name1
+ this.data.job.adress=e.detail.values.adress
+ this.data.job.degree=e.detail.values.degree
+ this.data.job.introduction=e.detail.values.introduction
+ this.data.job.type=e.detail.values.type
+ console.log(this.data.job)
+ /*
+ detail 返回三个参数
+ 1、values: 各表单项的value值
+ 2、errors: 各表单项验证后的返回的错误信息数组
+ 3、isValidate: 表单是否验证通过的boolean值
+ 具体格式示例:
+ detail = {
+ values: {
+ studentName: "",
+ studentAge: "",
+ studentAddress: ""
+ },
+ errors: {
+ studentName: [],
+ studentAge: [],
+ studentAddress: []
+ },
+ isValidate: true
+ }
+ */
+ },
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form/form.json b/HR/AIproject/subpackages1/pages/AIsetting/form/form.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form/form.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form/form.wxml b/HR/AIproject/subpackages1/pages/AIsetting/form/form.wxml
new file mode 100644
index 0000000..ca54436
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form/form.wxml
@@ -0,0 +1,144 @@
+
+
+ 修改并保存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 小学/初中
+ 高中
+ 本科
+ 研究生及以上
+
+
+
+
+
+
+
+
+
+ 行政
+ 财务
+ 技术
+ 销售
+
+
+
+
+
+
+
+ 修改并保存
+
+
+
+
+
+数字人面试官形象
+
+
+
+
+
+
+ 企业logo
+
+
+
+
+
+
+ 面试间背景
+
+
+
+
+
+
+
+
+ 修改并保存
+
+
+
+
+ 专业面试
+
+ 是否开启专业面试
+
+
+
+
+
+ 专业面试题库
+
+
+
+
+
+
+
+
+
+
+ 心理测试
+
+ 是否开启心理测试
+
+
+
+
+
+ 心理测试题库
+
+
+
+
+
+
+
+
+
+
+ 综合面试
+
+ 是否开启综合面试
+
+
+
+
+
+ 综合面试题库
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+ 重置
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form/form.wxss b/HR/AIproject/subpackages1/pages/AIsetting/form/form.wxss
new file mode 100644
index 0000000..bb88a97
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form/form.wxss
@@ -0,0 +1,6 @@
+/* subpackages1/pages/AIsetting/form/form.wxss */
+.l-form-btn-class{
+ display: flex;
+ justify-content: space-around;
+ margin-top: 10rpx;
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.js b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.js
new file mode 100644
index 0000000..df634f8
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.js
@@ -0,0 +1,162 @@
+// subpackages1/pages/AIsetting/form1/form1.js
+import {
+ myhttp
+} from "../../../../utils/service";
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ interview:{
+ name:"",
+ time:"",
+ introduction:"",
+ },
+ checkedAll: "",
+ items: [{
+ value: 'J1',
+ name: 'JAVA前端开发工程师'
+ },
+ {
+ value: 'J2',
+ name: 'JAVA后端开发工程师',
+ },
+ {
+ value: 'p1',
+ name: 'python后端开发工程师'
+ }
+ ]
+ },
+ checkboxChange(e) {
+ console.log('checkbox发生change事件,携带value值为:', e.detail.value)
+ const items = this.data.items
+ const values = e.detail.value
+ for (let i = 0, lenI = items.length; i < lenI; ++i) {
+ items[i].checked = false
+ for (let j = 0, lenJ = values.length; j < lenJ; ++j) {
+ if (items[i].value === values[j]) {
+ items[i].checked = true
+ break
+ }
+ }
+ }
+ this.setData({
+ items
+ })
+ if (e.detail.value.length == 6) {
+ console.log(this.data.checkedAll);
+ this.setData({
+ checkedAll: true
+ })
+ }else{
+ this.setData({
+ checkedAll: ""
+ })
+ }
+},
+submit(event){
+ const {detail} = event;
+ /*
+ detail 返回三个参数
+ 1、values: 各表单项的value值
+ 2、errors: 各表单项验证后的返回的错误信息数组
+ 3、isValidate: 表单是否验证通过的boolean值
+ 具体格式示例:
+ detail = {
+ values: {
+ studentName: "",
+ studentAge: "",
+ studentAddress: ""
+ },
+ errors: {
+ studentName: [],
+ studentAge: [],
+ studentAddress: []
+ },
+ isValidate: true
+ }
+ */
+},
+checkboxAll(e) {
+ if (e.detail.value.length == 1) {
+ // 全选状态
+ const items = this.data.items
+ for (let i = 0; i < items.length; i++) {
+ items[i].checked = true
+ }
+ this.setData({
+ items
+ })
+ } else {
+ // 没有全选状态
+ const items = this.data.items
+ for (let i = 0; i < items.length; i++) {
+ items[i].checked = false
+ }
+ this.setData({
+ items
+ })
+ }
+},
+ onChangeTap(e) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ wx.lin.initValidateForm(this)
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.json b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.wxml b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.wxml
new file mode 100644
index 0000000..15520a7
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.wxml
@@ -0,0 +1,39 @@
+
+
+ 修改并发布
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 全选
+
+
+
+
+
+
+
+
+
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.wxss b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.wxss
new file mode 100644
index 0000000..6daa704
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/form1/form1.wxss
@@ -0,0 +1,27 @@
+/* subpackages1/pages/AIsetting/form1/form1.wxss */
+/* 未选中的背景样式 */
+checkbox .wx-checkbox-input{
+ width: 28rpx;
+ height: 28rpx;
+ border-color: #999;
+}
+
+/* 选中后的背景样式 */
+checkbox .wx-checkbox-input.wx-checkbox-input-checked,.checked{
+ background-color: #fff;
+ border-color: #ff3333;
+}
+
+/* 选中后的勾子样式 */
+checkbox .wx-checkbox-input.wx-checkbox-input-checked::before{
+ width: 40rpx;
+ height: 40rpx;
+ line-height: 40rpx;
+ border-radius: 50%;
+ text-align: center;
+ font-size:32rpx;
+ color: #ff3333;
+ background: transparent;
+ transform:translate(-50%, -50%) scale(1);
+ -webkit-transform:translate(-50%, -50%) scale(1);
+}
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/work/work.js b/HR/AIproject/subpackages1/pages/AIsetting/work/work.js
new file mode 100644
index 0000000..5896de6
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/work/work.js
@@ -0,0 +1,109 @@
+// pages/AIsetting/work.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ value: '',
+ option1: [
+ { text: '江苏省', value: 0 },
+ { text: '安徽省', value: 1 },
+ { text: '河南省', value: 2 },
+ ],
+ option2: [
+ { text: '扬州市', value: 0 },
+ { text: '苏州市', value: 1 },
+ { text: '南京市', value: 2 },
+ ],
+ option3: [
+ { text: '江都区', value: 0 },
+ { text: '邗江区', value: 1 },
+ { text: '广陵区', value: 2 },
+ ],
+ optionzy: [
+ { text: '行政专业面试题库1', value: 0 },
+ { text: '行政专业面试题库2', value: 1 },
+ { text: '行政专业面试题库3', value: 2 },
+ ],
+ value1: 0,
+ value2: 0,
+ value3: 0,
+ valuezy:0,
+ checked: true,
+ },
+ onChange({ detail }) {
+ // 需要手动对 checked 状态进行更新
+ this.setData({ checked: detail });
+ },
+ onConfirm() {
+ this.selectComponent('#item').toggle();
+ },
+
+ onSwitch1Change({ detail }) {
+ this.setData({ switch1: detail });
+ },
+
+ onSwitch2Change({ detail }) {
+ this.setData({ switch2: detail });
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onChange(event) {
+ // event.detail 为当前输入的值
+ console.log(event.detail);
+ },
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/work/work.json b/HR/AIproject/subpackages1/pages/AIsetting/work/work.json
new file mode 100644
index 0000000..cb023b6
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/work/work.json
@@ -0,0 +1,5 @@
+{
+ "usingComponents": {
+ "l-image-picker": "/miniprogram_npm/lin-ui/image-picker/index"
+ }
+}
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/work/work.wxml b/HR/AIproject/subpackages1/pages/AIsetting/work/work.wxml
new file mode 100644
index 0000000..54f23fb
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/work/work.wxml
@@ -0,0 +1,133 @@
+
+
+
+ 修改并保存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改并保存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改并保存
+
+
+
+
+ 专业面试
+
+ 是否开启专业面试
+
+
+
+
+
+ 专业面试题库
+
+
+
+
+
+
+
+
+
+
+ 心理测试
+
+ 是否开启心理测试
+
+
+
+
+
+ 心理测试题库
+
+
+
+
+
+
+
+
+
+
+ 综合面试
+
+ 是否开启综合面试
+
+
+
+
+
+ 综合面试题库
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HR/AIproject/subpackages1/pages/AIsetting/work/work.wxss b/HR/AIproject/subpackages1/pages/AIsetting/work/work.wxss
new file mode 100644
index 0000000..c6376b0
--- /dev/null
+++ b/HR/AIproject/subpackages1/pages/AIsetting/work/work.wxss
@@ -0,0 +1,4 @@
+/* pages/AIsetting/work.wxss */
+.v1{
+ height: 200px;
+}
\ No newline at end of file
diff --git a/HR/AIproject/utils/service.js b/HR/AIproject/utils/service.js
new file mode 100644
index 0000000..e78f186
--- /dev/null
+++ b/HR/AIproject/utils/service.js
@@ -0,0 +1,48 @@
+let ajaxTimes = 0; // 同时发送异步代码的次数
+
+export const myhttp = (parmas) => {
+ // 当有地方调用请求方法的时候,就增加全局变量,用于判断有几个请求了
+ ajaxTimes++;
+
+ wx.showLoading({ // 显示加载中loading效果
+ title: "加载中",
+ mask: true //开启蒙版遮罩
+ });
+
+ // 返回一个promise对象
+ return new Promise((resolve, reject) => {
+ wx.request({
+ url: parmas.url,
+ method: parmas.method,
+ data: parmas.data,
+ header: parmas.method === 'GET' ? {
+ 'content-type': 'application/x-www-form-urlencoded',
+ "authorization": wx.getStorageSync('token') || ""
+ } : {
+ 'content-type': 'application/json',
+ "authorization": wx.getStorageSync('token') || ""
+ },
+ success: (res) => {
+ resolve(res.data)
+ },
+ fail: (err) => {
+ reject(err)
+ },
+
+ // 不管请求成功还是失败,都会触发
+ complete: () => {
+ /**
+ * !loading效果同时被多个请求触发是可以显示一个的,但是关闭loading一旦被第一个请求完成后关闭,后面的请求触发的loading效果就没了
+ * !所以,需要通过全局设置一个变量,来监听同时触发了几个请求,当最后一个请求完成后,再关闭loading
+ * ?每次结束请求后,就减少全局变量,当为0时,就表示这是最后一个请求了
+ */
+ ajaxTimes--;
+ // 此时就可以关闭loading效果了
+ if (ajaxTimes === 0) {
+ // 关闭正在等待loading效果
+ wx.hideLoading();
+ }
+ }
+ })
+ })
+}
diff --git a/HR/AIproject/utils/url.js b/HR/AIproject/utils/url.js
new file mode 100644
index 0000000..42cebe9
--- /dev/null
+++ b/HR/AIproject/utils/url.js
@@ -0,0 +1,6 @@
+
+const backUrl = 'http://aihr.ysmental.com:5380';
+const AIchatUrl = 'http://aihr.ysmental.com:7480';
+const AIvideoUrl = 'https://www.example.com/page3';
+
+module.exports = { backUrl, AIchatUrl, AIvideoUrl };
diff --git a/HR/AIproject/utils/util.js b/HR/AIproject/utils/util.js
new file mode 100644
index 0000000..764bc2c
--- /dev/null
+++ b/HR/AIproject/utils/util.js
@@ -0,0 +1,19 @@
+const formatTime = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+
+ return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
+}
+
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : `0${n}`
+}
+
+module.exports = {
+ formatTime
+}
diff --git a/HR/AIproject/utils/wxcharts.js b/HR/AIproject/utils/wxcharts.js
new file mode 100644
index 0000000..e2fb996
--- /dev/null
+++ b/HR/AIproject/utils/wxcharts.js
@@ -0,0 +1,2044 @@
+/*
+ * charts for WeChat small app v1.0
+ *
+ * https://github.com/xiaolin3303/wx-charts
+ * 2016-11-28
+ *
+ * Designed and built with all the love of Web
+ */
+
+'use strict';
+
+var config = {
+ yAxisWidth: 15,
+ yAxisSplit: 5,
+ xAxisHeight: 15,
+ xAxisLineHeight: 15,
+ legendHeight: 15,
+ yAxisTitleWidth: 15,
+ padding: 12,
+ columePadding: 3,
+ fontSize: 10,
+ dataPointShape: ['diamond', 'circle', 'triangle', 'rect'],
+ colors: ['#7cb5ec', '#f7a35c', '#434348', '#90ed7d', '#f15c80', '#8085e9'],
+ pieChartLinePadding: 25,
+ pieChartTextPadding: 15,
+ xAxisTextPadding: 3,
+ titleColor: '#333333',
+ titleFontSize: 20,
+ subtitleColor: '#999999',
+ subtitleFontSize: 15,
+ toolTipPadding: 3,
+ toolTipBackground: '#000000',
+ toolTipOpacity: 0.7,
+ toolTipLineHeight: 14,
+ radarGridCount: 3,
+ radarLabelTextMargin: 15
+};
+
+// Object.assign polyfill
+// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
+function assign(target, varArgs) {
+ if (target == null) {
+ // TypeError if undefined or null
+ throw new TypeError('Cannot convert undefined or null to object');
+ }
+
+ var to = Object(target);
+
+ for (var index = 1; index < arguments.length; index++) {
+ var nextSource = arguments[index];
+
+ if (nextSource != null) {
+ // Skip over if undefined or null
+ for (var nextKey in nextSource) {
+ // Avoid bugs when hasOwnProperty is shadowed
+ if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ }
+ return to;
+}
+
+var util = {
+ toFixed: function toFixed(num, limit) {
+ limit = limit || 2;
+ if (this.isFloat(num)) {
+ num = num.toFixed(limit);
+ }
+ return num;
+ },
+ isFloat: function isFloat(num) {
+ return num % 1 !== 0;
+ },
+ approximatelyEqual: function approximatelyEqual(num1, num2) {
+ return Math.abs(num1 - num2) < 1e-10;
+ },
+ isSameSign: function isSameSign(num1, num2) {
+ return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2;
+ },
+ isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) {
+ return this.isSameSign(p1.x, p2.x);
+ },
+ isCollision: function isCollision(obj1, obj2) {
+ obj1.end = {};
+ obj1.end.x = obj1.start.x + obj1.width;
+ obj1.end.y = obj1.start.y - obj1.height;
+ obj2.end = {};
+ obj2.end.x = obj2.start.x + obj2.width;
+ obj2.end.y = obj2.start.y - obj2.height;
+ var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y;
+
+ return !flag;
+ }
+};
+
+function findRange(num, type, limit) {
+ if (isNaN(num)) {
+ throw new Error('[wxCharts] unvalid series data!');
+ }
+ limit = limit || 10;
+ type = type ? type : 'upper';
+ var multiple = 1;
+ while (limit < 1) {
+ limit *= 10;
+ multiple *= 10;
+ }
+ if (type === 'upper') {
+ num = Math.ceil(num * multiple);
+ } else {
+ num = Math.floor(num * multiple);
+ }
+ while (num % limit !== 0) {
+ if (type === 'upper') {
+ num++;
+ } else {
+ num--;
+ }
+ }
+
+ return num / multiple;
+}
+
+function calValidDistance(distance, chartData, config, opts) {
+
+ var dataChartAreaWidth = opts.width - config.padding - chartData.xAxisPoints[0];
+ var dataChartWidth = chartData.eachSpacing * opts.categories.length;
+ var validDistance = distance;
+ if (distance >= 0) {
+ validDistance = 0;
+ } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) {
+ validDistance = dataChartAreaWidth - dataChartWidth;
+ }
+ return validDistance;
+}
+
+function isInAngleRange(angle, startAngle, endAngle) {
+ function adjust(angle) {
+ while (angle < 0) {
+ angle += 2 * Math.PI;
+ }
+ while (angle > 2 * Math.PI) {
+ angle -= 2 * Math.PI;
+ }
+
+ return angle;
+ }
+
+ angle = adjust(angle);
+ startAngle = adjust(startAngle);
+ endAngle = adjust(endAngle);
+ if (startAngle > endAngle) {
+ endAngle += 2 * Math.PI;
+ if (angle < startAngle) {
+ angle += 2 * Math.PI;
+ }
+ }
+
+ return angle >= startAngle && angle <= endAngle;
+}
+
+function calRotateTranslate(x, y, h) {
+ var xv = x;
+ var yv = h - y;
+
+ var transX = xv + (h - yv - xv) / Math.sqrt(2);
+ transX *= -1;
+
+ var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2);
+
+ return {
+ transX: transX,
+ transY: transY
+ };
+}
+
+function createCurveControlPoints(points, i) {
+
+ function isNotMiddlePoint(points, i) {
+ if (points[i - 1] && points[i + 1]) {
+ return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y, points[i + 1].y);
+ } else {
+ return false;
+ }
+ }
+
+ var a = 0.2;
+ var b = 0.2;
+ var pAx = null;
+ var pAy = null;
+ var pBx = null;
+ var pBy = null;
+ if (i < 1) {
+ pAx = points[0].x + (points[1].x - points[0].x) * a;
+ pAy = points[0].y + (points[1].y - points[0].y) * a;
+ } else {
+ pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a;
+ pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a;
+ }
+
+ if (i > points.length - 3) {
+ var last = points.length - 1;
+ pBx = points[last].x - (points[last].x - points[last - 1].x) * b;
+ pBy = points[last].y - (points[last].y - points[last - 1].y) * b;
+ } else {
+ pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b;
+ pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b;
+ }
+
+ // fix issue https://github.com/xiaolin3303/wx-charts/issues/79
+ if (isNotMiddlePoint(points, i + 1)) {
+ pBy = points[i + 1].y;
+ }
+ if (isNotMiddlePoint(points, i)) {
+ pAy = points[i].y;
+ }
+
+ return {
+ ctrA: { x: pAx, y: pAy },
+ ctrB: { x: pBx, y: pBy }
+ };
+}
+
+function convertCoordinateOrigin(x, y, center) {
+ return {
+ x: center.x + x,
+ y: center.y - y
+ };
+}
+
+function avoidCollision(obj, target) {
+ if (target) {
+ // is collision test
+ while (util.isCollision(obj, target)) {
+ if (obj.start.x > 0) {
+ obj.start.y--;
+ } else if (obj.start.x < 0) {
+ obj.start.y++;
+ } else {
+ if (obj.start.y > 0) {
+ obj.start.y++;
+ } else {
+ obj.start.y--;
+ }
+ }
+ }
+ }
+ return obj;
+}
+
+function fillSeriesColor(series, config) {
+ var index = 0;
+ return series.map(function (item) {
+ if (!item.color) {
+ item.color = config.colors[index];
+ index = (index + 1) % config.colors.length;
+ }
+ return item;
+ });
+}
+
+function getDataRange(minData, maxData) {
+ var limit = 0;
+ var range = maxData - minData;
+ if (range >= 10000) {
+ limit = 1000;
+ } else if (range >= 1000) {
+ limit = 100;
+ } else if (range >= 100) {
+ limit = 10;
+ } else if (range >= 10) {
+ limit = 5;
+ } else if (range >= 1) {
+ limit = 1;
+ } else if (range >= 0.1) {
+ limit = 0.1;
+ } else {
+ limit = 0.01;
+ }
+ return {
+ minRange: findRange(minData, 'lower', limit),
+ maxRange: findRange(maxData, 'upper', limit)
+ };
+}
+
+function measureText(text) {
+ var fontSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
+
+ // wx canvas 未实现measureText方法, 此处自行实现
+ text = String(text);
+ var text = text.split('');
+ var width = 0;
+ text.forEach(function (item) {
+ if (/[a-zA-Z]/.test(item)) {
+ width += 7;
+ } else if (/[0-9]/.test(item)) {
+ width += 5.5;
+ } else if (/\./.test(item)) {
+ width += 2.7;
+ } else if (/-/.test(item)) {
+ width += 3.25;
+ } else if (/[\u4e00-\u9fa5]/.test(item)) {
+ width += 10;
+ } else if (/\(|\)/.test(item)) {
+ width += 3.73;
+ } else if (/\s/.test(item)) {
+ width += 2.5;
+ } else if (/%/.test(item)) {
+ width += 8;
+ } else {
+ width += 10;
+ }
+ });
+ return width * fontSize / 10;
+}
+
+function dataCombine(series) {
+ return series.reduce(function (a, b) {
+ return (a.data ? a.data : a).concat(b.data);
+ }, []);
+}
+
+function getSeriesDataItem(series, index) {
+ var data = [];
+ series.forEach(function (item) {
+ if (item.data[index] !== null && typeof item.data[index] !== 'undefined') {
+ var seriesItem = {};
+ seriesItem.color = item.color;
+ seriesItem.name = item.name;
+ seriesItem.data = item.format ? item.format(item.data[index]) : item.data[index];
+ data.push(seriesItem);
+ }
+ });
+
+ return data;
+}
+
+
+
+function getMaxTextListLength(list) {
+ var lengthList = list.map(function (item) {
+ return measureText(item);
+ });
+ return Math.max.apply(null, lengthList);
+}
+
+function getRadarCoordinateSeries(length) {
+ var eachAngle = 2 * Math.PI / length;
+ var CoordinateSeries = [];
+ for (var i = 0; i < length; i++) {
+ CoordinateSeries.push(eachAngle * i);
+ }
+
+ return CoordinateSeries.map(function (item) {
+ return -1 * item + Math.PI / 2;
+ });
+}
+
+function getToolTipData(seriesData, calPoints, index, categories) {
+ var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
+
+ var textList = seriesData.map(function (item) {
+ return {
+ text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data,
+ color: item.color
+ };
+ });
+ var validCalPoints = [];
+ var offset = {
+ x: 0,
+ y: 0
+ };
+ calPoints.forEach(function (points) {
+ if (typeof points[index] !== 'undefined' && points[index] !== null) {
+ validCalPoints.push(points[index]);
+ }
+ });
+ validCalPoints.forEach(function (item) {
+ offset.x = Math.round(item.x);
+ offset.y += item.y;
+ });
+
+ offset.y /= validCalPoints.length;
+ return { textList: textList, offset: offset };
+}
+
+function findCurrentIndex(currentPoints, xAxisPoints, opts, config) {
+ var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
+
+ var currentIndex = -1;
+ if (isInExactChartArea(currentPoints, opts, config)) {
+ xAxisPoints.forEach(function (item, index) {
+ if (currentPoints.x + offset > item) {
+ currentIndex = index;
+ }
+ });
+ }
+
+ return currentIndex;
+}
+
+function isInExactChartArea(currentPoints, opts, config) {
+ return currentPoints.x < opts.width - config.padding && currentPoints.x > config.padding + config.yAxisWidth + config.yAxisTitleWidth && currentPoints.y > config.padding && currentPoints.y < opts.height - config.legendHeight - config.xAxisHeight - config.padding;
+}
+
+function findRadarChartCurrentIndex(currentPoints, radarData, count) {
+ var eachAngleArea = 2 * Math.PI / count;
+ var currentIndex = -1;
+ if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) {
+ var fixAngle = function fixAngle(angle) {
+ if (angle < 0) {
+ angle += 2 * Math.PI;
+ }
+ if (angle > 2 * Math.PI) {
+ angle -= 2 * Math.PI;
+ }
+ return angle;
+ };
+
+ var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x);
+ angle = -1 * angle;
+ if (angle < 0) {
+ angle += 2 * Math.PI;
+ }
+
+ var angleList = radarData.angleList.map(function (item) {
+ item = fixAngle(-1 * item);
+
+ return item;
+ });
+
+ angleList.forEach(function (item, index) {
+ var rangeStart = fixAngle(item - eachAngleArea / 2);
+ var rangeEnd = fixAngle(item + eachAngleArea / 2);
+ if (rangeEnd < rangeStart) {
+ rangeEnd += 2 * Math.PI;
+ }
+ if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <= rangeEnd) {
+ currentIndex = index;
+ }
+ });
+ }
+
+ return currentIndex;
+}
+
+function findPieChartCurrentIndex(currentPoints, pieData) {
+ var currentIndex = -1;
+ if (isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
+ var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
+ angle = -angle;
+ for (var i = 0, len = pieData.series.length; i < len; i++) {
+ var item = pieData.series[i];
+ if (isInAngleRange(angle, item._start_, item._start_ + item._proportion_ * 2 * Math.PI)) {
+ currentIndex = i;
+ break;
+ }
+ }
+ }
+
+ return currentIndex;
+}
+
+function isInExactPieChartArea(currentPoints, center, radius) {
+ return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2);
+}
+
+function splitPoints(points) {
+ var newPoints = [];
+ var items = [];
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ items.push(item);
+ } else {
+ if (items.length) {
+ newPoints.push(items);
+ }
+ items = [];
+ }
+ });
+ if (items.length) {
+ newPoints.push(items);
+ }
+
+ return newPoints;
+}
+
+function calLegendData(series, opts, config) {
+ if (opts.legend === false) {
+ return {
+ legendList: [],
+ legendHeight: 0
+ };
+ }
+ var padding = 5;
+ var marginTop = 8;
+ var shapeWidth = 15;
+ var legendList = [];
+ var widthCount = 0;
+ var currentRow = [];
+ series.forEach(function (item) {
+ var itemWidth = 3 * padding + shapeWidth + measureText(item.name || 'undefined');
+ if (widthCount + itemWidth > opts.width) {
+ legendList.push(currentRow);
+ widthCount = itemWidth;
+ currentRow = [item];
+ } else {
+ widthCount += itemWidth;
+ currentRow.push(item);
+ }
+ });
+ if (currentRow.length) {
+ legendList.push(currentRow);
+ }
+
+ return {
+ legendList: legendList,
+ legendHeight: legendList.length * (config.fontSize + marginTop) + padding
+ };
+}
+
+function calCategoriesData(categories, opts, config) {
+ var result = {
+ angle: 0,
+ xAxisHeight: config.xAxisHeight
+ };
+
+ var _getXAxisPoints = getXAxisPoints(categories, opts, config),
+ eachSpacing = _getXAxisPoints.eachSpacing;
+
+ // get max length of categories text
+
+
+ var categoriesTextLenth = categories.map(function (item) {
+ return measureText(item);
+ });
+
+ var maxTextLength = Math.max.apply(this, categoriesTextLenth);
+
+ if (maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
+ result.angle = 45 * Math.PI / 180;
+ result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
+ }
+
+ return result;
+}
+
+function getRadarDataPoints(angleList, center, radius, series, opts) {
+ var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
+
+ var radarOption = opts.extra.radar || {};
+ radarOption.max = radarOption.max || 0;
+ var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series)));
+
+ var data = [];
+ series.forEach(function (each) {
+ var listItem = {};
+ listItem.color = each.color;
+ listItem.data = [];
+ each.data.forEach(function (item, index) {
+ var tmp = {};
+ tmp.angle = angleList[index];
+
+ tmp.proportion = item / maxData;
+ tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * process * Math.sin(tmp.angle), center);
+ listItem.data.push(tmp);
+ });
+
+ data.push(listItem);
+ });
+
+ return data;
+}
+
+function getPieDataPoints(series) {
+ var process = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
+
+ var count = 0;
+ var _start_ = 0;
+ series.forEach(function (item) {
+ item.data = item.data === null ? 0 : item.data;
+ count += item.data;
+ });
+ series.forEach(function (item) {
+ item.data = item.data === null ? 0 : item.data;
+ item._proportion_ = item.data / count * process;
+ });
+ series.forEach(function (item) {
+ item._start_ = _start_;
+ _start_ += 2 * item._proportion_ * Math.PI;
+ });
+
+ return series;
+}
+
+function getPieTextMaxLength(series) {
+ series = getPieDataPoints(series);
+ var maxLength = 0;
+ series.forEach(function (item) {
+ var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
+ maxLength = Math.max(maxLength, measureText(text));
+ });
+
+ return maxLength;
+}
+
+function fixColumeData(points, eachSpacing, columnLen, index, config, opts) {
+ return points.map(function (item) {
+ if (item === null) {
+ return null;
+ }
+ item.width = (eachSpacing - 2 * config.columePadding) / columnLen;
+
+ if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
+ // customer column width
+ item.width = Math.min(item.width, +opts.extra.column.width);
+ } else {
+ // default width should less tran 25px
+ // don't ask me why, I don't know
+ item.width = Math.min(item.width, 25);
+ }
+ item.x += (index + 0.5 - columnLen / 2) * item.width;
+
+ return item;
+ });
+}
+
+function getXAxisPoints(categories, opts, config) {
+ var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth;
+ var spacingValid = opts.width - 2 * config.padding - yAxisTotalWidth;
+ var dataCount = opts.enableScroll ? Math.min(5, categories.length) : categories.length;
+ var eachSpacing = spacingValid / dataCount;
+
+ var xAxisPoints = [];
+ var startX = config.padding + yAxisTotalWidth;
+ var endX = opts.width - config.padding;
+ categories.forEach(function (item, index) {
+ xAxisPoints.push(startX + index * eachSpacing);
+ });
+ if (opts.enableScroll === true) {
+ xAxisPoints.push(startX + categories.length * eachSpacing);
+ } else {
+ xAxisPoints.push(endX);
+ }
+
+ return { xAxisPoints: xAxisPoints, startX: startX, endX: endX, eachSpacing: eachSpacing };
+}
+
+function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
+ var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
+
+ var points = [];
+ var validHeight = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;
+ data.forEach(function (item, index) {
+ if (item === null) {
+ points.push(null);
+ } else {
+ var point = {};
+ point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
+ var height = validHeight * (item - minRange) / (maxRange - minRange);
+ height *= process;
+ point.y = opts.height - config.xAxisHeight - config.legendHeight - Math.round(height) - config.padding;
+ points.push(point);
+ }
+ });
+
+ return points;
+}
+
+function getYAxisTextList(series, opts, config) {
+ var data = dataCombine(series);
+ // remove null from data
+ data = data.filter(function (item) {
+ return item !== null;
+ });
+ var minData = Math.min.apply(this, data);
+ var maxData = Math.max.apply(this, data);
+ if (typeof opts.yAxis.min === 'number') {
+ minData = Math.min(opts.yAxis.min, minData);
+ }
+ if (typeof opts.yAxis.max === 'number') {
+ maxData = Math.max(opts.yAxis.max, maxData);
+ }
+
+ // fix issue https://github.com/xiaolin3303/wx-charts/issues/9
+ if (minData === maxData) {
+ var rangeSpan = maxData || 1;
+ minData -= rangeSpan;
+ maxData += rangeSpan;
+ }
+
+ var dataRange = getDataRange(minData, maxData);
+ var minRange = dataRange.minRange;
+ var maxRange = dataRange.maxRange;
+
+ var range = [];
+ var eachRange = (maxRange - minRange) / config.yAxisSplit;
+
+ for (var i = 0; i <= config.yAxisSplit; i++) {
+ range.push(minRange + eachRange * i);
+ }
+ return range.reverse();
+}
+
+function calYAxisData(series, opts, config) {
+
+ var ranges = getYAxisTextList(series, opts, config);
+ var yAxisWidth = config.yAxisWidth;
+ var rangesFormat = ranges.map(function (item) {
+ item = util.toFixed(item, 2);
+ item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item;
+ yAxisWidth = Math.max(yAxisWidth, measureText(item) + 5);
+ return item;
+ });
+ if (opts.yAxis.disabled === true) {
+ yAxisWidth = 0;
+ }
+
+ return { rangesFormat: rangesFormat, ranges: ranges, yAxisWidth: yAxisWidth };
+}
+
+function drawPointShape(points, color, shape, context) {
+ context.beginPath();
+ context.setStrokeStyle("#ffffff");
+ context.setLineWidth(1);
+ context.setFillStyle(color);
+
+ if (shape === 'diamond') {
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ context.moveTo(item.x, item.y - 4.5);
+ context.lineTo(item.x - 4.5, item.y);
+ context.lineTo(item.x, item.y + 4.5);
+ context.lineTo(item.x + 4.5, item.y);
+ context.lineTo(item.x, item.y - 4.5);
+ }
+ });
+ } else if (shape === 'circle') {
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ context.moveTo(item.x + 3.5, item.y);
+ context.arc(item.x, item.y, 4, 0, 2 * Math.PI, false);
+ }
+ });
+ } else if (shape === 'rect') {
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ context.moveTo(item.x - 3.5, item.y - 3.5);
+ context.rect(item.x - 3.5, item.y - 3.5, 7, 7);
+ }
+ });
+ } else if (shape === 'triangle') {
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ context.moveTo(item.x, item.y - 4.5);
+ context.lineTo(item.x - 4.5, item.y + 4.5);
+ context.lineTo(item.x + 4.5, item.y + 4.5);
+ context.lineTo(item.x, item.y - 4.5);
+ }
+ });
+ }
+ context.closePath();
+ context.fill();
+ context.stroke();
+}
+
+function drawRingTitle(opts, config, context) {
+ var titlefontSize = opts.title.fontSize || config.titleFontSize;
+ var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize;
+ var title = opts.title.name || '';
+ var subtitle = opts.subtitle.name || '';
+ var titleFontColor = opts.title.color || config.titleColor;
+ var subtitleFontColor = opts.subtitle.color || config.subtitleColor;
+ var titleHeight = title ? titlefontSize : 0;
+ var subtitleHeight = subtitle ? subtitlefontSize : 0;
+ var margin = 5;
+ if (subtitle) {
+ var textWidth = measureText(subtitle, subtitlefontSize);
+ var startX = (opts.width - textWidth) / 2 + (opts.subtitle.offsetX || 0);
+ var startY = (opts.height - config.legendHeight + subtitlefontSize) / 2;
+ if (title) {
+ startY -= (titleHeight + margin) / 2;
+ }
+ context.beginPath();
+ context.setFontSize(subtitlefontSize);
+ context.setFillStyle(subtitleFontColor);
+ context.fillText(subtitle, startX, startY);
+ context.stroke();
+ context.closePath();
+ }
+ if (title) {
+ var _textWidth = measureText(title, titlefontSize);
+ var _startX = (opts.width - _textWidth) / 2 + (opts.title.offsetX || 0);
+ var _startY = (opts.height - config.legendHeight + titlefontSize) / 2;
+ if (subtitle) {
+ _startY += (subtitleHeight + margin) / 2;
+ }
+ context.beginPath();
+ context.setFontSize(titlefontSize);
+ context.setFillStyle(titleFontColor);
+ context.fillText(title, _startX, _startY);
+ context.stroke();
+ context.closePath();
+ }
+}
+
+function drawPointText(points, series, config, context) {
+ // 绘制数据文案
+ var data = series.data;
+
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle('#666666');
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ var formatVal = series.format ? series.format(data[index]) : data[index];
+ context.fillText(formatVal, item.x - measureText(formatVal) / 2, item.y - 2);
+ }
+ });
+ context.closePath();
+ context.stroke();
+}
+
+function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) {
+ var radarOption = opts.extra.radar || {};
+ radius += config.radarLabelTextMargin;
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(radarOption.labelColor || '#666666');
+ angleList.forEach(function (angle, index) {
+ var pos = {
+ x: radius * Math.cos(angle),
+ y: radius * Math.sin(angle)
+ };
+ var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition);
+ var startX = posRelativeCanvas.x;
+ var startY = posRelativeCanvas.y;
+ if (util.approximatelyEqual(pos.x, 0)) {
+ startX -= measureText(opts.categories[index] || '') / 2;
+ } else if (pos.x < 0) {
+ startX -= measureText(opts.categories[index] || '');
+ }
+ context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2);
+ });
+ context.stroke();
+ context.closePath();
+}
+
+function drawPieText(series, opts, config, context, radius, center) {
+ var lineRadius = radius + config.pieChartLinePadding;
+ var textObjectCollection = [];
+ var lastTextObject = null;
+
+ var seriesConvert = series.map(function (item) {
+ var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2);
+ var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
+ var color = item.color;
+ return { arc: arc, text: text, color: color };
+ });
+ seriesConvert.forEach(function (item) {
+ // line end
+ var orginX1 = Math.cos(item.arc) * lineRadius;
+ var orginY1 = Math.sin(item.arc) * lineRadius;
+
+ // line start
+ var orginX2 = Math.cos(item.arc) * radius;
+ var orginY2 = Math.sin(item.arc) * radius;
+
+ // text start
+ var orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding;
+ var orginY3 = orginY1;
+
+ var textWidth = measureText(item.text);
+ var startY = orginY3;
+
+ if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, { x: orginX3 })) {
+ if (orginX3 > 0) {
+ startY = Math.min(orginY3, lastTextObject.start.y);
+ } else if (orginX1 < 0) {
+ startY = Math.max(orginY3, lastTextObject.start.y);
+ } else {
+ if (orginY3 > 0) {
+ startY = Math.max(orginY3, lastTextObject.start.y);
+ } else {
+ startY = Math.min(orginY3, lastTextObject.start.y);
+ }
+ }
+ }
+
+ if (orginX3 < 0) {
+ orginX3 -= textWidth;
+ }
+
+ var textObject = {
+ lineStart: {
+ x: orginX2,
+ y: orginY2
+ },
+ lineEnd: {
+ x: orginX1,
+ y: orginY1
+ },
+ start: {
+ x: orginX3,
+ y: startY
+ },
+ width: textWidth,
+ height: config.fontSize,
+ text: item.text,
+ color: item.color
+ };
+
+ lastTextObject = avoidCollision(textObject, lastTextObject);
+ textObjectCollection.push(lastTextObject);
+ });
+
+ textObjectCollection.forEach(function (item) {
+ var lineStartPoistion = convertCoordinateOrigin(item.lineStart.x, item.lineStart.y, center);
+ var lineEndPoistion = convertCoordinateOrigin(item.lineEnd.x, item.lineEnd.y, center);
+ var textPosition = convertCoordinateOrigin(item.start.x, item.start.y, center);
+ context.setLineWidth(1);
+ context.setFontSize(config.fontSize);
+ context.beginPath();
+ context.setStrokeStyle(item.color);
+ context.setFillStyle(item.color);
+ context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
+ var curveStartX = item.start.x < 0 ? textPosition.x + item.width : textPosition.x;
+ var textStartX = item.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5;
+ context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y);
+ context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
+ context.stroke();
+ context.closePath();
+ context.beginPath();
+ context.moveTo(textPosition.x + item.width, textPosition.y);
+ context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI);
+ context.closePath();
+ context.fill();
+ context.beginPath();
+ context.setFillStyle('#666666');
+ context.fillText(item.text, textStartX, textPosition.y + 3);
+ context.closePath();
+ context.stroke();
+
+ context.closePath();
+ });
+}
+
+function drawToolTipSplitLine(offsetX, opts, config, context) {
+ var startY = config.padding;
+ var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;
+ context.beginPath();
+ context.setStrokeStyle('#cccccc');
+ context.setLineWidth(1);
+ context.moveTo(offsetX, startY);
+ context.lineTo(offsetX, endY);
+ context.stroke();
+ context.closePath();
+}
+
+function drawToolTip(textList, offset, opts, config, context) {
+ var legendWidth = 4;
+ var legendMarginRight = 5;
+ var arrowWidth = 8;
+ var isOverRightBorder = false;
+ offset = assign({
+ x: 0,
+ y: 0
+ }, offset);
+ offset.y -= 8;
+ var textWidth = textList.map(function (item) {
+ return measureText(item.text);
+ });
+
+ var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth);
+ var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight;
+
+ // if beyond the right border
+ if (offset.x - Math.abs(opts._scrollDistance_) + arrowWidth + toolTipWidth > opts.width) {
+ isOverRightBorder = true;
+ }
+
+ // draw background rect
+ context.beginPath();
+ context.setFillStyle(opts.tooltip.option.background || config.toolTipBackground);
+ context.setGlobalAlpha(config.toolTipOpacity);
+ if (isOverRightBorder) {
+ context.moveTo(offset.x, offset.y + 10);
+ context.lineTo(offset.x - arrowWidth, offset.y + 10 - 5);
+ context.lineTo(offset.x - arrowWidth, offset.y + 10 + 5);
+ context.moveTo(offset.x, offset.y + 10);
+ context.fillRect(offset.x - toolTipWidth - arrowWidth, offset.y, toolTipWidth, toolTipHeight);
+ } else {
+ context.moveTo(offset.x, offset.y + 10);
+ context.lineTo(offset.x + arrowWidth, offset.y + 10 - 5);
+ context.lineTo(offset.x + arrowWidth, offset.y + 10 + 5);
+ context.moveTo(offset.x, offset.y + 10);
+ context.fillRect(offset.x + arrowWidth, offset.y, toolTipWidth, toolTipHeight);
+ }
+
+ context.closePath();
+ context.fill();
+ context.setGlobalAlpha(1);
+
+ // draw legend
+ textList.forEach(function (item, index) {
+ context.beginPath();
+ context.setFillStyle(item.color);
+ var startX = offset.x + arrowWidth + 2 * config.toolTipPadding;
+ var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + config.toolTipPadding;
+ if (isOverRightBorder) {
+ startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding;
+ }
+ context.fillRect(startX, startY, legendWidth, config.fontSize);
+ context.closePath();
+ });
+
+ // draw text list
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle('#ffffff');
+ textList.forEach(function (item, index) {
+ var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight;
+ if (isOverRightBorder) {
+ startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight;
+ }
+ var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + config.toolTipPadding;
+ context.fillText(item.text, startX, startY + config.fontSize);
+ });
+ context.stroke();
+ context.closePath();
+}
+
+function drawYAxisTitle(title, opts, config, context) {
+ var startX = config.xAxisHeight + (opts.height - config.xAxisHeight - measureText(title)) / 2;
+ context.save();
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(opts.yAxis.titleFontColor || '#333333');
+ context.translate(0, opts.height);
+ context.rotate(-90 * Math.PI / 180);
+ context.fillText(title, startX, config.padding + 0.5 * config.fontSize);
+ context.stroke();
+ context.closePath();
+ context.restore();
+}
+
+function drawColumnDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+
+ var _calYAxisData = calYAxisData(series, opts, config),
+ ranges = _calYAxisData.ranges;
+
+ var _getXAxisPoints = getXAxisPoints(opts.categories, opts, config),
+ xAxisPoints = _getXAxisPoints.xAxisPoints,
+ eachSpacing = _getXAxisPoints.eachSpacing;
+
+ var minRange = ranges.pop();
+ var maxRange = ranges.shift();
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ series.forEach(function (eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
+
+ // 绘制柱状数据图
+ context.beginPath();
+ context.setFillStyle(eachSeries.color);
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ var startX = item.x - item.width / 2 + 1;
+ var height = opts.height - item.y - config.padding - config.xAxisHeight - config.legendHeight;
+ context.moveTo(startX, item.y);
+ context.rect(startX, item.y, item.width - 2, height);
+ }
+ });
+ context.closePath();
+ context.fill();
+ });
+ series.forEach(function (eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
+ if (opts.dataLabel !== false && process === 1) {
+ drawPointText(points, eachSeries, config, context);
+ }
+ });
+ context.restore();
+ return {
+ xAxisPoints: xAxisPoints,
+ eachSpacing: eachSpacing
+ };
+}
+
+function drawAreaDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+
+ var _calYAxisData2 = calYAxisData(series, opts, config),
+ ranges = _calYAxisData2.ranges;
+
+ var _getXAxisPoints2 = getXAxisPoints(opts.categories, opts, config),
+ xAxisPoints = _getXAxisPoints2.xAxisPoints,
+ eachSpacing = _getXAxisPoints2.eachSpacing;
+
+ var minRange = ranges.pop();
+ var maxRange = ranges.shift();
+ var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;
+ var calPoints = [];
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
+ drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);
+ }
+
+ series.forEach(function (eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ calPoints.push(points);
+
+ var splitPointList = splitPoints(points);
+
+ splitPointList.forEach(function (points) {
+ // 绘制区域数据
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setFillStyle(eachSeries.color);
+ context.setGlobalAlpha(0.6);
+ context.setLineWidth(2);
+ if (points.length > 1) {
+ var firstPoint = points[0];
+ var lastPoint = points[points.length - 1];
+
+ context.moveTo(firstPoint.x, firstPoint.y);
+ if (opts.extra.lineStyle === 'curve') {
+ points.forEach(function (item, index) {
+ if (index > 0) {
+ var ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
+ }
+ });
+ } else {
+ points.forEach(function (item, index) {
+ if (index > 0) {
+ context.lineTo(item.x, item.y);
+ }
+ });
+ }
+
+ context.lineTo(lastPoint.x, endY);
+ context.lineTo(firstPoint.x, endY);
+ context.lineTo(firstPoint.x, firstPoint.y);
+ } else {
+ var item = points[0];
+ context.moveTo(item.x - eachSpacing / 2, item.y);
+ context.lineTo(item.x + eachSpacing / 2, item.y);
+ context.lineTo(item.x + eachSpacing / 2, endY);
+ context.lineTo(item.x - eachSpacing / 2, endY);
+ context.moveTo(item.x - eachSpacing / 2, item.y);
+ }
+ context.closePath();
+ context.fill();
+ context.setGlobalAlpha(1);
+ });
+
+ if (opts.dataPointShape !== false) {
+ var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];
+ drawPointShape(points, eachSeries.color, shape, context);
+ }
+ });
+ if (opts.dataLabel !== false && process === 1) {
+ series.forEach(function (eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ drawPointText(points, eachSeries, config, context);
+ });
+ }
+
+ context.restore();
+
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing
+ };
+}
+
+function drawLineDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+
+ var _calYAxisData3 = calYAxisData(series, opts, config),
+ ranges = _calYAxisData3.ranges;
+
+ var _getXAxisPoints3 = getXAxisPoints(opts.categories, opts, config),
+ xAxisPoints = _getXAxisPoints3.xAxisPoints,
+ eachSpacing = _getXAxisPoints3.eachSpacing;
+
+ var minRange = ranges.pop();
+ var maxRange = ranges.shift();
+ var calPoints = [];
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
+ drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);
+ }
+
+ series.forEach(function (eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ calPoints.push(points);
+ var splitPointList = splitPoints(points);
+
+ splitPointList.forEach(function (points, index) {
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineWidth(2);
+ if (points.length === 1) {
+ context.moveTo(points[0].x, points[0].y);
+ context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
+ } else {
+ context.moveTo(points[0].x, points[0].y);
+ if (opts.extra.lineStyle === 'curve') {
+ points.forEach(function (item, index) {
+ if (index > 0) {
+ var ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
+ }
+ });
+ } else {
+ points.forEach(function (item, index) {
+ if (index > 0) {
+ context.lineTo(item.x, item.y);
+ }
+ });
+ }
+ context.moveTo(points[0].x, points[0].y);
+ }
+ context.closePath();
+ context.stroke();
+ });
+
+ if (opts.dataPointShape !== false) {
+ var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];
+ drawPointShape(points, eachSeries.color, shape, context);
+ }
+ });
+ if (opts.dataLabel !== false && process === 1) {
+ series.forEach(function (eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ drawPointText(points, eachSeries, config, context);
+ });
+ }
+
+ context.restore();
+
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing
+ };
+}
+
+function drawToolTipBridge(opts, config, context, process) {
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+ if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
+ drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context);
+ }
+ context.restore();
+}
+
+function drawXAxis(categories, opts, config, context) {
+ var _getXAxisPoints4 = getXAxisPoints(categories, opts, config),
+ xAxisPoints = _getXAxisPoints4.xAxisPoints,
+ startX = _getXAxisPoints4.startX,
+ endX = _getXAxisPoints4.endX,
+ eachSpacing = _getXAxisPoints4.eachSpacing;
+
+ var startY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;
+ var endY = startY + config.xAxisLineHeight;
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ context.beginPath();
+ context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
+
+ if (opts.xAxis.disableGrid !== true) {
+ if (opts.xAxis.type === 'calibration') {
+ xAxisPoints.forEach(function (item, index) {
+ if (index > 0) {
+ context.moveTo(item - eachSpacing / 2, startY);
+ context.lineTo(item - eachSpacing / 2, startY + 4);
+ }
+ });
+ } else {
+ xAxisPoints.forEach(function (item, index) {
+ context.moveTo(item, startY);
+ context.lineTo(item, endY);
+ });
+ }
+ }
+ context.closePath();
+ context.stroke();
+
+ // 对X轴列表做抽稀处理
+ var validWidth = opts.width - 2 * config.padding - config.yAxisWidth - config.yAxisTitleWidth;
+ var maxXAxisListLength = Math.min(categories.length, Math.ceil(validWidth / config.fontSize / 1.5));
+ var ratio = Math.ceil(categories.length / maxXAxisListLength);
+
+ categories = categories.map(function (item, index) {
+ return index % ratio !== 0 ? '' : item;
+ });
+
+ if (config._xAxisTextAngle_ === 0) {
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(opts.xAxis.fontColor || '#666666');
+ categories.forEach(function (item, index) {
+ var offset = eachSpacing / 2 - measureText(item) / 2;
+ context.fillText(item, xAxisPoints[index] + offset, startY + config.fontSize + 5);
+ });
+ context.closePath();
+ context.stroke();
+ } else {
+ categories.forEach(function (item, index) {
+ context.save();
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(opts.xAxis.fontColor || '#666666');
+ var textWidth = measureText(item);
+ var offset = eachSpacing / 2 - textWidth;
+
+ var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + config.fontSize / 2 + 5, opts.height),
+ transX = _calRotateTranslate.transX,
+ transY = _calRotateTranslate.transY;
+
+ context.rotate(-1 * config._xAxisTextAngle_);
+ context.translate(transX, transY);
+ context.fillText(item, xAxisPoints[index] + offset, startY + config.fontSize + 5);
+ context.closePath();
+ context.stroke();
+ context.restore();
+ });
+ }
+
+ context.restore();
+}
+
+function drawYAxisGrid(opts, config, context) {
+ var spacingValid = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;
+ var eachSpacing = Math.floor(spacingValid / config.yAxisSplit);
+ var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth;
+ var startX = config.padding + yAxisTotalWidth;
+ var endX = opts.width - config.padding;
+
+ var points = [];
+ for (var i = 0; i < config.yAxisSplit; i++) {
+ points.push(config.padding + eachSpacing * i);
+ }
+ points.push(config.padding + eachSpacing * config.yAxisSplit + 2);
+
+ context.beginPath();
+ context.setStrokeStyle(opts.yAxis.gridColor || "#cccccc");
+ context.setLineWidth(1);
+ points.forEach(function (item, index) {
+ context.moveTo(startX, item);
+ context.lineTo(endX, item);
+ });
+ context.closePath();
+ context.stroke();
+}
+
+function drawYAxis(series, opts, config, context) {
+ if (opts.yAxis.disabled === true) {
+ return;
+ }
+
+ var _calYAxisData4 = calYAxisData(series, opts, config),
+ rangesFormat = _calYAxisData4.rangesFormat;
+
+ var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth;
+
+ var spacingValid = opts.height - 2 * config.padding - config.xAxisHeight - config.legendHeight;
+ var eachSpacing = Math.floor(spacingValid / config.yAxisSplit);
+ var startX = config.padding + yAxisTotalWidth;
+ var endX = opts.width - config.padding;
+ var endY = opts.height - config.padding - config.xAxisHeight - config.legendHeight;
+
+ // set YAxis background
+ context.setFillStyle(opts.background || '#ffffff');
+ if (opts._scrollDistance_ < 0) {
+ context.fillRect(0, 0, startX, endY + config.xAxisHeight + 5);
+ }
+ context.fillRect(endX, 0, opts.width, endY + config.xAxisHeight + 5);
+
+ var points = [];
+ for (var i = 0; i <= config.yAxisSplit; i++) {
+ points.push(config.padding + eachSpacing * i);
+ }
+
+ context.stroke();
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(opts.yAxis.fontColor || '#666666');
+ rangesFormat.forEach(function (item, index) {
+ var pos = points[index] ? points[index] : endY;
+ context.fillText(item, config.padding + config.yAxisTitleWidth, pos + config.fontSize / 2);
+ });
+ context.closePath();
+ context.stroke();
+
+ if (opts.yAxis.title) {
+ drawYAxisTitle(opts.yAxis.title, opts, config, context);
+ }
+}
+
+function drawLegend(series, opts, config, context) {
+ if (!opts.legend) {
+ return;
+ }
+ // each legend shape width 15px
+ // the spacing between shape and text in each legend is the `padding`
+ // each legend spacing is the `padding`
+ // legend margin top `config.padding`
+
+ var _calLegendData = calLegendData(series, opts, config),
+ legendList = _calLegendData.legendList;
+
+ var padding = 5;
+ var marginTop = 8;
+ var shapeWidth = 15;
+ legendList.forEach(function (itemList, listIndex) {
+ var width = 0;
+ itemList.forEach(function (item) {
+ item.name = item.name || 'undefined';
+ width += 3 * padding + measureText(item.name) + shapeWidth;
+ });
+ var startX = (opts.width - width) / 2 + padding;
+ var startY = opts.height - config.padding - config.legendHeight + listIndex * (config.fontSize + marginTop) + padding + marginTop;
+
+ context.setFontSize(config.fontSize);
+ itemList.forEach(function (item) {
+ switch (opts.type) {
+ case 'line':
+ context.beginPath();
+ context.setLineWidth(1);
+ context.setStrokeStyle(item.color);
+ context.moveTo(startX - 2, startY + 5);
+ context.lineTo(startX + 17, startY + 5);
+ context.stroke();
+ context.closePath();
+ context.beginPath();
+ context.setLineWidth(1);
+ context.setStrokeStyle('#ffffff');
+ context.setFillStyle(item.color);
+ context.moveTo(startX + 7.5, startY + 5);
+ context.arc(startX + 7.5, startY + 5, 4, 0, 2 * Math.PI);
+ context.fill();
+ context.stroke();
+ context.closePath();
+ break;
+ case 'pie':
+ case 'ring':
+ context.beginPath();
+ context.setFillStyle(item.color);
+ context.moveTo(startX + 7.5, startY + 5);
+ context.arc(startX + 7.5, startY + 5, 7, 0, 2 * Math.PI);
+ context.closePath();
+ context.fill();
+ break;
+ default:
+ context.beginPath();
+ context.setFillStyle(item.color);
+ context.moveTo(startX, startY);
+ context.rect(startX, startY, 15, 10);
+ context.closePath();
+ context.fill();
+ }
+ startX += padding + shapeWidth;
+ context.beginPath();
+ context.setFillStyle(opts.extra.legendTextColor || '#333333');
+ context.fillText(item.name, startX, startY + 9);
+ context.closePath();
+ context.stroke();
+ startX += measureText(item.name) + 2 * padding;
+ });
+ });
+}
+function drawPieDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+
+ var pieOption = opts.extra.pie || {};
+ series = getPieDataPoints(series, process);
+ var centerPosition = {
+ x: opts.width / 2,
+ y: (opts.height - config.legendHeight) / 2
+ };
+ var radius = Math.min(centerPosition.x - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, centerPosition.y - config.pieChartLinePadding - config.pieChartTextPadding);
+ if (opts.dataLabel) {
+ radius -= 10;
+ } else {
+ radius -= 2 * config.padding;
+ }
+ series = series.map(function (eachSeries) {
+ eachSeries._start_ += (pieOption.offsetAngle || 0) * Math.PI / 180;
+ return eachSeries;
+ });
+ series.forEach(function (eachSeries) {
+ context.beginPath();
+ context.setLineWidth(2);
+ context.setStrokeStyle('#ffffff');
+ context.setFillStyle(eachSeries.color);
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.arc(centerPosition.x, centerPosition.y, radius, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);
+ context.closePath();
+ context.fill();
+ if (opts.disablePieStroke !== true) {
+ context.stroke();
+ }
+ });
+
+ if (opts.type === 'ring') {
+ var innerPieWidth = radius * 0.6;
+ if (typeof opts.extra.ringWidth === 'number' && opts.extra.ringWidth > 0) {
+ innerPieWidth = Math.max(0, radius - opts.extra.ringWidth);
+ }
+ context.beginPath();
+ context.setFillStyle(opts.background || '#ffffff');
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI);
+ context.closePath();
+ context.fill();
+ }
+
+ if (opts.dataLabel !== false && process === 1) {
+ // fix https://github.com/xiaolin3303/wx-charts/issues/132
+ var valid = false;
+ for (var i = 0, len = series.length; i < len; i++) {
+ if (series[i].data > 0) {
+ valid = true;
+ break;
+ }
+ }
+
+ if (valid) {
+ drawPieText(series, opts, config, context, radius, centerPosition);
+ }
+ }
+
+ if (process === 1 && opts.type === 'ring') {
+ drawRingTitle(opts, config, context);
+ }
+
+ return {
+ center: centerPosition,
+ radius: radius,
+ series: series
+ };
+}
+
+function drawRadarDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+
+ var radarOption = opts.extra.radar || {};
+ var coordinateAngle = getRadarCoordinateSeries(opts.categories.length);
+ var centerPosition = {
+ x: opts.width / 2,
+ y: (opts.height - config.legendHeight) / 2
+ };
+
+ var radius = Math.min(centerPosition.x - (getMaxTextListLength(opts.categories) + config.radarLabelTextMargin), centerPosition.y - config.radarLabelTextMargin);
+
+ radius -= config.padding;
+
+ // draw grid
+ context.beginPath();
+ context.setLineWidth(1);
+ context.setStrokeStyle(radarOption.gridColor || "#cccccc");
+ coordinateAngle.forEach(function (angle) {
+ var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition);
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.lineTo(pos.x, pos.y);
+ });
+ context.stroke();
+ context.closePath();
+
+ // draw split line grid
+
+ var _loop = function _loop(i) {
+ var startPos = {};
+ context.beginPath();
+ context.setLineWidth(1);
+ context.setStrokeStyle(radarOption.gridColor || "#cccccc");
+ coordinateAngle.forEach(function (angle, index) {
+ var pos = convertCoordinateOrigin(radius / config.radarGridCount * i * Math.cos(angle), radius / config.radarGridCount * i * Math.sin(angle), centerPosition);
+ if (index === 0) {
+ startPos = pos;
+ context.moveTo(pos.x, pos.y);
+ } else {
+ context.lineTo(pos.x, pos.y);
+ }
+ });
+ context.lineTo(startPos.x, startPos.y);
+ context.stroke();
+ context.closePath();
+ };
+
+ for (var i = 1; i <= config.radarGridCount; i++) {
+ _loop(i);
+ }
+
+ var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process);
+ radarDataPoints.forEach(function (eachSeries, seriesIndex) {
+ // 绘制区域数据
+ context.beginPath();
+ context.setFillStyle(eachSeries.color);
+ context.setGlobalAlpha(0.6);
+ eachSeries.data.forEach(function (item, index) {
+ if (index === 0) {
+ context.moveTo(item.position.x, item.position.y);
+ } else {
+ context.lineTo(item.position.x, item.position.y);
+ }
+ });
+ context.closePath();
+ context.fill();
+ context.setGlobalAlpha(1);
+
+ if (opts.dataPointShape !== false) {
+ var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];
+ var points = eachSeries.data.map(function (item) {
+ return item.position;
+ });
+ drawPointShape(points, eachSeries.color, shape, context);
+ }
+ });
+ // draw label text
+ drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context);
+
+ return {
+ center: centerPosition,
+ radius: radius,
+ angleList: coordinateAngle
+ };
+}
+
+function drawCanvas(opts, context) {
+ context.draw();
+}
+
+var Timing = {
+ easeIn: function easeIn(pos) {
+ return Math.pow(pos, 3);
+ },
+
+ easeOut: function easeOut(pos) {
+ return Math.pow(pos - 1, 3) + 1;
+ },
+
+ easeInOut: function easeInOut(pos) {
+ if ((pos /= 0.5) < 1) {
+ return 0.5 * Math.pow(pos, 3);
+ } else {
+ return 0.5 * (Math.pow(pos - 2, 3) + 2);
+ }
+ },
+
+ linear: function linear(pos) {
+ return pos;
+ }
+};
+
+function Animation(opts) {
+ this.isStop = false;
+ opts.duration = typeof opts.duration === 'undefined' ? 1000 : opts.duration;
+ opts.timing = opts.timing || 'linear';
+
+ var delay = 17;
+
+ var createAnimationFrame = function createAnimationFrame() {
+ if (typeof requestAnimationFrame !== 'undefined') {
+ return requestAnimationFrame;
+ } else if (typeof setTimeout !== 'undefined') {
+ return function (step, delay) {
+ setTimeout(function () {
+ var timeStamp = +new Date();
+ step(timeStamp);
+ }, delay);
+ };
+ } else {
+ return function (step) {
+ step(null);
+ };
+ }
+ };
+ var animationFrame = createAnimationFrame();
+ var startTimeStamp = null;
+ var _step = function step(timestamp) {
+ if (timestamp === null || this.isStop === true) {
+ opts.onProcess && opts.onProcess(1);
+ opts.onAnimationFinish && opts.onAnimationFinish();
+ return;
+ }
+ if (startTimeStamp === null) {
+ startTimeStamp = timestamp;
+ }
+ if (timestamp - startTimeStamp < opts.duration) {
+ var process = (timestamp - startTimeStamp) / opts.duration;
+ var timingFunction = Timing[opts.timing];
+ process = timingFunction(process);
+ opts.onProcess && opts.onProcess(process);
+ animationFrame(_step, delay);
+ } else {
+ opts.onProcess && opts.onProcess(1);
+ opts.onAnimationFinish && opts.onAnimationFinish();
+ }
+ };
+ _step = _step.bind(this);
+
+ animationFrame(_step, delay);
+}
+
+// stop animation immediately
+// and tigger onAnimationFinish
+Animation.prototype.stop = function () {
+ this.isStop = true;
+};
+
+function drawCharts(type, opts, config, context) {
+ var _this = this;
+
+ var series = opts.series;
+ var categories = opts.categories;
+ series = fillSeriesColor(series, config);
+
+ var _calLegendData = calLegendData(series, opts, config),
+ legendHeight = _calLegendData.legendHeight;
+
+ config.legendHeight = legendHeight;
+
+ var _calYAxisData = calYAxisData(series, opts, config),
+ yAxisWidth = _calYAxisData.yAxisWidth;
+
+ config.yAxisWidth = yAxisWidth;
+ if (categories && categories.length) {
+ var _calCategoriesData = calCategoriesData(categories, opts, config),
+ xAxisHeight = _calCategoriesData.xAxisHeight,
+ angle = _calCategoriesData.angle;
+
+ config.xAxisHeight = xAxisHeight;
+ config._xAxisTextAngle_ = angle;
+ }
+ if (type === 'pie' || type === 'ring') {
+ config._pieTextMaxLength_ = opts.dataLabel === false ? 0 : getPieTextMaxLength(series);
+ }
+
+ var duration = opts.animation ? 1000 : 0;
+ this.animationInstance && this.animationInstance.stop();
+ switch (type) {
+ case 'line':
+ this.animationInstance = new Animation({
+ timing: 'easeIn',
+ duration: duration,
+ onProcess: function onProcess(process) {
+ drawYAxisGrid(opts, config, context);
+
+ var _drawLineDataPoints = drawLineDataPoints(series, opts, config, context, process),
+ xAxisPoints = _drawLineDataPoints.xAxisPoints,
+ calPoints = _drawLineDataPoints.calPoints,
+ eachSpacing = _drawLineDataPoints.eachSpacing;
+
+ _this.chartData.xAxisPoints = xAxisPoints;
+ _this.chartData.calPoints = calPoints;
+ _this.chartData.eachSpacing = eachSpacing;
+ drawXAxis(categories, opts, config, context);
+ drawLegend(opts.series, opts, config, context);
+ drawYAxis(series, opts, config, context);
+ drawToolTipBridge(opts, config, context, process);
+ drawCanvas(opts, context);
+ },
+ onAnimationFinish: function onAnimationFinish() {
+ _this.event.trigger('renderComplete');
+ }
+ });
+ break;
+ case 'column':
+ this.animationInstance = new Animation({
+ timing: 'easeIn',
+ duration: duration,
+ onProcess: function onProcess(process) {
+ drawYAxisGrid(opts, config, context);
+
+ var _drawColumnDataPoints = drawColumnDataPoints(series, opts, config, context, process),
+ xAxisPoints = _drawColumnDataPoints.xAxisPoints,
+ eachSpacing = _drawColumnDataPoints.eachSpacing;
+
+ _this.chartData.xAxisPoints = xAxisPoints;
+ _this.chartData.eachSpacing = eachSpacing;
+ drawXAxis(categories, opts, config, context);
+ drawLegend(opts.series, opts, config, context);
+ drawYAxis(series, opts, config, context);
+ drawCanvas(opts, context);
+ },
+ onAnimationFinish: function onAnimationFinish() {
+ _this.event.trigger('renderComplete');
+ }
+ });
+ break;
+ case 'area':
+ this.animationInstance = new Animation({
+ timing: 'easeIn',
+ duration: duration,
+ onProcess: function onProcess(process) {
+ drawYAxisGrid(opts, config, context);
+
+ var _drawAreaDataPoints = drawAreaDataPoints(series, opts, config, context, process),
+ xAxisPoints = _drawAreaDataPoints.xAxisPoints,
+ calPoints = _drawAreaDataPoints.calPoints,
+ eachSpacing = _drawAreaDataPoints.eachSpacing;
+
+ _this.chartData.xAxisPoints = xAxisPoints;
+ _this.chartData.calPoints = calPoints;
+ _this.chartData.eachSpacing = eachSpacing;
+ drawXAxis(categories, opts, config, context);
+ drawLegend(opts.series, opts, config, context);
+ drawYAxis(series, opts, config, context);
+ drawToolTipBridge(opts, config, context, process);
+ drawCanvas(opts, context);
+ },
+ onAnimationFinish: function onAnimationFinish() {
+ _this.event.trigger('renderComplete');
+ }
+ });
+ break;
+ case 'ring':
+ case 'pie':
+ this.animationInstance = new Animation({
+ timing: 'easeInOut',
+ duration: duration,
+ onProcess: function onProcess(process) {
+ _this.chartData.pieData = drawPieDataPoints(series, opts, config, context, process);
+ drawLegend(opts.series, opts, config, context);
+ drawCanvas(opts, context);
+ },
+ onAnimationFinish: function onAnimationFinish() {
+ _this.event.trigger('renderComplete');
+ }
+ });
+ break;
+ case 'radar':
+ this.animationInstance = new Animation({
+ timing: 'easeInOut',
+ duration: duration,
+ onProcess: function onProcess(process) {
+ _this.chartData.radarData = drawRadarDataPoints(series, opts, config, context, process);
+ drawLegend(opts.series, opts, config, context);
+ drawCanvas(opts, context);
+ },
+ onAnimationFinish: function onAnimationFinish() {
+ _this.event.trigger('renderComplete');
+ }
+ });
+ break;
+ }
+}
+
+// simple event implement
+
+function Event() {
+ this.events = {};
+}
+
+Event.prototype.addEventListener = function (type, listener) {
+ this.events[type] = this.events[type] || [];
+ this.events[type].push(listener);
+};
+
+Event.prototype.trigger = function () {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ var type = args[0];
+ var params = args.slice(1);
+ if (!!this.events[type]) {
+ this.events[type].forEach(function (listener) {
+ try {
+ listener.apply(null, params);
+ } catch (e) {
+ console.error(e);
+ }
+ });
+ }
+};
+
+var Charts = function Charts(opts) {
+ opts.title = opts.title || {};
+ opts.subtitle = opts.subtitle || {};
+ opts.yAxis = opts.yAxis || {};
+ opts.xAxis = opts.xAxis || {};
+ opts.extra = opts.extra || {};
+ opts.legend = opts.legend === false ? false : true;
+ opts.animation = opts.animation === false ? false : true;
+ var config$$1 = assign({}, config);
+ config$$1.yAxisTitleWidth = opts.yAxis.disabled !== true && opts.yAxis.title ? config$$1.yAxisTitleWidth : 0;
+ config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : config$$1.pieChartLinePadding;
+ config$$1.pieChartTextPadding = opts.dataLabel === false ? 0 : config$$1.pieChartTextPadding;
+
+ this.opts = opts;
+ this.config = config$$1;
+ this.context = wx.createCanvasContext(opts.canvasId);
+ // store calcuated chart data
+ // such as chart point coordinate
+ this.chartData = {};
+ this.event = new Event();
+ this.scrollOption = {
+ currentOffset: 0,
+ startTouchX: 0,
+ distance: 0
+ };
+
+ drawCharts.call(this, opts.type, opts, config$$1, this.context);
+};
+
+Charts.prototype.updateData = function () {
+ var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.opts.series = data.series || this.opts.series;
+ this.opts.categories = data.categories || this.opts.categories;
+
+ this.opts.title = assign({}, this.opts.title, data.title || {});
+ this.opts.subtitle = assign({}, this.opts.subtitle, data.subtitle || {});
+
+ drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
+};
+
+Charts.prototype.stopAnimation = function () {
+ this.animationInstance && this.animationInstance.stop();
+};
+
+Charts.prototype.addEventListener = function (type, listener) {
+ this.event.addEventListener(type, listener);
+};
+
+Charts.prototype.getCurrentDataIndex = function (e) {
+ var touches = e.touches && e.touches.length ? e.touches : e.changedTouches;
+ if (touches && touches.length) {
+ var _touches$ = touches[0],
+ x = _touches$.x,
+ y = _touches$.y;
+
+ if (this.opts.type === 'pie' || this.opts.type === 'ring') {
+ return findPieChartCurrentIndex({ x: x, y: y }, this.chartData.pieData);
+ } else if (this.opts.type === 'radar') {
+ return findRadarChartCurrentIndex({ x: x, y: y }, this.chartData.radarData, this.opts.categories.length);
+ } else {
+ return findCurrentIndex({ x: x, y: y }, this.chartData.xAxisPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset));
+ }
+ }
+ return -1;
+};
+
+Charts.prototype.showToolTip = function (e) {
+ var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ if (this.opts.type === 'line' || this.opts.type === 'area') {
+ var index = this.getCurrentDataIndex(e);
+ var currentOffset = this.scrollOption.currentOffset;
+
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset,
+ animation: false
+ });
+ if (index > -1) {
+ var seriesData = getSeriesDataItem(this.opts.series, index);
+ if (seriesData.length !== 0) {
+ var _getToolTipData = getToolTipData(seriesData, this.chartData.calPoints, index, this.opts.categories, option),
+ textList = _getToolTipData.textList,
+ offset = _getToolTipData.offset;
+
+ opts.tooltip = {
+ textList: textList,
+ offset: offset,
+ option: option
+ };
+ }
+ }
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+};
+
+Charts.prototype.scrollStart = function (e) {
+ if (e.touches[0] && this.opts.enableScroll === true) {
+ this.scrollOption.startTouchX = e.touches[0].x;
+ }
+};
+
+Charts.prototype.scroll = function (e) {
+ // TODO throtting...
+ if (e.touches[0] && this.opts.enableScroll === true) {
+ var _distance = e.touches[0].x - this.scrollOption.startTouchX;
+ var currentOffset = this.scrollOption.currentOffset;
+
+ var validDistance = calValidDistance(currentOffset + _distance, this.chartData, this.config, this.opts);
+
+ this.scrollOption.distance = _distance = validDistance - currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset + _distance,
+ animation: false
+ });
+
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+};
+
+Charts.prototype.scrollEnd = function (e) {
+ if (this.opts.enableScroll === true) {
+ var _scrollOption = this.scrollOption,
+ currentOffset = _scrollOption.currentOffset,
+ distance = _scrollOption.distance;
+
+ this.scrollOption.currentOffset = currentOffset + distance;
+ this.scrollOption.distance = 0;
+ }
+};
+
+module.exports = Charts;
diff --git a/ai-interview-ui/.eslintrc.cjs b/ai-interview-ui/.eslintrc.cjs
new file mode 100644
index 0000000..9cba6f0
--- /dev/null
+++ b/ai-interview-ui/.eslintrc.cjs
@@ -0,0 +1,40 @@
+/* eslint-env node */
+require('@rushstack/eslint-patch/modern-module-resolution')
+
+module.exports = {
+ root: true,
+ extends: [
+ 'plugin:vue/vue3-essential',
+ 'eslint:recommended',
+ '@vue/eslint-config-prettier/skip-formatting'
+ ],
+ parserOptions: {
+ ecmaVersion: 'latest'
+ },
+ rules: {
+ 'prettier/prettier': [
+ 'warn',
+ {
+ singleQuote: true, // 单引号
+ semi: false, // 无分号
+ printWidth: 80, // 每行宽度至多80字符
+ trailingComma: 'none', // 不加对象|数组最后逗号
+ endOfLine: 'auto' // 换行符号不限制(win mac 不一致)
+ }
+ ],
+ 'vue/multi-word-component-names': [
+ 'warn',
+ {
+ ignores: ['index'] // vue组件名称多单词组成(忽略index.vue)
+ }
+ ],
+ 'vue/no-setup-props-destructure': ['off'], // 关闭 props 解构的校验
+ // 💡 添加未定义变量错误提示,create-vue@3.6.3 关闭,这里加上是为了支持下一个章节演示。
+ 'no-undef': 'error'
+ },
+ globals: {
+ ElMessage: 'readonly',
+ ElMessageBox: 'readonly',
+ ElLoading: 'readonly'
+ }
+}
diff --git a/ai-interview-ui/.gitignore b/ai-interview-ui/.gitignore
new file mode 100644
index 0000000..38adffa
--- /dev/null
+++ b/ai-interview-ui/.gitignore
@@ -0,0 +1,28 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/ai-interview-ui/.prettierrc.json b/ai-interview-ui/.prettierrc.json
new file mode 100644
index 0000000..66e2335
--- /dev/null
+++ b/ai-interview-ui/.prettierrc.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "https://json.schemastore.org/prettierrc",
+ "semi": false,
+ "tabWidth": 2,
+ "singleQuote": true,
+ "printWidth": 100,
+ "trailingComma": "none"
+}
\ No newline at end of file
diff --git a/ai-interview-ui/.templates/$$var_template/$$var_filename.js b/ai-interview-ui/.templates/$$var_template/$$var_filename.js
new file mode 100644
index 0000000..1518755
--- /dev/null
+++ b/ai-interview-ui/.templates/$$var_template/$$var_filename.js
@@ -0,0 +1,2 @@
+export default function $$var_textInFile() {
+}
diff --git a/ai-interview-ui/.templates/.editorconfig b/ai-interview-ui/.templates/.editorconfig
new file mode 100644
index 0000000..689fb50
--- /dev/null
+++ b/ai-interview-ui/.templates/.editorconfig
@@ -0,0 +1,21 @@
+# @see https://editorconfig-specification.readthedocs.io/en/latest/
+
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 2
+charset = utf-8
+
+# 4 space indentation
+[*.py]
+indent_style = space
+indent_size = 4
+
+# Tab indentation (no size specified)
+[Makefile]
+indent_style = tab
diff --git a/ai-interview-ui/.templates/template-sample-react-component/index.jsx b/ai-interview-ui/.templates/template-sample-react-component/index.jsx
new file mode 100644
index 0000000..d52bbc7
--- /dev/null
+++ b/ai-interview-ui/.templates/template-sample-react-component/index.jsx
@@ -0,0 +1,12 @@
+import React from "react";
+import classNames from "classnames/bind";
+
+import styles from "./index.scss";
+
+const cx = classNames.bind(styles);
+
+function __templateNameToPascalCase__() {
+ return Hello :)
;
+}
+
+export default __templateNameToPascalCase__;
diff --git a/ai-interview-ui/.templates/template-sample-react-component/index.scss b/ai-interview-ui/.templates/template-sample-react-component/index.scss
new file mode 100644
index 0000000..c2488a6
--- /dev/null
+++ b/ai-interview-ui/.templates/template-sample-react-component/index.scss
@@ -0,0 +1,3 @@
+.__templateNameToParamCase__ {
+ display: inline-block;
+}
diff --git a/ai-interview-ui/.templates/template-sample/index.js b/ai-interview-ui/.templates/template-sample/index.js
new file mode 100644
index 0000000..0c0ef38
--- /dev/null
+++ b/ai-interview-ui/.templates/template-sample/index.js
@@ -0,0 +1,5 @@
+export default function __templateNameToPascalCase__() {
+ console.log("TemplateName -> __templateName__");
+ console.log("TemplateName to ParamCase -> __templateNameToParamCase__");
+ console.log("TemplateName to PascalCase -> __templateNameToPascalCase__");
+}
diff --git a/ai-interview-ui/.vscode/extensions.json b/ai-interview-ui/.vscode/extensions.json
new file mode 100644
index 0000000..009a534
--- /dev/null
+++ b/ai-interview-ui/.vscode/extensions.json
@@ -0,0 +1,8 @@
+{
+ "recommendations": [
+ "Vue.volar",
+ "Vue.vscode-typescript-vue-plugin",
+ "dbaeumer.vscode-eslint",
+ "esbenp.prettier-vscode"
+ ]
+}
diff --git a/ai-interview-ui/README.md b/ai-interview-ui/README.md
new file mode 100644
index 0000000..a854e11
--- /dev/null
+++ b/ai-interview-ui/README.md
@@ -0,0 +1,35 @@
+# Ai-interviewer-ui
+
+This template should help get you started developing with Vue 3 in Vite.
+
+## Recommended IDE Setup
+
+[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
+
+## Customize configuration
+
+See [Vite Configuration Reference](https://vitejs.dev/config/).
+
+## Project Setup
+
+```sh
+pnpm install
+```
+
+### Compile and Hot-Reload for Development
+
+```sh
+pnpm dev
+```
+
+### Compile and Minify for Production
+
+```sh
+pnpm build
+```
+
+### Lint with [ESLint](https://eslint.org/)
+
+```sh
+pnpm lint
+```
diff --git a/ai-interview-ui/index.html b/ai-interview-ui/index.html
new file mode 100644
index 0000000..8c12c61
--- /dev/null
+++ b/ai-interview-ui/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Ai_面试管理后台
+
+
+
+
+
+
diff --git a/ai-interview-ui/package.json b/ai-interview-ui/package.json
new file mode 100644
index 0000000..c4796df
--- /dev/null
+++ b/ai-interview-ui/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "ai-interviewer-ui",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
+ "format": "prettier --write src/",
+ "lint-staged": "lint-staged"
+ },
+ "dependencies": {
+ "@arco-design/web-vue": "^2.53.0",
+ "@element-plus/icons-vue": "^2.1.0",
+ "@tinymce/tinymce-vue": "^4.0.1",
+ "ant-design-vue": "4.x",
+ "axios": "^1.5.1",
+ "echarts": "^5.4.3",
+ "element-china-area-data": "^6.1.0",
+ "element-plus": "^2.4.0",
+ "less": "^4.2.0",
+ "pinia": "^2.1.6",
+ "tinymce": "^5.6.2",
+ "uuid": "^9.0.1",
+ "uuidv1": "^1.6.14",
+ "vue": "^3.3.4",
+ "vue-echarts": "^6.6.1",
+ "vue-router": "^4.2.4",
+ "vue-select-image": "^1.9.0",
+ "vue-uuid": "^3.0.0"
+ },
+ "devDependencies": {
+ "@rushstack/eslint-patch": "^1.3.3",
+ "@vitejs/plugin-vue": "^4.3.4",
+ "@vue/eslint-config-prettier": "^8.0.0",
+ "eslint": "^8.49.0",
+ "eslint-plugin-vue": "^9.17.0",
+ "lint-staged": "^15.0.1",
+ "pinia-plugin-persistedstate": "^3.2.0",
+ "prettier": "^3.0.3",
+ "sass": "^1.69.4",
+ "unplugin-auto-import": "^0.16.6",
+ "unplugin-vue-components": "^0.25.2",
+ "vite": "^4.4.9"
+ }
+}
diff --git a/ai-interview-ui/pnpm-lock.yaml b/ai-interview-ui/pnpm-lock.yaml
new file mode 100644
index 0000000..7ded090
--- /dev/null
+++ b/ai-interview-ui/pnpm-lock.yaml
@@ -0,0 +1,3617 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@arco-design/web-vue':
+ specifier: ^2.53.0
+ version: registry.npmmirror.com/@arco-design/web-vue@2.53.0(vue@3.3.4)
+ '@element-plus/icons-vue':
+ specifier: ^2.1.0
+ version: registry.npmmirror.com/@element-plus/icons-vue@2.1.0(vue@3.3.4)
+ '@tinymce/tinymce-vue':
+ specifier: ^4.0.1
+ version: registry.npmmirror.com/@tinymce/tinymce-vue@4.0.7(vue@3.3.4)
+ ant-design-vue:
+ specifier: 4.x
+ version: registry.npmmirror.com/ant-design-vue@4.0.7(vue@3.3.4)
+ axios:
+ specifier: ^1.5.1
+ version: registry.npmmirror.com/axios@1.5.1
+ echarts:
+ specifier: ^5.4.3
+ version: registry.npmmirror.com/echarts@5.4.3
+ element-china-area-data:
+ specifier: ^6.1.0
+ version: registry.npmmirror.com/element-china-area-data@6.1.0
+ element-plus:
+ specifier: ^2.4.0
+ version: registry.npmmirror.com/element-plus@2.4.0(vue@3.3.4)
+ less:
+ specifier: ^4.2.0
+ version: registry.npmmirror.com/less@4.2.0
+ pinia:
+ specifier: ^2.1.6
+ version: registry.npmmirror.com/pinia@2.1.7(vue@3.3.4)
+ tinymce:
+ specifier: ^5.6.2
+ version: registry.npmmirror.com/tinymce@5.10.9
+ uuid:
+ specifier: ^9.0.1
+ version: registry.npmmirror.com/uuid@9.0.1
+ uuidv1:
+ specifier: ^1.6.14
+ version: registry.npmmirror.com/uuidv1@1.6.14
+ vue:
+ specifier: ^3.3.4
+ version: registry.npmmirror.com/vue@3.3.4
+ vue-echarts:
+ specifier: ^6.6.1
+ version: registry.npmmirror.com/vue-echarts@6.6.1(echarts@5.4.3)(vue@3.3.4)
+ vue-router:
+ specifier: ^4.2.4
+ version: registry.npmmirror.com/vue-router@4.2.5(vue@3.3.4)
+ vue-select-image:
+ specifier: ^1.9.0
+ version: registry.npmmirror.com/vue-select-image@1.9.0
+ vue-uuid:
+ specifier: ^3.0.0
+ version: registry.npmmirror.com/vue-uuid@3.0.0(vue@3.3.4)
+
+devDependencies:
+ '@rushstack/eslint-patch':
+ specifier: ^1.3.3
+ version: registry.npmmirror.com/@rushstack/eslint-patch@1.5.1
+ '@vitejs/plugin-vue':
+ specifier: ^4.3.4
+ version: registry.npmmirror.com/@vitejs/plugin-vue@4.4.0(vite@4.4.11)(vue@3.3.4)
+ '@vue/eslint-config-prettier':
+ specifier: ^8.0.0
+ version: registry.npmmirror.com/@vue/eslint-config-prettier@8.0.0(eslint@8.51.0)(prettier@3.0.3)
+ eslint:
+ specifier: ^8.49.0
+ version: registry.npmmirror.com/eslint@8.51.0
+ eslint-plugin-vue:
+ specifier: ^9.17.0
+ version: registry.npmmirror.com/eslint-plugin-vue@9.17.0(eslint@8.51.0)
+ lint-staged:
+ specifier: ^15.0.1
+ version: registry.npmmirror.com/lint-staged@15.0.1
+ pinia-plugin-persistedstate:
+ specifier: ^3.2.0
+ version: registry.npmmirror.com/pinia-plugin-persistedstate@3.2.0(pinia@2.1.7)
+ prettier:
+ specifier: ^3.0.3
+ version: registry.npmmirror.com/prettier@3.0.3
+ sass:
+ specifier: ^1.69.4
+ version: registry.npmmirror.com/sass@1.69.4
+ unplugin-auto-import:
+ specifier: ^0.16.6
+ version: registry.npmmirror.com/unplugin-auto-import@0.16.6
+ unplugin-vue-components:
+ specifier: ^0.25.2
+ version: registry.npmmirror.com/unplugin-vue-components@0.25.2(vue@3.3.4)
+ vite:
+ specifier: ^4.4.9
+ version: registry.npmmirror.com/vite@4.4.11(less@4.2.0)(sass@1.69.4)
+
+packages:
+
+ registry.npmmirror.com/@aashutoshrathi/word-wrap@1.2.6:
+ resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz}
+ name: '@aashutoshrathi/word-wrap'
+ version: 1.2.6
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ registry.npmmirror.com/@ant-design/colors@6.0.0:
+ resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz}
+ name: '@ant-design/colors'
+ version: 6.0.0
+ dependencies:
+ '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor@3.6.1
+ dev: false
+
+ registry.npmmirror.com/@ant-design/icons-svg@4.3.1:
+ resolution: {integrity: sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz}
+ name: '@ant-design/icons-svg'
+ version: 4.3.1
+ dev: false
+
+ registry.npmmirror.com/@ant-design/icons-vue@7.0.1(vue@3.3.4):
+ resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz}
+ id: registry.npmmirror.com/@ant-design/icons-vue/7.0.1
+ name: '@ant-design/icons-vue'
+ version: 7.0.1
+ peerDependencies:
+ vue: '>=3.0.3'
+ dependencies:
+ '@ant-design/colors': registry.npmmirror.com/@ant-design/colors@6.0.0
+ '@ant-design/icons-svg': registry.npmmirror.com/@ant-design/icons-svg@4.3.1
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/@antfu/utils@0.7.6:
+ resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.6.tgz}
+ name: '@antfu/utils'
+ version: 0.7.6
+ dev: true
+
+ registry.npmmirror.com/@arco-design/color@0.4.0:
+ resolution: {integrity: sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@arco-design/color/-/color-0.4.0.tgz}
+ name: '@arco-design/color'
+ version: 0.4.0
+ dependencies:
+ color: registry.npmmirror.com/color@3.2.1
+ dev: false
+
+ registry.npmmirror.com/@arco-design/web-vue@2.53.0(vue@3.3.4):
+ resolution: {integrity: sha512-IQtxtIJNmH038EdMecAdeLVayr4r+Txnk51RIVAz28PpdEdjf4J0wnLyirDb41YB0fV7eubZOFNodq5uTYqPTA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@arco-design/web-vue/-/web-vue-2.53.0.tgz}
+ id: registry.npmmirror.com/@arco-design/web-vue/2.53.0
+ name: '@arco-design/web-vue'
+ version: 2.53.0
+ peerDependencies:
+ vue: ^3.1.0
+ dependencies:
+ '@arco-design/color': registry.npmmirror.com/@arco-design/color@0.4.0
+ b-tween: registry.npmmirror.com/b-tween@0.3.3
+ b-validate: registry.npmmirror.com/b-validate@1.5.3
+ compute-scroll-into-view: registry.npmmirror.com/compute-scroll-into-view@1.0.20
+ dayjs: registry.npmmirror.com/dayjs@1.11.10
+ number-precision: registry.npmmirror.com/number-precision@1.6.0
+ resize-observer-polyfill: registry.npmmirror.com/resize-observer-polyfill@1.5.1
+ scroll-into-view-if-needed: registry.npmmirror.com/scroll-into-view-if-needed@2.2.31
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/@babel/helper-string-parser@7.22.5:
+ resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz}
+ name: '@babel/helper-string-parser'
+ version: 7.22.5
+ engines: {node: '>=6.9.0'}
+
+ registry.npmmirror.com/@babel/helper-validator-identifier@7.22.20:
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz}
+ name: '@babel/helper-validator-identifier'
+ version: 7.22.20
+ engines: {node: '>=6.9.0'}
+
+ registry.npmmirror.com/@babel/parser@7.23.0:
+ resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.23.0.tgz}
+ name: '@babel/parser'
+ version: 7.23.0
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': registry.npmmirror.com/@babel/types@7.23.0
+
+ registry.npmmirror.com/@babel/runtime@7.23.2:
+ resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.2.tgz}
+ name: '@babel/runtime'
+ version: 7.23.2
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: registry.npmmirror.com/regenerator-runtime@0.14.0
+ dev: false
+
+ registry.npmmirror.com/@babel/types@7.23.0:
+ resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.23.0.tgz}
+ name: '@babel/types'
+ version: 7.23.0
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser@7.22.5
+ '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier@7.22.20
+ to-fast-properties: registry.npmmirror.com/to-fast-properties@2.0.0
+
+ registry.npmmirror.com/@ctrl/tinycolor@3.6.1:
+ resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz}
+ name: '@ctrl/tinycolor'
+ version: 3.6.1
+ engines: {node: '>=10'}
+ dev: false
+
+ registry.npmmirror.com/@element-plus/icons-vue@2.1.0(vue@3.3.4):
+ resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz}
+ id: registry.npmmirror.com/@element-plus/icons-vue/2.1.0
+ name: '@element-plus/icons-vue'
+ version: 2.1.0
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/@emotion/hash@0.9.1:
+ resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.1.tgz}
+ name: '@emotion/hash'
+ version: 0.9.1
+ dev: false
+
+ registry.npmmirror.com/@emotion/unitless@0.8.1:
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz}
+ name: '@emotion/unitless'
+ version: 0.8.1
+ dev: false
+
+ registry.npmmirror.com/@esbuild/android-arm64@0.18.20:
+ resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz}
+ name: '@esbuild/android-arm64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/android-arm@0.18.20:
+ resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz}
+ name: '@esbuild/android-arm'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/android-x64@0.18.20:
+ resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz}
+ name: '@esbuild/android-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/darwin-arm64@0.18.20:
+ resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz}
+ name: '@esbuild/darwin-arm64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/darwin-x64@0.18.20:
+ resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz}
+ name: '@esbuild/darwin-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/freebsd-arm64@0.18.20:
+ resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz}
+ name: '@esbuild/freebsd-arm64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/freebsd-x64@0.18.20:
+ resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz}
+ name: '@esbuild/freebsd-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-arm64@0.18.20:
+ resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz}
+ name: '@esbuild/linux-arm64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-arm@0.18.20:
+ resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz}
+ name: '@esbuild/linux-arm'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-ia32@0.18.20:
+ resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz}
+ name: '@esbuild/linux-ia32'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-loong64@0.18.20:
+ resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz}
+ name: '@esbuild/linux-loong64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-mips64el@0.18.20:
+ resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz}
+ name: '@esbuild/linux-mips64el'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-ppc64@0.18.20:
+ resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz}
+ name: '@esbuild/linux-ppc64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-riscv64@0.18.20:
+ resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz}
+ name: '@esbuild/linux-riscv64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-s390x@0.18.20:
+ resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz}
+ name: '@esbuild/linux-s390x'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/linux-x64@0.18.20:
+ resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz}
+ name: '@esbuild/linux-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/netbsd-x64@0.18.20:
+ resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz}
+ name: '@esbuild/netbsd-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/openbsd-x64@0.18.20:
+ resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz}
+ name: '@esbuild/openbsd-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/sunos-x64@0.18.20:
+ resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz}
+ name: '@esbuild/sunos-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/win32-arm64@0.18.20:
+ resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz}
+ name: '@esbuild/win32-arm64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/win32-ia32@0.18.20:
+ resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz}
+ name: '@esbuild/win32-ia32'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@esbuild/win32-x64@0.18.20:
+ resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz}
+ name: '@esbuild/win32-x64'
+ version: 0.18.20
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/@eslint-community/eslint-utils@4.4.0(eslint@8.51.0):
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz}
+ id: registry.npmmirror.com/@eslint-community/eslint-utils/4.4.0
+ name: '@eslint-community/eslint-utils'
+ version: 4.4.0
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: registry.npmmirror.com/eslint@8.51.0
+ eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys@3.4.3
+ dev: true
+
+ registry.npmmirror.com/@eslint-community/regexpp@4.9.1:
+ resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz}
+ name: '@eslint-community/regexpp'
+ version: 4.9.1
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ registry.npmmirror.com/@eslint/eslintrc@2.1.2:
+ resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz}
+ name: '@eslint/eslintrc'
+ version: 2.1.2
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: registry.npmmirror.com/ajv@6.12.6
+ debug: registry.npmmirror.com/debug@4.3.4
+ espree: registry.npmmirror.com/espree@9.6.1
+ globals: registry.npmmirror.com/globals@13.23.0
+ ignore: registry.npmmirror.com/ignore@5.2.4
+ import-fresh: registry.npmmirror.com/import-fresh@3.3.0
+ js-yaml: registry.npmmirror.com/js-yaml@4.1.0
+ minimatch: registry.npmmirror.com/minimatch@3.1.2
+ strip-json-comments: registry.npmmirror.com/strip-json-comments@3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ registry.npmmirror.com/@eslint/js@8.51.0:
+ resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint/js/-/js-8.51.0.tgz}
+ name: '@eslint/js'
+ version: 8.51.0
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ registry.npmmirror.com/@floating-ui/core@1.5.0:
+ resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@floating-ui/core/-/core-1.5.0.tgz}
+ name: '@floating-ui/core'
+ version: 1.5.0
+ dependencies:
+ '@floating-ui/utils': registry.npmmirror.com/@floating-ui/utils@0.1.6
+ dev: false
+
+ registry.npmmirror.com/@floating-ui/dom@1.5.3:
+ resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.5.3.tgz}
+ name: '@floating-ui/dom'
+ version: 1.5.3
+ dependencies:
+ '@floating-ui/core': registry.npmmirror.com/@floating-ui/core@1.5.0
+ '@floating-ui/utils': registry.npmmirror.com/@floating-ui/utils@0.1.6
+ dev: false
+
+ registry.npmmirror.com/@floating-ui/utils@0.1.6:
+ resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.1.6.tgz}
+ name: '@floating-ui/utils'
+ version: 0.1.6
+ dev: false
+
+ registry.npmmirror.com/@humanwhocodes/config-array@0.11.11:
+ resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz}
+ name: '@humanwhocodes/config-array'
+ version: 0.11.11
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': registry.npmmirror.com/@humanwhocodes/object-schema@1.2.1
+ debug: registry.npmmirror.com/debug@4.3.4
+ minimatch: registry.npmmirror.com/minimatch@3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ registry.npmmirror.com/@humanwhocodes/module-importer@1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz}
+ name: '@humanwhocodes/module-importer'
+ version: 1.0.1
+ engines: {node: '>=12.22'}
+ dev: true
+
+ registry.npmmirror.com/@humanwhocodes/object-schema@1.2.1:
+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz}
+ name: '@humanwhocodes/object-schema'
+ version: 1.2.1
+ dev: true
+
+ registry.npmmirror.com/@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz}
+ name: '@jridgewell/sourcemap-codec'
+ version: 1.4.15
+
+ registry.npmmirror.com/@nodelib/fs.scandir@2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz}
+ name: '@nodelib/fs.scandir'
+ version: 2.1.5
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat@2.0.5
+ run-parallel: registry.npmmirror.com/run-parallel@1.2.0
+ dev: true
+
+ registry.npmmirror.com/@nodelib/fs.stat@2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz}
+ name: '@nodelib/fs.stat'
+ version: 2.0.5
+ engines: {node: '>= 8'}
+ dev: true
+
+ registry.npmmirror.com/@nodelib/fs.walk@1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz}
+ name: '@nodelib/fs.walk'
+ version: 1.2.8
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': registry.npmmirror.com/@nodelib/fs.scandir@2.1.5
+ fastq: registry.npmmirror.com/fastq@1.15.0
+ dev: true
+
+ registry.npmmirror.com/@pkgr/utils@2.4.2:
+ resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@pkgr/utils/-/utils-2.4.2.tgz}
+ name: '@pkgr/utils'
+ version: 2.4.2
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ dependencies:
+ cross-spawn: registry.npmmirror.com/cross-spawn@7.0.3
+ fast-glob: registry.npmmirror.com/fast-glob@3.3.1
+ is-glob: registry.npmmirror.com/is-glob@4.0.3
+ open: registry.npmmirror.com/open@9.1.0
+ picocolors: registry.npmmirror.com/picocolors@1.0.0
+ tslib: registry.npmmirror.com/tslib@2.6.2
+ dev: true
+
+ registry.npmmirror.com/@rollup/pluginutils@5.0.5:
+ resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.5.tgz}
+ name: '@rollup/pluginutils'
+ version: 5.0.5
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ '@types/estree': registry.npmmirror.com/@types/estree@1.0.2
+ estree-walker: registry.npmmirror.com/estree-walker@2.0.2
+ picomatch: registry.npmmirror.com/picomatch@2.3.1
+ dev: true
+
+ registry.npmmirror.com/@rushstack/eslint-patch@1.5.1:
+ resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz}
+ name: '@rushstack/eslint-patch'
+ version: 1.5.1
+ dev: true
+
+ registry.npmmirror.com/@simonwep/pickr@1.8.2:
+ resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz}
+ name: '@simonwep/pickr'
+ version: 1.8.2
+ dependencies:
+ core-js: registry.npmmirror.com/core-js@3.33.2
+ nanopop: registry.npmmirror.com/nanopop@2.3.0
+ dev: false
+
+ registry.npmmirror.com/@sxzz/popperjs-es@2.11.7:
+ resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz}
+ name: '@sxzz/popperjs-es'
+ version: 2.11.7
+ dev: false
+
+ registry.npmmirror.com/@tinymce/tinymce-vue@4.0.7(vue@3.3.4):
+ resolution: {integrity: sha512-1esB8wGWrjPCY+rK8vy3QB1cxwXo7HLJWuNrcyPl6LOVR+QJjub0OiV/C+TUEsLN6OpCtRv+QnIqMC5vXz783Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@tinymce/tinymce-vue/-/tinymce-vue-4.0.7.tgz}
+ id: registry.npmmirror.com/@tinymce/tinymce-vue/4.0.7
+ name: '@tinymce/tinymce-vue'
+ version: 4.0.7
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ tinymce: registry.npmmirror.com/tinymce@5.10.9
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/@types/estree@1.0.2:
+ resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/estree/-/estree-1.0.2.tgz}
+ name: '@types/estree'
+ version: 1.0.2
+ dev: true
+
+ registry.npmmirror.com/@types/lodash-es@4.17.9:
+ resolution: {integrity: sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.9.tgz}
+ name: '@types/lodash-es'
+ version: 4.17.9
+ dependencies:
+ '@types/lodash': registry.npmmirror.com/@types/lodash@4.14.199
+ dev: false
+
+ registry.npmmirror.com/@types/lodash@4.14.199:
+ resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.199.tgz}
+ name: '@types/lodash'
+ version: 4.14.199
+ dev: false
+
+ registry.npmmirror.com/@types/uuid@8.3.4:
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/uuid/-/uuid-8.3.4.tgz}
+ name: '@types/uuid'
+ version: 8.3.4
+ dev: false
+
+ registry.npmmirror.com/@types/web-bluetooth@0.0.16:
+ resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz}
+ name: '@types/web-bluetooth'
+ version: 0.0.16
+ dev: false
+
+ registry.npmmirror.com/@vitejs/plugin-vue@4.4.0(vite@4.4.11)(vue@3.3.4):
+ resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz}
+ id: registry.npmmirror.com/@vitejs/plugin-vue/4.4.0
+ name: '@vitejs/plugin-vue'
+ version: 4.4.0
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: registry.npmmirror.com/vite@4.4.11(less@4.2.0)(sass@1.69.4)
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: true
+
+ registry.npmmirror.com/@vue/compiler-core@3.3.4:
+ resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz}
+ name: '@vue/compiler-core'
+ version: 3.3.4
+ dependencies:
+ '@babel/parser': registry.npmmirror.com/@babel/parser@7.23.0
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+ estree-walker: registry.npmmirror.com/estree-walker@2.0.2
+ source-map-js: registry.npmmirror.com/source-map-js@1.0.2
+
+ registry.npmmirror.com/@vue/compiler-dom@3.3.4:
+ resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz}
+ name: '@vue/compiler-dom'
+ version: 3.3.4
+ dependencies:
+ '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.3.4
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+
+ registry.npmmirror.com/@vue/compiler-sfc@2.7.15:
+ resolution: {integrity: sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz}
+ name: '@vue/compiler-sfc'
+ version: 2.7.15
+ dependencies:
+ '@babel/parser': registry.npmmirror.com/@babel/parser@7.23.0
+ postcss: registry.npmmirror.com/postcss@8.4.31
+ source-map: registry.npmmirror.com/source-map@0.6.1
+ dev: false
+
+ registry.npmmirror.com/@vue/compiler-sfc@3.3.4:
+ resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz}
+ name: '@vue/compiler-sfc'
+ version: 3.3.4
+ dependencies:
+ '@babel/parser': registry.npmmirror.com/@babel/parser@7.23.0
+ '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.3.4
+ '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.3.4
+ '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr@3.3.4
+ '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform@3.3.4
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+ estree-walker: registry.npmmirror.com/estree-walker@2.0.2
+ magic-string: registry.npmmirror.com/magic-string@0.30.5
+ postcss: registry.npmmirror.com/postcss@8.4.31
+ source-map-js: registry.npmmirror.com/source-map-js@1.0.2
+
+ registry.npmmirror.com/@vue/compiler-ssr@3.3.4:
+ resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz}
+ name: '@vue/compiler-ssr'
+ version: 3.3.4
+ dependencies:
+ '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.3.4
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+
+ registry.npmmirror.com/@vue/devtools-api@6.5.1:
+ resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz}
+ name: '@vue/devtools-api'
+ version: 6.5.1
+
+ registry.npmmirror.com/@vue/eslint-config-prettier@8.0.0(eslint@8.51.0)(prettier@3.0.3):
+ resolution: {integrity: sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz}
+ id: registry.npmmirror.com/@vue/eslint-config-prettier/8.0.0
+ name: '@vue/eslint-config-prettier'
+ version: 8.0.0
+ peerDependencies:
+ eslint: '>= 8.0.0'
+ prettier: '>= 3.0.0'
+ dependencies:
+ eslint: registry.npmmirror.com/eslint@8.51.0
+ eslint-config-prettier: registry.npmmirror.com/eslint-config-prettier@8.10.0(eslint@8.51.0)
+ eslint-plugin-prettier: registry.npmmirror.com/eslint-plugin-prettier@5.0.1(eslint-config-prettier@8.10.0)(eslint@8.51.0)(prettier@3.0.3)
+ prettier: registry.npmmirror.com/prettier@3.0.3
+ transitivePeerDependencies:
+ - '@types/eslint'
+ dev: true
+
+ registry.npmmirror.com/@vue/reactivity-transform@3.3.4:
+ resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz}
+ name: '@vue/reactivity-transform'
+ version: 3.3.4
+ dependencies:
+ '@babel/parser': registry.npmmirror.com/@babel/parser@7.23.0
+ '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.3.4
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+ estree-walker: registry.npmmirror.com/estree-walker@2.0.2
+ magic-string: registry.npmmirror.com/magic-string@0.30.5
+
+ registry.npmmirror.com/@vue/reactivity@3.3.4:
+ resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz}
+ name: '@vue/reactivity'
+ version: 3.3.4
+ dependencies:
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+
+ registry.npmmirror.com/@vue/runtime-core@3.3.4:
+ resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz}
+ name: '@vue/runtime-core'
+ version: 3.3.4
+ dependencies:
+ '@vue/reactivity': registry.npmmirror.com/@vue/reactivity@3.3.4
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+
+ registry.npmmirror.com/@vue/runtime-dom@3.3.4:
+ resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz}
+ name: '@vue/runtime-dom'
+ version: 3.3.4
+ dependencies:
+ '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core@3.3.4
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+ csstype: registry.npmmirror.com/csstype@3.1.2
+
+ registry.npmmirror.com/@vue/server-renderer@3.3.4(vue@3.3.4):
+ resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz}
+ id: registry.npmmirror.com/@vue/server-renderer/3.3.4
+ name: '@vue/server-renderer'
+ version: 3.3.4
+ peerDependencies:
+ vue: 3.3.4
+ dependencies:
+ '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr@3.3.4
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+ vue: registry.npmmirror.com/vue@3.3.4
+
+ registry.npmmirror.com/@vue/shared@3.3.4:
+ resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz}
+ name: '@vue/shared'
+ version: 3.3.4
+
+ registry.npmmirror.com/@vueuse/core@9.13.0(vue@3.3.4):
+ resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz}
+ id: registry.npmmirror.com/@vueuse/core/9.13.0
+ name: '@vueuse/core'
+ version: 9.13.0
+ dependencies:
+ '@types/web-bluetooth': registry.npmmirror.com/@types/web-bluetooth@0.0.16
+ '@vueuse/metadata': registry.npmmirror.com/@vueuse/metadata@9.13.0
+ '@vueuse/shared': registry.npmmirror.com/@vueuse/shared@9.13.0(vue@3.3.4)
+ vue-demi: registry.npmmirror.com/vue-demi@0.14.6(vue@3.3.4)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ registry.npmmirror.com/@vueuse/metadata@9.13.0:
+ resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz}
+ name: '@vueuse/metadata'
+ version: 9.13.0
+ dev: false
+
+ registry.npmmirror.com/@vueuse/shared@9.13.0(vue@3.3.4):
+ resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz}
+ id: registry.npmmirror.com/@vueuse/shared/9.13.0
+ name: '@vueuse/shared'
+ version: 9.13.0
+ dependencies:
+ vue-demi: registry.npmmirror.com/vue-demi@0.14.6(vue@3.3.4)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ registry.npmmirror.com/acorn-jsx@5.3.2(acorn@8.10.0):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz}
+ id: registry.npmmirror.com/acorn-jsx/5.3.2
+ name: acorn-jsx
+ version: 5.3.2
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: registry.npmmirror.com/acorn@8.10.0
+ dev: true
+
+ registry.npmmirror.com/acorn@8.10.0:
+ resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz}
+ name: acorn
+ version: 8.10.0
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: true
+
+ registry.npmmirror.com/ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz}
+ name: ajv
+ version: 6.12.6
+ dependencies:
+ fast-deep-equal: registry.npmmirror.com/fast-deep-equal@3.1.3
+ fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify@2.1.0
+ json-schema-traverse: registry.npmmirror.com/json-schema-traverse@0.4.1
+ uri-js: registry.npmmirror.com/uri-js@4.4.1
+ dev: true
+
+ registry.npmmirror.com/ansi-escapes@5.0.0:
+ resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz}
+ name: ansi-escapes
+ version: 5.0.0
+ engines: {node: '>=12'}
+ dependencies:
+ type-fest: registry.npmmirror.com/type-fest@1.4.0
+ dev: true
+
+ registry.npmmirror.com/ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz}
+ name: ansi-regex
+ version: 5.0.1
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz}
+ name: ansi-regex
+ version: 6.0.1
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz}
+ name: ansi-styles
+ version: 4.3.0
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: registry.npmmirror.com/color-convert@2.0.1
+ dev: true
+
+ registry.npmmirror.com/ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz}
+ name: ansi-styles
+ version: 6.2.1
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/ant-design-vue@4.0.7(vue@3.3.4):
+ resolution: {integrity: sha512-oHTtc1GZkfENZTkt2aDvjaD4yoRsowYvCOmxA6+5AGqm5uz/datdJOXsq9nokIhC+vrAMhk6JQVFZ2hh7eU6Pw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.0.7.tgz}
+ id: registry.npmmirror.com/ant-design-vue/4.0.7
+ name: ant-design-vue
+ version: 4.0.7
+ engines: {node: '>=12.22.0'}
+ peerDependencies:
+ vue: '>=3.2.0'
+ dependencies:
+ '@ant-design/colors': registry.npmmirror.com/@ant-design/colors@6.0.0
+ '@ant-design/icons-vue': registry.npmmirror.com/@ant-design/icons-vue@7.0.1(vue@3.3.4)
+ '@babel/runtime': registry.npmmirror.com/@babel/runtime@7.23.2
+ '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor@3.6.1
+ '@emotion/hash': registry.npmmirror.com/@emotion/hash@0.9.1
+ '@emotion/unitless': registry.npmmirror.com/@emotion/unitless@0.8.1
+ '@simonwep/pickr': registry.npmmirror.com/@simonwep/pickr@1.8.2
+ array-tree-filter: registry.npmmirror.com/array-tree-filter@2.1.0
+ async-validator: registry.npmmirror.com/async-validator@4.2.5
+ csstype: registry.npmmirror.com/csstype@3.1.2
+ dayjs: registry.npmmirror.com/dayjs@1.11.10
+ dom-align: registry.npmmirror.com/dom-align@1.12.4
+ dom-scroll-into-view: registry.npmmirror.com/dom-scroll-into-view@2.0.1
+ lodash: registry.npmmirror.com/lodash@4.17.21
+ lodash-es: registry.npmmirror.com/lodash-es@4.17.21
+ resize-observer-polyfill: registry.npmmirror.com/resize-observer-polyfill@1.5.1
+ scroll-into-view-if-needed: registry.npmmirror.com/scroll-into-view-if-needed@2.2.31
+ shallow-equal: registry.npmmirror.com/shallow-equal@1.2.1
+ stylis: registry.npmmirror.com/stylis@4.3.0
+ throttle-debounce: registry.npmmirror.com/throttle-debounce@5.0.0
+ vue: registry.npmmirror.com/vue@3.3.4
+ vue-types: registry.npmmirror.com/vue-types@3.0.2(vue@3.3.4)
+ warning: registry.npmmirror.com/warning@4.0.3
+ dev: false
+
+ registry.npmmirror.com/anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz}
+ name: anymatch
+ version: 3.1.3
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: registry.npmmirror.com/normalize-path@3.0.0
+ picomatch: registry.npmmirror.com/picomatch@2.3.1
+ dev: true
+
+ registry.npmmirror.com/argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz}
+ name: argparse
+ version: 2.0.1
+ dev: true
+
+ registry.npmmirror.com/array-tree-filter@2.1.0:
+ resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz}
+ name: array-tree-filter
+ version: 2.1.0
+ dev: false
+
+ registry.npmmirror.com/async-validator@4.2.5:
+ resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz}
+ name: async-validator
+ version: 4.2.5
+ dev: false
+
+ registry.npmmirror.com/asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz}
+ name: asynckit
+ version: 0.4.0
+ dev: false
+
+ registry.npmmirror.com/axios@1.5.1:
+ resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-1.5.1.tgz}
+ name: axios
+ version: 1.5.1
+ dependencies:
+ follow-redirects: registry.npmmirror.com/follow-redirects@1.15.3
+ form-data: registry.npmmirror.com/form-data@4.0.0
+ proxy-from-env: registry.npmmirror.com/proxy-from-env@1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ registry.npmmirror.com/b-tween@0.3.3:
+ resolution: {integrity: sha512-oEHegcRpA7fAuc9KC4nktucuZn2aS8htymCPcP3qkEGPqiBH+GfqtqoG2l7LxHngg6O0HFM7hOeOYExl1Oz4ZA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/b-tween/-/b-tween-0.3.3.tgz}
+ name: b-tween
+ version: 0.3.3
+ dev: false
+
+ registry.npmmirror.com/b-validate@1.5.3:
+ resolution: {integrity: sha512-iCvCkGFskbaYtfQ0a3GmcQCHl/Sv1GufXFGuUQ+FE+WJa7A/espLOuFIn09B944V8/ImPj71T4+rTASxO2PAuA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/b-validate/-/b-validate-1.5.3.tgz}
+ name: b-validate
+ version: 1.5.3
+ dev: false
+
+ registry.npmmirror.com/balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz}
+ name: balanced-match
+ version: 1.0.2
+ dev: true
+
+ registry.npmmirror.com/big-integer@1.6.51:
+ resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big-integer/-/big-integer-1.6.51.tgz}
+ name: big-integer
+ version: 1.6.51
+ engines: {node: '>=0.6'}
+ dev: true
+
+ registry.npmmirror.com/binary-extensions@2.2.0:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
+ name: binary-extensions
+ version: 2.2.0
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz}
+ name: boolbase
+ version: 1.0.0
+ dev: true
+
+ registry.npmmirror.com/bplist-parser@0.2.0:
+ resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.2.0.tgz}
+ name: bplist-parser
+ version: 0.2.0
+ engines: {node: '>= 5.10.0'}
+ dependencies:
+ big-integer: registry.npmmirror.com/big-integer@1.6.51
+ dev: true
+
+ registry.npmmirror.com/brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz}
+ name: brace-expansion
+ version: 1.1.11
+ dependencies:
+ balanced-match: registry.npmmirror.com/balanced-match@1.0.2
+ concat-map: registry.npmmirror.com/concat-map@0.0.1
+ dev: true
+
+ registry.npmmirror.com/brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz}
+ name: brace-expansion
+ version: 2.0.1
+ dependencies:
+ balanced-match: registry.npmmirror.com/balanced-match@1.0.2
+ dev: true
+
+ registry.npmmirror.com/braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz}
+ name: braces
+ version: 3.0.2
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: registry.npmmirror.com/fill-range@7.0.1
+ dev: true
+
+ registry.npmmirror.com/bundle-name@3.0.0:
+ resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bundle-name/-/bundle-name-3.0.0.tgz}
+ name: bundle-name
+ version: 3.0.0
+ engines: {node: '>=12'}
+ dependencies:
+ run-applescript: registry.npmmirror.com/run-applescript@5.0.0
+ dev: true
+
+ registry.npmmirror.com/callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz}
+ name: callsites
+ version: 3.1.0
+ engines: {node: '>=6'}
+ dev: true
+
+ registry.npmmirror.com/chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz}
+ name: chalk
+ version: 4.1.2
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: registry.npmmirror.com/ansi-styles@4.3.0
+ supports-color: registry.npmmirror.com/supports-color@7.2.0
+ dev: true
+
+ registry.npmmirror.com/chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-5.3.0.tgz}
+ name: chalk
+ version: 5.3.0
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: true
+
+ registry.npmmirror.com/china-division@2.7.0:
+ resolution: {integrity: sha512-4uUPAT+1WfqDh5jytq7omdCmHNk3j+k76zEG/2IqaGcYB90c2SwcixttcypdsZ3T/9tN1TTpBDoeZn+Yw/qBEA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/china-division/-/china-division-2.7.0.tgz}
+ name: china-division
+ version: 2.7.0
+ dev: false
+
+ registry.npmmirror.com/chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
+ name: chokidar
+ version: 3.5.3
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: registry.npmmirror.com/anymatch@3.1.3
+ braces: registry.npmmirror.com/braces@3.0.2
+ glob-parent: registry.npmmirror.com/glob-parent@5.1.2
+ is-binary-path: registry.npmmirror.com/is-binary-path@2.1.0
+ is-glob: registry.npmmirror.com/is-glob@4.0.3
+ normalize-path: registry.npmmirror.com/normalize-path@3.0.0
+ readdirp: registry.npmmirror.com/readdirp@3.6.0
+ optionalDependencies:
+ fsevents: registry.npmmirror.com/fsevents@2.3.3
+ dev: true
+
+ registry.npmmirror.com/cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz}
+ name: cli-cursor
+ version: 4.0.0
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ restore-cursor: registry.npmmirror.com/restore-cursor@4.0.0
+ dev: true
+
+ registry.npmmirror.com/cli-truncate@3.1.0:
+ resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz}
+ name: cli-truncate
+ version: 3.1.0
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ slice-ansi: registry.npmmirror.com/slice-ansi@5.0.0
+ string-width: registry.npmmirror.com/string-width@5.1.2
+ dev: true
+
+ registry.npmmirror.com/color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}
+ name: color-convert
+ version: 1.9.3
+ dependencies:
+ color-name: registry.npmmirror.com/color-name@1.1.3
+ dev: false
+
+ registry.npmmirror.com/color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz}
+ name: color-convert
+ version: 2.0.1
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: registry.npmmirror.com/color-name@1.1.4
+ dev: true
+
+ registry.npmmirror.com/color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz}
+ name: color-name
+ version: 1.1.3
+ dev: false
+
+ registry.npmmirror.com/color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz}
+ name: color-name
+ version: 1.1.4
+
+ registry.npmmirror.com/color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz}
+ name: color-string
+ version: 1.9.1
+ dependencies:
+ color-name: registry.npmmirror.com/color-name@1.1.4
+ simple-swizzle: registry.npmmirror.com/simple-swizzle@0.2.2
+ dev: false
+
+ registry.npmmirror.com/color@3.2.1:
+ resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color/-/color-3.2.1.tgz}
+ name: color
+ version: 3.2.1
+ dependencies:
+ color-convert: registry.npmmirror.com/color-convert@1.9.3
+ color-string: registry.npmmirror.com/color-string@1.9.1
+ dev: false
+
+ registry.npmmirror.com/colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz}
+ name: colorette
+ version: 2.0.20
+ dev: true
+
+ registry.npmmirror.com/combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz}
+ name: combined-stream
+ version: 1.0.8
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: registry.npmmirror.com/delayed-stream@1.0.0
+ dev: false
+
+ registry.npmmirror.com/commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-11.1.0.tgz}
+ name: commander
+ version: 11.1.0
+ engines: {node: '>=16'}
+ dev: true
+
+ registry.npmmirror.com/compute-scroll-into-view@1.0.20:
+ resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz}
+ name: compute-scroll-into-view
+ version: 1.0.20
+ dev: false
+
+ registry.npmmirror.com/concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz}
+ name: concat-map
+ version: 0.0.1
+ dev: true
+
+ registry.npmmirror.com/copy-anything@2.0.6:
+ resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz}
+ name: copy-anything
+ version: 2.0.6
+ dependencies:
+ is-what: registry.npmmirror.com/is-what@3.14.1
+
+ registry.npmmirror.com/core-js@3.33.2:
+ resolution: {integrity: sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-3.33.2.tgz}
+ name: core-js
+ version: 3.33.2
+ requiresBuild: true
+ dev: false
+
+ registry.npmmirror.com/cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz}
+ name: cross-spawn
+ version: 7.0.3
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: registry.npmmirror.com/path-key@3.1.1
+ shebang-command: registry.npmmirror.com/shebang-command@2.0.0
+ which: registry.npmmirror.com/which@2.0.2
+ dev: true
+
+ registry.npmmirror.com/cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz}
+ name: cssesc
+ version: 3.0.0
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ registry.npmmirror.com/csstype@3.1.2:
+ resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz}
+ name: csstype
+ version: 3.1.2
+
+ registry.npmmirror.com/dayjs@1.11.10:
+ resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz}
+ name: dayjs
+ version: 1.11.10
+ dev: false
+
+ registry.npmmirror.com/debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz}
+ name: debug
+ version: 3.2.7
+ requiresBuild: true
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: registry.npmmirror.com/ms@2.1.2
+ optional: true
+
+ registry.npmmirror.com/debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}
+ name: debug
+ version: 4.3.4
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: registry.npmmirror.com/ms@2.1.2
+ dev: true
+
+ registry.npmmirror.com/deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz}
+ name: deep-is
+ version: 0.1.4
+ dev: true
+
+ registry.npmmirror.com/default-browser-id@3.0.0:
+ resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/default-browser-id/-/default-browser-id-3.0.0.tgz}
+ name: default-browser-id
+ version: 3.0.0
+ engines: {node: '>=12'}
+ dependencies:
+ bplist-parser: registry.npmmirror.com/bplist-parser@0.2.0
+ untildify: registry.npmmirror.com/untildify@4.0.0
+ dev: true
+
+ registry.npmmirror.com/default-browser@4.0.0:
+ resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/default-browser/-/default-browser-4.0.0.tgz}
+ name: default-browser
+ version: 4.0.0
+ engines: {node: '>=14.16'}
+ dependencies:
+ bundle-name: registry.npmmirror.com/bundle-name@3.0.0
+ default-browser-id: registry.npmmirror.com/default-browser-id@3.0.0
+ execa: registry.npmmirror.com/execa@7.2.0
+ titleize: registry.npmmirror.com/titleize@3.0.0
+ dev: true
+
+ registry.npmmirror.com/define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz}
+ name: define-lazy-prop
+ version: 3.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz}
+ name: delayed-stream
+ version: 1.0.0
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ registry.npmmirror.com/doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz}
+ name: doctrine
+ version: 3.0.0
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: registry.npmmirror.com/esutils@2.0.3
+ dev: true
+
+ registry.npmmirror.com/dom-align@1.12.4:
+ resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz}
+ name: dom-align
+ version: 1.12.4
+ dev: false
+
+ registry.npmmirror.com/dom-scroll-into-view@2.0.1:
+ resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz}
+ name: dom-scroll-into-view
+ version: 2.0.1
+ dev: false
+
+ registry.npmmirror.com/eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz}
+ name: eastasianwidth
+ version: 0.2.0
+ dev: true
+
+ registry.npmmirror.com/echarts@5.4.3:
+ resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz}
+ name: echarts
+ version: 5.4.3
+ dependencies:
+ tslib: registry.npmmirror.com/tslib@2.3.0
+ zrender: registry.npmmirror.com/zrender@5.4.4
+ dev: false
+
+ registry.npmmirror.com/element-china-area-data@6.1.0:
+ resolution: {integrity: sha512-IkpcjwQv2A/2AxFiSoaISZ+oMw1rZCPUSOg5sOCwT5jKc96TaawmKZeY81xfxXsO0QbKxU5LLc6AirhG52hUmg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/element-china-area-data/-/element-china-area-data-6.1.0.tgz}
+ name: element-china-area-data
+ version: 6.1.0
+ dependencies:
+ china-division: registry.npmmirror.com/china-division@2.7.0
+ dev: false
+
+ registry.npmmirror.com/element-plus@2.4.0(vue@3.3.4):
+ resolution: {integrity: sha512-yJEa8LXkGOOgkfkeqMMEdeX/Dc8EH9qPcRuX91dlhSXxgCKKbp9tH3QFTOG99ibZsrN/Em62nh7ddvbc7I1frw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/element-plus/-/element-plus-2.4.0.tgz}
+ id: registry.npmmirror.com/element-plus/2.4.0
+ name: element-plus
+ version: 2.4.0
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor@3.6.1
+ '@element-plus/icons-vue': registry.npmmirror.com/@element-plus/icons-vue@2.1.0(vue@3.3.4)
+ '@floating-ui/dom': registry.npmmirror.com/@floating-ui/dom@1.5.3
+ '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es@2.11.7
+ '@types/lodash': registry.npmmirror.com/@types/lodash@4.14.199
+ '@types/lodash-es': registry.npmmirror.com/@types/lodash-es@4.17.9
+ '@vueuse/core': registry.npmmirror.com/@vueuse/core@9.13.0(vue@3.3.4)
+ async-validator: registry.npmmirror.com/async-validator@4.2.5
+ dayjs: registry.npmmirror.com/dayjs@1.11.10
+ escape-html: registry.npmmirror.com/escape-html@1.0.3
+ lodash: registry.npmmirror.com/lodash@4.17.21
+ lodash-es: registry.npmmirror.com/lodash-es@4.17.21
+ lodash-unified: registry.npmmirror.com/lodash-unified@1.0.3(@types/lodash-es@4.17.9)(lodash-es@4.17.21)(lodash@4.17.21)
+ memoize-one: registry.npmmirror.com/memoize-one@6.0.0
+ normalize-wheel-es: registry.npmmirror.com/normalize-wheel-es@1.2.0
+ vue: registry.npmmirror.com/vue@3.3.4
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ dev: false
+
+ registry.npmmirror.com/emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz}
+ name: emoji-regex
+ version: 9.2.2
+ dev: true
+
+ registry.npmmirror.com/errno@0.1.8:
+ resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
+ name: errno
+ version: 0.1.8
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ prr: registry.npmmirror.com/prr@1.0.1
+ optional: true
+
+ registry.npmmirror.com/esbuild@0.18.20:
+ resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz}
+ name: esbuild
+ version: 0.18.20
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm@0.18.20
+ '@esbuild/android-arm64': registry.npmmirror.com/@esbuild/android-arm64@0.18.20
+ '@esbuild/android-x64': registry.npmmirror.com/@esbuild/android-x64@0.18.20
+ '@esbuild/darwin-arm64': registry.npmmirror.com/@esbuild/darwin-arm64@0.18.20
+ '@esbuild/darwin-x64': registry.npmmirror.com/@esbuild/darwin-x64@0.18.20
+ '@esbuild/freebsd-arm64': registry.npmmirror.com/@esbuild/freebsd-arm64@0.18.20
+ '@esbuild/freebsd-x64': registry.npmmirror.com/@esbuild/freebsd-x64@0.18.20
+ '@esbuild/linux-arm': registry.npmmirror.com/@esbuild/linux-arm@0.18.20
+ '@esbuild/linux-arm64': registry.npmmirror.com/@esbuild/linux-arm64@0.18.20
+ '@esbuild/linux-ia32': registry.npmmirror.com/@esbuild/linux-ia32@0.18.20
+ '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64@0.18.20
+ '@esbuild/linux-mips64el': registry.npmmirror.com/@esbuild/linux-mips64el@0.18.20
+ '@esbuild/linux-ppc64': registry.npmmirror.com/@esbuild/linux-ppc64@0.18.20
+ '@esbuild/linux-riscv64': registry.npmmirror.com/@esbuild/linux-riscv64@0.18.20
+ '@esbuild/linux-s390x': registry.npmmirror.com/@esbuild/linux-s390x@0.18.20
+ '@esbuild/linux-x64': registry.npmmirror.com/@esbuild/linux-x64@0.18.20
+ '@esbuild/netbsd-x64': registry.npmmirror.com/@esbuild/netbsd-x64@0.18.20
+ '@esbuild/openbsd-x64': registry.npmmirror.com/@esbuild/openbsd-x64@0.18.20
+ '@esbuild/sunos-x64': registry.npmmirror.com/@esbuild/sunos-x64@0.18.20
+ '@esbuild/win32-arm64': registry.npmmirror.com/@esbuild/win32-arm64@0.18.20
+ '@esbuild/win32-ia32': registry.npmmirror.com/@esbuild/win32-ia32@0.18.20
+ '@esbuild/win32-x64': registry.npmmirror.com/@esbuild/win32-x64@0.18.20
+ dev: true
+
+ registry.npmmirror.com/escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz}
+ name: escape-html
+ version: 1.0.3
+ dev: false
+
+ registry.npmmirror.com/escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz}
+ name: escape-string-regexp
+ version: 4.0.0
+ engines: {node: '>=10'}
+ dev: true
+
+ registry.npmmirror.com/escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz}
+ name: escape-string-regexp
+ version: 5.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/eslint-config-prettier@8.10.0(eslint@8.51.0):
+ resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz}
+ id: registry.npmmirror.com/eslint-config-prettier/8.10.0
+ name: eslint-config-prettier
+ version: 8.10.0
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ eslint: registry.npmmirror.com/eslint@8.51.0
+ dev: true
+
+ registry.npmmirror.com/eslint-plugin-prettier@5.0.1(eslint-config-prettier@8.10.0)(eslint@8.51.0)(prettier@3.0.3):
+ resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz}
+ id: registry.npmmirror.com/eslint-plugin-prettier/5.0.1
+ name: eslint-plugin-prettier
+ version: 5.0.1
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '*'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+ dependencies:
+ eslint: registry.npmmirror.com/eslint@8.51.0
+ eslint-config-prettier: registry.npmmirror.com/eslint-config-prettier@8.10.0(eslint@8.51.0)
+ prettier: registry.npmmirror.com/prettier@3.0.3
+ prettier-linter-helpers: registry.npmmirror.com/prettier-linter-helpers@1.0.0
+ synckit: registry.npmmirror.com/synckit@0.8.5
+ dev: true
+
+ registry.npmmirror.com/eslint-plugin-vue@9.17.0(eslint@8.51.0):
+ resolution: {integrity: sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz}
+ id: registry.npmmirror.com/eslint-plugin-vue/9.17.0
+ name: eslint-plugin-vue
+ version: 9.17.0
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ '@eslint-community/eslint-utils': registry.npmmirror.com/@eslint-community/eslint-utils@4.4.0(eslint@8.51.0)
+ eslint: registry.npmmirror.com/eslint@8.51.0
+ natural-compare: registry.npmmirror.com/natural-compare@1.4.0
+ nth-check: registry.npmmirror.com/nth-check@2.1.1
+ postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
+ semver: registry.npmmirror.com/semver@7.5.4
+ vue-eslint-parser: registry.npmmirror.com/vue-eslint-parser@9.3.2(eslint@8.51.0)
+ xml-name-validator: registry.npmmirror.com/xml-name-validator@4.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ registry.npmmirror.com/eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz}
+ name: eslint-scope
+ version: 7.2.2
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: registry.npmmirror.com/esrecurse@4.3.0
+ estraverse: registry.npmmirror.com/estraverse@5.3.0
+ dev: true
+
+ registry.npmmirror.com/eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz}
+ name: eslint-visitor-keys
+ version: 3.4.3
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ registry.npmmirror.com/eslint@8.51.0:
+ resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eslint/-/eslint-8.51.0.tgz}
+ name: eslint
+ version: 8.51.0
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint-community/eslint-utils': registry.npmmirror.com/@eslint-community/eslint-utils@4.4.0(eslint@8.51.0)
+ '@eslint-community/regexpp': registry.npmmirror.com/@eslint-community/regexpp@4.9.1
+ '@eslint/eslintrc': registry.npmmirror.com/@eslint/eslintrc@2.1.2
+ '@eslint/js': registry.npmmirror.com/@eslint/js@8.51.0
+ '@humanwhocodes/config-array': registry.npmmirror.com/@humanwhocodes/config-array@0.11.11
+ '@humanwhocodes/module-importer': registry.npmmirror.com/@humanwhocodes/module-importer@1.0.1
+ '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk@1.2.8
+ ajv: registry.npmmirror.com/ajv@6.12.6
+ chalk: registry.npmmirror.com/chalk@4.1.2
+ cross-spawn: registry.npmmirror.com/cross-spawn@7.0.3
+ debug: registry.npmmirror.com/debug@4.3.4
+ doctrine: registry.npmmirror.com/doctrine@3.0.0
+ escape-string-regexp: registry.npmmirror.com/escape-string-regexp@4.0.0
+ eslint-scope: registry.npmmirror.com/eslint-scope@7.2.2
+ eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys@3.4.3
+ espree: registry.npmmirror.com/espree@9.6.1
+ esquery: registry.npmmirror.com/esquery@1.5.0
+ esutils: registry.npmmirror.com/esutils@2.0.3
+ fast-deep-equal: registry.npmmirror.com/fast-deep-equal@3.1.3
+ file-entry-cache: registry.npmmirror.com/file-entry-cache@6.0.1
+ find-up: registry.npmmirror.com/find-up@5.0.0
+ glob-parent: registry.npmmirror.com/glob-parent@6.0.2
+ globals: registry.npmmirror.com/globals@13.23.0
+ graphemer: registry.npmmirror.com/graphemer@1.4.0
+ ignore: registry.npmmirror.com/ignore@5.2.4
+ imurmurhash: registry.npmmirror.com/imurmurhash@0.1.4
+ is-glob: registry.npmmirror.com/is-glob@4.0.3
+ is-path-inside: registry.npmmirror.com/is-path-inside@3.0.3
+ js-yaml: registry.npmmirror.com/js-yaml@4.1.0
+ json-stable-stringify-without-jsonify: registry.npmmirror.com/json-stable-stringify-without-jsonify@1.0.1
+ levn: registry.npmmirror.com/levn@0.4.1
+ lodash.merge: registry.npmmirror.com/lodash.merge@4.6.2
+ minimatch: registry.npmmirror.com/minimatch@3.1.2
+ natural-compare: registry.npmmirror.com/natural-compare@1.4.0
+ optionator: registry.npmmirror.com/optionator@0.9.3
+ strip-ansi: registry.npmmirror.com/strip-ansi@6.0.1
+ text-table: registry.npmmirror.com/text-table@0.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ registry.npmmirror.com/espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz}
+ name: espree
+ version: 9.6.1
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: registry.npmmirror.com/acorn@8.10.0
+ acorn-jsx: registry.npmmirror.com/acorn-jsx@5.3.2(acorn@8.10.0)
+ eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys@3.4.3
+ dev: true
+
+ registry.npmmirror.com/esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz}
+ name: esquery
+ version: 1.5.0
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: registry.npmmirror.com/estraverse@5.3.0
+ dev: true
+
+ registry.npmmirror.com/esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz}
+ name: esrecurse
+ version: 4.3.0
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: registry.npmmirror.com/estraverse@5.3.0
+ dev: true
+
+ registry.npmmirror.com/estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz}
+ name: estraverse
+ version: 5.3.0
+ engines: {node: '>=4.0'}
+ dev: true
+
+ registry.npmmirror.com/estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz}
+ name: estree-walker
+ version: 2.0.2
+
+ registry.npmmirror.com/esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz}
+ name: esutils
+ version: 2.0.3
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ registry.npmmirror.com/eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz}
+ name: eventemitter3
+ version: 5.0.1
+ dev: true
+
+ registry.npmmirror.com/execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz}
+ name: execa
+ version: 5.1.1
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: registry.npmmirror.com/cross-spawn@7.0.3
+ get-stream: registry.npmmirror.com/get-stream@6.0.1
+ human-signals: registry.npmmirror.com/human-signals@2.1.0
+ is-stream: registry.npmmirror.com/is-stream@2.0.1
+ merge-stream: registry.npmmirror.com/merge-stream@2.0.0
+ npm-run-path: registry.npmmirror.com/npm-run-path@4.0.1
+ onetime: registry.npmmirror.com/onetime@5.1.2
+ signal-exit: registry.npmmirror.com/signal-exit@3.0.7
+ strip-final-newline: registry.npmmirror.com/strip-final-newline@2.0.0
+ dev: true
+
+ registry.npmmirror.com/execa@7.2.0:
+ resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-7.2.0.tgz}
+ name: execa
+ version: 7.2.0
+ engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+ dependencies:
+ cross-spawn: registry.npmmirror.com/cross-spawn@7.0.3
+ get-stream: registry.npmmirror.com/get-stream@6.0.1
+ human-signals: registry.npmmirror.com/human-signals@4.3.1
+ is-stream: registry.npmmirror.com/is-stream@3.0.0
+ merge-stream: registry.npmmirror.com/merge-stream@2.0.0
+ npm-run-path: registry.npmmirror.com/npm-run-path@5.1.0
+ onetime: registry.npmmirror.com/onetime@6.0.0
+ signal-exit: registry.npmmirror.com/signal-exit@3.0.7
+ strip-final-newline: registry.npmmirror.com/strip-final-newline@3.0.0
+ dev: true
+
+ registry.npmmirror.com/execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz}
+ name: execa
+ version: 8.0.1
+ engines: {node: '>=16.17'}
+ dependencies:
+ cross-spawn: registry.npmmirror.com/cross-spawn@7.0.3
+ get-stream: registry.npmmirror.com/get-stream@8.0.1
+ human-signals: registry.npmmirror.com/human-signals@5.0.0
+ is-stream: registry.npmmirror.com/is-stream@3.0.0
+ merge-stream: registry.npmmirror.com/merge-stream@2.0.0
+ npm-run-path: registry.npmmirror.com/npm-run-path@5.1.0
+ onetime: registry.npmmirror.com/onetime@6.0.0
+ signal-exit: registry.npmmirror.com/signal-exit@4.1.0
+ strip-final-newline: registry.npmmirror.com/strip-final-newline@3.0.0
+ dev: true
+
+ registry.npmmirror.com/fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz}
+ name: fast-deep-equal
+ version: 3.1.3
+ dev: true
+
+ registry.npmmirror.com/fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz}
+ name: fast-diff
+ version: 1.3.0
+ dev: true
+
+ registry.npmmirror.com/fast-glob@3.3.1:
+ resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz}
+ name: fast-glob
+ version: 3.3.1
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat@2.0.5
+ '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk@1.2.8
+ glob-parent: registry.npmmirror.com/glob-parent@5.1.2
+ merge2: registry.npmmirror.com/merge2@1.4.1
+ micromatch: registry.npmmirror.com/micromatch@4.0.5
+ dev: true
+
+ registry.npmmirror.com/fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz}
+ name: fast-json-stable-stringify
+ version: 2.1.0
+ dev: true
+
+ registry.npmmirror.com/fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz}
+ name: fast-levenshtein
+ version: 2.0.6
+ dev: true
+
+ registry.npmmirror.com/fastq@1.15.0:
+ resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz}
+ name: fastq
+ version: 1.15.0
+ dependencies:
+ reusify: registry.npmmirror.com/reusify@1.0.4
+ dev: true
+
+ registry.npmmirror.com/file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz}
+ name: file-entry-cache
+ version: 6.0.1
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flat-cache: registry.npmmirror.com/flat-cache@3.1.1
+ dev: true
+
+ registry.npmmirror.com/fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz}
+ name: fill-range
+ version: 7.0.1
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: registry.npmmirror.com/to-regex-range@5.0.1
+ dev: true
+
+ registry.npmmirror.com/find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz}
+ name: find-up
+ version: 5.0.0
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: registry.npmmirror.com/locate-path@6.0.0
+ path-exists: registry.npmmirror.com/path-exists@4.0.0
+ dev: true
+
+ registry.npmmirror.com/flat-cache@3.1.1:
+ resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flat-cache/-/flat-cache-3.1.1.tgz}
+ name: flat-cache
+ version: 3.1.1
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ flatted: registry.npmmirror.com/flatted@3.2.9
+ keyv: registry.npmmirror.com/keyv@4.5.4
+ rimraf: registry.npmmirror.com/rimraf@3.0.2
+ dev: true
+
+ registry.npmmirror.com/flatted@3.2.9:
+ resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/flatted/-/flatted-3.2.9.tgz}
+ name: flatted
+ version: 3.2.9
+ dev: true
+
+ registry.npmmirror.com/follow-redirects@1.15.3:
+ resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz}
+ name: follow-redirects
+ version: 1.15.3
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dev: false
+
+ registry.npmmirror.com/form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz}
+ name: form-data
+ version: 4.0.0
+ engines: {node: '>= 6'}
+ dependencies:
+ asynckit: registry.npmmirror.com/asynckit@0.4.0
+ combined-stream: registry.npmmirror.com/combined-stream@1.0.8
+ mime-types: registry.npmmirror.com/mime-types@2.1.35
+ dev: false
+
+ registry.npmmirror.com/fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz}
+ name: fs.realpath
+ version: 1.0.0
+ dev: true
+
+ registry.npmmirror.com/fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz}
+ name: fsevents
+ version: 2.3.3
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ registry.npmmirror.com/get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz}
+ name: get-stream
+ version: 6.0.1
+ engines: {node: '>=10'}
+ dev: true
+
+ registry.npmmirror.com/get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz}
+ name: get-stream
+ version: 8.0.1
+ engines: {node: '>=16'}
+ dev: true
+
+ registry.npmmirror.com/glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz}
+ name: glob-parent
+ version: 5.1.2
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: registry.npmmirror.com/is-glob@4.0.3
+ dev: true
+
+ registry.npmmirror.com/glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz}
+ name: glob-parent
+ version: 6.0.2
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: registry.npmmirror.com/is-glob@4.0.3
+ dev: true
+
+ registry.npmmirror.com/glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz}
+ name: glob
+ version: 7.2.3
+ dependencies:
+ fs.realpath: registry.npmmirror.com/fs.realpath@1.0.0
+ inflight: registry.npmmirror.com/inflight@1.0.6
+ inherits: registry.npmmirror.com/inherits@2.0.4
+ minimatch: registry.npmmirror.com/minimatch@3.1.2
+ once: registry.npmmirror.com/once@1.4.0
+ path-is-absolute: registry.npmmirror.com/path-is-absolute@1.0.1
+ dev: true
+
+ registry.npmmirror.com/globals@13.23.0:
+ resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/globals/-/globals-13.23.0.tgz}
+ name: globals
+ version: 13.23.0
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: registry.npmmirror.com/type-fest@0.20.2
+ dev: true
+
+ registry.npmmirror.com/graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz}
+ name: graceful-fs
+ version: 4.2.11
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz}
+ name: graphemer
+ version: 1.4.0
+ dev: true
+
+ registry.npmmirror.com/has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz}
+ name: has-flag
+ version: 4.0.0
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/has@1.0.4:
+ resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.4.tgz}
+ name: has
+ version: 1.0.4
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
+ registry.npmmirror.com/human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz}
+ name: human-signals
+ version: 2.1.0
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ registry.npmmirror.com/human-signals@4.3.1:
+ resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-4.3.1.tgz}
+ name: human-signals
+ version: 4.3.1
+ engines: {node: '>=14.18.0'}
+ dev: true
+
+ registry.npmmirror.com/human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz}
+ name: human-signals
+ version: 5.0.0
+ engines: {node: '>=16.17.0'}
+ dev: true
+
+ registry.npmmirror.com/iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz}
+ name: iconv-lite
+ version: 0.6.3
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dependencies:
+ safer-buffer: registry.npmmirror.com/safer-buffer@2.1.2
+ optional: true
+
+ registry.npmmirror.com/ignore@5.2.4:
+ resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz}
+ name: ignore
+ version: 5.2.4
+ engines: {node: '>= 4'}
+ dev: true
+
+ registry.npmmirror.com/image-size@0.5.5:
+ resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz}
+ name: image-size
+ version: 0.5.5
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/immutable@4.3.4:
+ resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz}
+ name: immutable
+ version: 4.3.4
+ dev: true
+
+ registry.npmmirror.com/import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz}
+ name: import-fresh
+ version: 3.3.0
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: registry.npmmirror.com/parent-module@1.0.1
+ resolve-from: registry.npmmirror.com/resolve-from@4.0.0
+ dev: true
+
+ registry.npmmirror.com/imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz}
+ name: imurmurhash
+ version: 0.1.4
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ registry.npmmirror.com/inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz}
+ name: inflight
+ version: 1.0.6
+ dependencies:
+ once: registry.npmmirror.com/once@1.4.0
+ wrappy: registry.npmmirror.com/wrappy@1.0.2
+ dev: true
+
+ registry.npmmirror.com/inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz}
+ name: inherits
+ version: 2.0.4
+ dev: true
+
+ registry.npmmirror.com/is-arrayish@0.3.2:
+ resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz}
+ name: is-arrayish
+ version: 0.3.2
+ dev: false
+
+ registry.npmmirror.com/is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz}
+ name: is-binary-path
+ version: 2.1.0
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: registry.npmmirror.com/binary-extensions@2.2.0
+ dev: true
+
+ registry.npmmirror.com/is-core-module@2.13.0:
+ resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz}
+ name: is-core-module
+ version: 2.13.0
+ dependencies:
+ has: registry.npmmirror.com/has@1.0.4
+ dev: true
+
+ registry.npmmirror.com/is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz}
+ name: is-docker
+ version: 2.2.1
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ registry.npmmirror.com/is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz}
+ name: is-docker
+ version: 3.0.0
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ dev: true
+
+ registry.npmmirror.com/is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz}
+ name: is-extglob
+ version: 2.1.1
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ registry.npmmirror.com/is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz}
+ name: is-fullwidth-code-point
+ version: 4.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz}
+ name: is-glob
+ version: 4.0.3
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: registry.npmmirror.com/is-extglob@2.1.1
+ dev: true
+
+ registry.npmmirror.com/is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz}
+ name: is-inside-container
+ version: 1.0.0
+ engines: {node: '>=14.16'}
+ hasBin: true
+ dependencies:
+ is-docker: registry.npmmirror.com/is-docker@3.0.0
+ dev: true
+
+ registry.npmmirror.com/is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz}
+ name: is-number
+ version: 7.0.0
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ registry.npmmirror.com/is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz}
+ name: is-path-inside
+ version: 3.0.3
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/is-plain-object@3.0.1:
+ resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz}
+ name: is-plain-object
+ version: 3.0.1
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ registry.npmmirror.com/is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz}
+ name: is-stream
+ version: 2.0.1
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz}
+ name: is-stream
+ version: 3.0.0
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ registry.npmmirror.com/is-what@3.14.1:
+ resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz}
+ name: is-what
+ version: 3.14.1
+
+ registry.npmmirror.com/is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz}
+ name: is-wsl
+ version: 2.2.0
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: registry.npmmirror.com/is-docker@2.2.1
+ dev: true
+
+ registry.npmmirror.com/isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz}
+ name: isexe
+ version: 2.0.0
+ dev: true
+
+ registry.npmmirror.com/js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}
+ name: js-tokens
+ version: 4.0.0
+ dev: false
+
+ registry.npmmirror.com/js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz}
+ name: js-yaml
+ version: 4.1.0
+ hasBin: true
+ dependencies:
+ argparse: registry.npmmirror.com/argparse@2.0.1
+ dev: true
+
+ registry.npmmirror.com/json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz}
+ name: json-buffer
+ version: 3.0.1
+ dev: true
+
+ registry.npmmirror.com/json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz}
+ name: json-schema-traverse
+ version: 0.4.1
+ dev: true
+
+ registry.npmmirror.com/json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz}
+ name: json-stable-stringify-without-jsonify
+ version: 1.0.1
+ dev: true
+
+ registry.npmmirror.com/jsonc-parser@3.2.0:
+ resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz}
+ name: jsonc-parser
+ version: 3.2.0
+ dev: true
+
+ registry.npmmirror.com/keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz}
+ name: keyv
+ version: 4.5.4
+ dependencies:
+ json-buffer: registry.npmmirror.com/json-buffer@3.0.1
+ dev: true
+
+ registry.npmmirror.com/less@4.2.0:
+ resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/less/-/less-4.2.0.tgz}
+ name: less
+ version: 4.2.0
+ engines: {node: '>=6'}
+ hasBin: true
+ dependencies:
+ copy-anything: registry.npmmirror.com/copy-anything@2.0.6
+ parse-node-version: registry.npmmirror.com/parse-node-version@1.0.1
+ tslib: registry.npmmirror.com/tslib@2.6.2
+ optionalDependencies:
+ errno: registry.npmmirror.com/errno@0.1.8
+ graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
+ image-size: registry.npmmirror.com/image-size@0.5.5
+ make-dir: registry.npmmirror.com/make-dir@2.1.0
+ mime: registry.npmmirror.com/mime@1.6.0
+ needle: registry.npmmirror.com/needle@3.2.0
+ source-map: registry.npmmirror.com/source-map@0.6.1
+ transitivePeerDependencies:
+ - supports-color
+
+ registry.npmmirror.com/levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz}
+ name: levn
+ version: 0.4.1
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: registry.npmmirror.com/prelude-ls@1.2.1
+ type-check: registry.npmmirror.com/type-check@0.4.0
+ dev: true
+
+ registry.npmmirror.com/lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz}
+ name: lilconfig
+ version: 2.1.0
+ engines: {node: '>=10'}
+ dev: true
+
+ registry.npmmirror.com/lint-staged@15.0.1:
+ resolution: {integrity: sha512-2IU5OWmCaxch0X0+IBF4/v7sutpB+F3qoXbro43pYjQTOo5wumckjxoxn47pQBqqBsCWrD5HnI2uG/zJA7isew==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lint-staged/-/lint-staged-15.0.1.tgz}
+ name: lint-staged
+ version: 15.0.1
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+ dependencies:
+ chalk: registry.npmmirror.com/chalk@5.3.0
+ commander: registry.npmmirror.com/commander@11.1.0
+ debug: registry.npmmirror.com/debug@4.3.4
+ execa: registry.npmmirror.com/execa@8.0.1
+ lilconfig: registry.npmmirror.com/lilconfig@2.1.0
+ listr2: registry.npmmirror.com/listr2@7.0.1
+ micromatch: registry.npmmirror.com/micromatch@4.0.5
+ pidtree: registry.npmmirror.com/pidtree@0.6.0
+ string-argv: registry.npmmirror.com/string-argv@0.3.2
+ yaml: registry.npmmirror.com/yaml@2.3.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ registry.npmmirror.com/listr2@7.0.1:
+ resolution: {integrity: sha512-nz+7hwgbDp8eWNoDgzdl4hA/xDSLrNRzPu1TLgOYs6l5Y+Ma6zVWWy9Oyt9TQFONwKoSPoka3H50D3vD5EuNwg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/listr2/-/listr2-7.0.1.tgz}
+ name: listr2
+ version: 7.0.1
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ cli-truncate: registry.npmmirror.com/cli-truncate@3.1.0
+ colorette: registry.npmmirror.com/colorette@2.0.20
+ eventemitter3: registry.npmmirror.com/eventemitter3@5.0.1
+ log-update: registry.npmmirror.com/log-update@5.0.1
+ rfdc: registry.npmmirror.com/rfdc@1.3.0
+ wrap-ansi: registry.npmmirror.com/wrap-ansi@8.1.0
+ dev: true
+
+ registry.npmmirror.com/local-pkg@0.4.3:
+ resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz}
+ name: local-pkg
+ version: 0.4.3
+ engines: {node: '>=14'}
+ dev: true
+
+ registry.npmmirror.com/locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz}
+ name: locate-path
+ version: 6.0.0
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: registry.npmmirror.com/p-locate@5.0.0
+ dev: true
+
+ registry.npmmirror.com/lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz}
+ name: lodash-es
+ version: 4.17.21
+ dev: false
+
+ registry.npmmirror.com/lodash-unified@1.0.3(@types/lodash-es@4.17.9)(lodash-es@4.17.21)(lodash@4.17.21):
+ resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz}
+ id: registry.npmmirror.com/lodash-unified/1.0.3
+ name: lodash-unified
+ version: 1.0.3
+ peerDependencies:
+ '@types/lodash-es': '*'
+ lodash: '*'
+ lodash-es: '*'
+ dependencies:
+ '@types/lodash-es': registry.npmmirror.com/@types/lodash-es@4.17.9
+ lodash: registry.npmmirror.com/lodash@4.17.21
+ lodash-es: registry.npmmirror.com/lodash-es@4.17.21
+ dev: false
+
+ registry.npmmirror.com/lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz}
+ name: lodash.merge
+ version: 4.6.2
+ dev: true
+
+ registry.npmmirror.com/lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
+ name: lodash
+ version: 4.17.21
+
+ registry.npmmirror.com/log-update@5.0.1:
+ resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/log-update/-/log-update-5.0.1.tgz}
+ name: log-update
+ version: 5.0.1
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ ansi-escapes: registry.npmmirror.com/ansi-escapes@5.0.0
+ cli-cursor: registry.npmmirror.com/cli-cursor@4.0.0
+ slice-ansi: registry.npmmirror.com/slice-ansi@5.0.0
+ strip-ansi: registry.npmmirror.com/strip-ansi@7.1.0
+ wrap-ansi: registry.npmmirror.com/wrap-ansi@8.1.0
+ dev: true
+
+ registry.npmmirror.com/loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz}
+ name: loose-envify
+ version: 1.4.0
+ hasBin: true
+ dependencies:
+ js-tokens: registry.npmmirror.com/js-tokens@4.0.0
+ dev: false
+
+ registry.npmmirror.com/lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz}
+ name: lru-cache
+ version: 6.0.0
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: registry.npmmirror.com/yallist@4.0.0
+ dev: true
+
+ registry.npmmirror.com/magic-string@0.30.5:
+ resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz}
+ name: magic-string
+ version: 0.30.5
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec@1.4.15
+
+ registry.npmmirror.com/make-dir@2.1.0:
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz}
+ name: make-dir
+ version: 2.1.0
+ engines: {node: '>=6'}
+ requiresBuild: true
+ dependencies:
+ pify: registry.npmmirror.com/pify@4.0.1
+ semver: registry.npmmirror.com/semver@5.7.2
+ optional: true
+
+ registry.npmmirror.com/memoize-one@6.0.0:
+ resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz}
+ name: memoize-one
+ version: 6.0.0
+ dev: false
+
+ registry.npmmirror.com/merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz}
+ name: merge-stream
+ version: 2.0.0
+ dev: true
+
+ registry.npmmirror.com/merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz}
+ name: merge2
+ version: 1.4.1
+ engines: {node: '>= 8'}
+ dev: true
+
+ registry.npmmirror.com/micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz}
+ name: micromatch
+ version: 4.0.5
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: registry.npmmirror.com/braces@3.0.2
+ picomatch: registry.npmmirror.com/picomatch@2.3.1
+ dev: true
+
+ registry.npmmirror.com/mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz}
+ name: mime-db
+ version: 1.52.0
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ registry.npmmirror.com/mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz}
+ name: mime-types
+ version: 2.1.35
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: registry.npmmirror.com/mime-db@1.52.0
+ dev: false
+
+ registry.npmmirror.com/mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
+ name: mime
+ version: 1.6.0
+ engines: {node: '>=4'}
+ hasBin: true
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz}
+ name: mimic-fn
+ version: 2.1.0
+ engines: {node: '>=6'}
+ dev: true
+
+ registry.npmmirror.com/mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz}
+ name: mimic-fn
+ version: 4.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz}
+ name: minimatch
+ version: 3.1.2
+ dependencies:
+ brace-expansion: registry.npmmirror.com/brace-expansion@1.1.11
+ dev: true
+
+ registry.npmmirror.com/minimatch@9.0.3:
+ resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz}
+ name: minimatch
+ version: 9.0.3
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ brace-expansion: registry.npmmirror.com/brace-expansion@2.0.1
+ dev: true
+
+ registry.npmmirror.com/mlly@1.4.2:
+ resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mlly/-/mlly-1.4.2.tgz}
+ name: mlly
+ version: 1.4.2
+ dependencies:
+ acorn: registry.npmmirror.com/acorn@8.10.0
+ pathe: registry.npmmirror.com/pathe@1.1.1
+ pkg-types: registry.npmmirror.com/pkg-types@1.0.3
+ ufo: registry.npmmirror.com/ufo@1.3.1
+ dev: true
+
+ registry.npmmirror.com/ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz}
+ name: ms
+ version: 2.1.2
+
+ registry.npmmirror.com/nanoid@3.3.6:
+ resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz}
+ name: nanoid
+ version: 3.3.6
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ registry.npmmirror.com/nanopop@2.3.0:
+ resolution: {integrity: sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanopop/-/nanopop-2.3.0.tgz}
+ name: nanopop
+ version: 2.3.0
+ dev: false
+
+ registry.npmmirror.com/natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz}
+ name: natural-compare
+ version: 1.4.0
+ dev: true
+
+ registry.npmmirror.com/needle@3.2.0:
+ resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz}
+ name: needle
+ version: 3.2.0
+ engines: {node: '>= 4.4.x'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ debug: registry.npmmirror.com/debug@3.2.7
+ iconv-lite: registry.npmmirror.com/iconv-lite@0.6.3
+ sax: registry.npmmirror.com/sax@1.3.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ registry.npmmirror.com/normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz}
+ name: normalize-path
+ version: 3.0.0
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ registry.npmmirror.com/normalize-wheel-es@1.2.0:
+ resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz}
+ name: normalize-wheel-es
+ version: 1.2.0
+ dev: false
+
+ registry.npmmirror.com/npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz}
+ name: npm-run-path
+ version: 4.0.1
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: registry.npmmirror.com/path-key@3.1.1
+ dev: true
+
+ registry.npmmirror.com/npm-run-path@5.1.0:
+ resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz}
+ name: npm-run-path
+ version: 5.1.0
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ path-key: registry.npmmirror.com/path-key@4.0.0
+ dev: true
+
+ registry.npmmirror.com/nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz}
+ name: nth-check
+ version: 2.1.1
+ dependencies:
+ boolbase: registry.npmmirror.com/boolbase@1.0.0
+ dev: true
+
+ registry.npmmirror.com/number-precision@1.6.0:
+ resolution: {integrity: sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/number-precision/-/number-precision-1.6.0.tgz}
+ name: number-precision
+ version: 1.6.0
+ dev: false
+
+ registry.npmmirror.com/once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
+ name: once
+ version: 1.4.0
+ dependencies:
+ wrappy: registry.npmmirror.com/wrappy@1.0.2
+ dev: true
+
+ registry.npmmirror.com/onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz}
+ name: onetime
+ version: 5.1.2
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: registry.npmmirror.com/mimic-fn@2.1.0
+ dev: true
+
+ registry.npmmirror.com/onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz}
+ name: onetime
+ version: 6.0.0
+ engines: {node: '>=12'}
+ dependencies:
+ mimic-fn: registry.npmmirror.com/mimic-fn@4.0.0
+ dev: true
+
+ registry.npmmirror.com/open@9.1.0:
+ resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/open/-/open-9.1.0.tgz}
+ name: open
+ version: 9.1.0
+ engines: {node: '>=14.16'}
+ dependencies:
+ default-browser: registry.npmmirror.com/default-browser@4.0.0
+ define-lazy-prop: registry.npmmirror.com/define-lazy-prop@3.0.0
+ is-inside-container: registry.npmmirror.com/is-inside-container@1.0.0
+ is-wsl: registry.npmmirror.com/is-wsl@2.2.0
+ dev: true
+
+ registry.npmmirror.com/optionator@0.9.3:
+ resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz}
+ name: optionator
+ version: 0.9.3
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ '@aashutoshrathi/word-wrap': registry.npmmirror.com/@aashutoshrathi/word-wrap@1.2.6
+ deep-is: registry.npmmirror.com/deep-is@0.1.4
+ fast-levenshtein: registry.npmmirror.com/fast-levenshtein@2.0.6
+ levn: registry.npmmirror.com/levn@0.4.1
+ prelude-ls: registry.npmmirror.com/prelude-ls@1.2.1
+ type-check: registry.npmmirror.com/type-check@0.4.0
+ dev: true
+
+ registry.npmmirror.com/p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz}
+ name: p-limit
+ version: 3.1.0
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: registry.npmmirror.com/yocto-queue@0.1.0
+ dev: true
+
+ registry.npmmirror.com/p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz}
+ name: p-locate
+ version: 5.0.0
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: registry.npmmirror.com/p-limit@3.1.0
+ dev: true
+
+ registry.npmmirror.com/parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz}
+ name: parent-module
+ version: 1.0.1
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: registry.npmmirror.com/callsites@3.1.0
+ dev: true
+
+ registry.npmmirror.com/parse-node-version@1.0.1:
+ resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz}
+ name: parse-node-version
+ version: 1.0.1
+ engines: {node: '>= 0.10'}
+
+ registry.npmmirror.com/path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz}
+ name: path-exists
+ version: 4.0.0
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz}
+ name: path-is-absolute
+ version: 1.0.1
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ registry.npmmirror.com/path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz}
+ name: path-key
+ version: 3.1.1
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz}
+ name: path-key
+ version: 4.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz}
+ name: path-parse
+ version: 1.0.7
+ dev: true
+
+ registry.npmmirror.com/pathe@1.1.1:
+ resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pathe/-/pathe-1.1.1.tgz}
+ name: pathe
+ version: 1.1.1
+ dev: true
+
+ registry.npmmirror.com/picocolors@1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
+ name: picocolors
+ version: 1.0.0
+
+ registry.npmmirror.com/picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz}
+ name: picomatch
+ version: 2.3.1
+ engines: {node: '>=8.6'}
+ dev: true
+
+ registry.npmmirror.com/pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz}
+ name: pidtree
+ version: 0.6.0
+ engines: {node: '>=0.10'}
+ hasBin: true
+ dev: true
+
+ registry.npmmirror.com/pify@4.0.1:
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz}
+ name: pify
+ version: 4.0.1
+ engines: {node: '>=6'}
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/pinia-plugin-persistedstate@3.2.0(pinia@2.1.7):
+ resolution: {integrity: sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.0.tgz}
+ id: registry.npmmirror.com/pinia-plugin-persistedstate/3.2.0
+ name: pinia-plugin-persistedstate
+ version: 3.2.0
+ peerDependencies:
+ pinia: ^2.0.0
+ dependencies:
+ pinia: registry.npmmirror.com/pinia@2.1.7(vue@3.3.4)
+ dev: true
+
+ registry.npmmirror.com/pinia@2.1.7(vue@3.3.4):
+ resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.1.7.tgz}
+ id: registry.npmmirror.com/pinia/2.1.7
+ name: pinia
+ version: 2.1.7
+ peerDependencies:
+ '@vue/composition-api': ^1.4.0
+ typescript: '>=4.4.4'
+ vue: ^2.6.14 || ^3.3.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api@6.5.1
+ vue: registry.npmmirror.com/vue@3.3.4
+ vue-demi: registry.npmmirror.com/vue-demi@0.14.6(vue@3.3.4)
+
+ registry.npmmirror.com/pkg-types@1.0.3:
+ resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz}
+ name: pkg-types
+ version: 1.0.3
+ dependencies:
+ jsonc-parser: registry.npmmirror.com/jsonc-parser@3.2.0
+ mlly: registry.npmmirror.com/mlly@1.4.2
+ pathe: registry.npmmirror.com/pathe@1.1.1
+ dev: true
+
+ registry.npmmirror.com/postcss-selector-parser@6.0.13:
+ resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz}
+ name: postcss-selector-parser
+ version: 6.0.13
+ engines: {node: '>=4'}
+ dependencies:
+ cssesc: registry.npmmirror.com/cssesc@3.0.0
+ util-deprecate: registry.npmmirror.com/util-deprecate@1.0.2
+ dev: true
+
+ registry.npmmirror.com/postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz}
+ name: postcss
+ version: 8.4.31
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: registry.npmmirror.com/nanoid@3.3.6
+ picocolors: registry.npmmirror.com/picocolors@1.0.0
+ source-map-js: registry.npmmirror.com/source-map-js@1.0.2
+
+ registry.npmmirror.com/prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz}
+ name: prelude-ls
+ version: 1.2.1
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
+ registry.npmmirror.com/prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz}
+ name: prettier-linter-helpers
+ version: 1.0.0
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ fast-diff: registry.npmmirror.com/fast-diff@1.3.0
+ dev: true
+
+ registry.npmmirror.com/prettier@3.0.3:
+ resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier/-/prettier-3.0.3.tgz}
+ name: prettier
+ version: 3.0.3
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ registry.npmmirror.com/proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz}
+ name: proxy-from-env
+ version: 1.1.0
+ dev: false
+
+ registry.npmmirror.com/prr@1.0.1:
+ resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz}
+ name: prr
+ version: 1.0.1
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/punycode@2.3.0:
+ resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz}
+ name: punycode
+ version: 2.3.0
+ engines: {node: '>=6'}
+ dev: true
+
+ registry.npmmirror.com/queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz}
+ name: queue-microtask
+ version: 1.2.3
+ dev: true
+
+ registry.npmmirror.com/readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
+ name: readdirp
+ version: 3.6.0
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: registry.npmmirror.com/picomatch@2.3.1
+ dev: true
+
+ registry.npmmirror.com/regenerator-runtime@0.14.0:
+ resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz}
+ name: regenerator-runtime
+ version: 0.14.0
+ dev: false
+
+ registry.npmmirror.com/resize-detector@0.3.0:
+ resolution: {integrity: sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz}
+ name: resize-detector
+ version: 0.3.0
+ dev: false
+
+ registry.npmmirror.com/resize-observer-polyfill@1.5.1:
+ resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz}
+ name: resize-observer-polyfill
+ version: 1.5.1
+ dev: false
+
+ registry.npmmirror.com/resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz}
+ name: resolve-from
+ version: 4.0.0
+ engines: {node: '>=4'}
+ dev: true
+
+ registry.npmmirror.com/resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz}
+ name: resolve
+ version: 1.22.8
+ hasBin: true
+ dependencies:
+ is-core-module: registry.npmmirror.com/is-core-module@2.13.0
+ path-parse: registry.npmmirror.com/path-parse@1.0.7
+ supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag@1.0.0
+ dev: true
+
+ registry.npmmirror.com/restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz}
+ name: restore-cursor
+ version: 4.0.0
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ onetime: registry.npmmirror.com/onetime@5.1.2
+ signal-exit: registry.npmmirror.com/signal-exit@3.0.7
+ dev: true
+
+ registry.npmmirror.com/reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz}
+ name: reusify
+ version: 1.0.4
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ dev: true
+
+ registry.npmmirror.com/rfdc@1.3.0:
+ resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz}
+ name: rfdc
+ version: 1.3.0
+ dev: true
+
+ registry.npmmirror.com/rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz}
+ name: rimraf
+ version: 3.0.2
+ hasBin: true
+ dependencies:
+ glob: registry.npmmirror.com/glob@7.2.3
+ dev: true
+
+ registry.npmmirror.com/rollup@3.29.4:
+ resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz}
+ name: rollup
+ version: 3.29.4
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: registry.npmmirror.com/fsevents@2.3.3
+ dev: true
+
+ registry.npmmirror.com/run-applescript@5.0.0:
+ resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-applescript/-/run-applescript-5.0.0.tgz}
+ name: run-applescript
+ version: 5.0.0
+ engines: {node: '>=12'}
+ dependencies:
+ execa: registry.npmmirror.com/execa@5.1.1
+ dev: true
+
+ registry.npmmirror.com/run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz}
+ name: run-parallel
+ version: 1.2.0
+ dependencies:
+ queue-microtask: registry.npmmirror.com/queue-microtask@1.2.3
+ dev: true
+
+ registry.npmmirror.com/safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz}
+ name: safer-buffer
+ version: 2.1.2
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/sass@1.69.4:
+ resolution: {integrity: sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/-/sass-1.69.4.tgz}
+ name: sass
+ version: 1.69.4
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+ dependencies:
+ chokidar: registry.npmmirror.com/chokidar@3.5.3
+ immutable: registry.npmmirror.com/immutable@4.3.4
+ source-map-js: registry.npmmirror.com/source-map-js@1.0.2
+ dev: true
+
+ registry.npmmirror.com/sax@1.3.0:
+ resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz}
+ name: sax
+ version: 1.3.0
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/scroll-into-view-if-needed@2.2.31:
+ resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz}
+ name: scroll-into-view-if-needed
+ version: 2.2.31
+ dependencies:
+ compute-scroll-into-view: registry.npmmirror.com/compute-scroll-into-view@1.0.20
+ dev: false
+
+ registry.npmmirror.com/scule@1.0.0:
+ resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/scule/-/scule-1.0.0.tgz}
+ name: scule
+ version: 1.0.0
+ dev: true
+
+ registry.npmmirror.com/semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz}
+ name: semver
+ version: 5.7.2
+ hasBin: true
+ requiresBuild: true
+ optional: true
+
+ registry.npmmirror.com/semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz}
+ name: semver
+ version: 7.5.4
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: registry.npmmirror.com/lru-cache@6.0.0
+ dev: true
+
+ registry.npmmirror.com/shallow-equal@1.2.1:
+ resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz}
+ name: shallow-equal
+ version: 1.2.1
+ dev: false
+
+ registry.npmmirror.com/shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz}
+ name: shebang-command
+ version: 2.0.0
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: registry.npmmirror.com/shebang-regex@3.0.0
+ dev: true
+
+ registry.npmmirror.com/shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz}
+ name: shebang-regex
+ version: 3.0.0
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz}
+ name: signal-exit
+ version: 3.0.7
+ dev: true
+
+ registry.npmmirror.com/signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz}
+ name: signal-exit
+ version: 4.1.0
+ engines: {node: '>=14'}
+ dev: true
+
+ registry.npmmirror.com/simple-swizzle@0.2.2:
+ resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz}
+ name: simple-swizzle
+ version: 0.2.2
+ dependencies:
+ is-arrayish: registry.npmmirror.com/is-arrayish@0.3.2
+ dev: false
+
+ registry.npmmirror.com/slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz}
+ name: slice-ansi
+ version: 5.0.0
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: registry.npmmirror.com/ansi-styles@6.2.1
+ is-fullwidth-code-point: registry.npmmirror.com/is-fullwidth-code-point@4.0.0
+ dev: true
+
+ registry.npmmirror.com/source-map-js@1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz}
+ name: source-map-js
+ version: 1.0.2
+ engines: {node: '>=0.10.0'}
+
+ registry.npmmirror.com/source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
+ name: source-map
+ version: 0.6.1
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+
+ registry.npmmirror.com/string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz}
+ name: string-argv
+ version: 0.3.2
+ engines: {node: '>=0.6.19'}
+ dev: true
+
+ registry.npmmirror.com/string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz}
+ name: string-width
+ version: 5.1.2
+ engines: {node: '>=12'}
+ dependencies:
+ eastasianwidth: registry.npmmirror.com/eastasianwidth@0.2.0
+ emoji-regex: registry.npmmirror.com/emoji-regex@9.2.2
+ strip-ansi: registry.npmmirror.com/strip-ansi@7.1.0
+ dev: true
+
+ registry.npmmirror.com/strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz}
+ name: strip-ansi
+ version: 6.0.1
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: registry.npmmirror.com/ansi-regex@5.0.1
+ dev: true
+
+ registry.npmmirror.com/strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz}
+ name: strip-ansi
+ version: 7.1.0
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-regex: registry.npmmirror.com/ansi-regex@6.0.1
+ dev: true
+
+ registry.npmmirror.com/strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz}
+ name: strip-final-newline
+ version: 2.0.0
+ engines: {node: '>=6'}
+ dev: true
+
+ registry.npmmirror.com/strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz}
+ name: strip-final-newline
+ version: 3.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz}
+ name: strip-json-comments
+ version: 3.1.1
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/strip-literal@1.3.0:
+ resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz}
+ name: strip-literal
+ version: 1.3.0
+ dependencies:
+ acorn: registry.npmmirror.com/acorn@8.10.0
+ dev: true
+
+ registry.npmmirror.com/stylis@4.3.0:
+ resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylis/-/stylis-4.3.0.tgz}
+ name: stylis
+ version: 4.3.0
+ dev: false
+
+ registry.npmmirror.com/supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz}
+ name: supports-color
+ version: 7.2.0
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: registry.npmmirror.com/has-flag@4.0.0
+ dev: true
+
+ registry.npmmirror.com/supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz}
+ name: supports-preserve-symlinks-flag
+ version: 1.0.0
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ registry.npmmirror.com/synckit@0.8.5:
+ resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/synckit/-/synckit-0.8.5.tgz}
+ name: synckit
+ version: 0.8.5
+ engines: {node: ^14.18.0 || >=16.0.0}
+ dependencies:
+ '@pkgr/utils': registry.npmmirror.com/@pkgr/utils@2.4.2
+ tslib: registry.npmmirror.com/tslib@2.6.2
+ dev: true
+
+ registry.npmmirror.com/text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz}
+ name: text-table
+ version: 0.2.0
+ dev: true
+
+ registry.npmmirror.com/throttle-debounce@5.0.0:
+ resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz}
+ name: throttle-debounce
+ version: 5.0.0
+ engines: {node: '>=12.22'}
+ dev: false
+
+ registry.npmmirror.com/tinymce@5.10.9:
+ resolution: {integrity: sha512-5bkrors87X9LhYX2xq8GgPHrIgJYHl87YNs+kBcjQ5I3CiUgzo/vFcGvT3MZQ9QHsEeYMhYO6a5CLGGffR8hMg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tinymce/-/tinymce-5.10.9.tgz}
+ name: tinymce
+ version: 5.10.9
+ dev: false
+
+ registry.npmmirror.com/titleize@3.0.0:
+ resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/titleize/-/titleize-3.0.0.tgz}
+ name: titleize
+ version: 3.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
+ name: to-fast-properties
+ version: 2.0.0
+ engines: {node: '>=4'}
+
+ registry.npmmirror.com/to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz}
+ name: to-regex-range
+ version: 5.0.1
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: registry.npmmirror.com/is-number@7.0.0
+ dev: true
+
+ registry.npmmirror.com/tslib@2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz}
+ name: tslib
+ version: 2.3.0
+ dev: false
+
+ registry.npmmirror.com/tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz}
+ name: tslib
+ version: 2.6.2
+
+ registry.npmmirror.com/type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz}
+ name: type-check
+ version: 0.4.0
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: registry.npmmirror.com/prelude-ls@1.2.1
+ dev: true
+
+ registry.npmmirror.com/type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz}
+ name: type-fest
+ version: 0.20.2
+ engines: {node: '>=10'}
+ dev: true
+
+ registry.npmmirror.com/type-fest@1.4.0:
+ resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-1.4.0.tgz}
+ name: type-fest
+ version: 1.4.0
+ engines: {node: '>=10'}
+ dev: true
+
+ registry.npmmirror.com/ufo@1.3.1:
+ resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ufo/-/ufo-1.3.1.tgz}
+ name: ufo
+ version: 1.3.1
+ dev: true
+
+ registry.npmmirror.com/unimport@3.4.0:
+ resolution: {integrity: sha512-M/lfFEgufIT156QAr/jWHLUn55kEmxBBiQsMxvRSIbquwmeJEyQYgshHDEvQDWlSJrVOOTAgnJ3FvlsrpGkanA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unimport/-/unimport-3.4.0.tgz}
+ name: unimport
+ version: 3.4.0
+ dependencies:
+ '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils@5.0.5
+ escape-string-regexp: registry.npmmirror.com/escape-string-regexp@5.0.0
+ fast-glob: registry.npmmirror.com/fast-glob@3.3.1
+ local-pkg: registry.npmmirror.com/local-pkg@0.4.3
+ magic-string: registry.npmmirror.com/magic-string@0.30.5
+ mlly: registry.npmmirror.com/mlly@1.4.2
+ pathe: registry.npmmirror.com/pathe@1.1.1
+ pkg-types: registry.npmmirror.com/pkg-types@1.0.3
+ scule: registry.npmmirror.com/scule@1.0.0
+ strip-literal: registry.npmmirror.com/strip-literal@1.3.0
+ unplugin: registry.npmmirror.com/unplugin@1.5.0
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ registry.npmmirror.com/unplugin-auto-import@0.16.6:
+ resolution: {integrity: sha512-M+YIITkx3C/Hg38hp8HmswP5mShUUyJOzpifv7RTlAbeFlO2Tyw0pwrogSSxnipHDPTtI8VHFBpkYkNKzYSuyA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.16.6.tgz}
+ name: unplugin-auto-import
+ version: 0.16.6
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@nuxt/kit': ^3.2.2
+ '@vueuse/core': '*'
+ peerDependenciesMeta:
+ '@nuxt/kit':
+ optional: true
+ '@vueuse/core':
+ optional: true
+ dependencies:
+ '@antfu/utils': registry.npmmirror.com/@antfu/utils@0.7.6
+ '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils@5.0.5
+ fast-glob: registry.npmmirror.com/fast-glob@3.3.1
+ local-pkg: registry.npmmirror.com/local-pkg@0.4.3
+ magic-string: registry.npmmirror.com/magic-string@0.30.5
+ minimatch: registry.npmmirror.com/minimatch@9.0.3
+ unimport: registry.npmmirror.com/unimport@3.4.0
+ unplugin: registry.npmmirror.com/unplugin@1.5.0
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ registry.npmmirror.com/unplugin-vue-components@0.25.2(vue@3.3.4):
+ resolution: {integrity: sha512-OVmLFqILH6w+eM8fyt/d/eoJT9A6WO51NZLf1vC5c1FZ4rmq2bbGxTy8WP2Jm7xwFdukaIdv819+UI7RClPyCA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.25.2.tgz}
+ id: registry.npmmirror.com/unplugin-vue-components/0.25.2
+ name: unplugin-vue-components
+ version: 0.25.2
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/parser': ^7.15.8
+ '@nuxt/kit': ^3.2.2
+ vue: 2 || 3
+ peerDependenciesMeta:
+ '@babel/parser':
+ optional: true
+ '@nuxt/kit':
+ optional: true
+ dependencies:
+ '@antfu/utils': registry.npmmirror.com/@antfu/utils@0.7.6
+ '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils@5.0.5
+ chokidar: registry.npmmirror.com/chokidar@3.5.3
+ debug: registry.npmmirror.com/debug@4.3.4
+ fast-glob: registry.npmmirror.com/fast-glob@3.3.1
+ local-pkg: registry.npmmirror.com/local-pkg@0.4.3
+ magic-string: registry.npmmirror.com/magic-string@0.30.5
+ minimatch: registry.npmmirror.com/minimatch@9.0.3
+ resolve: registry.npmmirror.com/resolve@1.22.8
+ unplugin: registry.npmmirror.com/unplugin@1.5.0
+ vue: registry.npmmirror.com/vue@3.3.4
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ registry.npmmirror.com/unplugin@1.5.0:
+ resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/unplugin/-/unplugin-1.5.0.tgz}
+ name: unplugin
+ version: 1.5.0
+ dependencies:
+ acorn: registry.npmmirror.com/acorn@8.10.0
+ chokidar: registry.npmmirror.com/chokidar@3.5.3
+ webpack-sources: registry.npmmirror.com/webpack-sources@3.2.3
+ webpack-virtual-modules: registry.npmmirror.com/webpack-virtual-modules@0.5.0
+ dev: true
+
+ registry.npmmirror.com/untildify@4.0.0:
+ resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/untildify/-/untildify-4.0.0.tgz}
+ name: untildify
+ version: 4.0.0
+ engines: {node: '>=8'}
+ dev: true
+
+ registry.npmmirror.com/uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz}
+ name: uri-js
+ version: 4.4.1
+ dependencies:
+ punycode: registry.npmmirror.com/punycode@2.3.0
+ dev: true
+
+ registry.npmmirror.com/util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz}
+ name: util-deprecate
+ version: 1.0.2
+ dev: true
+
+ registry.npmmirror.com/uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz}
+ name: uuid
+ version: 8.3.2
+ hasBin: true
+ dev: false
+
+ registry.npmmirror.com/uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz}
+ name: uuid
+ version: 9.0.1
+ hasBin: true
+ dev: false
+
+ registry.npmmirror.com/uuidv1@1.6.14:
+ resolution: {integrity: sha512-34FVVCDDHzzcOglmrKbZP99+8/6StEzo3VU3MuKw0Mo0B/YBQ1bWNQU8s79ofNnrPlfI+7A9pkAdhmQ6CyLHFg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uuidv1/-/uuidv1-1.6.14.tgz}
+ name: uuidv1
+ version: 1.6.14
+ dev: false
+
+ registry.npmmirror.com/vite@4.4.11(less@4.2.0)(sass@1.69.4):
+ resolution: {integrity: sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-4.4.11.tgz}
+ id: registry.npmmirror.com/vite/4.4.11
+ name: vite
+ version: 4.4.11
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': '>= 14'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ esbuild: registry.npmmirror.com/esbuild@0.18.20
+ less: registry.npmmirror.com/less@4.2.0
+ postcss: registry.npmmirror.com/postcss@8.4.31
+ rollup: registry.npmmirror.com/rollup@3.29.4
+ sass: registry.npmmirror.com/sass@1.69.4
+ optionalDependencies:
+ fsevents: registry.npmmirror.com/fsevents@2.3.3
+ dev: true
+
+ registry.npmmirror.com/vue-demi@0.13.11(vue@3.3.4):
+ resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz}
+ id: registry.npmmirror.com/vue-demi/0.13.11
+ name: vue-demi
+ version: 0.13.11
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/vue-demi@0.14.6(vue@3.3.4):
+ resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz}
+ id: registry.npmmirror.com/vue-demi/0.14.6
+ name: vue-demi
+ version: 0.14.6
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: registry.npmmirror.com/vue@3.3.4
+
+ registry.npmmirror.com/vue-echarts@6.6.1(echarts@5.4.3)(vue@3.3.4):
+ resolution: {integrity: sha512-EpreTzlNeJ+eaUn0AhXEmKJk98xJGecgTqAdyZovoXWnhTxnlW2HuBM0ei3y8rLw1JCUabf8/sYvxjlr8SzBKQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.6.1.tgz}
+ id: registry.npmmirror.com/vue-echarts/6.6.1
+ name: vue-echarts
+ version: 6.6.1
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.5
+ echarts: ^5.4.1
+ vue: ^2.6.12 || ^3.1.1
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ echarts: registry.npmmirror.com/echarts@5.4.3
+ resize-detector: registry.npmmirror.com/resize-detector@0.3.0
+ vue: registry.npmmirror.com/vue@3.3.4
+ vue-demi: registry.npmmirror.com/vue-demi@0.13.11(vue@3.3.4)
+ dev: false
+
+ registry.npmmirror.com/vue-eslint-parser@9.3.2(eslint@8.51.0):
+ resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz}
+ id: registry.npmmirror.com/vue-eslint-parser/9.3.2
+ name: vue-eslint-parser
+ version: 9.3.2
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ debug: registry.npmmirror.com/debug@4.3.4
+ eslint: registry.npmmirror.com/eslint@8.51.0
+ eslint-scope: registry.npmmirror.com/eslint-scope@7.2.2
+ eslint-visitor-keys: registry.npmmirror.com/eslint-visitor-keys@3.4.3
+ espree: registry.npmmirror.com/espree@9.6.1
+ esquery: registry.npmmirror.com/esquery@1.5.0
+ lodash: registry.npmmirror.com/lodash@4.17.21
+ semver: registry.npmmirror.com/semver@7.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ registry.npmmirror.com/vue-router@4.2.5(vue@3.3.4):
+ resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz}
+ id: registry.npmmirror.com/vue-router/4.2.5
+ name: vue-router
+ version: 4.2.5
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api@6.5.1
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/vue-select-image@1.9.0:
+ resolution: {integrity: sha512-oXIfpzawtTRwMGbaXLvG/4ktUgrpt6LZgcwK7WmXfodhuEKTZOKlpPxACFNAYJfqBlAQwloMdw/RJgpFY8XUKQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-select-image/-/vue-select-image-1.9.0.tgz}
+ name: vue-select-image
+ version: 1.9.0
+ dependencies:
+ vue: registry.npmmirror.com/vue@2.7.15
+ dev: false
+
+ registry.npmmirror.com/vue-types@3.0.2(vue@3.3.4):
+ resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz}
+ id: registry.npmmirror.com/vue-types/3.0.2
+ name: vue-types
+ version: 3.0.2
+ engines: {node: '>=10.15.0'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ is-plain-object: registry.npmmirror.com/is-plain-object@3.0.1
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/vue-uuid@3.0.0(vue@3.3.4):
+ resolution: {integrity: sha512-+5DP857xVmTHYd00dMC1c1gVg/nxG6+K4Lepojv9ckHt8w0fDpGc5gQCCttS9D+AkSkTJgb0cekidKjTWu5OQQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-uuid/-/vue-uuid-3.0.0.tgz}
+ id: registry.npmmirror.com/vue-uuid/3.0.0
+ name: vue-uuid
+ version: 3.0.0
+ peerDependencies:
+ vue: '>= 3.0.0'
+ dependencies:
+ '@types/uuid': registry.npmmirror.com/@types/uuid@8.3.4
+ uuid: registry.npmmirror.com/uuid@8.3.2
+ vue: registry.npmmirror.com/vue@3.3.4
+ dev: false
+
+ registry.npmmirror.com/vue@2.7.15:
+ resolution: {integrity: sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-2.7.15.tgz}
+ name: vue
+ version: 2.7.15
+ dependencies:
+ '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc@2.7.15
+ csstype: registry.npmmirror.com/csstype@3.1.2
+ dev: false
+
+ registry.npmmirror.com/vue@3.3.4:
+ resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz}
+ name: vue
+ version: 3.3.4
+ dependencies:
+ '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.3.4
+ '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc@3.3.4
+ '@vue/runtime-dom': registry.npmmirror.com/@vue/runtime-dom@3.3.4
+ '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer@3.3.4(vue@3.3.4)
+ '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4
+
+ registry.npmmirror.com/warning@4.0.3:
+ resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz}
+ name: warning
+ version: 4.0.3
+ dependencies:
+ loose-envify: registry.npmmirror.com/loose-envify@1.4.0
+ dev: false
+
+ registry.npmmirror.com/webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz}
+ name: webpack-sources
+ version: 3.2.3
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ registry.npmmirror.com/webpack-virtual-modules@0.5.0:
+ resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz}
+ name: webpack-virtual-modules
+ version: 0.5.0
+ dev: true
+
+ registry.npmmirror.com/which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which/-/which-2.0.2.tgz}
+ name: which
+ version: 2.0.2
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: registry.npmmirror.com/isexe@2.0.0
+ dev: true
+
+ registry.npmmirror.com/wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz}
+ name: wrap-ansi
+ version: 8.1.0
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: registry.npmmirror.com/ansi-styles@6.2.1
+ string-width: registry.npmmirror.com/string-width@5.1.2
+ strip-ansi: registry.npmmirror.com/strip-ansi@7.1.0
+ dev: true
+
+ registry.npmmirror.com/wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz}
+ name: wrappy
+ version: 1.0.2
+ dev: true
+
+ registry.npmmirror.com/xml-name-validator@4.0.0:
+ resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz}
+ name: xml-name-validator
+ version: 4.0.0
+ engines: {node: '>=12'}
+ dev: true
+
+ registry.npmmirror.com/yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}
+ name: yallist
+ version: 4.0.0
+ dev: true
+
+ registry.npmmirror.com/yaml@2.3.2:
+ resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yaml/-/yaml-2.3.2.tgz}
+ name: yaml
+ version: 2.3.2
+ engines: {node: '>= 14'}
+ dev: true
+
+ registry.npmmirror.com/yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz}
+ name: yocto-queue
+ version: 0.1.0
+ engines: {node: '>=10'}
+ dev: true
+
+ registry.npmmirror.com/zrender@5.4.4:
+ resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz}
+ name: zrender
+ version: 5.4.4
+ dependencies:
+ tslib: registry.npmmirror.com/tslib@2.3.0
+ dev: false
diff --git a/ai-interview-ui/public/favicon.ico b/ai-interview-ui/public/favicon.ico
new file mode 100644
index 0000000..df36fcf
Binary files /dev/null and b/ai-interview-ui/public/favicon.ico differ
diff --git a/ai-interview-ui/src/App.vue b/ai-interview-ui/src/App.vue
new file mode 100644
index 0000000..4d73cf6
--- /dev/null
+++ b/ai-interview-ui/src/App.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/api/carouselChart.js b/ai-interview-ui/src/api/carouselChart.js
new file mode 100644
index 0000000..14cfe9b
--- /dev/null
+++ b/ai-interview-ui/src/api/carouselChart.js
@@ -0,0 +1,7 @@
+import request from '@/utils/request'
+
+export const useGetCarouselChart = () =>
+ request.get('vx_interview/getCarouselChart')
+
+export const useUpdateCarouselChart = ({ submitImages }) =>
+ request.post('vx_interview/updateCarouselChart', { submitImages })
diff --git a/ai-interview-ui/src/api/company.js b/ai-interview-ui/src/api/company.js
new file mode 100644
index 0000000..e285edd
--- /dev/null
+++ b/ai-interview-ui/src/api/company.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export const useGetApplicationCount = (days, encoding) =>
+ request.get('company/getApplicationCount', {
+ params: {
+ days: days,
+ encoding: encoding
+ }
+ })
diff --git a/ai-interview-ui/src/api/interview.js b/ai-interview-ui/src/api/interview.js
new file mode 100644
index 0000000..ef01063
--- /dev/null
+++ b/ai-interview-ui/src/api/interview.js
@@ -0,0 +1,122 @@
+import request from '@/utils/request'
+
+//-------------------logo-----------------------------------
+// 根据公司编码查询logo列表
+export const useGetLogoList = (encoding) =>
+ request.get('interview/get_logoList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 添加公司logo
+export const useAddLogo = ({ name, encoding, image, userId, filename }) =>
+ request.post('interview/add_logo', {
+ name,
+ encoding,
+ image,
+ userId,
+ filename
+ })
+// 根据logoID删除公司logo
+export const useDeleteLogo = (id) =>
+ request.delete('interview/delete_logo', { params: { id: id } })
+//-------------------------背景图片-----------------------------------
+// 根据公司编码查询背景图片列表
+export const useGetBackgroundList = (encoding) =>
+ request.get('interview/get_backgroundList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 添加面试背景
+export const useAddBackground = ({ name, encoding, image, userId, filename }) =>
+ request.post('interview/add_background', {
+ name,
+ encoding,
+ image,
+ userId,
+ filename
+ })
+// 根据背景id删除面试背景
+export const useDeleteBackground = (id) =>
+ request.delete('interview/delete_background', { params: { id: id } })
+
+//-------------------------------------------面试官形象-----------------------------------
+// 根据公司编码查询面试管形象
+export const useGetImagesList = (encoding) =>
+ request.get('interview/get_imagesList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 添加面试官形象
+export const useAddImage = ({
+ name,
+ encoding,
+ image,
+ video,
+ userId,
+ filename,
+ sex
+}) =>
+ request.post('interview/add_image', {
+ name,
+ encoding,
+ image,
+ video,
+ userId,
+ filename,
+ sex
+ })
+// 根据形象id删除形象图片
+export const useDeleteImage = (id) =>
+ request.delete('interview/delete_image', { params: { id: id } })
+
+//通知面试
+export const addInterviewNotice = ({
+ encoding,
+ jobId,
+ postId,
+ selectQuestions,
+ promote,
+ inviteUser,
+ userId,
+ applicationId,
+ endTime
+}) =>
+ request.post('interview/sendInterviewNotice', {
+ encoding,
+ jobId,
+ postId,
+ selectQuestions,
+ promote,
+ inviteUser,
+ userId,
+ applicationId,
+ endTime
+ })
+
+export const getPostInfoList = (encoding) =>
+ request.get('interview/getPostingInfoList', {
+ params: {
+ encoding: encoding
+ }
+ })
+
+export const getInterviewRecordList = (postId, jobId, encoding, status) =>
+ request.get('/interview/getInterviewRecordList', {
+ params: {
+ postId: postId,
+ jobId: jobId,
+ encoding: encoding,
+ status: status
+ }
+ })
+
+export const agreeUsersPassInterview = (jobId, postId, userList, userId) =>
+ request.post('/interview/agreeUsersPassInterview', {
+ jobId: jobId,
+ postId: postId,
+ userList: userList,
+ userId: userId
+ })
diff --git a/ai-interview-ui/src/api/question.js b/ai-interview-ui/src/api/question.js
new file mode 100644
index 0000000..933d906
--- /dev/null
+++ b/ai-interview-ui/src/api/question.js
@@ -0,0 +1,288 @@
+import request from '@/utils/request'
+//------------------------------------题库-------------------------------------------
+//根据公司编码获取题库列表
+export const useGetTypeList = (encoding) =>
+ request.get('question/get_typeList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 搜索题库
+export const useSearchType = (name, type, encoding) =>
+ request.get('question/search_typeName', {
+ params: {
+ name: name,
+ type: type,
+ encoding: encoding
+ }
+ })
+// 根据题库类型获取题库
+export const useGetTypeListByType = (encoding, type) =>
+ request.get('question/get_typeListByType', {
+ params: {
+ encoding: encoding,
+ type: type
+ }
+ })
+
+// 添加题库
+export const useAddTypeName = (typeName, description, type, encoding, userId) =>
+ request.post('question/add_typeName', {
+ typeName,
+ description,
+ type,
+ encoding,
+ userId
+ })
+// 根据题库id删除题库
+export const useDeleteTypeName = (typeId) =>
+ request.delete('question/delete_type', {
+ params: {
+ typeId: typeId
+ }
+ })
+// 编辑题库
+export const useChangeTypeName = (
+ typeId,
+ typeName,
+ description,
+ type,
+ userId
+) =>
+ request.post('question/change_type', {
+ typeId,
+ typeName,
+ description,
+ type,
+ userId
+ })
+
+export const useGetTypeById = (id) =>
+ request.get('question/get_typeById', { params: { id: id } })
+//-------------------------------------题目-------------------------------------
+// 根据公司编码获取题目列表
+export const useGetQuestionList = (encoding) =>
+ request.get('question/get_questionList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 搜索题目
+export const useSearchQuestion = (name, type, encoding) =>
+ request.get('question/search_questionList', {
+ params: {
+ name: name,
+ type: type,
+ encoding: encoding
+ }
+ })
+// 添加题目
+export const useAddQuestion = (
+ title,
+ bankId,
+ details,
+ answer,
+ encoding,
+ userId
+) =>
+ request.post('question/add_question', {
+ title,
+ bankId,
+ details,
+ answer,
+ encoding,
+ userId
+ })
+// 编辑题目
+export const useUpdateQuestion = (
+ id,
+ title,
+ bankId,
+ details,
+ answer,
+ encoding,
+ userId
+) =>
+ request.post('question/update_question', {
+ id,
+ title,
+ bankId,
+ details,
+ answer,
+ encoding,
+ userId
+ })
+// 删除题目
+export const useDeleteQuestion = (id) =>
+ request.delete('question/del_question', {
+ params: {
+ id: id
+ }
+ })
+//---------------------------------题库广场----------------------------
+//获取分享题库列表
+export const useGetSharedQuestionType = () =>
+ request.get('question/get_sharedQuestionType')
+// 搜索分享题库
+export const useSearchSharedQuestionType = (searchName) =>
+ request.get('question/search_sharedQuestionType', {
+ params: {
+ searchName: searchName
+ }
+ })
+// 根据公司编码获取分享题库列表
+export const useGetSharedQuestionTypeByCompany = (encoding) =>
+ request.get('question/get_sharedQuestionType', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 添加分享题库
+export const useAddSharedQuestionType = ({
+ typeName,
+ type,
+ description,
+ userId,
+ encoding
+}) =>
+ request.post('question/add_sharedQuestionBank', {
+ typeName,
+ type,
+ description,
+ userId,
+ encoding
+ })
+// 从分享题库中添加题库到本公司题库下
+export const useAddQuestionTypeFromShare = ({
+ SharedBankIds,
+ userId,
+ encoding
+}) =>
+ request.post('question/add_QuestionBankFromShare', {
+ SharedBankIds,
+ userId,
+ encoding
+ })
+
+//根据
+//-------------------------------------题目广场-----------------------------
+// 获取分享题目列表
+export const useGetSharedQuestion = () =>
+ request.get('question/get_sharedQuestion')
+// 搜索分享题目
+export const useSearchSharedQuestion = (searchName) =>
+ request.get('question/search_sharedQuestion', {
+ params: {
+ searchName: searchName
+ }
+ })
+// 根据分享题库id获取分享题目列表
+export const useGetSharedQuestionByBankId = (sharedBankId) =>
+ request.get('question/get_sharedQuestionByBankId', {
+ params: {
+ sharedBankId: sharedBankId
+ }
+ })
+// 添加分享题目
+export const useAddSharedQuestionList = ({
+ sharedBankId,
+ selectQuestionId,
+ userId,
+ encoding
+}) =>
+ request.post('question/add_sharedQuestion', {
+ sharedBankId,
+ selectQuestionId,
+ userId,
+ encoding
+ })
+// 从分享题目中添加题目到本公司下的题库中
+export const useAddQuestionFromShare = ({
+ selectSharedQuestionIds,
+ bankId,
+ userId,
+ encoding
+}) =>
+ request.post('question/add_QuestionFromShare', {
+ selectSharedQuestionIds,
+ bankId,
+ userId,
+ encoding
+ })
+//---------------------------------我的分享题库---------------------------
+//根据公司编码获取本公司分享的题库
+export const useGetOurSharedQuestionTypeList = (encoding) =>
+ request.get('question/get_OurQuestionTypeList', {
+ params: {
+ encoding: encoding
+ }
+ })
+//搜索本公司的分享的题库
+export const useSearchOurSharedQuestionType = (encoding, searchName) =>
+ request.get('question/search_OurSharedQuestionType', {
+ params: {
+ encoding: encoding,
+ searchName: searchName
+ }
+ })
+//根据分享题库id修改题库信息
+export const useEditOurSharedQuestionType = ({
+ id,
+ typeName,
+ description,
+ type,
+ userId
+}) =>
+ request.post('question/edit_OurSharedQuestionType', {
+ id,
+ typeName,
+ description,
+ type,
+ userId
+ })
+//根据分享题库id删除分享题库
+export const useDeleteOurSharedQuestionType = (id) =>
+ request.delete('question/delete_OurSharedQuestionType', {
+ params: {
+ id: id
+ }
+ })
+
+//----------------------------------我的分享题目-------------------------
+//根据公司编码获取本公司分享的题目
+export const useGetOurSharedQuestionList = (encoding) =>
+ request.get('question/get_OurQuestionList', {
+ params: {
+ encoding: encoding
+ }
+ })
+//搜索本公司的分享的题库
+export const useSearchOurSharedQuestion = (encoding, searchName) =>
+ request.get('question/search_OurSharedQuestion', {
+ params: {
+ encoding: encoding,
+ searchName: searchName
+ }
+ })
+//根据ID删除本公司下的分享ID
+export const useDeleteOurSharedQuestion = (sharedQuestionId) =>
+ request.post('question/delete_OurSharedQuestion', {
+ sharedQuestionId: sharedQuestionId
+ })
+
+export const useEditOurSharedQuestion = ({
+ id,
+ title,
+ details,
+ answer,
+ bankId,
+ userId
+}) =>
+ request.post('question/update_OurSharedQuestion', {
+ id,
+ title,
+ details,
+ answer,
+ bankId,
+ userId
+ })
diff --git a/ai-interview-ui/src/api/recruitment.js b/ai-interview-ui/src/api/recruitment.js
new file mode 100644
index 0000000..3f566ca
--- /dev/null
+++ b/ai-interview-ui/src/api/recruitment.js
@@ -0,0 +1,310 @@
+import request from '@/utils/request'
+//-----------------------------------岗位管理-----------------------------
+// 添加岗位
+export const useAddJob = ({
+ address,
+ addressDetail,
+ details,
+ jobName,
+ startTime,
+ endTime,
+ jobTips,
+ jobType,
+ minSalary,
+ maxSalary,
+ minNumber,
+ maxNumber,
+ requirement,
+ userId,
+ encoding
+}) =>
+ request.post('recruitment/add_job', {
+ address,
+ addressDetail,
+ details,
+ jobName,
+ startTime,
+ endTime,
+ jobTips,
+ jobType,
+ minSalary,
+ maxSalary,
+ minNumber,
+ maxNumber,
+ requirement,
+ userId,
+ encoding
+ })
+// 根据公司编码获取岗位列表
+export const useGetJobList = (encoding) =>
+ request.get('recruitment/get_jobList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 根据岗位id获取岗位详情
+export const useGetJobById = (id) =>
+ request.get('recruitment/get_jobById', {
+ params: {
+ id: id
+ }
+ })
+// 编辑岗位
+export const useUpdateJob = ({
+ id,
+ address,
+ addressDetail,
+ details,
+ jobName,
+ startTime,
+ endTime,
+ jobTips,
+ jobType,
+ minSalary,
+ maxSalary,
+ minNumber,
+ maxNumber,
+ requirement,
+ userId,
+ encoding
+}) =>
+ request.post('recruitment/update_job', {
+ id,
+ address,
+ addressDetail,
+ details,
+ jobName,
+ startTime,
+ endTime,
+ jobTips,
+ jobType,
+ minSalary,
+ maxSalary,
+ minNumber,
+ maxNumber,
+ requirement,
+ userId,
+ encoding
+ })
+// 搜索岗位
+export const useSearchJob = (jobName, jobType, encoding) =>
+ request.get('recruitment/search_job', {
+ params: {
+ jobName: jobName,
+ jobType: jobType,
+ encoding: encoding
+ }
+ })
+// 根据岗位id修改岗位状态
+export const useChangeJobStatus = (id, userId) =>
+ request.post('recruitment/update_jobStatus', {
+ id,
+ userId
+ })
+// 根据岗位id删除岗位信息
+export const useDelJob = (id) =>
+ request.delete('recruitment/delete_job', {
+ params: {
+ id: id
+ }
+ })
+//------------------------------面试设置--------------------------
+// 添加面试设置
+export const useAddJobSetting = ({
+ jobId,
+ imagesId,
+ jobPromote,
+ backgroundId,
+ logoId,
+ Professional,
+ Comprehensive,
+ Psychology,
+ userId,
+ encoding
+}) =>
+ request.post('recruitment/add_jobSetting', {
+ jobId,
+ imagesId,
+ backgroundId,
+ jobPromote,
+ logoId,
+ Professional,
+ Comprehensive,
+ Psychology,
+ userId,
+ encoding
+ })
+// 根据公司编码获取面试设置列表
+export const useGetJobSettingList = (encoding) =>
+ request.get('recruitment/get_jobSettingList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 根据面试设置id删除面试设置
+export const useDeleteJobSetting = (id) =>
+ request.delete('recruitment/delete_jobJobSetting', {
+ params: {
+ id: id
+ }
+ })
+// 编辑面试设置
+export const useUpdateJobSetting = ({
+ id,
+ jobId,
+ imagesId,
+ jobPromote,
+ backgroundId,
+ logoId,
+ professional,
+ comprehensive,
+ psychology,
+ userId,
+ encoding
+}) =>
+ request.post('recruitment/update_jobJobSetting', {
+ id,
+ jobId,
+ imagesId,
+ jobPromote,
+ backgroundId,
+ logoId,
+ professional,
+ comprehensive,
+ psychology,
+ userId,
+ encoding
+ })
+// 根据岗位名称搜索面试设置
+export const useSearchSettings = (jobName, encoding) =>
+ request.get('recruitment/search_setting', {
+ params: {
+ jobName: jobName,
+ encoding: encoding
+ }
+ })
+//------------------------------公司详情---------------------
+// 根据公司编码获取公司详情
+export const useGetCompanyDetail = (encoding) =>
+ request.get('recruitment/get_companyDetail', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 修改公司详情
+export const useUploadCompanyDetail = ({
+ address,
+ addressDetail,
+ companyDetail,
+ companyName,
+ creditCode,
+ encoding,
+ established,
+ subImages,
+ legalRepresentative,
+ treatment,
+ registeredCapital,
+ userId,
+ subLogo,
+ type,
+ staffNumber,
+ companyAllName
+}) =>
+ request.post('recruitment/update_companyDetail', {
+ address,
+ addressDetail,
+ companyDetail,
+ companyName,
+ creditCode,
+ encoding,
+ established,
+ images: subImages,
+ legalRepresentative,
+ treatment,
+ registeredCapital,
+ userId,
+ type,
+ companyLogo: subLogo,
+ staffNumber,
+ companyAllName
+ })
+//招聘发布
+export const addJobPosting = ({
+ name,
+ startTime,
+ endTime,
+ checkList,
+ userId,
+ encoding
+}) =>
+ request.post('/recruitment/add_jobPosting', {
+ name,
+ startTime,
+ endTime,
+ checkList,
+ userId,
+ encoding
+ })
+export const updateJobPosting = ({
+ id,
+ name,
+ startTime,
+ endTime,
+ checkList,
+ userId,
+ status
+}) =>
+ request.post('/recruitment/update_jobPosting', {
+ id,
+ name,
+ startTime,
+ endTime,
+ checkList,
+ userId,
+ status
+ })
+
+export const deleteJobPosting = (id) =>
+ request.delete('/recruitment/delete_jobPosting', {
+ params: {
+ id: id
+ }
+ })
+export const getJobPostingList = (encoding) =>
+ request.get('/recruitment/get_jobPostingList', {
+ params: {
+ encoding: encoding
+ }
+ })
+
+//获取求职者信息
+export const getApplicationList = (encoding, jobId) =>
+ request.get('/recruitment/getApplicationList', {
+ params: {
+ encoding: encoding,
+ jobId: jobId
+ }
+ })
+
+//搜索求职者
+export const searchApplicationByName = (searchName, encoding) =>
+ request.get('/recruitment/searchApplicationByName', {
+ params: {
+ searchName: searchName,
+ encoding: encoding
+ }
+ })
+
+export const disagreeApplication = (id) =>
+ request.get('/recruitment/disagreeApplication', {
+ params: {
+ id: id
+ }
+ })
+
+export const getJobSettingByJobId = (jobId) =>
+ request.get('/recruitment/get_jobSettingByJobId', {
+ params: {
+ jobId: jobId
+ }
+ })
diff --git a/ai-interview-ui/src/api/upload.js b/ai-interview-ui/src/api/upload.js
new file mode 100644
index 0000000..b9e7f69
--- /dev/null
+++ b/ai-interview-ui/src/api/upload.js
@@ -0,0 +1,41 @@
+import request from '@/utils/request'
+//------------------------图片---------------------
+// 上传图片
+export const useUploadPic = (fd) =>
+ request.post('upload_picture', fd, {
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+// 根据图片名称删除图片
+export const useDeletePic = (imagePath) =>
+ request.delete('delete_picture', {
+ params: {
+ imagePath: imagePath
+ }
+ })
+// ------------------------------简历-------------------
+// 上传简历
+export const useUploadResume = (fd) =>
+ request.post('upload_resume', fd, {
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+// 根据简历名称删除简历
+export const useDeleteResume = (resumePath) =>
+ request.delete('delete_resume', {
+ params: {
+ resumePath: resumePath
+ }
+ })
+
+// ---------------------------------视频-------------------------
+// 上传视频
+export const useUploadVideo = (fd) =>
+ request.post('upload_video', fd, {
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+// 根据视频名称删除视频
+export const useDeleteVideo = (videoPath) =>
+ request.delete('delete_video', {
+ params: {
+ videoPath: videoPath
+ }
+ })
diff --git a/ai-interview-ui/src/api/user.js b/ai-interview-ui/src/api/user.js
new file mode 100644
index 0000000..639d17a
--- /dev/null
+++ b/ai-interview-ui/src/api/user.js
@@ -0,0 +1,104 @@
+import request from '@/utils/request.js'
+// 用户登陆
+export const adminLogin = ({ phone, encoding, password }) =>
+ request.post('admin/login', {
+ phone,
+ encoding,
+ password
+ })
+// 根据token获取用户信息
+export const useGetUserInfo = (token) =>
+ request.get('admin/get_userInfo', {
+ params: {
+ token: token
+ }
+ })
+// 用户登出
+export const useAdminLogout = (token) =>
+ request.get('admin/logout', {
+ params: {
+ token: token
+ }
+ })
+// 根据公司编码获取员工列表
+export const useGetAdminList = (encoding) =>
+ request.get('admin/get_adminList', {
+ params: {
+ encoding: encoding
+ }
+ })
+// 添加管理员
+export const useAddAdmin = (encoding, userId, username, phone, role) =>
+ request.post('admin/add_admin', { encoding, userId, username, phone, role })
+// 删除管理员
+export const useDelAdmin = (userId, deleteId) =>
+ request.delete('admin/del_admin', {
+ params: {
+ userId: userId,
+ deleteId: deleteId
+ }
+ })
+// 更换头像
+export const useChangeAvatar = ({ userId, avatar }) =>
+ request.post('admin/change_avatar', {
+ userId,
+ avatar
+ })
+// 重置密码
+export const useResetPassword = ({
+ userId,
+ oldPassword,
+ Password,
+ resetPassword
+}) =>
+ request.post('admin/reset_password', {
+ userId,
+ oldPassword,
+ Password,
+ resetPassword
+ })
+// 搜索管理员
+export const useSearchAdmin = (name, encoding) =>
+ request.get('admin/search_admin', {
+ params: {
+ name: name,
+ encoding: encoding
+ }
+ })
+// 编辑用户信息
+export const useUploadUserInfo = ({
+ userId,
+ updateId,
+ username,
+ age,
+ email,
+ sex
+}) =>
+ request.post('admin/upload_userInfo', {
+ userId,
+ updateId,
+ username,
+ age,
+ email,
+ sex
+ })
+//系统管理员修改公司管理员密码||公司管理员修改HR的密码
+
+export const useAdminEditPassword = ({ userId, updateUserId, password }) =>
+ request.post('admin/adminEditPassword', { userId, updateUserId, password })
+
+//获取反馈列表
+export const useGetFeedBackList = (status) =>
+ request.get('vxUser/getAllFeedBack', {
+ params: {
+ status: status
+ }
+ })
+//修改反馈的状态
+export const useChangeFeedBackStatus = (id, userId) =>
+ request.get('vxUser/changeFeedBackStatus', {
+ params: {
+ id: id,
+ userId: userId
+ }
+ })
diff --git a/ai-interview-ui/src/assets/bankIcon.png b/ai-interview-ui/src/assets/bankIcon.png
new file mode 100644
index 0000000..4c0568a
Binary files /dev/null and b/ai-interview-ui/src/assets/bankIcon.png differ
diff --git a/ai-interview-ui/src/assets/default.png b/ai-interview-ui/src/assets/default.png
new file mode 100644
index 0000000..e16488e
Binary files /dev/null and b/ai-interview-ui/src/assets/default.png differ
diff --git a/ai-interview-ui/src/assets/login_bg.jpg b/ai-interview-ui/src/assets/login_bg.jpg
new file mode 100644
index 0000000..c82d198
Binary files /dev/null and b/ai-interview-ui/src/assets/login_bg.jpg differ
diff --git a/ai-interview-ui/src/assets/login_title.png b/ai-interview-ui/src/assets/login_title.png
new file mode 100644
index 0000000..da720db
Binary files /dev/null and b/ai-interview-ui/src/assets/login_title.png differ
diff --git a/ai-interview-ui/src/assets/logo.png b/ai-interview-ui/src/assets/logo.png
new file mode 100644
index 0000000..32a9c3d
Binary files /dev/null and b/ai-interview-ui/src/assets/logo.png differ
diff --git a/ai-interview-ui/src/assets/main.scss b/ai-interview-ui/src/assets/main.scss
new file mode 100644
index 0000000..4609bd0
--- /dev/null
+++ b/ai-interview-ui/src/assets/main.scss
@@ -0,0 +1,20 @@
+body {
+ margin: 0;
+ background-color: #f5f5f5;
+}
+
+/* fade-slide */
+.fade-slide-leave-active,
+.fade-slide-enter-active {
+ transition: all 0.3s;
+}
+
+.fade-slide-enter-from {
+ transform: translateX(-30px);
+ opacity: 0;
+}
+
+.fade-slide-leave-to {
+ transform: translateX(30px);
+ opacity: 0;
+}
\ No newline at end of file
diff --git a/ai-interview-ui/src/components/404Page.vue b/ai-interview-ui/src/components/404Page.vue
new file mode 100644
index 0000000..0acd84e
--- /dev/null
+++ b/ai-interview-ui/src/components/404Page.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+ 404 Page
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+ page not found
+ We Couldn't Find This Page
+ Back To Home
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/components/EditorContainer.vue b/ai-interview-ui/src/components/EditorContainer.vue
new file mode 100644
index 0000000..e69de29
diff --git a/ai-interview-ui/src/components/PageContainer.vue b/ai-interview-ui/src/components/PageContainer.vue
new file mode 100644
index 0000000..2d1585b
--- /dev/null
+++ b/ai-interview-ui/src/components/PageContainer.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/main.js b/ai-interview-ui/src/main.js
new file mode 100644
index 0000000..b37af4d
--- /dev/null
+++ b/ai-interview-ui/src/main.js
@@ -0,0 +1,13 @@
+import { createApp } from 'vue'
+import pinia from '@/stores'
+
+import App from './App.vue'
+import router from './router'
+import './assets/main.scss'
+
+const app = createApp(App)
+
+app.use(pinia)
+app.use(router)
+
+app.mount('#app')
diff --git a/ai-interview-ui/src/router/index.js b/ai-interview-ui/src/router/index.js
new file mode 100644
index 0000000..08a6dc5
--- /dev/null
+++ b/ai-interview-ui/src/router/index.js
@@ -0,0 +1,94 @@
+import { createRouter, createWebHistory } from 'vue-router'
+import { useUserStore } from '@/stores'
+
+const router = createRouter({
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes: [
+ { path: '/login', component: () => import('@/views/login/LoginPage.vue') },
+ {
+ path: '/upload/resume',
+ component: () => import('@/views/uploadresume/UploadResume.vue')
+ },
+ {
+ path: '/',
+ redirect: '/home',
+ component: () => import('@/views/layout/LayoutContainer.vue'),
+
+ children: [
+ {
+ path: '/question/type',
+ component: () => import('@/views/question/QuestionTypePage.vue')
+ },
+ {
+ path: '/question/manager',
+ component: () => import('@/views/question/QuestionManager.vue')
+ },
+ {
+ path: '/question/square',
+ component: () => import('@/views/question/QuestionSquare.vue')
+ },
+ {
+ path: '/home',
+ component: () => import('@/views/home/HomeindexPage.vue')
+ },
+ {
+ path: '/manager',
+ component: () => import('@/views/manager/ManagerPage.vue')
+ },
+ {
+ path: '/adminManager',
+ component: () => import('@/views/manager/AdminMangePage.vue')
+ },
+ {
+ path: '/companyManager',
+ component: () => import('@/views/manager/CompanyManagePage.vue')
+ },
+ {
+ path: '/carouselChart',
+ component: () => import('@/views/carouselChart/CarouselChartPage.vue')
+ },
+ {
+ path: '/feedbackmanage',
+ component: () =>
+ import('@/views/feedbackmanage/FeedbackManagePage.vue')
+ },
+ {
+ path: '/interview/imageManagement',
+ component: () => import('@/views/interview/ImageManagement.vue')
+ },
+ {
+ path: '/interview/logoManagement',
+ component: () => import('@/views/interview/LogoManagement.vue')
+ },
+ {
+ path: '/interview/backgroundManagement',
+ component: () => import('@/views/interview/BackgroundManagement.vue')
+ },
+
+ {
+ path: '/recruitment/recruitmentManagement',
+ component: () =>
+ import('@/views/recruitment/RecruitmentManagement.vue')
+ },
+ {
+ path: '/recruitment/jobManagement',
+ component: () => import('@/views/recruitment/JobManagement.vue')
+ },
+ {
+ path: '/recruitment/companyManagement',
+ component: () => import('@/views/recruitment/CompanyManagement.vue')
+ },
+ {
+ path: '/recruitment/publicJob',
+ component: () => import('@/views/recruitment/PublicJob.vue')
+ }
+ ]
+ }
+ ]
+})
+router.beforeEach((to) => {
+ const userStore = useUserStore()
+ if (!userStore.token && to.path !== '/login') return '/login'
+})
+
+export default router
diff --git a/ai-interview-ui/src/stores/index.js b/ai-interview-ui/src/stores/index.js
new file mode 100644
index 0000000..e87bc2c
--- /dev/null
+++ b/ai-interview-ui/src/stores/index.js
@@ -0,0 +1,10 @@
+import { createPinia } from 'pinia'
+import persist from 'pinia-plugin-persistedstate'
+
+const pinia = createPinia()
+pinia.use(persist)
+
+export default pinia
+
+export * from '@/stores/modules/userStore.js'
+export * from '@/stores/modules/companyStore.js'
diff --git a/ai-interview-ui/src/stores/modules/companyStore.js b/ai-interview-ui/src/stores/modules/companyStore.js
new file mode 100644
index 0000000..7b989b9
--- /dev/null
+++ b/ai-interview-ui/src/stores/modules/companyStore.js
@@ -0,0 +1,28 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+
+export const useCompanyStore = defineStore(
+ 'interviewer-company',
+ () => {
+ const encoding = ref('')
+
+ const setEncoding = (newEncoding) => {
+ encoding.value = newEncoding
+ }
+
+ const removeEncoding = () => {
+ encoding.value = ''
+ }
+
+ return {
+ encoding,
+ setEncoding,
+ removeEncoding
+ }
+ },
+ {
+ persist: {
+ paths: ['encoding']
+ }
+ }
+)
diff --git a/ai-interview-ui/src/stores/modules/userStore.js b/ai-interview-ui/src/stores/modules/userStore.js
new file mode 100644
index 0000000..8042947
--- /dev/null
+++ b/ai-interview-ui/src/stores/modules/userStore.js
@@ -0,0 +1,39 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+
+export const useUserStore = defineStore(
+ 'interviewer-user',
+ () => {
+ const token = ref('')
+
+ const setToken = (newToken) => {
+ token.value = newToken
+ }
+
+ const removeToken = () => {
+ token.value = ''
+ }
+
+ const userInfo = ref({})
+
+ const setUserInfo = (newUserInfo) => {
+ userInfo.value = newUserInfo
+ }
+ const removeUserInfo = () => {
+ userInfo.value = {}
+ }
+ return {
+ token,
+ setToken,
+ removeToken,
+ userInfo,
+ setUserInfo,
+ removeUserInfo
+ }
+ },
+ {
+ persist: {
+ paths: ['token', 'userInfo']
+ }
+ }
+)
diff --git a/ai-interview-ui/src/utils/request.js b/ai-interview-ui/src/utils/request.js
new file mode 100644
index 0000000..b0613ce
--- /dev/null
+++ b/ai-interview-ui/src/utils/request.js
@@ -0,0 +1,44 @@
+import { useUserStore } from '@/stores'
+import axios from 'axios'
+import router from '@/router'
+
+const baseURL = 'http://localhost:8080'
+
+const instance = axios.create({
+ baseURL,
+ timeout: 100000
+})
+
+instance.interceptors.request.use(
+ (config) => {
+ const userStore = useUserStore()
+ if (userStore.token) {
+ config.headers.Authorization = userStore.token
+ }
+ return config
+ },
+ (err) => Promise.reject(err)
+)
+
+instance.interceptors.response.use(
+ (res) => {
+ if (res.data.code === 0) {
+ return res
+ }
+ if (res.data.code === 401) {
+ ElMessage.error(res.data.message)
+ router.replace('/login')
+ }
+ ElMessage.error(res.data.message)
+ return Promise.reject(res)
+ },
+ (err) => {
+ if (err.response?.status === 401) {
+ router.replace('/login')
+ }
+ return Promise.reject(err)
+ }
+)
+
+export default instance
+export { baseURL }
diff --git a/ai-interview-ui/src/views/carouselChart/CarouselChartPage.vue b/ai-interview-ui/src/views/carouselChart/CarouselChartPage.vue
new file mode 100644
index 0000000..aed8c21
--- /dev/null
+++ b/ai-interview-ui/src/views/carouselChart/CarouselChartPage.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+ 只能上传jpg/png文件,最多上传5张且单张图片不超过5M
+
+
+
+
+
+
+
+
+ 保存修改
+
+
+
diff --git a/ai-interview-ui/src/views/feedbackmanage/FeedbackManagePage.vue b/ai-interview-ui/src/views/feedbackmanage/FeedbackManagePage.vue
new file mode 100644
index 0000000..bae5619
--- /dev/null
+++ b/ai-interview-ui/src/views/feedbackmanage/FeedbackManagePage.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看图片
+
+
+
+
+
+
+ {{ row.status === 1 ? '待处理' : '已处理' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/feedbackmanage/components/ViewImagesDialog.vue b/ai-interview-ui/src/views/feedbackmanage/components/ViewImagesDialog.vue
new file mode 100644
index 0000000..a25d47a
--- /dev/null
+++ b/ai-interview-ui/src/views/feedbackmanage/components/ViewImagesDialog.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/home/HomeindexPage.vue b/ai-interview-ui/src/views/home/HomeindexPage.vue
new file mode 100644
index 0000000..0d89286
--- /dev/null
+++ b/ai-interview-ui/src/views/home/HomeindexPage.vue
@@ -0,0 +1,607 @@
+
+
+
+ {{ '近7天' }}投递简历人数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.resume.experience }}年
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 通过面试
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/home/components/DisagreeDialog.vue b/ai-interview-ui/src/views/home/components/DisagreeDialog.vue
new file mode 100644
index 0000000..3334572
--- /dev/null
+++ b/ai-interview-ui/src/views/home/components/DisagreeDialog.vue
@@ -0,0 +1,55 @@
+
+
+
+
+ 您确定拒绝{{ info.userName }}的面试申请?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/home/components/InviteDialog.vue b/ai-interview-ui/src/views/home/components/InviteDialog.vue
new file mode 100644
index 0000000..1b38d6d
--- /dev/null
+++ b/ai-interview-ui/src/views/home/components/InviteDialog.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 下一步
+
+
+ 上一步
+ 提交
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/home/components/ViewInterviewRecord.vue b/ai-interview-ui/src/views/home/components/ViewInterviewRecord.vue
new file mode 100644
index 0000000..360877a
--- /dev/null
+++ b/ai-interview-ui/src/views/home/components/ViewInterviewRecord.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/home/components/ViewResume.vue b/ai-interview-ui/src/views/home/components/ViewResume.vue
new file mode 100644
index 0000000..e884c44
--- /dev/null
+++ b/ai-interview-ui/src/views/home/components/ViewResume.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/BackgroundManagement.vue b/ai-interview-ui/src/views/interview/BackgroundManagement.vue
new file mode 100644
index 0000000..d190445
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/BackgroundManagement.vue
@@ -0,0 +1,97 @@
+
+
+
+
+ 添加背景
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点我查看
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/ImageManagement.vue b/ai-interview-ui/src/views/interview/ImageManagement.vue
new file mode 100644
index 0000000..76ac8f2
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/ImageManagement.vue
@@ -0,0 +1,106 @@
+
+
+
+
+ 添加面试官形象
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点我查看
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/LogoManagement.vue b/ai-interview-ui/src/views/interview/LogoManagement.vue
new file mode 100644
index 0000000..50a60a1
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/LogoManagement.vue
@@ -0,0 +1,89 @@
+
+
+
+
+ 添加Logo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点我查看
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/components/AddBackgroundDialog.vue b/ai-interview-ui/src/views/interview/components/AddBackgroundDialog.vue
new file mode 100644
index 0000000..645c61d
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/components/AddBackgroundDialog.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 单次限制上传一张图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/components/AddImageDialog.vue b/ai-interview-ui/src/views/interview/components/AddImageDialog.vue
new file mode 100644
index 0000000..d30a225
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/components/AddImageDialog.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+ 男
+ 女
+
+
+
+
+
+
+
+ 单次限制上传一张图片或视频
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/components/AddLogoDialog.vue b/ai-interview-ui/src/views/interview/components/AddLogoDialog.vue
new file mode 100644
index 0000000..4e595d7
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/components/AddLogoDialog.vue
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 单次限制上传一张图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/components/DeleteBackgroundDialog.vue b/ai-interview-ui/src/views/interview/components/DeleteBackgroundDialog.vue
new file mode 100644
index 0000000..6410606
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/components/DeleteBackgroundDialog.vue
@@ -0,0 +1,59 @@
+
+
+
+
+ 您确定要删除该Logo{{ info.picName }}?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/components/DeleteImageDialog.vue b/ai-interview-ui/src/views/interview/components/DeleteImageDialog.vue
new file mode 100644
index 0000000..ebe9ded
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/components/DeleteImageDialog.vue
@@ -0,0 +1,59 @@
+
+
+
+
+ 您确定要删除该Logo{{ info.picName }}?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/interview/components/DeleteLogoDialog.vue b/ai-interview-ui/src/views/interview/components/DeleteLogoDialog.vue
new file mode 100644
index 0000000..0a63827
--- /dev/null
+++ b/ai-interview-ui/src/views/interview/components/DeleteLogoDialog.vue
@@ -0,0 +1,59 @@
+
+
+
+
+ 您确定要删除该Logo{{ info.picName }}?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/layout/LayoutContainer.vue b/ai-interview-ui/src/views/layout/LayoutContainer.vue
new file mode 100644
index 0000000..8a0bdb1
--- /dev/null
+++ b/ai-interview-ui/src/views/layout/LayoutContainer.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+ 首页
+
+
+
+ 人员管理
+
+
+
+ 管理员管理
+
+
+
+ 公司管理
+
+
+
+ 轮播图管理
+
+
+
+ 反馈管理
+
+
+
+
+ 个性化面试
+
+
+
+
+ 形象管理
+
+
+
+ 背景管理
+
+
+
+ Logo管理
+
+
+
+
+
+
+ 题库设置
+
+
+
+ 题库类型
+
+
+
+ 题目管理
+
+
+
+ 题目广场
+
+
+
+
+
+ 招聘
+
+
+
+
+ 面试设置
+
+
+
+ 岗位管理
+
+
+
+
+ 公司详情
+
+
+
+ 面试发布
+
+
+
+
+
+
+
+ 欢迎您:{{ userStore.userInfo.username }}
+
+
+
+
+
+
+
+
+ 基本资料
+ 更换头像
+ 重置密码
+ 退出登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/layout/components/ChangeAvatarDialog.vue b/ai-interview-ui/src/views/layout/components/ChangeAvatarDialog.vue
new file mode 100644
index 0000000..ba7f190
--- /dev/null
+++ b/ai-interview-ui/src/views/layout/components/ChangeAvatarDialog.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+ 单次限制上传一张图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/layout/components/ResetPasswordDialog.vue b/ai-interview-ui/src/views/layout/components/ResetPasswordDialog.vue
new file mode 100644
index 0000000..5048531
--- /dev/null
+++ b/ai-interview-ui/src/views/layout/components/ResetPasswordDialog.vue
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/layout/components/UserInfoDialog.vue b/ai-interview-ui/src/views/layout/components/UserInfoDialog.vue
new file mode 100644
index 0000000..c80c994
--- /dev/null
+++ b/ai-interview-ui/src/views/layout/components/UserInfoDialog.vue
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 更换头像
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 男
+ 女
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 单次限制上传一张图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/login/LoginPage.vue b/ai-interview-ui/src/views/login/LoginPage.vue
new file mode 100644
index 0000000..4e33fc2
--- /dev/null
+++ b/ai-interview-ui/src/views/login/LoginPage.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+ 登录
+
+
+
+
+
+
+
+
+
+
+
+
+ 记住我
+ 忘记密码?
+
+
+
+ 登录
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/manager/AdminMangePage.vue b/ai-interview-ui/src/views/manager/AdminMangePage.vue
new file mode 100644
index 0000000..3bedecf
--- /dev/null
+++ b/ai-interview-ui/src/views/manager/AdminMangePage.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加管理员
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/manager/CompanyManagePage.vue b/ai-interview-ui/src/views/manager/CompanyManagePage.vue
new file mode 100644
index 0000000..7bb26dd
--- /dev/null
+++ b/ai-interview-ui/src/views/manager/CompanyManagePage.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 公司注册
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/manager/ManagerPage.vue b/ai-interview-ui/src/views/manager/ManagerPage.vue
new file mode 100644
index 0000000..8a6dbd4
--- /dev/null
+++ b/ai-interview-ui/src/views/manager/ManagerPage.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加管理员
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/manager/components/AdminAddEndit.vue b/ai-interview-ui/src/views/manager/components/AdminAddEndit.vue
new file mode 100644
index 0000000..1cfd6df
--- /dev/null
+++ b/ai-interview-ui/src/views/manager/components/AdminAddEndit.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+ 公司管理员
+ HR
+
+
+
+
+
+
+ 注:初始化密码就是账号的后六位
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/manager/components/AdminDelEndit.vue b/ai-interview-ui/src/views/manager/components/AdminDelEndit.vue
new file mode 100644
index 0000000..499e601
--- /dev/null
+++ b/ai-interview-ui/src/views/manager/components/AdminDelEndit.vue
@@ -0,0 +1,58 @@
+
+
+
+
+ 您确定要删除管理员{{ info.username }}?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/manager/components/AdminProAddDialog.vue b/ai-interview-ui/src/views/manager/components/AdminProAddDialog.vue
new file mode 100644
index 0000000..79b869e
--- /dev/null
+++ b/ai-interview-ui/src/views/manager/components/AdminProAddDialog.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 注:初始化密码就是账号的后六位
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/manager/components/ResetPasswordDialog.vue b/ai-interview-ui/src/views/manager/components/ResetPasswordDialog.vue
new file mode 100644
index 0000000..ca2e19d
--- /dev/null
+++ b/ai-interview-ui/src/views/manager/components/ResetPasswordDialog.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/QuestionManager.vue b/ai-interview-ui/src/views/question/QuestionManager.vue
new file mode 100644
index 0000000..3937fcc
--- /dev/null
+++ b/ai-interview-ui/src/views/question/QuestionManager.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加题目
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 更多
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/QuestionSquare.vue b/ai-interview-ui/src/views/question/QuestionSquare.vue
new file mode 100644
index 0000000..92541e2
--- /dev/null
+++ b/ai-interview-ui/src/views/question/QuestionSquare.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/QuestionTypePage.vue b/ai-interview-ui/src/views/question/QuestionTypePage.vue
new file mode 100644
index 0000000..da99fff
--- /dev/null
+++ b/ai-interview-ui/src/views/question/QuestionTypePage.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加题库
+
+
+
+
+
+
+ {{
+ row.type === 1
+ ? '专业面试题库'
+ : row.type === 2
+ ? '综合面试题库'
+ : '心理测试题库'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/components/QuestionDelDialog.vue b/ai-interview-ui/src/views/question/components/QuestionDelDialog.vue
new file mode 100644
index 0000000..ebc2fad
--- /dev/null
+++ b/ai-interview-ui/src/views/question/components/QuestionDelDialog.vue
@@ -0,0 +1,56 @@
+
+
+
+
+ 您确定要删除题目{{ info.title }}?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/components/QuestionDetailDialog.vue b/ai-interview-ui/src/views/question/components/QuestionDetailDialog.vue
new file mode 100644
index 0000000..5693e78
--- /dev/null
+++ b/ai-interview-ui/src/views/question/components/QuestionDetailDialog.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/components/QuestionEndit.vue b/ai-interview-ui/src/views/question/components/QuestionEndit.vue
new file mode 100644
index 0000000..fa7da0f
--- /dev/null
+++ b/ai-interview-ui/src/views/question/components/QuestionEndit.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ FormModel.typeName ? FormModel.typeName : '请选择题库类型'
+ }}
+
+
+
+ {{ item.typeName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/components/QuestionTypeDialog.vue b/ai-interview-ui/src/views/question/components/QuestionTypeDialog.vue
new file mode 100644
index 0000000..3a60666
--- /dev/null
+++ b/ai-interview-ui/src/views/question/components/QuestionTypeDialog.vue
@@ -0,0 +1,56 @@
+
+
+
+
+ 您确定要删除题库{{ info.typeName }}以及该题库的所有题目?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/components/QuestionTypeEdit.vue b/ai-interview-ui/src/views/question/components/QuestionTypeEdit.vue
new file mode 100644
index 0000000..411ec10
--- /dev/null
+++ b/ai-interview-ui/src/views/question/components/QuestionTypeEdit.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 专业面试题库
+ 综合面试题库
+ 心理测试题库
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/components/ShareQuestionTypeDialog.vue b/ai-interview-ui/src/views/question/components/ShareQuestionTypeDialog.vue
new file mode 100644
index 0000000..2dffc0b
--- /dev/null
+++ b/ai-interview-ui/src/views/question/components/ShareQuestionTypeDialog.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 专业面试题库
+ 综合面试题库
+ 心理测试题库
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/components/SharedQuestionDialog.vue b/ai-interview-ui/src/views/question/components/SharedQuestionDialog.vue
new file mode 100644
index 0000000..4e43f48
--- /dev/null
+++ b/ai-interview-ui/src/views/question/components/SharedQuestionDialog.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+ {{ item.typeName }}
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/MyShareQuestionContainer.vue b/ai-interview-ui/src/views/question/container/MyShareQuestionContainer.vue
new file mode 100644
index 0000000..0b4e7f9
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/MyShareQuestionContainer.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 批量删除
+
+ 添加分享题目
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/MyShareQuestionTypeContainer.vue b/ai-interview-ui/src/views/question/container/MyShareQuestionTypeContainer.vue
new file mode 100644
index 0000000..c4ed075
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/MyShareQuestionTypeContainer.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加分享题库
+
+
+
+
+
+
+
+
+ {{
+ row.type === 1
+ ? '专业面试题库'
+ : row.type === 2
+ ? '综合面试题库'
+ : '心理测试题库'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/QuestionSquareContainer.vue b/ai-interview-ui/src/views/question/container/QuestionSquareContainer.vue
new file mode 100644
index 0000000..23d28c9
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/QuestionSquareContainer.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加到题库
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/QuestionTypeSquareContainer.vue b/ai-interview-ui/src/views/question/container/QuestionTypeSquareContainer.vue
new file mode 100644
index 0000000..f5c9b23
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/QuestionTypeSquareContainer.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加到题库
+
+
+
+
+
+
+
+
+ {{
+ row.type === 1
+ ? '专业面试题库'
+ : row.type === 2
+ ? '综合面试题库'
+ : '心理测试题库'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/components/AddShareQuestionDialog.vue b/ai-interview-ui/src/views/question/container/components/AddShareQuestionDialog.vue
new file mode 100644
index 0000000..28c47ae
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/components/AddShareQuestionDialog.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.typeName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/components/AddShareQuestionTypeDialog.vue b/ai-interview-ui/src/views/question/container/components/AddShareQuestionTypeDialog.vue
new file mode 100644
index 0000000..93284b7
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/components/AddShareQuestionTypeDialog.vue
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.typeName }}
+
+
+
+
+
+
+
+
+
+
+
+ 专业面试题库
+ 综合面试题库
+ 心理测试题库
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/components/AddSharedQuestionToMineDialog.vue b/ai-interview-ui/src/views/question/container/components/AddSharedQuestionToMineDialog.vue
new file mode 100644
index 0000000..cc29f68
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/components/AddSharedQuestionToMineDialog.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+ {{ item.typeName }}
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/components/AddSharedQuestionTypeToMineDialog.vue b/ai-interview-ui/src/views/question/container/components/AddSharedQuestionTypeToMineDialog.vue
new file mode 100644
index 0000000..ebb0ced
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/components/AddSharedQuestionTypeToMineDialog.vue
@@ -0,0 +1,54 @@
+
+
+
+ 您确定要添加选中的题库以及题库下的题目到贵公司的题库列表中吗?
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/components/MySharedQuestionEditDialog.vue b/ai-interview-ui/src/views/question/container/components/MySharedQuestionEditDialog.vue
new file mode 100644
index 0000000..90a0f99
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/components/MySharedQuestionEditDialog.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+ {{
+ updateForm.sharedQuestionBankName
+ ? updateForm.sharedQuestionBankName
+ : '请选择题库类型'
+ }}
+
+
+
+ {{ item.typeName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/components/MySharedQuestionTypeDeleteDialog.vue b/ai-interview-ui/src/views/question/container/components/MySharedQuestionTypeDeleteDialog.vue
new file mode 100644
index 0000000..3c84ea4
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/components/MySharedQuestionTypeDeleteDialog.vue
@@ -0,0 +1,47 @@
+
+
+
+ 您确定要删除题库{{ deleteInfo.typeName }}以及该题库的所有题目?
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/question/container/components/MySharedQuestionTypeEnditDialog.vue b/ai-interview-ui/src/views/question/container/components/MySharedQuestionTypeEnditDialog.vue
new file mode 100644
index 0000000..a6d961d
--- /dev/null
+++ b/ai-interview-ui/src/views/question/container/components/MySharedQuestionTypeEnditDialog.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 专业面试题库
+ 综合面试题库
+ 心理测试题库
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/CompanyManagement.vue b/ai-interview-ui/src/views/recruitment/CompanyManagement.vue
new file mode 100644
index 0000000..c1cfaaa
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/CompanyManagement.vue
@@ -0,0 +1,416 @@
+
+
+
+
+
+
+
+
+
+ 单次限制上传一张图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 只能上传jpg/png文件,最多上传5张且单张图片不超过5M
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存修改
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/JobManagement.vue b/ai-interview-ui/src/views/recruitment/JobManagement.vue
new file mode 100644
index 0000000..ae8bb81
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/JobManagement.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 添加岗位
+
+
+
+
+
+
+ {{
+ row.jobType === 1
+ ? '行政'
+ : row.jobType === 2
+ ? '财务'
+ : row.jobType === 3
+ ? '技术'
+ : '销售'
+ }}
+
+
+
+
+
+
+
+
+
+ {{ row.status === 1 ? '正常' : '禁用' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/PublicJob.vue b/ai-interview-ui/src/views/recruitment/PublicJob.vue
new file mode 100644
index 0000000..45be058
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/PublicJob.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 招聘发布
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/RecruitmentManagement.vue b/ai-interview-ui/src/views/recruitment/RecruitmentManagement.vue
new file mode 100644
index 0000000..8e16db9
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/RecruitmentManagement.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+ 岗位面试设置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/JobDelDialog.vue b/ai-interview-ui/src/views/recruitment/components/JobDelDialog.vue
new file mode 100644
index 0000000..df7b8af
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/JobDelDialog.vue
@@ -0,0 +1,56 @@
+
+
+
+
+ 您确定要删除岗位{{ info.jobName }}?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/JobEndit.vue b/ai-interview-ui/src/views/recruitment/components/JobEndit.vue
new file mode 100644
index 0000000..195e38c
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/JobEndit.vue
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ 无学历要求
+ 小学/初中
+ 高中/中专
+ 大专及以上
+ 本科及以上
+ 研究生及以上
+
+
+
+
+ 行政
+ 财务
+ 技术
+ 销售
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/JobSettingDel.vue b/ai-interview-ui/src/views/recruitment/components/JobSettingDel.vue
new file mode 100644
index 0000000..cc7b501
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/JobSettingDel.vue
@@ -0,0 +1,59 @@
+
+
+
+
+ 您确定要删除岗位{{ info.jobName }}的面试设置?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/JobSettingEndit.vue b/ai-interview-ui/src/views/recruitment/components/JobSettingEndit.vue
new file mode 100644
index 0000000..8ee83c8
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/JobSettingEndit.vue
@@ -0,0 +1,631 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ 无学历要求
+ 小学/初中
+ 高中/中专
+ 大专及以上
+ 本科及以上
+ 研究生及以上
+
+
+
+
+ 行政
+ 财务
+ 技术
+ 销售
+
+
+
+
+
+
+
+
+
+ 保存修改
+
+
+
+
请选择面试官形象
+
+
+
+
+
+
+
+
+ {{ item.picName }}
+
+
+
+
+
+
+
+
+
+
+
请选择面试背景图片
+
+
+
+
+
+
+
+
+ {{ item.picName }}
+
+
+
+
+
+
+
+
+
+
+
请选择公司logo
+
+
+
+
+
+
+
+
+ {{ item.picName }}
+
+
+
+
+
+
+
+
+
+
+
请选择题库
+
+
+
+
+
+ 请选择专业题库
+
+
+
+
+
+
+
+
+
+
+
+ 请选择综合题库
+
+
+
+
+
+
+
+
+
+
+
+ 请选择心理题库
+
+
+
+
+
+
+
+
+
请输入岗位promote,让面试官更加智能!
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/JobStatusDialog.vue b/ai-interview-ui/src/views/recruitment/components/JobStatusDialog.vue
new file mode 100644
index 0000000..8e99431
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/JobStatusDialog.vue
@@ -0,0 +1,53 @@
+
+
+
+
+ 您确定要{{ status === 1 ? '禁用' : '启用' }}岗位:{{ jobName }}?
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/PublicJobAddDialog.vue b/ai-interview-ui/src/views/recruitment/components/PublicJobAddDialog.vue
new file mode 100644
index 0000000..e0a7e67
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/PublicJobAddDialog.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.jobName }}
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/PublicJobDelDialog.vue b/ai-interview-ui/src/views/recruitment/components/PublicJobDelDialog.vue
new file mode 100644
index 0000000..743e2c7
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/PublicJobDelDialog.vue
@@ -0,0 +1,56 @@
+
+
+
+
+ 您确定要删除{{ info.recruitmentName }}?
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/recruitment/components/RecruitmentAddEndit.vue b/ai-interview-ui/src/views/recruitment/components/RecruitmentAddEndit.vue
new file mode 100644
index 0000000..48abfd3
--- /dev/null
+++ b/ai-interview-ui/src/views/recruitment/components/RecruitmentAddEndit.vue
@@ -0,0 +1,709 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ 无学历要求
+ 小学/初中
+ 高中/中专
+ 大专及以上
+ 本科及以上
+ 研究生及以上
+
+
+
+
+ 行政
+ 财务
+ 技术
+ 销售
+
+
+
+
+
+
+
+
+
+ 保存修改
+
+
+
+
请选择面试官形象
+
+
+
+
+
+
+
+
+ {{ item.picName }}
+
+
+
+
+
+
+
+
+
+
+
请选择面试背景图片
+
+
+
+
+
+
+
+
+ {{ item.picName }}
+
+
+
+
+
+
+
+
+
+
+
请选择公司logo
+
+
+
+
+
+
+
+
+ {{ item.picName }}
+
+
+
+
+
+
+
+
+
+
+
请选择题库
+
+
+
+
+
+ 请选择专业题库
+
+
+
+
+
+
+
+
+
+
+
+ 请选择综合题库
+
+
+
+
+
+
+
+
+
+
+
+ 请选择心理题库
+
+
+
+
+
+
+
+
+
请输入岗位promote,让面试官更加智能!
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ai-interview-ui/src/views/uploadresume/UploadResume.vue b/ai-interview-ui/src/views/uploadresume/UploadResume.vue
new file mode 100644
index 0000000..6eaceb2
--- /dev/null
+++ b/ai-interview-ui/src/views/uploadresume/UploadResume.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ Drop file here or click to upload
+
+
+
+ jpg/png files with a size less than 500kb
+
+
+
+
diff --git a/ai-interview-ui/template.config.js b/ai-interview-ui/template.config.js
new file mode 100644
index 0000000..6040229
--- /dev/null
+++ b/ai-interview-ui/template.config.js
@@ -0,0 +1,34 @@
+/**
+ * This file is a configuration file generated by the `Template` extension on `vscode`
+ * @see https://marketplace.visualstudio.com/items?itemName=yongwoo.template
+ */
+module.exports = {
+ // You can change the template path to another path
+ templateRootPath: "./.templates",
+ // After copying the template file the `replaceFileTextFn` function is executed
+ replaceFileTextFn: (fileText, templateName, utils) => {
+ // @see https://www.npmjs.com/package/change-case
+ const { changeCase } = utils;
+ // You can change the text in the file
+ return fileText
+ .replace(/__templateName__/g, templateName)
+ .replace(
+ /__templateNameToPascalCase__/g,
+ changeCase.pascalCase(templateName)
+ )
+ .replace(
+ /__templateNameToParamCase__/g,
+ changeCase.paramCase(templateName)
+ );
+ },
+ renameFileFn: (fileName, templateName, utils) => {
+ const { path } = utils;
+ const { base } = path.parse(fileName);
+ return base.replace(/__templateName__/gm, templateName);
+ },
+ renameSubDirectoriesFn: (directoryName, templateName, _utils) => {
+ const { changeCase } = _utils;
+ const newDirectoryName = changeCase.paramCase(templateName);
+ return directoryName.replace(/__templateName__/g, newDirectoryName);
+ }
+};
diff --git a/ai-interview-ui/vite.config.js b/ai-interview-ui/vite.config.js
new file mode 100644
index 0000000..f26ea0b
--- /dev/null
+++ b/ai-interview-ui/vite.config.js
@@ -0,0 +1,48 @@
+import { fileURLToPath, URL } from 'node:url'
+
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import AutoImport from 'unplugin-auto-import/vite'
+import Components from 'unplugin-vue-components/vite'
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
+import { ArcoResolver } from 'unplugin-vue-components/resolvers'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ vue(),
+ AutoImport({
+ resolvers: [ElementPlusResolver(), ArcoResolver()]
+ }),
+ Components({
+ resolvers: [
+ ElementPlusResolver(),
+ ArcoResolver({
+ sideEffect: true
+ })
+ ]
+ })
+ ],
+
+ //代理设置
+ server: {
+ port: 5174,
+ host: '0.0.0.0',
+ base: './',
+ cors: true, // 默认启用并允许任何源
+ open: true, // 在服务器启动时自动在浏览器中打开应用程序
+ proxy: {
+ '/api': {
+ target: 'http://117.88.94.226:5380',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/api/, 'api')
+ }
+ }
+ },
+
+ resolve: {
+ alias: {
+ '@': fileURLToPath(new URL('./src', import.meta.url))
+ }
+ }
+})
diff --git a/ai-interviewer-mysql-sqlfile/ai_interviewer.sql b/ai-interviewer-mysql-sqlfile/ai_interviewer.sql
new file mode 100644
index 0000000..61e3cb7
--- /dev/null
+++ b/ai-interviewer-mysql-sqlfile/ai_interviewer.sql
@@ -0,0 +1,915 @@
+/*
+Navicat MySQL Data Transfer
+
+Source Server : 101.43.255.47_3306
+Source Server Version : 50562
+Source Host : 101.43.255.47:3306
+Source Database : ai_interviewer
+
+Target Server Type : MYSQL
+Target Server Version : 50562
+File Encoding : 65001
+
+Date: 2024-01-19 12:05:27
+*/
+
+SET FOREIGN_KEY_CHECKS=0;
+
+-- ----------------------------
+-- Table structure for application_count
+-- ----------------------------
+DROP TABLE IF EXISTS `application_count`;
+CREATE TABLE `application_count` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `count` int(11) DEFAULT NULL COMMENT '数量',
+ `encoding` varchar(50) DEFAULT NULL COMMENT '公司编码',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=269 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of application_count
+-- ----------------------------
+INSERT INTO `application_count` VALUES ('221', '0', '123', '2024-01-12');
+INSERT INTO `application_count` VALUES ('222', '0', '222', '2024-01-12');
+INSERT INTO `application_count` VALUES ('223', '0', '333', '2024-01-12');
+INSERT INTO `application_count` VALUES ('224', '0', '123', '2024-01-12');
+INSERT INTO `application_count` VALUES ('225', '0', '222', '2024-01-12');
+INSERT INTO `application_count` VALUES ('226', '0', '333', '2024-01-12');
+INSERT INTO `application_count` VALUES ('227', '0', '123', '2024-01-13');
+INSERT INTO `application_count` VALUES ('228', '0', '222', '2024-01-13');
+INSERT INTO `application_count` VALUES ('229', '0', '333', '2024-01-13');
+INSERT INTO `application_count` VALUES ('230', '0', '123', '2024-01-13');
+INSERT INTO `application_count` VALUES ('231', '0', '222', '2024-01-13');
+INSERT INTO `application_count` VALUES ('232', '0', '333', '2024-01-13');
+INSERT INTO `application_count` VALUES ('233', '0', '123', '2024-01-14');
+INSERT INTO `application_count` VALUES ('234', '0', '222', '2024-01-14');
+INSERT INTO `application_count` VALUES ('235', '0', '333', '2024-01-14');
+INSERT INTO `application_count` VALUES ('236', '0', '123', '2024-01-14');
+INSERT INTO `application_count` VALUES ('237', '0', '222', '2024-01-14');
+INSERT INTO `application_count` VALUES ('238', '0', '333', '2024-01-14');
+INSERT INTO `application_count` VALUES ('239', '0', '123', '2024-01-15');
+INSERT INTO `application_count` VALUES ('240', '0', '222', '2024-01-15');
+INSERT INTO `application_count` VALUES ('241', '0', '333', '2024-01-15');
+INSERT INTO `application_count` VALUES ('242', '0', '123', '2024-01-15');
+INSERT INTO `application_count` VALUES ('243', '0', '222', '2024-01-15');
+INSERT INTO `application_count` VALUES ('244', '0', '333', '2024-01-15');
+INSERT INTO `application_count` VALUES ('245', '0', '123', '2024-01-16');
+INSERT INTO `application_count` VALUES ('246', '0', '222', '2024-01-16');
+INSERT INTO `application_count` VALUES ('247', '0', '333', '2024-01-16');
+INSERT INTO `application_count` VALUES ('248', '0', '123', '2024-01-16');
+INSERT INTO `application_count` VALUES ('249', '0', '222', '2024-01-16');
+INSERT INTO `application_count` VALUES ('250', '0', '333', '2024-01-16');
+INSERT INTO `application_count` VALUES ('251', '0', '123', '2024-01-17');
+INSERT INTO `application_count` VALUES ('252', '0', '222', '2024-01-17');
+INSERT INTO `application_count` VALUES ('253', '0', '333', '2024-01-17');
+INSERT INTO `application_count` VALUES ('254', '0', '123', '2024-01-17');
+INSERT INTO `application_count` VALUES ('255', '0', '222', '2024-01-17');
+INSERT INTO `application_count` VALUES ('256', '0', '333', '2024-01-17');
+INSERT INTO `application_count` VALUES ('257', '0', '123', '2024-01-18');
+INSERT INTO `application_count` VALUES ('258', '0', '222', '2024-01-18');
+INSERT INTO `application_count` VALUES ('259', '0', '333', '2024-01-18');
+INSERT INTO `application_count` VALUES ('260', '0', '123', '2024-01-18');
+INSERT INTO `application_count` VALUES ('261', '0', '222', '2024-01-18');
+INSERT INTO `application_count` VALUES ('262', '0', '333', '2024-01-18');
+INSERT INTO `application_count` VALUES ('263', '0', '123', '2024-01-19');
+INSERT INTO `application_count` VALUES ('264', '0', '222', '2024-01-19');
+INSERT INTO `application_count` VALUES ('265', '0', '333', '2024-01-19');
+INSERT INTO `application_count` VALUES ('266', '0', '123', '2024-01-19');
+INSERT INTO `application_count` VALUES ('267', '0', '222', '2024-01-19');
+INSERT INTO `application_count` VALUES ('268', '0', '333', '2024-01-19');
+
+-- ----------------------------
+-- Table structure for black_token
+-- ----------------------------
+DROP TABLE IF EXISTS `black_token`;
+CREATE TABLE `black_token` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'token黑名单id',
+ `user_id` int(11) DEFAULT NULL COMMENT 'token对应的user对象id',
+ `value` varchar(255) DEFAULT NULL COMMENT '黑名单token',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of black_token
+-- ----------------------------
+INSERT INTO `black_token` VALUES ('1', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA2NTQ4MzYsInVzZXJpZCI6MTJ9.B2haHTCmsPurH5LijfFyw08RuYFJmRANMsvcUef5-0E', '2023-10-23 20:09:24');
+INSERT INTO `black_token` VALUES ('2', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA2NTQ4MzYsInVzZXJpZCI6MTJ9.B2haHTCmsPurH5LijfFyw08RuYFJmRANMsvcUef5-0E', '2023-10-23 20:40:42');
+INSERT INTO `black_token` VALUES ('3', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA2NTY4ODIsInVzZXJpZCI6MTJ9.iRuq3bGBRDJkM_pRtzot3W_ErKlnhffltyYor-IEwrA', '2023-10-23 20:41:55');
+INSERT INTO `black_token` VALUES ('4', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA2NTc2MTksInVzZXJpZCI6MTJ9.2GVuEldptTaKew_SA_bDw7_WBGpRWEZf0472C_9aFDg', '2023-10-24 11:19:58');
+INSERT INTO `black_token` VALUES ('5', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA3MDk2MTcsInVzZXJpZCI6MTJ9.8HlfRCk0edOX2_iBYwiznUhT9wRcP6Sg9F6161dU-74', '2023-10-24 18:55:27');
+INSERT INTO `black_token` VALUES ('6', '13', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA3MzY5NTIsInVzZXJpZCI6MTN9.itorvmVWc_-lRrrSUfnJeDBBsxntvaDMzZlxcUsf_fI', '2023-10-24 19:08:02');
+INSERT INTO `black_token` VALUES ('7', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA3Mzc2OTgsInVzZXJpZCI6MTJ9.fIwLVf_jVxV75JBShuVl8KcrmWXnluKGG40aDxmB04I', '2023-10-24 19:19:57');
+INSERT INTO `black_token` VALUES ('8', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA3Mzg0NDMsInVzZXJpZCI6MX0.XdvbKrdztIaJt7SiuTBZvYYbwunFFUfV7Js6of18epo', '2023-10-24 20:02:32');
+INSERT INTO `black_token` VALUES ('9', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA3NDA5NjIsInVzZXJpZCI6MTJ9.gc5OzLOoUf1AnRA-BZRbNq5M5XcCPRNaY8t_jnmPmYU', '2023-10-25 21:07:03');
+INSERT INTO `black_token` VALUES ('10', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzEzNTIsInVzZXJpZCI6MTJ9.Rh8A6v-Orag1yNN2_Oq0s6-ORPg9DXF5qyJ4wSN0JcI', '2023-10-25 21:44:36');
+INSERT INTO `black_token` VALUES ('11', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzM1NDgsInVzZXJpZCI6MTJ9.VitX3grTpJGOlM9Kn5V9sVfnRmnY-Gl37SMOpYZOEqU', '2023-10-25 21:46:58');
+INSERT INTO `black_token` VALUES ('12', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzM2OTEsInVzZXJpZCI6MTJ9.5L4S71_9yP0-J9YEn9aGK51lFGzkjv4-4NbDWGIeQQE', '2023-10-25 21:50:35');
+INSERT INTO `black_token` VALUES ('13', '18', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzM4NTUsInVzZXJpZCI6MTh9.S1F6BPs_xAW9m5hdrezEns8YuB-1siztpr_vQovPx3M', '2023-10-25 21:51:30');
+INSERT INTO `black_token` VALUES ('14', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzM4OTksInVzZXJpZCI6MTJ9.dBI5tEbpV7oMH9GejxKumDkGlX4yydGtaXGWSUqWM5o', '2023-10-25 21:52:04');
+INSERT INTO `black_token` VALUES ('15', '18', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzM5MzYsInVzZXJpZCI6MTh9.ZZZI5qNUNbhI50eqnneOneJFVpAoaQD5ezayTh1F8T8', '2023-10-25 21:52:49');
+INSERT INTO `black_token` VALUES ('16', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzM5NzgsInVzZXJpZCI6MTJ9.wA4DgXps5h8P4zlowyZJKGY5HDPfMWhshLKAbFktwVY', '2023-10-25 21:58:18');
+INSERT INTO `black_token` VALUES ('17', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzQzMjgsInVzZXJpZCI6MTJ9.VspiZQBE2qrMA0MNS06tnFtkzDY9oeADUqWqMlVtsq8', '2023-10-25 22:02:39');
+INSERT INTO `black_token` VALUES ('18', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA4MzQ1NzEsInVzZXJpZCI6MX0.sPx6Vol5A10aqvo6QomjhwlJxgoof4KWuDu7XKP843M', '2023-10-26 16:25:46');
+INSERT INTO `black_token` VALUES ('19', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA5MDA3NTYsInVzZXJpZCI6MTJ9.HnazLNQgynhXLZwtcc59LBALXDy6BqSW1IGl7Lr5ujc', '2023-10-26 18:58:08');
+INSERT INTO `black_token` VALUES ('20', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA5MDk4OTgsInVzZXJpZCI6MTJ9.ksyHHGoiAwkNc4FHMjXJmKeKZ_nUx1cnC8Tpa9qiyXw', '2023-10-27 17:18:16');
+INSERT INTO `black_token` VALUES ('21', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA3NDM3MjYsInVzZXJpZCI6MTJ9.JVDFtmPYDfutJZ_grXiBDgXE4sVAeCmrMmRtEyAV2hA', '2023-10-29 14:32:07');
+INSERT INTO `black_token` VALUES ('22', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDA5OTAzMDYsInVzZXJpZCI6MTJ9.EARh85SVc7PdtFTTlTmLRUQ2ymv5bZZOJiOzfHQLJFQ', '2023-10-30 16:56:06');
+INSERT INTO `black_token` VALUES ('23', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDEyNDgxNzgsInVzZXJpZCI6MTJ9.l-_UhSeIsK9M-CfXWq04tv7n554GuA3H33rbiUC53Ds', '2023-10-30 20:16:26');
+INSERT INTO `black_token` VALUES ('24', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDEyNjAyMTEsInVzZXJpZCI6MTJ9.HcKd_7PXAYeAJVbzCUXA8P2m5MMIxszaUvcBI2M1jSg', '2023-10-30 20:17:14');
+INSERT INTO `black_token` VALUES ('25', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDAzMjEwNzMsInVzZXJpZCI6MTJ9.-GanVasJcxVT-sPEXPRq9FSEacfpeYwupdnOvIHGhXU', '2023-11-01 18:04:16');
+INSERT INTO `black_token` VALUES ('26', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MjUwNjcsInVzZXJpZCI6MTJ9.p3nHvDEDzNXCaRj_yN6o-T4mcWCIu1CAd306oLoNEqo', '2023-11-01 18:48:43');
+INSERT INTO `black_token` VALUES ('27', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0Mjc3NTEsInVzZXJpZCI6MTJ9.0YOEGp7pCiBax9k-0SiVHKmXKn1ZVaMKnvWMW3wZ0N8', '2023-11-01 19:12:52');
+INSERT INTO `black_token` VALUES ('28', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MjkyNzcsInVzZXJpZCI6MTJ9.VaV19sU70-z9fmjmkO-Vvgc0dhzrHhPV04aRV1qnVx4', '2023-11-01 19:15:27');
+INSERT INTO `black_token` VALUES ('29', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MjkzNzMsInVzZXJpZCI6MTJ9.kv7I2IqWAJqwMvgQkLVJi2Vox6isRW5kxr8ish1tU8E', '2023-11-01 19:18:59');
+INSERT INTO `black_token` VALUES ('30', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0Mjk2MTIsInVzZXJpZCI6MTJ9.GdKkfkBig01xO5aU4AUDFNSluI_VMWcdxuaobyIiPHE', '2023-11-01 19:21:02');
+INSERT INTO `black_token` VALUES ('31', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0Mjk2ODgsInVzZXJpZCI6MTJ9.8Txgo4nKcYxYc4C79DLHOkZwL2HpzfoEzmoaR2FlgqM', '2023-11-01 19:33:17');
+INSERT INTO `black_token` VALUES ('32', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzA0MzIsInVzZXJpZCI6MTJ9.k14ZxBW9fW3PKzwJiryk6ZW7rYJ6-TON940RJ0zQRe4', '2023-11-01 19:34:26');
+INSERT INTO `black_token` VALUES ('33', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzA0OTYsInVzZXJpZCI6MTJ9.4bfyP3UzgkfQuT6U2DsvUqdA-GGhviLrqRvXh63AG0g', '2023-11-01 19:35:13');
+INSERT INTO `black_token` VALUES ('34', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzA1NDEsInVzZXJpZCI6MTJ9.K-wyWJaPHIHqsehLh27rcEW9VTW855vrbek3I0ez_Vo', '2023-11-01 19:38:19');
+INSERT INTO `black_token` VALUES ('35', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzA3MzEsInVzZXJpZCI6MTJ9.9d6LF5n81MKf2PljbOJsO4OaED3MsIYb7uRvVuA8QXI', '2023-11-01 19:39:50');
+INSERT INTO `black_token` VALUES ('36', '26', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzA4MDYsInVzZXJpZCI6MjZ9.bdOc43zohotNW2Z1-se2b5h80Q8hWtvy4sMgC4cO-k4', '2023-11-01 20:38:25');
+INSERT INTO `black_token` VALUES ('37', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzQzNzMsInVzZXJpZCI6MTJ9.Q_Y3gFNhOZy3_YVEkHZ0y_gUKvyxLUFp_z5w1Xyuf6w', '2023-11-01 20:40:28');
+INSERT INTO `black_token` VALUES ('38', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzQ0NTAsInVzZXJpZCI6MTJ9.u-RpRhkkDapMBjTDH1CqTgePSONqSVSryLviLk-9KUE', '2023-11-01 20:45:34');
+INSERT INTO `black_token` VALUES ('39', '27', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MzQ3NDgsInVzZXJpZCI6Mjd9.EXHFinJHeILt89j02MS0onkSYE471g5HnjjcQ1YuYmk', '2023-11-04 00:02:17');
+INSERT INTO `black_token` VALUES ('40', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE0MjExMjMsInVzZXJpZCI6MTJ9.vKjK21mLuIynaYIYcIIEAdnWyDLV7VVNJY8y4SeoK4Y', '2023-11-06 17:16:54');
+INSERT INTO `black_token` VALUES ('41', '22', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE4NTQyMjYsInVzZXJpZCI6MjJ9.fehlluOidqgDOXqmuIxhVQpFXVm3x6PkCiU7-4AesRU', '2023-11-06 17:18:29');
+INSERT INTO `black_token` VALUES ('42', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDIxMzI2NzIsInVzZXJpZCI6MTJ9.RFOGxVAScv8j-bmZabjynhBmI6muCL5ZClYCz-JHdLQ', '2023-11-09 22:38:32');
+INSERT INTO `black_token` VALUES ('43', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDE4NTQzMTgsInVzZXJpZCI6MTJ9.uWaxexXYIb79YHjqrFw_BDE2yFGecAbKCLRCxZpXyYg', '2023-11-13 10:13:52');
+INSERT INTO `black_token` VALUES ('44', '28', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDIxMzI3MjUsInVzZXJpZCI6Mjh9.Ud29iM0OV1PTei4t4Z06_e8VkW92cOqYn-ZSL3e0Bcw', '2023-11-13 16:32:51');
+INSERT INTO `black_token` VALUES ('45', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDI0MzM2NDMsInVzZXJpZCI6MTJ9._St9N8JTqFUtaNz7whSmpbx-C1nBcRXSkPCgr5LvAgU', '2023-11-13 16:54:20');
+INSERT INTO `black_token` VALUES ('46', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDI2MTkxMDUsInVzZXJpZCI6MTJ9.R1s3ZlbyZsV1DhqfWnf_kB36LWiKkvRTP_rx4JnXXVw', '2023-11-15 18:48:18');
+INSERT INTO `black_token` VALUES ('47', '28', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDI3MzM4MzIsInVzZXJpZCI6Mjh9.W0A97r7JWJUM-D3WUE6f4Nm4MKCuXOOmJ9FxMrAgATc', '2023-11-16 21:46:51');
+INSERT INTO `black_token` VALUES ('48', '28', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDI5NjM2ODQsInVzZXJpZCI6Mjh9.EwRKlnOX-Ddl3KuTu1vn_5MtzZ7T6ZWf54HRt-cx8ZM', '2023-11-20 19:41:48');
+INSERT INTO `black_token` VALUES ('49', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDI0NTc2NzQsInVzZXJpZCI6MTJ9.u6Rrd24pU2ZwluD7IL-hzKOOj5nsUr3d5Not9_2pkGk', '2023-11-22 16:40:20');
+INSERT INTO `black_token` VALUES ('50', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDI5MDc3NjMsInVzZXJpZCI6MTJ9.H7pvQh1CEQJu7esiaAEoUPtwnxBfllSrCr4Y8Wrt-hk', '2023-12-02 09:15:54');
+INSERT INTO `black_token` VALUES ('51', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDM5NDMxMTksInVzZXJpZCI6MTJ9.Nfs1oGpzDrTovsDtYTJHG3mPX7aygy_Ci4wOf5khxhQ', '2023-12-04 19:55:00');
+INSERT INTO `black_token` VALUES ('52', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQyODI5MzAsInVzZXJpZCI6MX0.OqIaj28ODuMuc0qCtf5vpLC9Y6dv-MzhW4kT1tAgRL0', '2023-12-04 19:56:17');
+INSERT INTO `black_token` VALUES ('53', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQyODI5ODcsInVzZXJpZCI6MX0.4A2lM84AU1oejnrH1TKXiMHUnwwO6yra--QJ0Gcxdf0', '2023-12-04 20:24:39');
+INSERT INTO `black_token` VALUES ('54', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ1NDg0OTYsInVzZXJpZCI6MTJ9.AeEyuLtlc-Y3CGIjoQafhBHf8J2PF-AjAkMGTPbBbPM', '2023-12-09 14:32:23');
+INSERT INTO `black_token` VALUES ('55', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ2OTY1OTYsInVzZXJpZCI6MTJ9.PFg0wp78IbPwfiN_-rKEkleAX_gjaGYrndgt6tsY-pU', '2023-12-09 15:07:46');
+INSERT INTO `black_token` VALUES ('56', '29', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDI2MzczMDksInVzZXJpZCI6Mjl9.4OSXJLOBmqt81OpFvXyZE34HCpvSFozTaDnlam2cEfc', '2023-12-11 15:34:41');
+INSERT INTO `black_token` VALUES ('57', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ2OTc4MzAsInVzZXJpZCI6MTJ9.KLNU5o837216VyV76fk2uT2Rx8FWPES-0MmmMZTXuWY', '2023-12-11 22:16:42');
+INSERT INTO `black_token` VALUES ('58', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ4OTYyMTIsInVzZXJpZCI6MTJ9.WkA7rtPbQTQv7zeCB1xOeY4u1syTySk2AHvR-ZlOaLI', '2023-12-11 22:17:00');
+INSERT INTO `black_token` VALUES ('59', '31', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDM4NTE0NTIsInVzZXJpZCI6MzF9.0gKKMoAc8_3CqQJhTnIgxzLI0i6xahBtYiPffSv-Iwc', '2023-12-12 18:11:01');
+INSERT INTO `black_token` VALUES ('60', '28', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMjcwODAsInVzZXJpZCI6Mjh9.2EPqNjVog3y8wAM3bE5LvfpV28mqBgXV51112kmNt50', '2023-12-13 10:41:12');
+INSERT INTO `black_token` VALUES ('61', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ4OTYyMzEsInVzZXJpZCI6MTJ9.2CVrNXPsxry9_pfS3yStu06BdPs-Shf4PEAU0ZVc3Ts', '2023-12-13 10:45:16');
+INSERT INTO `black_token` VALUES ('62', '28', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMjczMDQsInVzZXJpZCI6Mjh9.xJXB-tgKYW-DYOWaGUO-_1gBOPqvxe7hgbMtm_w-mqQ', '2023-12-13 10:53:05');
+INSERT INTO `black_token` VALUES ('63', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ4NzIwOTAsInVzZXJpZCI6MTJ9.nmu6DBJps12L0XdTx7l0_6W5GLiCEJTgKcugbZyNFu0', '2023-12-13 10:56:43');
+INSERT INTO `black_token` VALUES ('64', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMjg3NDEsInVzZXJpZCI6Mzl9.qGoS_WoUVTUetchxO9FNTyh1PSiQiloEyf8VF5VnhBw', '2023-12-13 11:10:05');
+INSERT INTO `black_token` VALUES ('65', '28', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMjc1MzgsInVzZXJpZCI6Mjh9.vlZTQy7nrwEDwEvjPaOE_LL5I6BNR4P0n6Ji7bnPKPs', '2023-12-13 11:21:00');
+INSERT INTO `black_token` VALUES ('66', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMjk2OTMsInVzZXJpZCI6Mzl9.E_VhaubCNq3uvoGPq-1rQ24ylKQ7xbdh9r9E0Z95A2U', '2023-12-13 11:25:04');
+INSERT INTO `black_token` VALUES ('67', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMjk5MjgsInVzZXJpZCI6Mzl9.Pjxu6cJHXJthZU6n3YPeJdv5zEYBGP2B4qm8ISTo83I', '2023-12-13 11:27:43');
+INSERT INTO `black_token` VALUES ('68', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMjkxOTAsInVzZXJpZCI6Mzl9.cFcSQexHUfJPjlHYRhRxrIRVKhwUjsnkv1TATAmFysA', '2023-12-13 11:32:08');
+INSERT INTO `black_token` VALUES ('69', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMzA2NjcsInVzZXJpZCI6Mzl9.Nskd_t01f75jma-b4yzVLV2b-XsNKFWsIs8ohv8RT4U', '2023-12-13 22:14:34');
+INSERT INTO `black_token` VALUES ('70', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwNjg4ODMsInVzZXJpZCI6MTJ9.WWnuCCpTLHuaMcu6z_R0YpYiyHI8UXQCFvHyRuoK3ko', '2023-12-13 22:16:40');
+INSERT INTO `black_token` VALUES ('71', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwNjkxMzQsInVzZXJpZCI6Mzl9.kh1TgimrH1t458pKx7epAXRhLir9wYt9bGRam1zSuvg', '2023-12-14 22:01:37');
+INSERT INTO `black_token` VALUES ('72', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUxNTQ1OTgsInVzZXJpZCI6Mzl9.gB4LJa1jPa8updQl2ir0N-sUAMT1AZPUX5S4JoPG1VU', '2023-12-14 22:26:11');
+INSERT INTO `black_token` VALUES ('73', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUxNTU5ODAsInVzZXJpZCI6MTJ9.z25PHWegx6oat0D4LBJPlV9WMwuNAEb_cPfp7_J9ZQ8', '2023-12-14 22:26:38');
+INSERT INTO `black_token` VALUES ('74', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUxNTYwMDcsInVzZXJpZCI6Mzl9.3D54hmOb0BCSe1_6A_iOXRZ8go8qhCKD7JjjwgzDZcY', '2023-12-14 23:07:44');
+INSERT INTO `black_token` VALUES ('75', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUxNTg0OTQsInVzZXJpZCI6Mzl9._V_TAajMDEeOtBwg8p5MyrEmCMwO8Cdeug2gYYLgaZE', '2023-12-14 23:08:21');
+INSERT INTO `black_token` VALUES ('76', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUxNTg1NTUsInVzZXJpZCI6Mzl9.CEo03yFhIPn7mbb_ajFksCYOW-yFNSxdhBbbiQAlh8Q', '2023-12-15 20:20:13');
+INSERT INTO `black_token` VALUES ('77', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUyMzQ4MjIsInVzZXJpZCI6MTJ9.i-nLob4NPGrJA_2H-Vs6qM2KaLhAr027i99AOe2w-Ek', '2023-12-15 21:34:56');
+INSERT INTO `black_token` VALUES ('78', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwNzMxNTUsInVzZXJpZCI6MTJ9.ALmIu821Q14ey5j2uxvD069aaaYn2VAonq8E4_WazF8', '2023-12-17 15:42:47');
+INSERT INTO `black_token` VALUES ('79', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUzOTA5ODMsInVzZXJpZCI6Mzl9.Tth2S2tuK3TDWAx56wIJDHuQ3mzqAI2zk3Mxf5IZJDc', '2023-12-17 15:46:10');
+INSERT INTO `black_token` VALUES ('80', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUyMzkzMTAsInVzZXJpZCI6Mzl9.mUmhUpkL5fXxXOB4xEFFqVi9kJO2AxMSMpsMhGqo3Qw', '2023-12-17 15:48:34');
+INSERT INTO `black_token` VALUES ('81', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUzOTEzMjUsInVzZXJpZCI6MTJ9.cd4DSV43O6h6QKpS2P0Wwb_nG9Ek1IMrKcnltfNzQpE', '2023-12-17 16:07:21');
+INSERT INTO `black_token` VALUES ('82', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUzOTEzMjUsInVzZXJpZCI6MTJ9.cd4DSV43O6h6QKpS2P0Wwb_nG9Ek1IMrKcnltfNzQpE', '2023-12-17 16:07:22');
+INSERT INTO `black_token` VALUES ('83', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUzOTI0NjIsInVzZXJpZCI6Mzl9.xUr7g3Pk1QfVOeTZ07-vuwcviyKAaSesqep0XumzB34', '2023-12-17 16:37:17');
+INSERT INTO `black_token` VALUES ('84', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUzOTQyNTYsInVzZXJpZCI6Mzl9.20ied4mEwWf101dPG4HPUaMKdLEWnMJk2lc4Kx_me6o', '2023-12-17 17:10:48');
+INSERT INTO `black_token` VALUES ('85', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUzOTYzMjcsInVzZXJpZCI6MTJ9.hsq054JveXT1IBIuPZLszHz_lORFndJkkrbRtyNpX7c', '2023-12-19 14:26:53');
+INSERT INTO `black_token` VALUES ('86', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDU1NTkyNjgsInVzZXJpZCI6MTJ9.e6sk5lmjmo72NScmzWqu5P1qysVMa-PnjyQpH_G6OwE', '2023-12-19 14:28:15');
+INSERT INTO `black_token` VALUES ('87', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDU1NTkzMjgsInVzZXJpZCI6MX0.WBeM6fFEj9m3BOhJEhWjmKJotm3hXRkxNslDC1Ikpk4', '2023-12-20 16:51:53');
+INSERT INTO `black_token` VALUES ('88', '12', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDU2NTQzNDIsInVzZXJpZCI6MTJ9.lTIpKtMgrSv4ZsoAy-_48nstyvr4iAW-NQZU5bTiwMw', '2023-12-20 17:09:45');
+INSERT INTO `black_token` VALUES ('89', '37', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ4NzIyMzgsInVzZXJpZCI6Mzd9.oOa9XN5R9_dNM-WbyqVjdvEsRW8VCpNlDR4S1ZVZi4I', '2023-12-29 15:03:30');
+INSERT INTO `black_token` VALUES ('90', '31', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUxNDcyNDksInVzZXJpZCI6MzF9.re8y78QT2av1Q-Sl3UWw8AfPtgAV0qBikbHyvSLTDXg', '2023-12-29 15:08:56');
+INSERT INTO `black_token` VALUES ('91', '47', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDY0MjU4MjMsInVzZXJpZCI6NDd9.lGZZ31AeGOp1JmgZlwxVLzTiT5ZfRBoOUd_Z7GWHRLU', '2024-01-05 17:08:23');
+INSERT INTO `black_token` VALUES ('92', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDUwMzAzNTcsInVzZXJpZCI6Mzl9.BuhN7g1Of00EWNqSMA2wVmUM6g3Ozq7T8Ov7gTa676k', '2024-01-05 17:17:04');
+INSERT INTO `black_token` VALUES ('93', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDcwMzgwODAsInVzZXJpZCI6Mzl9.AZXKQBHUjNQlJfv1j-DVWTW1ZodE6nDqxmIerwBmwCo', '2024-01-05 17:20:37');
+INSERT INTO `black_token` VALUES ('94', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDcwOTkwMzcsInVzZXJpZCI6Mzl9.lO-4OMHBMeoS8VbeNqjiYHiT0mC2oGkBfVQHRkFfc-k', '2024-01-06 10:10:41');
+INSERT INTO `black_token` VALUES ('95', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDcwOTkwNzMsInVzZXJpZCI6Mzl9.rooACzRE1hymU9AE3BwbCj8cSc3rTGtWEG-feeO_kks', '2024-01-06 10:12:24');
+INSERT INTO `black_token` VALUES ('96', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDU5MDIyMTUsInVzZXJpZCI6MX0._9TF2PPw7Np6CDAWTcYzKQuw97gdorZ9hHHrzos9se4', '2024-01-09 20:18:09');
+INSERT INTO `black_token` VALUES ('97', '39', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDczOTQ3MDEsInVzZXJpZCI6Mzl9.6KZlCzbj7F0oQFPEhtmrqfP7GkA3lCjyxNiWwGYvP6U', '2024-01-09 20:53:58');
+INSERT INTO `black_token` VALUES ('98', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDczOTY4NTEsInVzZXJpZCI6MX0.jEdpVUmHvAk8DaqV2R4Gi-3rMPIbiW9hjmFjuwVzxvs', '2024-01-09 21:31:13');
+INSERT INTO `black_token` VALUES ('99', '1', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDczOTkxMTAsInVzZXJpZCI6MX0.RAvDkXs6QV4Kgix0tNwKOoZsDZSrBOVuRCTk3olAgis', '2024-01-09 21:54:51');
+
+-- ----------------------------
+-- Table structure for carousel_chart
+-- ----------------------------
+DROP TABLE IF EXISTS `carousel_chart`;
+CREATE TABLE `carousel_chart` (
+ `images` text CHARACTER SET utf8 COMMENT '轮播图',
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '轮播图id',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of carousel_chart
+-- ----------------------------
+INSERT INTO `carousel_chart` VALUES ('[{\"name\":\"32F25BB2-4365-42A5-8DC5-5FF789BD7F1D.png\",\"url\":\"https://img2.baidu.com/it/u=3874018510,2409885722&fm=253&fmt=auto&app=138&f=JPEG?w=600&h=401\"},{\"name\":\"046918EA-9EF1-419A-AF33-B8C49E64A38C.png\",\"url\":\"https://img0.baidu.com/it/u=4111233060,2781103338&fm=253&fmt=auto&app=138&f=JPEG?w=608&h=456\"},{\"name\":\"9634915D-FE57-4351-BD77-E1B1147B90D6.png\",\"url\":\"https://p6.itc.cn/q_70/images01/20210609/8c0e079f61b04bd2bff3edd2d6fdce73.jpeg\"}]', '1');
+
+-- ----------------------------
+-- Table structure for company
+-- ----------------------------
+DROP TABLE IF EXISTS `company`;
+CREATE TABLE `company` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '公司id,自增长,主键',
+ `company_all_name` varchar(255) DEFAULT NULL COMMENT '公司全称',
+ `company_name` varchar(100) DEFAULT NULL COMMENT '公司名称',
+ `company_detail` text COMMENT '公司详情',
+ `type` varchar(100) DEFAULT NULL COMMENT '公司类型(银行,软件公司)',
+ `address` varchar(100) DEFAULT NULL COMMENT '公司地址',
+ `address_detail` varchar(100) DEFAULT NULL COMMENT '公司详情地址',
+ `treatment` varchar(255) DEFAULT NULL COMMENT '公司待遇',
+ `legal_representative` varchar(100) DEFAULT NULL COMMENT '法定代表人',
+ `Registered_capital` varchar(100) DEFAULT NULL COMMENT '注册资本',
+ `established` varchar(50) DEFAULT NULL COMMENT '成立日期',
+ `credit_code` varchar(50) DEFAULT NULL COMMENT '统一信用编码',
+ `images` text COMMENT '公司图片',
+ `encoding` varchar(50) NOT NULL COMMENT '公司使用编码,hr登陆后台使用的编码',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `staff_number` varchar(255) DEFAULT NULL COMMENT '企业人数',
+ `company_logo` varchar(255) DEFAULT NULL COMMENT '公司logo',
+ PRIMARY KEY (`id`,`encoding`),
+ KEY `encoding` (`encoding`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of company
+-- ----------------------------
+INSERT INTO `company` VALUES ('1', '北京小米科技有限责任公司', '小米', '小米科技有限责任公司成立于2010年3月3日,是专注于智能硬件、电子产品、芯片研发 、智能手机、智能电动汽车、通信 、金融、互联网电视及智能家居生态链建设的全球化移动互联网企业、创新型科技企业。小米公司创造了用互联网模式开发手机操作系统、发烧友参与开发改进的模式。\r“为发烧而生”是小米的产品概念。“让每个人都能享受科技的乐趣”是小米公司的愿景。小米公司应用了互联网开发模式开发产品,用极客精神做产品,用互联网模式干掉中间环节,致力让全球每个人,都能享用来自中国的优质科技产品。\r小米是全球最大消费类IoT物联网平台,连接超过6.55亿台智能设备,进入全球100多个国家和地区。MIUI全球月活跃用户达到6.06亿。 小米系投资的公司超500家,覆盖智能硬件、生活消费用品、教育、游戏、社交网络、文化娱乐、医疗健康、汽车交通、金融等领域。 \r2019年6月,入选2019福布斯中国最具创新力企业榜。 10月,入选2019福布斯全球数字经济100强榜第56位。12月18日,人民日报“中国品牌发展指数”100榜单排名30位。2021年3月30日,小米集团在港交所发布公告,正式宣布进入造车领域。 同日,小米启用新Logo。 \r\r', '手机', '[河北省, 唐山市, 路北区]', '西二旗中路33号院6号楼6层006', '[\"加班补贴\",\"周末双休\",\"五险一金\",\"生日福利\",\"员工宿舍\"]', '雷军', '185,000万(元)', '2010-03-03 15:47:44', '123', '[{\"name\":\"B618FFEB-8E04-4D08-8D08-E0C1C601091F.jpeg\",\"url\":\"http://117.88.94.226:5380/upload/picture/B618FFEB-8E04-4D08-8D08-E0C1C601091F.jpeg\"},{\"name\":\"9EE2FB0E-0C54-4BCA-B3B4-23C8120BB093.jpeg\",\"url\":\"http://117.88.94.226:5380/upload/picture/9EE2FB0E-0C54-4BCA-B3B4-23C8120BB093.jpeg\"},{\"name\":\"5095F85D-99CA-4B7F-86F4-9A861ECBED45.jpg\",\"url\":\"http://117.88.94.226:5380/upload/picture/5095F85D-99CA-4B7F-86F4-9A861ECBED45.jpg\"}]', '123', null, '2023-12-17', null, '12', '2000-9000', '[{\"name\":\"AEC826CC-9AE7-4F80-924C-4180FDA31583.png\",\"url\":\"http://117.88.94.226:5380/upload/picture/AEC826CC-9AE7-4F80-924C-4180FDA31583.png\"}]');
+INSERT INTO `company` VALUES ('2', '华为技术有限公司', '华为', '华为技术有限公司,成立于1987年,总部位于广东省深圳市龙岗区。 [1]2022年收入6423亿元。 [379]华为是全球领先的信息与通信技术(ICT)解决方案供应商,专注于ICT领域,坚持稳健经营、持续创新、开放合作,在电信运营商、企业、终端和云计算等领域构筑了端到端的解决方案优势,为运营商客户、企业客户和消费者提供有竞争力的ICT解决方案、产品和服务,并致力于实现未来信息社会、构建更美好的全连接世界。\r\n2017年6月6日,《2017年BrandZ最具价值全球品牌100强》公布,华为名列第49位。2019年7月22日美国《财富》杂志发布了最新一期的世界500强名单 ,华为排名第61位。 [2-3]2018年《中国500最具价值品牌》华为居第六位。 [4]12月18日,《2018世界品牌500强》揭晓,华为排名第58位。 [5]\r\n2018年2月,沃达丰和华为完成首次5G通话测试 [6]。2019年8月9日,华为正式发布鸿蒙系统; [7]8月22日,2019中国民营企业500强发布,华为投资控股有限公司以7212亿营收排名第一; [8]12月15日,华为获得了首批“2019中国品牌强国盛典年度荣耀品牌的殊荣”。 [9-10]\r\n2020年11月17日,华为投资控股有限公司整体出售荣耀业务资产。对于交割后的荣耀,华为不占有任何股份,也不参与经营管理与决策。2022年上半年,华为实现销售收入3016亿元 [248]。\r\n2022年8月3日,《财富》公布世界500强榜(企业名单),华为排在第96位。 [11]2020中国民营企业500强第一名。\r\n2023年10月13日,华为旗下“讯联智付”更名为“花瓣支付”。', '手机', '[北京市, 市辖区, 东城区]', '坂田华为总部办公楼', '[\"五险一金\",\"周末双休\",\"生日福利\",\"加班补贴\",\"员工宿舍\"]', '赵明路', '4,064,113.182万(元)', '1987-09-15', '222', '[{\"name\":\"4F2CBEA1-1EDC-44CA-8F00-897C0DAFD1F3.png\",\"url\":\"http://117.88.94.226:5380/upload/picture/4F2CBEA1-1EDC-44CA-8F00-897C0DAFD1F3.png\"},{\"name\":\"50FDC36C-02C5-49F3-9339-01F3CFDBB4CA.jpg\",\"url\":\"http://117.88.94.226:5380/upload/picture/50FDC36C-02C5-49F3-9339-01F3CFDBB4CA.jpg\"},{\"name\":\"B1A878F9-D6D5-4666-986E-5F15D9DB0E72.jpg\",\"url\":\"http://117.88.94.226:5380/upload/picture/B1A878F9-D6D5-4666-986E-5F15D9DB0E72.jpg\"}]', '222', null, '2023-12-17', null, '28', '1000-5000', '[{\"name\":\"A1EA7072-9FF6-4A01-AFC8-6DB7348919C1.jpg\",\"url\":\"http://117.88.94.226:5380/upload/picture/A1EA7072-9FF6-4A01-AFC8-6DB7348919C1.jpg\"}]');
+INSERT INTO `company` VALUES ('3', '中国工商银行扬州分行', '中国工商银行', '产品和服务:经营范围包括办理人民币存款、贷款、结算业务;办理票据贴现;代理发行金融债券;代理发行、代理兑付、销售政府债券;买卖政府债券;代理收付款项及代理保险业务;办理外汇存款、外汇贷款、外汇汇款、外汇兑换、国际结算、外汇票据的承兑和贴现、结汇及售汇;通过上级行办理代客外汇买卖、资信调查、咨询、见证业务,经营中国银行业监督管理委员会依照有关法律、行政法规和其他规定批准的业务。\n公司介绍:中国工商银行股份有限公司扬州分行于1995年06月29日成立。法定代表人苏伟,公司经营范围包括:办理人民币存款、贷款、结算业务;办理票据贴现;代理发行金融债券;代理发行、代理兑付、销售政府债券;买卖政府债券;代理收付款项及代理保险业务;办理外汇存款、外汇贷款、外汇汇款、外汇兑换、国际结算、外汇票据的承兑和贴现、结汇及售汇;通过上级行办理代客外汇买卖、资信调查、咨询、见证业务,经营中国银行业监督管理委员会依照有关法律、行政法规和其他规定批准的业务等。\n', '银行', '[江苏省, 扬州市, 邗江区]', '扬子江中路760号', '[\"五险一金\",\"周末双休\",\"生日福利\",\"加班补贴\",\"员工宿舍\"]', '苏伟', '185000万', '1995-06-28T16:00:00.000Z', '91321000840737216A', '[]', '333', null, '2023-12-28', null, '39', '30000-40000', '[]');
+
+-- ----------------------------
+-- Table structure for company_like
+-- ----------------------------
+DROP TABLE IF EXISTS `company_like`;
+CREATE TABLE `company_like` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '公司关注id',
+ `company_encoding` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '公司编码',
+ `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
+ `create_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `satus` int(11) DEFAULT NULL COMMENT '状态:1:表示收藏了,0 :没有收藏',
+ PRIMARY KEY (`id`),
+ KEY `company_like` (`company_encoding`),
+ CONSTRAINT `company_like` FOREIGN KEY (`company_encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of company_like
+-- ----------------------------
+INSERT INTO `company_like` VALUES ('6', '123', '32', '2023-12-11', null, '32', null, null);
+
+-- ----------------------------
+-- Table structure for feedback
+-- ----------------------------
+DROP TABLE IF EXISTS `feedback`;
+CREATE TABLE `feedback` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '反馈id',
+ `user_id` int(11) DEFAULT NULL COMMENT '提交反馈的求职者的id',
+ `content` text CHARACTER SET utf8 COMMENT '反馈内容,文字',
+ `img_url` text CHARACTER SET utf8 COMMENT '反馈图片列表,如["http://tmp/k3.jpg", "http://tmp/v1.jpg"]',
+ `phone` varchar(100) CHARACTER SET utf8 DEFAULT NULL COMMENT '反馈人的手机号',
+ `status` int(11) DEFAULT '0' COMMENT '反馈处理进度,1:待处理,2:处理完成',
+ `create_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '更创时间',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ PRIMARY KEY (`id`),
+ KEY `feedback_user` (`user_id`),
+ CONSTRAINT `feedback_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of feedback
+-- ----------------------------
+INSERT INTO `feedback` VALUES ('1', '32', 'aaaaa', '[\"http://tmp/5csQGxYN9vvh4dfa6e9e188557e404206c580021917d.png\"]', '15181652051', '1', '2023-12-21', '32', '2023-12-27', '1');
+INSERT INTO `feedback` VALUES ('2', '32', 'aaaa', '[\"http://tmp/GwKYROc1RiLx4dfa6e9e188557e404206c580021917d.png\"]', '15181652053', '2', '2023-12-27', '32', '2023-12-27', '1');
+
+-- ----------------------------
+-- Table structure for help
+-- ----------------------------
+DROP TABLE IF EXISTS `help`;
+CREATE TABLE `help` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '帮助id',
+ `type` int(11) DEFAULT NULL COMMENT '功能问题0,账号问题1,其他问题2',
+ `help_title` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '每条帮助信息的标题',
+ `content` text CHARACTER SET utf8 COMMENT '每条帮助信息的内容',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of help
+-- ----------------------------
+INSERT INTO `help` VALUES ('1', '0', '如何让企业获取我的简历?', '点击\'我的信息\',在\'上传简历\'和\'填写简历\'中,进行上传或填写简历,企业就可以查看到您的简历信息,并且邀请您进行AI面试');
+INSERT INTO `help` VALUES ('2', '1', '如何知道自己是否被邀请面试?', '点击\'我的信息\',在\'上传简历\'和\'填写简历\'中,进行上传或填写简历,企业就可以查看到您的简历信息,并且邀请您进行AI面试');
+INSERT INTO `help` VALUES ('3', '2', '如何获取自己的AI面试结果?', '点击\'我的信息\',在\'上传简历\'和\'填写简历\'中,进行上传或填写简历,企业就可以查看到您的简历信息,并且邀请您进行AI面试');
+INSERT INTO `help` VALUES ('4', '0', '如何让企业获取我的简历?', '点击\'我的信息\',在\'上传简历\'和\'填写简历\'中,进行上传或填写简历,企业就可以查看到您的简历信息,并且邀请您进行AI面试');
+
+-- ----------------------------
+-- Table structure for interview_application
+-- ----------------------------
+DROP TABLE IF EXISTS `interview_application`;
+CREATE TABLE `interview_application` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '申请表id,自增长,主键',
+ `user_id` int(11) DEFAULT NULL COMMENT '申请人id',
+ `posting_id` int(11) DEFAULT NULL COMMENT '招聘ID',
+ `company_encoding` varchar(50) DEFAULT NULL COMMENT '面试的公司id',
+ `job_id` int(11) DEFAULT NULL COMMENT '面试者的岗位id',
+ `resume_id` int(11) DEFAULT NULL COMMENT '面试者的简历id',
+ `status` int(11) DEFAULT '1' COMMENT '申请表的状态 1:待处理 2:已通过 3:已拒绝',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '变更时间',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ PRIMARY KEY (`id`),
+ KEY `app_user` (`user_id`),
+ CONSTRAINT `app_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of interview_application
+-- ----------------------------
+INSERT INTO `interview_application` VALUES ('14', '32', '12', '333', '20', '5', '2', '32', '2023-12-17', '2023-12-17', '32');
+INSERT INTO `interview_application` VALUES ('15', '32', '4', '123', '11', '5', '1', '32', '2024-01-05', '2024-01-05', '32');
+
+-- ----------------------------
+-- Table structure for interview_background
+-- ----------------------------
+DROP TABLE IF EXISTS `interview_background`;
+CREATE TABLE `interview_background` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '背景鱼片id',
+ `image` varchar(255) DEFAULT NULL COMMENT '存入图片的url地址',
+ `pic_name` varchar(100) DEFAULT NULL COMMENT '图片名称',
+ `filename` varchar(255) DEFAULT NULL COMMENT '文件名称',
+ `encoding` varchar(50) DEFAULT NULL COMMENT '公司编码',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人的id',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ PRIMARY KEY (`id`),
+ KEY `back_company` (`encoding`),
+ CONSTRAINT `back_company` FOREIGN KEY (`encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of interview_background
+-- ----------------------------
+INSERT INTO `interview_background` VALUES ('18', 'http://localhost:5173/src/upload/D633E94D-CA2F-4B62-A5A9-DBFEFE3FC1A4.jpg', '天空背景', 'D633E94D-CA2F-4B62-A5A9-DBFEFE3FC1A4.jpg', '222', '2023-10-29', '1', null, null);
+INSERT INTO `interview_background` VALUES ('29', 'http://117.88.94.226:5380/upload/picture/68AB506A-902E-4342-AE2B-C392B79222BE.jpg', '背景1', '68AB506A-902E-4342-AE2B-C392B79222BE.jpg', '123', '2023-12-17', '12', null, null);
+INSERT INTO `interview_background` VALUES ('30', 'http://117.88.94.226:5380/upload/picture/1B847285-58AA-4A77-B01A-BFF5D0F175BA.jpg', '背景1', '1B847285-58AA-4A77-B01A-BFF5D0F175BA.jpg', '333', '2023-12-17', '39', null, null);
+
+-- ----------------------------
+-- Table structure for interview_images
+-- ----------------------------
+DROP TABLE IF EXISTS `interview_images`;
+CREATE TABLE `interview_images` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '面试官形象id',
+ `video` varchar(255) DEFAULT NULL COMMENT '面试管视频地址',
+ `sex` varchar(10) DEFAULT '0' COMMENT '面试官性别:0男,1:女',
+ `image` varchar(255) DEFAULT NULL COMMENT '形象图片url地址',
+ `filename` varchar(255) DEFAULT NULL COMMENT '文件名称',
+ `pic_name` varchar(100) DEFAULT NULL COMMENT '图片名称',
+ `encoding` varchar(50) DEFAULT NULL COMMENT '公司编码',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_time` varchar(50) DEFAULT NULL,
+ `update_user` int(11) DEFAULT NULL COMMENT '创建人的id',
+ PRIMARY KEY (`id`),
+ KEY `image_company` (`encoding`),
+ CONSTRAINT `image_company` FOREIGN KEY (`encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of interview_images
+-- ----------------------------
+INSERT INTO `interview_images` VALUES ('46', '', '0', 'http://117.88.94.226:5380/upload/picture/8C730AB1-6BF9-474F-95CC-BF77D4EE9B72.jpg', '8C730AB1-6BF9-474F-95CC-BF77D4EE9B72.jpg', '男面试官', '123', '2023-12-17', '12', null, null);
+INSERT INTO `interview_images` VALUES ('47', '', '0', 'http://117.88.94.226:5380/upload/picture/9E2BDEC9-8069-4DB1-8D78-A95CEDAD13F2.jpeg', '9E2BDEC9-8069-4DB1-8D78-A95CEDAD13F2.jpeg', '女面试官', '123', '2023-12-17', '12', null, null);
+INSERT INTO `interview_images` VALUES ('48', '', '0', 'http://117.88.94.226:5380/upload/picture/C5512F56-3A4D-4010-8B4C-833D134227C7.jpg', 'C5512F56-3A4D-4010-8B4C-833D134227C7.jpg', '面试官1', '333', '2023-12-17', '39', null, null);
+
+-- ----------------------------
+-- Table structure for interview_logo
+-- ----------------------------
+DROP TABLE IF EXISTS `interview_logo`;
+CREATE TABLE `interview_logo` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '公司logo Id',
+ `image` varchar(300) DEFAULT NULL COMMENT '公司logo url地址',
+ `pic_name` varchar(100) DEFAULT NULL COMMENT '图片名称',
+ `filename` varchar(255) DEFAULT NULL COMMENT '文件名',
+ `encoding` varchar(50) DEFAULT NULL COMMENT '公司编码',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更创时间',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ PRIMARY KEY (`id`),
+ KEY `logo_company` (`encoding`),
+ CONSTRAINT `logo_company` FOREIGN KEY (`encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of interview_logo
+-- ----------------------------
+INSERT INTO `interview_logo` VALUES ('28', 'http://localhost:5173/src/upload/1192AE4C-586E-4595-8118-E6EFCA22634B.jpg', '小米', '1192AE4C-586E-4595-8118-E6EFCA22634B.jpg', '222', '2023-10-29', '1', null, null);
+INSERT INTO `interview_logo` VALUES ('36', 'http://117.88.94.226:5380/upload/picture/C85C5E82-630D-4D43-95FA-434576FC9FBD.png', 'logo1', 'C85C5E82-630D-4D43-95FA-434576FC9FBD.png', '123', '2023-12-17', '12', null, null);
+INSERT INTO `interview_logo` VALUES ('37', 'http://117.88.94.226:5380/upload/picture/CA64EBB9-A468-4B90-98F5-32BA9EE37523.jpg', 'logo1', 'CA64EBB9-A468-4B90-98F5-32BA9EE37523.jpg', '333', '2023-12-17', '39', null, null);
+
+-- ----------------------------
+-- Table structure for interview_notice
+-- ----------------------------
+DROP TABLE IF EXISTS `interview_notice`;
+CREATE TABLE `interview_notice` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '面试通知表',
+ `company_encoding` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '公司编码',
+ `detail` text CHARACTER SET utf8 COMMENT '通知内容',
+ `attention` text CHARACTER SET utf8 COMMENT '注意事项',
+ `recipient` int(11) DEFAULT NULL COMMENT '接收人id',
+ `create_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `job_id` int(11) DEFAULT NULL COMMENT '岗位ID',
+ `post_id` int(11) DEFAULT NULL COMMENT '招聘面试id',
+ `invite_id` int(11) DEFAULT NULL COMMENT '邀请面试设置id',
+ `interview_end_time` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '面试结束时间',
+ PRIMARY KEY (`id`),
+ KEY `recipient_userId` (`recipient`),
+ KEY `job_notice` (`job_id`),
+ KEY `post_notic` (`post_id`),
+ KEY `company_notice` (`company_encoding`),
+ CONSTRAINT `company_notice` FOREIGN KEY (`company_encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `job_notice` FOREIGN KEY (`job_id`) REFERENCES `Job_list` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `post_notic` FOREIGN KEY (`post_id`) REFERENCES `job_posting` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `recipient_userId` FOREIGN KEY (`recipient`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of interview_notice
+-- ----------------------------
+INSERT INTO `interview_notice` VALUES ('38', '123', null, null, '32', '2023-12-13', '2023-12-13', '12', '12', '7', '4', '23', '2023-12-13');
+
+-- ----------------------------
+-- Table structure for interview_record
+-- ----------------------------
+DROP TABLE IF EXISTS `interview_record`;
+CREATE TABLE `interview_record` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '面试记录id',
+ `company_encoding` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '面试公司编码',
+ `detail` text CHARACTER SET utf8 COMMENT '面试详情',
+ `comments` text CHARACTER SET utf8 COMMENT '面试评语',
+ `status` int(11) DEFAULT '1' COMMENT '面试记录状态:1:待通知,2:已通过,3:未通过',
+ `interviewer` int(11) DEFAULT NULL COMMENT '面试者id',
+ `create_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `notice_id` int(11) DEFAULT NULL COMMENT '面试通知ID',
+ `talent_id` int(11) DEFAULT NULL COMMENT '人才信息表',
+ PRIMARY KEY (`id`),
+ KEY `createuser_record` (`create_user`),
+ KEY `user_record` (`interviewer`),
+ KEY `notice_record` (`notice_id`),
+ KEY `company_record` (`company_encoding`),
+ CONSTRAINT `company_record` FOREIGN KEY (`company_encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `notice_record` FOREIGN KEY (`notice_id`) REFERENCES `interview_notice` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `user_record` FOREIGN KEY (`interviewer`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of interview_record
+-- ----------------------------
+INSERT INTO `interview_record` VALUES ('2', '123', '我是面试详情', '我是面试评语', '1', '32', '2023-12-12', '2023-12-14', null, '39', '38', '2');
+
+-- ----------------------------
+-- Table structure for interview_setting
+-- ----------------------------
+DROP TABLE IF EXISTS `interview_setting`;
+CREATE TABLE `interview_setting` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '面试设置id',
+ `job_id` int(11) NOT NULL COMMENT '岗位id',
+ `images_id` int(11) NOT NULL COMMENT '形象id',
+ `background_id` int(11) NOT NULL COMMENT '面试背景id',
+ `logo_id` int(11) NOT NULL COMMENT '公司logoId',
+ `professional` int(11) NOT NULL DEFAULT '0' COMMENT '专业题库id',
+ `comprehensive` int(11) NOT NULL DEFAULT '0' COMMENT '综合面试题库id',
+ `job_promote` text COMMENT '岗位的预置promote',
+ `psychology` int(11) NOT NULL DEFAULT '0' COMMENT '心理测试题库id',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建日期',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `encoding` varchar(50) DEFAULT NULL COMMENT '公司编码',
+ PRIMARY KEY (`id`),
+ KEY `_set` (`job_id`),
+ KEY `images_set` (`images_id`),
+ KEY `back_set` (`background_id`),
+ KEY `logo+set` (`logo_id`),
+ KEY `pro_set` (`professional`),
+ KEY `com_set` (`comprehensive`),
+ KEY `psy_set` (`psychology`),
+ KEY `company_set` (`encoding`)
+) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of interview_setting
+-- ----------------------------
+INSERT INTO `interview_setting` VALUES ('21', '10', '46', '29', '36', '55', '60', '我是promote', '0', '12', '2023-12-17', null, null, '123');
+INSERT INTO `interview_setting` VALUES ('23', '19', '48', '30', '37', '0', '80', '我是promote', '0', '39', '2023-12-20', null, null, '333');
+INSERT INTO `interview_setting` VALUES ('24', '20', '48', '30', '37', '81', '80', 'promote', '0', '39', '2023-12-20', null, null, '333');
+
+-- ----------------------------
+-- Table structure for invite_promote
+-- ----------------------------
+DROP TABLE IF EXISTS `invite_promote`;
+CREATE TABLE `invite_promote` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '邀请面试ID',
+ `encoding` varchar(100) DEFAULT NULL COMMENT '公司编码',
+ `job_id` int(11) DEFAULT NULL COMMENT '面试岗位id',
+ `post_id` int(11) DEFAULT NULL COMMENT '招聘ID',
+ `start_time` varchar(255) DEFAULT NULL COMMENT '开始时间',
+ `end_time` varchar(255) DEFAULT NULL COMMENT '结束时间',
+ `question` varchar(255) DEFAULT NULL COMMENT '面试题ids',
+ `promote` text COMMENT 'promote设定',
+ `invite_user` int(11) DEFAULT NULL COMMENT '面试邀请者的id',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建日期',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ PRIMARY KEY (`id`),
+ KEY `user_invite` (`invite_user`),
+ CONSTRAINT `user_invite` FOREIGN KEY (`invite_user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of invite_promote
+-- ----------------------------
+INSERT INTO `invite_promote` VALUES ('23', '123', '7', '4', null, null, '[23,24,34,61,62]', '{\"systemPromote\":\"我是系统的promote\",\"qustionsPromote\":[[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“什么是面向对象编程中的封装?”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“在面向对象编程中,什么是继承?”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请解释一下面向对象编程中的多态性是什么”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请问您的目标薪资是多少?”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试前端vue的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请问您有过什么项目经历吗?”,不要追问,只需对项目经历进行评价\"]]}', '32', '12', '2023-12-13', null, null);
+INSERT INTO `invite_promote` VALUES ('28', '333', '19', '12', null, null, '[64]', '{\"systemPromote\":\"我是系统的promote\",\"qustionsPromote\":[[\"你将扮演中国工商银行扬州分行公司的面试官,我扮演面试前端vue开发工程师的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“vue的生命周期是什么”\"]]}', '32', '39', '2023-12-13', null, null);
+INSERT INTO `invite_promote` VALUES ('29', '123', '10', '4', null, null, '[23,24,34,60,61,62]', '{\"systemPromote\":\"我是系统的promote\",\"qustionsPromote\":[[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试Java后端的面试者Jerry。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“String 类为什么不能被继承?”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试Java后端的面试者Jerry。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“重载和重写有什么区别?”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试Java后端的面试者Jerry。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“Java是面向什么的语言?”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试后端的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请您进行自我介绍”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试Java后端的面试者Jerry。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请问您的目标薪资是多少?”\"],[\"你将扮演北京小米科技有限责任公司公司的面试官,我扮演面试Java后端的面试者Jerry。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请问您有过什么项目经历吗?”\"]]}', '46', '12', '2023-12-15', null, null);
+INSERT INTO `invite_promote` VALUES ('30', '333', '20', '12', null, null, '[63,65,66]', '{\"systemPromote\":\"我是系统的promote\",\"qustionsPromote\":[[\"你将扮演中国工商银行扬州分行公司的面试官,我扮演面试java工程师的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“请你描述一下Java的三大特点”\"],[\"你将扮演中国工商银行扬州分行公司的面试官,我扮演面试java工程师的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“String 类为什么不能被继承?”\"],[\"你将扮演中国工商银行扬州分行公司的面试官,我扮演面试java工程师的面试者李思思。你要用面试官的语气对我的回答进行简短的评价,除此之外不要说多余的话,不要提供解释,不要对回复提问,之后提出下一个问题:“重载和重写有什么区别?”\"]]}', '32', '39', '2023-12-17', null, null);
+
+-- ----------------------------
+-- Table structure for job_like
+-- ----------------------------
+DROP TABLE IF EXISTS `job_like`;
+CREATE TABLE `job_like` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '关注岗位id',
+ `job_id` int(11) DEFAULT NULL COMMENT '岗位id',
+ `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
+ `create_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `status` int(11) DEFAULT NULL COMMENT '状态:1:收藏了,0:没有收藏',
+ PRIMARY KEY (`id`),
+ KEY `job_like` (`job_id`),
+ KEY `user_like` (`user_id`),
+ CONSTRAINT `job_like` FOREIGN KEY (`job_id`) REFERENCES `Job_list` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `user_like` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of job_like
+-- ----------------------------
+INSERT INTO `job_like` VALUES ('2', '10', '32', '2023-11-29', null, '32', null, null);
+INSERT INTO `job_like` VALUES ('3', '11', '32', '2023-12-09', null, '32', null, null);
+INSERT INTO `job_like` VALUES ('13', '7', '32', '2023-12-13', null, '32', null, null);
+
+-- ----------------------------
+-- Table structure for Job_list
+-- ----------------------------
+DROP TABLE IF EXISTS `Job_list`;
+CREATE TABLE `Job_list` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '岗位id,自增长,主键',
+ `job_name` varchar(50) DEFAULT NULL COMMENT '岗位名称',
+ `details` text COMMENT '岗位详情',
+ `address` varchar(100) DEFAULT NULL COMMENT '工作地址',
+ `address_detail` varchar(100) DEFAULT NULL COMMENT '详细地址',
+ `start_time` varchar(50) DEFAULT NULL COMMENT '上班时间',
+ `end_time` varchar(50) DEFAULT NULL,
+ `job_tips` varchar(100) DEFAULT NULL,
+ `job_type` int(11) DEFAULT '1' COMMENT '类型id,1:行政,2:财务,3:技术,4:销售',
+ `min_salary` varchar(50) DEFAULT NULL COMMENT '最低工资',
+ `max_salary` varchar(50) DEFAULT NULL COMMENT '最高工资',
+ `min_number` varchar(50) DEFAULT NULL COMMENT '最低人数',
+ `max_number` varchar(50) DEFAULT NULL COMMENT '所需最高人数',
+ `requirement` int(11) DEFAULT NULL COMMENT '学历要求',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `company_encoding` varchar(50) DEFAULT NULL COMMENT '公司编码,外键',
+ `status` int(11) DEFAULT '1' COMMENT '岗位状态,0禁用 1:启用',
+ `job_welfale` varchar(255) DEFAULT NULL COMMENT '岗位福利',
+ PRIMARY KEY (`id`),
+ KEY `company_job` (`company_encoding`),
+ CONSTRAINT `company_job` FOREIGN KEY (`company_encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of Job_list
+-- ----------------------------
+INSERT INTO `Job_list` VALUES ('7', '前端vue', '\"1. 负责开发客户端内嵌浏览器及浏览器插件的开发
2. 负责客户端和硬件对接接口开发
3. 负责公司windows应用程序的开发和维护
4. 一年以上CEF或WEBKIT浏览器相关开发经验;
\"', '[河北省, 唐山市, 路北区]', '21楼', '09:00', '17:30', '[HTML, CSS, JavaScript]', '3', '5K', '10K', '20', '50', '4', '2023-11-01', '2023-11-12', '12', '12', '123', '1', null);
+INSERT INTO `Job_list` VALUES ('10', 'Java后端', '写接口', '[江苏省, 扬州市, 邗江区]', '扬州大学', '09:00', '17:00', '[Java, mybatis]', '3', '10K', '20K', '50', '100', '5', '2023-11-01', '2023-11-12', '26', '12', '123', '1', null);
+INSERT INTO `Job_list` VALUES ('11', 'C语言', '123', '[北京市, 市辖区, 西城区]', '12路', '07:30', '19:00', '[C++]', '3', '10K', '20K', '10', '30', '6', '2023-12-02', '2023-12-02', '12', '12', '123', '1', null);
+INSERT INTO `Job_list` VALUES ('18', 'java全栈开发', '主要负责前端开发和后端开发工作,此外还要做业务梳理、数据建模、接口编写、UI交互、系统工程等方面工作。', '[江苏省, 扬州市, 邗江区]', '智谷', '09:00', '18:00', '[HTML, JavaScript, CSS]', '3', '8k', '12k', '1', '3', '5', '2023-12-11', '2023-12-11', '37', '37', '123', '1', null);
+INSERT INTO `Job_list` VALUES ('19', '前端vue开发工程师', '1. 负责核心系统的研发,深入发掘业务需求,包括但不限于需求分析、代码实现,能够独立owner一条业务线。\n2. 能够独立完成概要设计、详细设计、系统性能评估及系统存在的稳定性风险点,保证系统的高可用性。\n3. 能够快速定位性能劣化、线上业务问题等,需要对代码的坏味道具有敏感性。\n招聘人数:5-10人\n', '[江苏省, 扬州市, 邗江区]', '扬子江中路760号', '09:00', '17:00', '[HTML, CSS, JavaScript]', '3', '10K', '15K', '10', '15', '5', '2023-12-13', '2023-12-15', '39', '39', '333', '1', null);
+INSERT INTO `Job_list` VALUES ('20', 'java工程师', '1. 负责核心系统的研发,深入发掘业务需求,包括但不限于需求分析、代码实现,能够独立owner一条业务线。\n2. 能够独立完成概要设计、详细设计、系统性能评估及系统存在的稳定性风险点,保证系统的高可用性。\n3. 能够快速定位性能劣化、线上业务问题等,需要对代码的坏味道具有敏感性。\n招聘人数:5-10人\n', '[江苏省, 扬州市, 邗江区]', '扬子江中路760号', '09:00', '17:00', '[mybatis, mysql]', '3', '10K', '20K', '5', '10', '5', '2023-12-13', '2023-12-15', '39', '39', '333', '1', null);
+
+-- ----------------------------
+-- Table structure for job_posting
+-- ----------------------------
+DROP TABLE IF EXISTS `job_posting`;
+CREATE TABLE `job_posting` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '面试id',
+ `company_encoding` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '公司编码',
+ `recruitment_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '招聘名称',
+ `start_time` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '开始时间',
+ `end_time` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '结束时间',
+ `description` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '招聘描述',
+ `job_id` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '岗位id',
+ `status` int(10) DEFAULT '1' COMMENT '状态:1正常,0:下架',
+ `create_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ PRIMARY KEY (`id`),
+ KEY `company_encoding` (`company_encoding`) USING BTREE,
+ CONSTRAINT `company_encoding` FOREIGN KEY (`company_encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of job_posting
+-- ----------------------------
+INSERT INTO `job_posting` VALUES ('4', '123', '小米12月招聘会', '2023-12-12T16:00:00.000Z', '2023-12-22T16:00:00.000Z', null, '[10,7]', '1', '2023-12-04', '2023-12-04', '12', '12');
+INSERT INTO `job_posting` VALUES ('11', '123', '小米1月招聘会', '2023-12-27T16:00:00.000Z', '2024-01-09T16:00:00.000Z', null, '[7]', '1', '2023-12-11', '2023-12-11', '12', '12');
+INSERT INTO `job_posting` VALUES ('13', '333', '扬州一月工商招聘', '2023-12-31T16:00:00.000Z', '2024-01-30T16:00:00.000Z', null, '[20,19]', '1', '2023-12-20', '2023-12-20', '39', '39');
+
+-- ----------------------------
+-- Table structure for question
+-- ----------------------------
+DROP TABLE IF EXISTS `question`;
+CREATE TABLE `question` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '题目id,自增长,主键',
+ `title` varchar(100) DEFAULT NULL COMMENT '题目标题',
+ `details` text COMMENT '题目内容',
+ `answer` text COMMENT '题目对应的promote',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `bank_id` int(11) DEFAULT NULL COMMENT '题库类型id',
+ `company_encoding` varchar(50) DEFAULT NULL COMMENT '公司所在编码',
+ PRIMARY KEY (`id`),
+ KEY `question_type` (`bank_id`),
+ KEY `company_question` (`company_encoding`),
+ CONSTRAINT `company_question` FOREIGN KEY (`company_encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `question_type` FOREIGN KEY (`bank_id`) REFERENCES `question_bank` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of question
+-- ----------------------------
+INSERT INTO `question` VALUES ('17', '指针的运用', '请描述指针的运用', '我是promote', '2023-10-29', '2023-10-29', '1', '1', '49', '222');
+INSERT INTO `question` VALUES ('23', 'String 类为什么不能被继承?', 'String 类为什么不能被继承?', '你好', '2023-11-13', '2023-11-13', '28', '28', '55', '123');
+INSERT INTO `question` VALUES ('24', '重载和重写的区别', '重载和重写有什么区别?', '你好', '2023-11-13', '2023-11-13', '28', '28', '55', '123');
+INSERT INTO `question` VALUES ('34', 'Python字典', 'Java是面向什么的语言?', '22', '2023-11-20', '2023-12-12', '28', '12', '55', '123');
+INSERT INTO `question` VALUES ('42', 'axios原理', '请描述一下axios发送请求原理', '我是', '2023-11-20', '2023-11-20', '12', '12', '71', '123');
+INSERT INTO `question` VALUES ('44', 'final, finally, finalize 的区别', 'final, finally, finalize 的区别是什么?', '你好', '2023-11-20', '2023-11-20', '12', '12', '71', '123');
+INSERT INTO `question` VALUES ('45', 'String 类为什么不能被继承?', 'String 类为什么不能被继承?', '你好', '2023-11-20', '2023-11-20', '12', '12', '71', '123');
+INSERT INTO `question` VALUES ('46', '重载和重写的区别', '重载和重写有什么区别?', '你好', '2023-11-20', '2023-11-20', '12', '12', '71', '123');
+INSERT INTO `question` VALUES ('47', 'Python字典', '请描述python字典', 'woshi', '2023-11-20', '2023-11-20', '12', '12', '71', '123');
+INSERT INTO `question` VALUES ('48', 'java的三大特征', '请您描述一下Java的三大特征', '我是promote', '2023-11-20', '2023-11-20', '12', '12', '70', '123');
+INSERT INTO `question` VALUES ('49', 'final, finally, finalize 的区别', 'final, finally, finalize 的区别是什么?', '你好', '2023-11-20', '2023-11-20', '12', '12', '70', '123');
+INSERT INTO `question` VALUES ('50', 'String 类为什么不能被继承?', 'String 类为什么不能被继承?', '你好', '2023-11-20', '2023-11-20', '12', '12', '70', '123');
+INSERT INTO `question` VALUES ('51', '重载和重写的区别', '重载和重写有什么区别?', '你好', '2023-11-20', '2023-11-20', '12', '12', '70', '123');
+INSERT INTO `question` VALUES ('52', 'axios原理', '请描述一下axios发送请求原理', '我是', '2023-11-20', '2023-11-20', '12', '12', '70', '123');
+INSERT INTO `question` VALUES ('53', 'Python字典', '请描述python字典', 'woshi', '2023-11-20', '2023-11-20', '12', '12', '70', '123');
+INSERT INTO `question` VALUES ('54', 'java的三大特征', '请您描述一下Java的三大特征', '我是promote', '2023-11-20', '2023-11-20', '28', '28', '72', '222');
+INSERT INTO `question` VALUES ('55', 'final, finally, finalize 的区别', 'final, finally, finalize 的区别是什么?', '你好', '2023-11-20', '2023-11-20', '28', '28', '72', '222');
+INSERT INTO `question` VALUES ('56', 'String 类为什么不能被继承?', 'String 类为什么不能被继承?', '你好', '2023-11-20', '2023-11-20', '28', '28', '72', '222');
+INSERT INTO `question` VALUES ('57', '重载和重写的区别', '重载和重写有什么区别?', '你好', '2023-11-20', '2023-11-20', '28', '28', '72', '222');
+INSERT INTO `question` VALUES ('58', 'axios原理', '请描述一下axios发送请求原理', '我是', '2023-11-20', '2023-11-20', '28', '28', '73', '222');
+INSERT INTO `question` VALUES ('59', 'Python字典', '请描述python字典', 'woshi', '2023-11-20', '2023-11-20', '28', '28', '75', '222');
+INSERT INTO `question` VALUES ('60', '自我介绍', '请您进行自我介绍', '我是promote', '2023-12-10', '2023-12-10', '12', '12', '60', '123');
+INSERT INTO `question` VALUES ('61', '目标薪资', '请问您的目标薪资是多少?', '1', '2023-12-12', '2023-12-12', '12', '12', '60', '123');
+INSERT INTO `question` VALUES ('62', '项目经历', '请问您有过什么项目经历吗?', '1', '2023-12-12', '2023-12-12', '12', '12', '60', '123');
+INSERT INTO `question` VALUES ('64', 'vue的生命周期', 'vue的生命周期是什么', '', '2023-12-13', '2023-12-14', '39', '39', '79', '333');
+INSERT INTO `question` VALUES ('69', 'Java的三大特点', '请你描述一下Java的三大特点', 'promote', '2023-12-20', '2023-12-20', '39', '39', '81', '333');
+INSERT INTO `question` VALUES ('70', 'String 类为什么不能被继承?', 'String 类为什么不能被继承?', '你好1', '2023-12-20', '2023-12-20', '39', '39', '81', '333');
+INSERT INTO `question` VALUES ('71', '重载和重写的区别', '重载和重写有什么区别?', '你好', '2023-12-20', '2023-12-20', '39', '39', '81', '333');
+INSERT INTO `question` VALUES ('72', 'Python字典', '11', '22', '2023-12-20', '2023-12-20', '39', '39', '81', '333');
+INSERT INTO `question` VALUES ('73', '111', '2222', null, '2023-12-20', '2023-12-20', '39', '39', '81', '333');
+
+-- ----------------------------
+-- Table structure for question_bank
+-- ----------------------------
+DROP TABLE IF EXISTS `question_bank`;
+CREATE TABLE `question_bank` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '题库id,自增长,主键',
+ `type_name` varchar(100) DEFAULT NULL COMMENT '题库名称/类型',
+ `type` int(5) DEFAULT '1' COMMENT '题库类型,1:专业面试,2:综合面试,3.心理测试',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `company_encoding` varchar(50) DEFAULT NULL COMMENT '公司编码',
+ `description` varchar(255) DEFAULT NULL COMMENT '题库描述',
+ PRIMARY KEY (`id`),
+ KEY `bank_com` (`company_encoding`),
+ CONSTRAINT `bank_com` FOREIGN KEY (`company_encoding`) REFERENCES `company` (`encoding`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of question_bank
+-- ----------------------------
+INSERT INTO `question_bank` VALUES ('49', 'C', '1', '2023-10-29', '2023-10-29', '1', '1', '222', null);
+INSERT INTO `question_bank` VALUES ('55', 'Java', '1', '2023-11-01', '2023-11-01', '12', '12', '123', 'Java是一门语言');
+INSERT INTO `question_bank` VALUES ('60', '综合面试', '2', '2023-11-06', '2023-11-06', '12', '12', '123', '综合面试题库');
+INSERT INTO `question_bank` VALUES ('61', '心理测试综合', '3', '2023-11-12', '2023-11-12', '12', '12', '123', '很好');
+INSERT INTO `question_bank` VALUES ('70', 'Python', '1', '2023-11-20', '2023-11-20', '28', '28', '123', '很好');
+INSERT INTO `question_bank` VALUES ('71', 'Vue', '1', '2023-11-20', '2023-11-20', '12', '12', '123', '一个前端');
+INSERT INTO `question_bank` VALUES ('72', 'Java', '1', '2023-11-20', '2023-11-20', '28', '28', '222', 'Java是一门语言');
+INSERT INTO `question_bank` VALUES ('73', 'Vue', '1', '2023-11-20', '2023-11-20', '28', '28', '222', '一个前端');
+INSERT INTO `question_bank` VALUES ('74', '综合面试', '2', '2023-11-20', '2023-11-20', '28', '28', '222', '综合面试题库');
+INSERT INTO `question_bank` VALUES ('75', 'Python', '1', '2023-11-20', '2023-11-20', '28', '28', '222', '很好');
+INSERT INTO `question_bank` VALUES ('79', 'vue', '1', '2023-12-13', '2023-12-13', '39', '39', '333', 'vu额库');
+INSERT INTO `question_bank` VALUES ('80', '综合', '2', '2023-12-13', '2023-12-13', '39', '39', '333', '综合题库');
+INSERT INTO `question_bank` VALUES ('81', 'Java', '1', '2023-12-20', '2023-12-20', '39', '39', '333', 'Java题库');
+
+-- ----------------------------
+-- Table structure for resume
+-- ----------------------------
+DROP TABLE IF EXISTS `resume`;
+CREATE TABLE `resume` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '简历表id,自增长,主键',
+ `avatar` varchar(255) DEFAULT NULL COMMENT '证件照图片地址',
+ `name` varchar(30) DEFAULT NULL COMMENT '求职者姓名',
+ `age` int(11) DEFAULT NULL COMMENT '求职者年龄',
+ `sex` varchar(5) DEFAULT '' COMMENT '求职者性别',
+ `education` varchar(50) DEFAULT NULL COMMENT '学历',
+ `education_background` text COMMENT '在校经历',
+ `status` varchar(5) DEFAULT NULL COMMENT '求职者身份:1:职场人。2:学生',
+ `graduate_institutions` varchar(50) DEFAULT NULL COMMENT '毕业院校',
+ `professional` varchar(50) DEFAULT NULL COMMENT '专业',
+ `graduate_time` varchar(50) DEFAULT NULL COMMENT '毕业年份',
+ `birthday` varchar(50) DEFAULT NULL COMMENT '出生年月',
+ `phone` varchar(50) DEFAULT NULL COMMENT '手机号',
+ `email` varchar(50) DEFAULT NULL COMMENT '电子邮箱',
+ `vx` varchar(50) DEFAULT NULL COMMENT '微信号',
+ `job_expectation` text COMMENT '岗位期望',
+ `work_experience` text COMMENT '工作经验',
+ `project_experience` text COMMENT '项目经验',
+ `other` text COMMENT '其他',
+ `personal_advantage` text COMMENT '个人优势',
+ `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ PRIMARY KEY (`id`),
+ KEY `user_resume` (`user_id`),
+ CONSTRAINT `user_resume` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of resume
+-- ----------------------------
+INSERT INTO `resume` VALUES ('5', 'http://117.88.94.226:5380/upload/picture/E15A08D1-BFB2-4624-B980-04126E5F3BCD.jpg', '李思思', '23', '1', '本科', '[{\"school\":\"扬州大学\",\"eduDegree\":\"本科\",\"major\":\"计算机科学与技术\",\"startTime\":\"2019\",\"endTime\":\"2023\",\"experience\":\"无\"}]', '0', null, null, '2022', '2000-01', '15052167502', '2209176490@qq.com', 'lss2000', '[{\"jobName\":\"java开发工程师\",\"expectType\":\"2\",\"position\":\"扬州\",\"minSalary\":\"5\",\"maxSalary\":\"6\"}]', '[{\"companyName\":\"扬州工商银行\",\"jobName\":\"软件开发实习生\",\"jobContent\":\"在实习期间,作为一名实习人员,我在师傅的带领下,负责工商银行手机app后台数据库的设计与维护,协助主力开发人员维护代码,提高提高系统性能和稳定性。\\n\",\"department\":\"开发部\",\"performance\":\"(1)在项目开发过程中,本人积极协作与团队成员进行需求讨论和设计评审,并采用敏捷开发的方法,确保项目按时交付,并满足客户需求。\\n(2)本人参与编写详细的技术文档,记录开发过程和关键问题的解决方案。\\n\",\"startTime\":\"2020-02\",\"endTime\":\"2020-04\"}]', '[{\"projectName\":\"学生信息管理系统\",\"jobName\":\"开发者\",\"content\":\"利用vue+springboot+mybatis plus开发一套学生信息管理系统,实现学生信息的录入、查询和管理功能。\",\"performance\":\"负责设计和实现数据库结构,编写后端接口和业务逻辑,与团队成员协作完成系统的前后端开发,确保系统的稳定性和数据安全。\",\"startTime\":\"2019-10\",\"endTime\":\"2019-10\"},{\"projectName\":\"在线购物网站\",\"jobName\":\"开发者\",\"content\":\"与团队成员合作,使用HTML, JavaScript,VUE.JS等Web编程技术开发一个完整的在线购物网站,包括商品展示、购物车、下单支付等功能。\",\"performance\":\"负责处理前端与后端的数据交互,实现购物车功能和订单管理,优化用户体验,确保系统的性能和稳定性。\",\"startTime\":\"2021-01\",\"endTime\":\"2021-04\"}]', '无', '在教育背景方面,本人毕业于扬州大学计算机科学与技术专业,成绩优异,获得了学士学位。本人具有正规系统的java编程基础和能力;在工作经验方面,本人曾在扬州工商银行担任为期一年的实习生,主要负责工商银行手机app后台数据库的设计与维护; 在技能和素质方面,本人精通java开发与数据库管理,并具有良好的沟通和协作能力,能够在团队合作中积极参与讨论,协助主力人员按时完成任务。', '32', '2023-12-02', '2023-12-15', '32', '32');
+INSERT INTO `resume` VALUES ('15', 'http://117.88.94.226:5380/upload/picture/74215A00-301F-4C01-9E38-E07A6A52D604.jpg', 'Jerry', '21', '0', '本科', '[{\"school\":\"扬州大学广陵学院\",\"eduDegree\":\"本科\",\"major\":\"软件工程\",\"startTime\":\"2020\",\"endTime\":\"2023\",\"experience\":\"123\"}]', '0', null, null, '2023-06', '2002-08', '15181652051', '2209176490@qq.com', 'jr2209176490', '[{\"jobName\":\"java\",\"expectType\":\"1\",\"position\":\"扬州\",\"minSalary\":\"9\",\"maxSalary\":\"12\"}]', '[{\"companyName\":\"娱乐公司\",\"jobName\":\"java后端\",\"jobContent\":\"我不会\",\"department\":\"技术部\",\"performance\":\"我不知道\",\"startTime\":\"2020-04\",\"endTime\":\"2022-04\"}]', '[{\"projectName\":\"ai面试官\",\"jobName\":\"java\",\"content\":\"做后端\",\"performance\":\"123\",\"startTime\":\"2014-01\",\"endTime\":\"2018-01\"}]', '没有了', '没有优势', '46', '2023-12-15', '2023-12-17', '46', '46');
+INSERT INTO `resume` VALUES ('18', '/static/default.png', '王斌', '33', '0', '', '[]', '0', null, null, '2023-08', '1990-03', '18912144789', '1210233152@qq.com', '', '[]', '[]', '[]', '', '', '48', '2023-12-17', '2023-12-17', '48', '48');
+
+-- ----------------------------
+-- Table structure for sharedBank
+-- ----------------------------
+DROP TABLE IF EXISTS `sharedBank`;
+CREATE TABLE `sharedBank` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分享题库ID',
+ `type_name` varchar(100) DEFAULT NULL COMMENT '题库名称',
+ `type` int(11) DEFAULT '1' COMMENT '题库类型,1:专业面试,2:综合面试,3.心理测试',
+ `description` varchar(255) DEFAULT NULL COMMENT '题库描述',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `create_company` varchar(50) DEFAULT NULL COMMENT '创建公司的编码',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of sharedBank
+-- ----------------------------
+INSERT INTO `sharedBank` VALUES ('52', 'Java', '1', 'Java是一门语言', '2023-11-22', '2023-11-22', '12', '12', '123');
+INSERT INTO `sharedBank` VALUES ('53', 'Java', '1', 'Java题库', '2023-12-15', '2023-12-15', '39', '39', '333');
+
+-- ----------------------------
+-- Table structure for sharedQuestion
+-- ----------------------------
+DROP TABLE IF EXISTS `sharedQuestion`;
+CREATE TABLE `sharedQuestion` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '题目id,自增长,主键',
+ `title` varchar(100) DEFAULT NULL COMMENT '题目标题',
+ `details` text COMMENT '题目内容',
+ `answer` text COMMENT '题目对应的promote',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ `bank_id` int(11) DEFAULT NULL COMMENT '题库类型id',
+ `create_company` varchar(50) DEFAULT NULL COMMENT '创建公司的编码',
+ PRIMARY KEY (`id`),
+ KEY `shred_question_bank` (`bank_id`),
+ CONSTRAINT `shred_question_bank` FOREIGN KEY (`bank_id`) REFERENCES `sharedBank` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of sharedQuestion
+-- ----------------------------
+INSERT INTO `sharedQuestion` VALUES ('74', 'String 类为什么不能被继承?', 'String 类为什么不能被继承?', '你好1', '2023-11-22', '2023-11-22', '12', '12', '52', '123');
+INSERT INTO `sharedQuestion` VALUES ('75', '重载和重写的区别', '重载和重写有什么区别?', '你好', '2023-11-22', '2023-11-22', '12', '12', '52', '123');
+INSERT INTO `sharedQuestion` VALUES ('76', 'Python字典', '11', '22', '2023-11-22', '2023-11-22', '12', '12', '52', '123');
+INSERT INTO `sharedQuestion` VALUES ('77', 'Java的三大特点', '请你描述一下Java的三大特点', 'promote', '2023-12-15', '2023-12-15', '39', '39', '53', '333');
+INSERT INTO `sharedQuestion` VALUES ('78', 'String 类为什么不能被继承?', 'String 类为什么不能被继承?', '你好1', '2023-12-15', '2023-12-15', '39', '39', '53', '333');
+INSERT INTO `sharedQuestion` VALUES ('79', '重载和重写的区别', '重载和重写有什么区别?', '你好', '2023-12-15', '2023-12-15', '39', '39', '53', '333');
+INSERT INTO `sharedQuestion` VALUES ('80', 'Python字典', '11', '22', '2023-12-15', '2023-12-15', '39', '39', '53', '333');
+INSERT INTO `sharedQuestion` VALUES ('81', '111', '2222', null, '2023-12-15', '2023-12-15', '39', '39', '53', '333');
+
+-- ----------------------------
+-- Table structure for tanlent_profile
+-- ----------------------------
+DROP TABLE IF EXISTS `tanlent_profile`;
+CREATE TABLE `tanlent_profile` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '人才画像id',
+ `user_id` int(11) DEFAULT NULL COMMENT '用户id,主键',
+ `position_applied` varchar(100) DEFAULT NULL COMMENT '申请的岗位',
+ `execution` double DEFAULT NULL COMMENT '执行力',
+ `internal_drive` double DEFAULT NULL COMMENT '内驱力',
+ `pressure_resistance` double DEFAULT NULL COMMENT '抗压力',
+ `match_rate` varchar(10) DEFAULT NULL COMMENT '匹配度',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建时间',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人id',
+ PRIMARY KEY (`id`),
+ KEY `profile_user` (`user_id`) USING BTREE,
+ CONSTRAINT `profile_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of tanlent_profile
+-- ----------------------------
+INSERT INTO `tanlent_profile` VALUES ('1', null, null, '4.7', '4.2', '4.6', '93.2%', '2023-12-11', null, null, null);
+INSERT INTO `tanlent_profile` VALUES ('2', null, '', '4.7', '4.2', '4.6', '93.2%', '2023-12-11', '', null, null);
+
+-- ----------------------------
+-- Table structure for user
+-- ----------------------------
+DROP TABLE IF EXISTS `user`;
+CREATE TABLE `user` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id,自增长,主键',
+ `username` varchar(255) DEFAULT NULL COMMENT '用户名',
+ `password` varchar(255) DEFAULT NULL COMMENT '密码',
+ `salt` varchar(255) DEFAULT NULL COMMENT '密码用于加密的salt',
+ `phone` varchar(50) DEFAULT NULL COMMENT '用户手机号',
+ `sex` varchar(5) DEFAULT NULL COMMENT '1:男,0:女',
+ `age` varchar(5) DEFAULT NULL COMMENT '年龄',
+ `avatar` varchar(255) DEFAULT NULL COMMENT '用户头像image地址',
+ `email` varchar(50) DEFAULT NULL COMMENT '用户电子邮箱',
+ `create_time` varchar(50) DEFAULT NULL COMMENT '创建日期',
+ `update_time` varchar(50) DEFAULT NULL COMMENT '更新时间',
+ `update_user` int(11) DEFAULT NULL COMMENT '更新人的id',
+ `create_user` int(11) DEFAULT NULL COMMENT '创建人id',
+ `role` varchar(5) DEFAULT '4' COMMENT '角色,1:系统管理员2:公司管理员,3:HR,4:面试者,默认为4',
+ `company_encoding` varchar(50) DEFAULT NULL COMMENT '该人所在的公司,默认null',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of user
+-- ----------------------------
+INSERT INTO `user` VALUES ('1', 'Jerry', '5B334769A98EEE0CDEA39FB1E0C06B1D', '5925CB62-A764-43AA-808A-01447620CD3D', '18784087479', '男', '20', 'http://localhost:8080/upload/picture/338D2432-51D4-4F76-9F15-E09CC3AB2F6C.png', '233333333', '2023-10-24', '2024-01-09', '1', null, '1', '222');
+INSERT INTO `user` VALUES ('12', 'Jerry', '5B334769A98EEE0CDEA39FB1E0C06B1D', '5925CB62-A764-43AA-808A-01447620CD3D', '15181652062', '男', '23', 'http://117.88.94.226:5380/upload/picture/452F469C-77A3-4E96-956C-3F13DE99454E.jpg', '2209176490@qq.com', '2023-10-17 21:48:04', '2023-12-17', '12', null, '2', '123');
+INSERT INTO `user` VALUES ('28', 'ljq', 'AB45CAF0AEA1E5AFCB985950D8904387', 'E305466B-687C-4449-AF71-74130F3C168C', '18638438826', null, null, 'http://117.88.94.226:5380/upload/picture/6C6F72A5-C1D8-46A9-8915-EE4700F4DDC6.png', null, '2023-11-09', '2023-11-09', '12', '12', '2', '222');
+INSERT INTO `user` VALUES ('29', 'test', 'B9F92FD68D92CF765F33F5FC8A508960', '4DD840D6-BAF3-46D5-8A35-6E1BCCE67DD5', '15181652053', null, null, null, null, '2023-11-15', '2023-11-15', '29', '12', '1', '123');
+INSERT INTO `user` VALUES ('31', 'text2', 'BFEA075BB6504CC598515D73660D084B', '13249F38-6F28-4698-A802-B17684C4DDF7', '15181652054', null, null, 'http://aiinterviewersystem.kooldns.cn/upload/picture/5E88D65E-764D-439E-8403-CCE0E4A1639D.jpg', null, '2023-11-23', '2023-11-23', '29', '29', '1', '123');
+INSERT INTO `user` VALUES ('32', '李思思', null, null, '15052167502', '女', '25', 'http://117.88.94.226:5380/upload/picture/E15A08D1-BFB2-4624-B980-04126E5F3BCD.jpg', '2209176490@qq.com', '2023-11-25', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('33', '张飞', null, null, '13196786136', '男', '22', 'http://117.88.94.226:5380/upload/picture/34A1CB75-D685-4B77-930C-F4C03FAE89F2.jpg', 'skdj@163.com', '2023-12-11', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('34', '砍王', null, null, '19961854718', '男', '22', 'http://117.88.94.226:5380/upload/picture/D04C36D9-74DE-4490-99B8-6D0C174D4A14.jpg', 'sjak@163.com', '2023-12-11', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('36', '58881903-4926-49B8-A517-0F27994302D9', null, null, '18796609590', null, null, null, null, '2023-12-11', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('37', '15052167503', 'DEE8560B87C78E629E3628191142A5CC', '40E72946-7671-45A8-A036-3889C3581706', '15052167503', null, null, null, null, '2023-12-11', '2023-12-11', '12', '12', '2', '123');
+INSERT INTO `user` VALUES ('38', '1E6B8A6C-4187-4E2E-8B38-62ED5FF3C80A', null, null, '17379319652', null, null, null, null, '2023-12-11', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('39', '苏伟', '5B334769A98EEE0CDEA39FB1E0C06B1D', '5925CB62-A764-43AA-808A-01447620CD3D', '15181652055', '男', '46', 'http://localhost:8080/upload/picture/FB2C8627-0C4F-4CA2-9B5A-4D8B50018096.jpg', '111@qq.com', null, '2023-12-14', '39', null, '2', '333');
+INSERT INTO `user` VALUES ('40', '张三', '159A762B707C92E5374558E157367E66', 'C9D1212C-5418-4168-890D-368ADA30EC71', '15181652059', null, null, null, null, '2023-12-13', '2023-12-14', '39', '39', '3', '333');
+INSERT INTO `user` VALUES ('41', '43519E70-1B59-4296-8A70-80E84190319A', null, null, '18796601141', null, null, null, null, '2023-12-13', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('44', '李四', '7CC971C59E2118266F1704C6E4B3DAFF', '8196E818-3A5C-43D1-A251-2EF381B7EC2B', '15181652060', null, null, null, null, '2023-12-14', '2023-12-14', '39', '39', '3', '333');
+INSERT INTO `user` VALUES ('46', 'Jerry', null, null, '15181652051', '男', '21', 'http://117.88.94.226:5380/upload/picture/74215A00-301F-4C01-9E38-E07A6A52D604.jpg', '2209176490@qq.com', '2023-12-15', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('47', '朱sir', '38A91FE284716FC3C2945E639D1F6346', '2DFEBF39-5B64-4501-A94D-424893715A4D', '13196786137', null, null, null, null, '2023-12-15', '2023-12-15', '39', '39', '2', '333');
+INSERT INTO `user` VALUES ('48', '王斌', null, null, '18912144789', '男', '33', '/static/default.png', '1210233152@qq.com', '2023-12-17', null, null, null, '4', null);
+INSERT INTO `user` VALUES ('49', '6861142F-ED74-40AA-B7F1-0919B542A17D', null, null, '13151110731', null, null, null, null, '2023-12-17', null, null, null, '4', null);
diff --git a/ai-interviewer-system/.idea/.gitignore b/ai-interviewer-system/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/ai-interviewer-system/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/ai-interviewer-system/.idea/compiler.xml b/ai-interviewer-system/.idea/compiler.xml
new file mode 100644
index 0000000..471a460
--- /dev/null
+++ b/ai-interviewer-system/.idea/compiler.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ai-interviewer-system/.idea/encodings.xml b/ai-interviewer-system/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/ai-interviewer-system/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ai-interviewer-system/.idea/jarRepositories.xml b/ai-interviewer-system/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/ai-interviewer-system/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ai-interviewer-system/.idea/misc.xml b/ai-interviewer-system/.idea/misc.xml
new file mode 100644
index 0000000..132404b
--- /dev/null
+++ b/ai-interviewer-system/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ai-interviewer-system/.idea/uiDesigner.xml b/ai-interviewer-system/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/ai-interviewer-system/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/ai-interviewer-system/.idea/vcs.xml b/ai-interviewer-system/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/ai-interviewer-system/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ai-interviewer-system/pom.xml b/ai-interviewer-system/pom.xml
new file mode 100644
index 0000000..d47bd4d
--- /dev/null
+++ b/ai-interviewer-system/pom.xml
@@ -0,0 +1,193 @@
+
+
+4.0.0
+
+
+ org.example
+ AiInterviewer
+ 1.0-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.6
+
+
+
+
+
+ 8
+ 8
+
+
+
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.76
+
+
+
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+ 1.54
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.3
+
+
+
+ org.mybatis
+ mybatis
+ 3.5.11
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+ mysql
+ mysql-connector-java
+
+
+
+
+ io.springfox
+ springfox-swagger2
+ 2.6.1
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ 2.6.1
+
+
+
+ com.auth0
+ java-jwt
+ 3.4.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.apache.commons
+ commons-pool2
+
+
+
+ commons-fileupload
+ commons-fileupload
+ 1.3.1
+
+
+ commons-io
+ commons-io
+ 2.4
+
+
+
+ org.apache.poi
+ poi
+ 5.2.3
+
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.0
+
+
+ io.netty
+ netty-common
+ 4.1.75.Final
+
+
+
+
+ org.apache.commons
+ commons-email
+ 1.4
+
+
+ cn.hutool
+ hutool-all
+ 5.8.10
+
+
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ 4.5.16
+
+
+ com.aliyun
+ aliyun-java-sdk-dysmsapi
+ 2.1.0
+
+
+
+
+ org.apache.commons
+ commons-collections4
+ 4.1
+
+
+
+ org.springframework
+ spring-context
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.4.5
+
+
+
+
+jar
+
+
\ No newline at end of file
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/AiInterviewerApplication.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/AiInterviewerApplication.java
new file mode 100644
index 0000000..b4e0937
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/AiInterviewerApplication.java
@@ -0,0 +1,14 @@
+package com.yzdx.AiInterviewer;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@EnableScheduling
+@SpringBootApplication
+public class AiInterviewerApplication {
+ public static void main(String[] args) {
+
+ SpringApplication.run(AiInterviewerApplication.class,args);
+ }
+}
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/comment/R.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/comment/R.java
new file mode 100644
index 0000000..cbfc20d
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/comment/R.java
@@ -0,0 +1,43 @@
+package com.yzdx.AiInterviewer.comment;
+
+import lombok.Data;
+
+@Data
+public class R{
+ private Integer code;
+ private String message;
+ private Object data;
+
+
+ public static R success(T object){
+ R r= new R<>();
+ r.code=0;
+ r.data=object;
+ r.message="成功";
+ return r;
+ }
+
+ public static R success(String message,T object){
+ R r= new R<>();
+ r.code=0;
+ r.data=object;
+ r.message=message;
+ return r;
+ }
+ public static R error(String message){
+ R r=new R<>();
+
+ r.code=1;
+ r.message=message;
+ return r;
+ }
+ public static R error(Integer code,String message){
+ R r=new R<>();
+
+ r.code=code;
+ r.message=message;
+ return r;
+ }
+ public R() {
+ }
+}
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/CorsFilterConfig.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/CorsFilterConfig.java
new file mode 100644
index 0000000..507649d
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/CorsFilterConfig.java
@@ -0,0 +1,37 @@
+package com.yzdx.AiInterviewer.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+/**
+ * 解决跨域
+ */
+@Configuration
+public class CorsFilterConfig {
+
+
+ /**
+ * 开启跨域访问拦截器
+ *
+ * @date 2021/4/29 9:50
+ */
+ @Bean
+ public CorsFilter corsFilter() {
+ //创建CorsConfiguration对象后添加配置
+ CorsConfiguration corsConfiguration = new CorsConfiguration();
+ //设置放行哪些原始域
+ corsConfiguration.addAllowedOrigin("*");
+ //放行哪些原始请求头部信息
+ corsConfiguration.addAllowedHeader("*");
+ //放行哪些请求方式
+ corsConfiguration.addAllowedMethod("*");
+
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ //2. 添加映射路径
+ source.registerCorsConfiguration("/**", corsConfiguration);
+ return new CorsFilter(source);
+ }
+}
\ No newline at end of file
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/MybatisPlusConfig.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..8272866
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/MybatisPlusConfig.java
@@ -0,0 +1,20 @@
+package com.yzdx.AiInterviewer.config;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 配置MP的分页插件
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor(){
+ MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+ mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+ return mybatisPlusInterceptor;
+ }
+}
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/SwaggerConfig.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/SwaggerConfig.java
new file mode 100644
index 0000000..5907fe1
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/SwaggerConfig.java
@@ -0,0 +1,55 @@
+package com.yzdx.AiInterviewer.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.Profiles;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+
+
+@Configuration
+@EnableSwagger2 //开启swagger2
+public class SwaggerConfig {
+
+ //配置了Swagger 的Docker的bean实例
+ @Bean
+ public Docket docket(Environment environment){
+
+ //设置要显示的Swagger环境
+ Profiles profiles =Profiles.of("dev","test");
+ //判断是否处于开发环境下
+ boolean flag=environment.acceptsProfiles(profiles);
+
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(apiInfo())
+ .enable(flag)
+ .select()
+ .apis(RequestHandlerSelectors.basePackage("com.yzdx.AiInterviewer.controller"))
+ .build()
+ ;
+ }
+ //配置Swagger信息=apiInfo
+ private ApiInfo apiInfo(){
+
+ Contact contact=new Contact("扬州大学开发团队", "http://www.yzu.edu.cn/", "2209176490@qq.com");
+
+ return new ApiInfo(
+ "Ai-Interviewer API开发文档",
+ "再小的帆也能远航",
+ "1.0",
+ "urn:tos",
+ contact,
+ "Apache 2.0",
+ "http://www.apache.org/licenses/LICENSE-2.0"
+
+ );
+
+ }
+}
\ No newline at end of file
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/UserInterceptor.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/UserInterceptor.java
new file mode 100644
index 0000000..033b93d
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/UserInterceptor.java
@@ -0,0 +1,60 @@
+package com.yzdx.AiInterviewer.config;
+
+import com.auth0.jwt.exceptions.AlgorithmMismatchException;
+import com.auth0.jwt.exceptions.SignatureVerificationException;
+import com.auth0.jwt.exceptions.TokenExpiredException;
+import com.yzdx.AiInterviewer.utiles.JWT;
+import net.minidev.json.JSONObject;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description: 拦截器
+ * @Author: 新写的旧代码
+ * @CreateTime: 2022/3/24
+ */
+public class UserInterceptor implements HandlerInterceptor {
+
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ Map map = new HashMap<>();
+
+ String Token = request.getHeader("Authorization");;
+
+ // 捕获刚刚JWT中抛出的异常,并封装对应的返回信息
+ try {
+ JWT.verifyToken(Token);
+ return true;
+ }catch (SignatureVerificationException e){
+ map.put("msg", "无效签名");
+ }catch (TokenExpiredException e){
+ map.put("msg", "已过期");
+ }catch (AlgorithmMismatchException e){
+ map.put("msg", "算法不一致");
+ }catch (Exception e){
+ map.put("msg", "无效身份信息");
+ }
+ // 封装返回值
+ map.put("code", 401);
+ JSONObject json = new JSONObject(map);
+ response.setContentType("application/json;charset=UTF-8");
+ PrintWriter writer = null;
+ try {
+ writer = response.getWriter();
+ writer.print(json);
+ writer.flush();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }finally {
+ writer.close();
+ }
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/WebMvcConfig.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/WebMvcConfig.java
new file mode 100644
index 0000000..7db2ac6
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/config/WebMvcConfig.java
@@ -0,0 +1,30 @@
+package com.yzdx.AiInterviewer.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @Description: springMVC配置
+ * @Author: 新写的旧代码
+ * @CreateTime: 2022/3/24
+ */
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ // 用户拦截器
+ registry.addInterceptor(new com.yzdx.AiInterviewer.config.UserInterceptor())
+ // 需要拦截的请求
+ .addPathPatterns("/**")
+ // 需要放行的请求
+ .excludePathPatterns("/admin/login")
+ .excludePathPatterns("/vxUser/decodeUserInfo","/vx_interview/getCarouselChart","/vxJob/getSuggestList","/download_file")
+ .excludePathPatterns("/vxUser/WxLogin")
+ // 添加swagger-ui的放行路径
+ .excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**","/doc.html/**")
+ .excludePathPatterns("/upload/**")
+ ;
+ }
+}
\ No newline at end of file
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/controller/CompanyController.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/controller/CompanyController.java
new file mode 100644
index 0000000..b7f3c37
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/controller/CompanyController.java
@@ -0,0 +1,37 @@
+package com.yzdx.AiInterviewer.controller;
+
+import com.yzdx.AiInterviewer.comment.R;
+import com.yzdx.AiInterviewer.entity.ApplicationCount;
+import com.yzdx.AiInterviewer.service.ApplicationCountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/company")
+public class CompanyController {
+
+ @Autowired
+ private ApplicationCountService applicationCountService;
+
+ @GetMapping("/getApplicationCount")
+ public R getApplicationCount(Integer days,String encoding){
+
+ if(days==7){
+
+ List applicationCountSevenDays = applicationCountService.getApplicationCountSevenDays(encoding);
+
+ return R.success(applicationCountSevenDays);
+
+ }else {
+
+ List applicationCountThirtyDays = applicationCountService.getApplicationCountThirtyDays(encoding);
+
+ return R.success(applicationCountThirtyDays);
+ }
+
+ }
+}
diff --git a/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/controller/InterviewController.java b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/controller/InterviewController.java
new file mode 100644
index 0000000..79fe80f
--- /dev/null
+++ b/ai-interviewer-system/src/main/java/com/yzdx/AiInterviewer/controller/InterviewController.java
@@ -0,0 +1,368 @@
+package com.yzdx.AiInterviewer.controller;
+
+import com.yzdx.AiInterviewer.comment.R;
+import com.yzdx.AiInterviewer.entity.BackgroundEntity;
+import com.yzdx.AiInterviewer.entity.ImagesEntity;
+import com.yzdx.AiInterviewer.entity.InvitePromote;
+import com.yzdx.AiInterviewer.entity.LogoEntity;
+import com.yzdx.AiInterviewer.entity.dto.InterviewRecordDto;
+import com.yzdx.AiInterviewer.entity.dto.InvitePromoteDto;
+import com.yzdx.AiInterviewer.mapper.InvitePromoteMapper;
+import com.yzdx.AiInterviewer.service.*;
+import com.yzdx.AiInterviewer.service.VxService.VxInterviewRecordService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/interview")
+@Slf4j
+public class InterviewController {
+
+ @Autowired
+ private InterviewLogoService LogoService;
+ @Autowired
+ private InterviewImagesService imagesService;
+ @Autowired
+ private InterviewBackgroundService backgroundService;
+ @Autowired
+ private InvitePromoteService invitePromoteService;
+ @Autowired
+ private InterviewNoticeService interviewNoticeService;
+ @Autowired
+ private VxInterviewRecordService vxInterviewRecordService;
+ @Autowired
+ private JobPostingService jobPostingService;
+
+ /**
+ * 获取公司logo
+ * @param encoding 公司编码
+ * @return R
+ */
+ @GetMapping("/get_logoList")
+ @ApiOperation(value = "根据编码获取logo图片列表",notes = "")
+ public R getLogoList(@ApiParam("传入的值为:(String)encoding") String encoding){
+
+ if(encoding==null){
+ return R.error(401,"出错了!请重新登陆");
+ }
+
+ List logoList = LogoService.getLogoList(encoding);
+
+ return R.success(logoList);
+
+ }
+
+ /**
+ * 添加公司Logo
+ */
+
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",required = true),
+ @ApiImplicitParam(name = "encoding",required = true),
+ @ApiImplicitParam(name = "image",required = true),
+ @ApiImplicitParam(name = "userId",required = true),
+ @ApiImplicitParam(name = "filename",required = true),
+ })
+ @PostMapping("/add_logo")
+ @ApiOperation(value = "添加logo图片",notes = "")
+ public R addLogo(@RequestBody Map addInfo){
+ String name= (String)addInfo.get("name");
+ String image= (String)addInfo.get("image");
+ String encoding= (String)addInfo.get("encoding");
+ Integer userId= (Integer)addInfo.get("userId");
+ String filename= (String)addInfo.get("filename");
+
+ if(filename.equals("")){
+ return R.error("请添加图片!");
+ }
+ Integer row = LogoService.addAddLogo(name, encoding, image, userId,filename);
+ if(row!=1){
+ return R.error("添加失败!");
+ }
+ return R.success("添加成功!");
+
+ }
+
+ /**
+ * 删除公司logo
+ * @param id 图片id
+ * @return R
+ */
+ @DeleteMapping("/delete_logo")
+ @ApiOperation(value = "删除logo图片",notes = "")
+ public R deleteLogoById(@ApiParam("传入的值为:(Integer)id") Integer id){
+
+ Integer rows = LogoService.deleteLogoById(id);
+ if(rows!=1){
+ return R.error("删除失败,请联系管理员");
+ }
+ return R.success("删除成功");
+
+ }
+
+ /**
+ * 获取公司背景图片2
+ * @param encoding 公司编码
+ * @return R
+ */
+ @ApiOperation(value = "根据公司编码搜索背景列表",notes = "")
+ @GetMapping("/get_backgroundList")
+ public R getBackgroundList(@ApiParam("传入的值:(String)encoding") String encoding){
+
+ if(encoding==null){
+ return R.error(401,"出错了!请重新登陆");
+ }
+
+ List backgroundList = backgroundService.getBackgroundList(encoding);
+
+ return R.success(backgroundList);
+
+ }
+
+
+ /**
+ * 添加背景图片
+ */
+
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",required = true),
+ @ApiImplicitParam(name = "encoding",required = true),
+ @ApiImplicitParam(name = "image",required = true),
+ @ApiImplicitParam(name = "userId",required = true),
+ @ApiImplicitParam(name = "filename",required = true),
+ })
+ @PostMapping("/add_background")
+ @ApiOperation(value = "添加背景图片",notes = "")
+ public R addBackground(@RequestBody Map addInfo) {
+ String name= (String)addInfo.get("name");
+ String image= (String)addInfo.get("image");
+ String encoding= (String)addInfo.get("encoding");
+ Integer userId= (Integer)addInfo.get("userId");
+ String filename= (String)addInfo.get("filename");
+
+ if(filename.equals("")){
+ return R.error("请添加图片!");
+ }
+ Integer row = backgroundService.addBackgroundLogo(name, encoding, image, userId,filename);
+
+ if(row!=1){
+ return R.error("添加失败!");
+ }
+ return R.success("添加成功!");
+
+ }
+
+ /**
+ * 删除背景图片
+ * @param id 公司id
+ * @return R
+ */
+ @DeleteMapping("/delete_background")
+ @ApiOperation(value = "删除背景图片",notes = "")
+ public R deleteBackgroundById(@ApiParam("传入的值为:(Integer)id") Integer id){
+
+ Integer rows = backgroundService.deleteBackgroundById(id);
+ if(rows!=1){
+ return R.error("删除失败,请联系管理员");
+ }
+ return R.success("删除成功");
+
+ }
+
+ /**
+ * 获取面试官形象
+ * @param encoding 公司编码
+ * @return R
+ */
+ @GetMapping("/get_imagesList")
+ @ApiOperation(value = "根据公司编码获取面试官形象图片列表",notes = "")
+ public R getImagesList(@ApiParam("传入的值为:(String)encoding") String encoding){
+
+ if(encoding==null){
+ return R.error(401,"出错了!请重新登陆");
+ }
+
+ List imagesList =imagesService.getImagesList(encoding);
+
+ return R.success(imagesList);
+
+ }
+
+ /**
+ * 添加面试官形象照片
+ */
+
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",required = true),
+ @ApiImplicitParam(name = "encoding",required = true),
+ @ApiImplicitParam(name = "image",required = true),
+ @ApiImplicitParam(name = "userId",required = true),
+ @ApiImplicitParam(name = "filename",required = true),
+ })
+ @PostMapping("/add_image")
+ @ApiOperation(value = "添加面试管形象",notes = "")
+ public R addImage(@RequestBody Map addInfo) {
+ String name= (String)addInfo.get("name");
+ String image= (String)addInfo.get("image");
+ String encoding= (String)addInfo.get("encoding");
+ Integer userId= (Integer)addInfo.get("userId");
+ String filename= (String)addInfo.get("filename");
+ String video= (String)addInfo.get("video");
+ String sex= (String)addInfo.get("sex");
+
+ if(filename.equals("")){
+ return R.error("请添加图片!");
+ }
+
+ Integer row = imagesService.addImage(name,encoding,image,video,userId,filename,sex);
+
+ if(row!=1){
+ return R.error("添加失败!");
+ }
+ return R.success("添加成功!");
+
+ }
+
+ /**
+ * 删除面试官形象
+ * @param id 图片id
+ * @return R
+ */
+ @DeleteMapping("/delete_image")
+ @ApiOperation(value = "根据形象id删除面试官形象图片",notes = "")
+ public R deleteImageById(@ApiParam("传入的值:(Integer)id") Integer id){
+
+ Integer rows = imagesService.deleteImageById(id);
+ if(rows!=1){
+ return R.error("删除失败,请联系管理员");
+ }
+ return R.success("删除成功");
+
+ }
+
+ @GetMapping("/getInvitePromote")
+ public R getInvitePromoteDto(Integer id){
+
+ InvitePromoteDto invitePromote = invitePromoteService.getInvitePromote(id);
+
+ return R.success(invitePromote);
+
+ }
+
+ @PostMapping("/sendInterviewNotice")
+ public R sendInterviewNotice(@RequestBody Map addInfo){
+ String encoding=(String) addInfo.get("encoding");
+ Integer recipient=(Integer) addInfo.get("inviteUser");
+ Integer jobId=(Integer) addInfo.get("jobId");
+ Integer postId=(Integer) addInfo.get("postId");
+ Integer userId=(Integer) addInfo.get("userId");
+ String promote=(String) addInfo.get("promote");
+ String selectQuestions=(String) addInfo.get("selectQuestions");
+ Integer applicationId=(Integer)addInfo.get("applicationId");
+ String endTime=(String)addInfo.get("endTime");
+
+ // 解析原始字符串为 LocalDateTime 对象
+ LocalDateTime dateTime = LocalDateTime.parse(endTime, DateTimeFormatter.ISO_DATE_TIME);
+
+ // 格式化 LocalDateTime 对象为所需的日期格式
+ String dateString = dateTime.format(DateTimeFormatter.ISO_DATE);
+
+
+ Integer rows = interviewNoticeService.addInterviewNotice(encoding,recipient,
+ jobId, postId,userId,promote,selectQuestions,applicationId,dateString);
+ if(rows==-2){
+ return R.error("您已经邀请过他面试啦");
+ }
+ if(rows==-3){
+ return R.error("邀请失败,请联系管理员");
+ }
+ return R.success("邀请成功");
+
+ }
+ @GetMapping("/getInterviewRecordList")
+ public R getInterviewRecordList(Integer postId,Integer jobId,String encoding,Integer status){
+
+ List interviewRecordDtoList=vxInterviewRecordService.getInterviewRecords(postId,jobId,encoding,status);
+
+ return R.success(interviewRecordDtoList);
+
+ }
+ @GetMapping("/getInterviewRecordListByUserId")
+ public R getInterviewRecordListByUserId(Integer userId){
+
+ List interviewRecordDtoList=vxInterviewRecordService.getInterviewRecordListByUserId(userId);
+
+ return R.success(interviewRecordDtoList);
+
+ }
+
+ @GetMapping("/getPostingInfoList")
+ public R getPostingInfoList(String encoding){
+
+ List