05ebb5dc by 杨炀

no message

1 parent b790e0e8
Showing 42 changed files with 2078 additions and 1195 deletions
/**
* @author: Dennis Hernández
* @webSite: http://djhvscf.github.io/Blog
* @version: v1.0.0
*/
(function ($) {
'use strict';
var initResizable = function (that) {
//Deletes the plugin to re-create it
that.$el.colResizable({disable: true});
//Creates the plugin
that.$el.colResizable({
liveDrag: that.options.liveDrag,
fixed: that.options.fixed,
headerOnly: that.options.headerOnly,
minWidth: that.options.minWidth,
hoverCursor: that.options.hoverCursor,
dragCursor: that.options.dragCursor,
onResize: that.onResize,
onDrag: that.options.onResizableDrag,
resizeMode: that.options.resizeMode
});
};
$.extend($.fn.bootstrapTable.defaults, {
resizable: false,
liveDrag: false,
fixed: true,
headerOnly: false,
minWidth: 15,
hoverCursor: 'e-resize',
dragCursor: 'e-resize',
onResizableResize: function (e) {
return false;
},
onResizableDrag: function (e) {
return false;
}
});
var BootstrapTable = $.fn.bootstrapTable.Constructor,
_toggleView = BootstrapTable.prototype.toggleView,
_resetView = BootstrapTable.prototype.resetView;
BootstrapTable.prototype.toggleView = function () {
_toggleView.apply(this, Array.prototype.slice.apply(arguments));
if (this.options.resizable && this.options.cardView) {
//Deletes the plugin
$(this.$el).colResizable({disable: true});
}
};
BootstrapTable.prototype.resetView = function () {
var that = this;
_resetView.apply(this, Array.prototype.slice.apply(arguments));
if (this.options.resizable) {
// because in fitHeader function, we use setTimeout(func, 100);
setTimeout(function () {
initResizable(that);
}, 100);
}
};
BootstrapTable.prototype.onResize = function (e) {
var that = $(e.currentTarget);
that.bootstrapTable('resetView');
that.data('bootstrap.table').options.onResizableResize.apply(e);
}
})(jQuery);
/**
_ _____ _ _ _
| | __ \ (_) | | | |
___ ___ | | |__) |___ ___ _ ______ _| |__ | | ___
/ __/ _ \| | _ // _ \/ __| |_ / _` | '_ \| |/ _ \
| (_| (_) | | | \ \ __/\__ \ |/ / (_| | |_) | | __/
\___\___/|_|_| \_\___||___/_/___\__,_|_.__/|_|\___|
v1.7 - jQuery plugin created by Alvaro Prieto Lauroba
Licences: MIT & GPL
Feel free to use or modify this plugin as far as my full name is kept
*/
(function($){
//IE8 Polyfill
if(!Array.indexOf) { Array.prototype.indexOf = function(obj) { for(var i=0; i<this.length;i++){if(this[i]==obj){return i;}} return -1; }}
var d = $(document); //window object
var h = $("head"); //head object
var drag = null; //reference to the current grip that is being dragged
var tables = {}; //object of the already processed tables (table.id as key)
var count = 0; //internal count to create unique IDs when needed.
//common strings for packing
var ID = "id";
var PX = "px";
var SIGNATURE ="JColResizer";
var FLEX = "JCLRFlex";
//short-cuts
var I = parseInt;
var M = Math;
var ie = navigator.userAgent.indexOf('Trident/4.0')>0;
var S;
var pad = ""
try{S = sessionStorage;}catch(e){} //Firefox crashes when executed as local file system
//append required CSS rules
h.append("<style type='text/css'> .JColResizer{table-layout:fixed;} .JColResizer > tbody > tr > td, .JColResizer > tbody > tr > th{overflow:hidden} .JPadding > tbody > tr > td, .JPadding > tbody > tr > th{padding-left:0!important; padding-right:0!important;} .JCLRgrips{ height:0px; position:relative;} .JCLRgrip{margin-left:-5px; position:absolute; z-index:5; } .JCLRgrip .JColResizer{position:absolute;background-color:red;filter:alpha(opacity=1);opacity:0;width:10px;height:100%;cursor: col-resize;top:0px} .JCLRLastGrip{position:absolute; width:1px; } .JCLRgripDrag{ border-left:1px dotted black; } .JCLRFlex{width:auto!important;} .JCLRgrip.JCLRdisabledGrip .JColResizer{cursor:default; display:none;}</style>");
/**
* Function to allow column resizing for table objects. It is the starting point to apply the plugin.
* @param {DOM node} tb - reference to the DOM table object to be enhanced
* @param {Object} options - some customization values
*/
var init = function( tb, options){
var t = $(tb); //the table object is wrapped
t.opt = options; //each table has its own options available at anytime
t.mode = options.resizeMode; //shortcuts
t.dc = t.opt.disabledColumns;
if(t.opt.removePadding) t.addClass("JPadding");
if(t.opt.disable) return destroy(t); //the user is asking to destroy a previously colResized table
var id = t.id = t.attr(ID) || SIGNATURE+count++; //its id is obtained, if null new one is generated
t.p = t.opt.postbackSafe; //short-cut to detect postback safe
if(!t.is("table") || tables[id] && !t.opt.partialRefresh) return; //if the object is not a table or if it was already processed then it is ignored.
if (t.opt.hoverCursor !== 'col-resize') h.append("<style type='text/css'>.JCLRgrip .JColResizer:hover{cursor:"+ t.opt.hoverCursor +"!important}</style>"); //if hoverCursor has been set, append the style
t.addClass(SIGNATURE).attr(ID, id).before('<div class="JCLRgrips"/>'); //the grips container object is added. Signature class forces table rendering in fixed-layout mode to prevent column's min-width
t.g = []; t.c = []; t.w = t.width(); t.gc = t.prev(); t.f=t.opt.fixed; //t.c and t.g are arrays of columns and grips respectively
if(options.marginLeft) t.gc.css("marginLeft", options.marginLeft); //if the table contains margins, it must be specified
if(options.marginRight) t.gc.css("marginRight", options.marginRight); //since there is no (direct) way to obtain margin values in its original units (%, em, ...)
t.cs = I(ie? tb.cellSpacing || tb.currentStyle.borderSpacing :t.css('border-spacing'))||2; //table cellspacing (not even jQuery is fully cross-browser)
t.b = I(ie? tb.border || tb.currentStyle.borderLeftWidth :t.css('border-left-width'))||1; //outer border width (again cross-browser issues)
// if(!(tb.style.width || tb.width)) t.width(t.width()); //I am not an IE fan at all, but it is a pity that only IE has the currentStyle attribute working as expected. For this reason I can not check easily if the table has an explicit width or if it is rendered as "auto"
tables[id] = t; //the table object is stored using its id as key
createGrips(t); //grips are created
};
/**
* This function allows to remove any enhancements performed by this plugin on a previously processed table.
* @param {jQuery ref} t - table object
*/
var destroy = function(t){
var id=t.attr(ID), t=tables[id]; //its table object is found
if(!t||!t.is("table")) return; //if none, then it wasn't processed
t.removeClass(SIGNATURE+" "+FLEX).gc.remove(); //class and grips are removed
delete tables[id]; //clean up data
};
/**
* Function to create all the grips associated with the table given by parameters
* @param {jQuery ref} t - table object
*/
var createGrips = function(t){
var th = t.find(">thead>tr:first>th,>thead>tr:first>td"); //table headers are obtained
if(!th.length) th = t.find(">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td"); //but headers can also be included in different ways
th = th.filter(":visible"); //filter invisible columns
t.cg = t.find("col"); //a table can also contain a colgroup with col elements
t.ln = th.length; //table length is stored
if(t.p && S && S[t.id])memento(t,th); //if 'postbackSafe' is enabled and there is data for the current table, its coloumn layout is restored
th.each(function(i){ //iterate through the table column headers
var c = $(this); //jquery wrap for the current column
var dc = t.dc.indexOf(i)!=-1; //is this a disabled column?
var g = $(t.gc.append('<div class="JCLRgrip"></div>')[0].lastChild); //add the visual node to be used as grip
g.append(dc ? "": t.opt.gripInnerHtml).append('<div class="'+SIGNATURE+'"></div>');
if(i == t.ln-1){ //if the current grip is the las one
g.addClass("JCLRLastGrip"); //add a different css class to stlye it in a different way if needed
if(t.f) g.html(""); //if the table resizing mode is set to fixed, the last grip is removed since table with can not change
}
g.bind('touchstart mousedown', onGripMouseDown); //bind the mousedown event to start dragging
if (!dc){
//if normal column bind the mousedown event to start dragging, if disabled then apply its css class
g.removeClass('JCLRdisabledGrip').bind('touchstart mousedown', onGripMouseDown);
}else{
g.addClass('JCLRdisabledGrip');
}
g.t = t; g.i = i; g.c = c; c.w =c.width(); //some values are stored in the grip's node data as shortcut
t.g.push(g); t.c.push(c); //the current grip and column are added to its table object
c.width(c.w).removeAttr("width"); //the width of the column is converted into pixel-based measurements
g.data(SIGNATURE, {i:i, t:t.attr(ID), last: i == t.ln-1}); //grip index and its table name are stored in the HTML
});
t.cg.removeAttr("width"); //remove the width attribute from elements in the colgroup
t.find('td, th').not(th).not('table th, table td').each(function(){
$(this).removeAttr('width'); //the width attribute is removed from all table cells which are not nested in other tables and dont belong to the header
});
if(!t.f){
t.removeAttr('width').addClass(FLEX); //if not fixed, let the table grow as needed
}
syncGrips(t); //the grips are positioned according to the current table layout
//there is a small problem, some cells in the table could contain dimension values interfering with the
//width value set by this plugin. Those values are removed
};
/**
* Function to allow the persistence of columns dimensions after a browser postback. It is based in
* the HTML5 sessionStorage object, which can be emulated for older browsers using sessionstorage.js
* @param {jQuery ref} t - table object
* @param {jQuery ref} th - reference to the first row elements (only set in deserialization)
*/
var memento = function(t, th){
var w,m=0,i=0,aux =[],tw;
if(th){ //in deserialization mode (after a postback)
t.cg.removeAttr("width");
if(t.opt.flush){ S[t.id] =""; return;} //if flush is activated, stored data is removed
w = S[t.id].split(";"); //column widths is obtained
tw = w[t.ln+1];
if(!t.f && tw){ //if not fixed and table width data available its size is restored
t.width(tw*=1);
if(t.opt.overflow) { //if overfolw flag is set, restore table width also as table min-width
t.css('min-width', tw + PX);
t.w = tw;
}
}
for(;i<t.ln;i++){ //for each column
aux.push(100*w[i]/w[t.ln]+"%"); //width is stored in an array since it will be required again a couple of lines ahead
th.eq(i).css("width", aux[i] ); //each column width in % is restored
}
for(i=0;i<t.ln;i++)
t.cg.eq(i).css("width", aux[i]); //this code is required in order to create an inline CSS rule with higher precedence than an existing CSS class in the "col" elements
}else{ //in serialization mode (after resizing a column)
S[t.id] =""; //clean up previous data
for(;i < t.c.length; i++){ //iterate through columns
w = t.c[i].width(); //width is obtained
S[t.id] += w+";"; //width is appended to the sessionStorage object using ID as key
m+=w; //carriage is updated to obtain the full size used by columns
}
S[t.id]+=m; //the last item of the serialized string is the table's active area (width),
//to be able to obtain % width value of each columns while deserializing
if(!t.f) S[t.id] += ";"+t.width(); //if not fixed, table width is stored
}
};
/**
* Function that places each grip in the correct position according to the current table layout
* @param {jQuery ref} t - table object
*/
var syncGrips = function (t){
t.gc.width(t.w); //the grip's container width is updated
for(var i=0; i<t.ln; i++){ //for each column
var c = t.c[i];
t.g[i].css({ //height and position of the grip is updated according to the table layout
left: c.offset().left - t.offset().left + c.outerWidth(false) + t.cs / 2 + PX,
height: t.opt.headerOnly? t.c[0].outerHeight(false) : t.outerHeight(false)
});
}
};
/**
* This function updates column's width according to the horizontal position increment of the grip being
* dragged. The function can be called while dragging if liveDragging is enabled and also from the onGripDragOver
* event handler to synchronize grip's position with their related columns.
* @param {jQuery ref} t - table object
* @param {number} i - index of the grip being dragged
* @param {bool} isOver - to identify when the function is being called from the onGripDragOver event
*/
var syncCols = function(t,i,isOver){
var inc = drag.x-drag.l, c = t.c[i], c2 = t.c[i+1];
var w = c.w + inc; var w2= c2.w- inc; //their new width is obtained
c.width( w + PX);
t.cg.eq(i).width( w + PX);
if(t.f){ //if fixed mode
c2.width(w2 + PX);
t.cg.eq(i+1).width( w2 + PX);
}else if(t.opt.overflow) { //if overflow is set, incriment min-width to force overflow
t.css('min-width', t.w + inc);
}
if(isOver){
c.w=w;
c2.w= t.f ? w2 : c2.w;
}
};
/**
* This function updates all columns width according to its real width. It must be taken into account that the
* sum of all columns can exceed the table width in some cases (if fixed is set to false and table has some kind
* of max-width).
* @param {jQuery ref} t - table object
*/
var applyBounds = function(t){
var w = $.map(t.c, function(c){ //obtain real widths
return c.width();
});
t.width(t.w = t.width()).removeClass(FLEX); //prevent table width changes
$.each(t.c, function(i,c){
c.width(w[i]).w = w[i]; //set column widths applying bounds (table's max-width)
});
t.addClass(FLEX); //allow table width changes
};
/**
* Event handler used while dragging a grip. It checks if the next grip's position is valid and updates it.
* @param {event} e - mousemove event binded to the window object
*/
var onGripDrag = function(e){
if(!drag) return;
var t = drag.t; //table object reference
var oe = e.originalEvent.touches;
var ox = oe ? oe[0].pageX : e.pageX; //original position (touch or mouse)
var x = ox - drag.ox + drag.l; //next position according to horizontal mouse position increment
var mw = t.opt.minWidth, i = drag.i ; //cell's min width
var l = t.cs*1.5 + mw + t.b;
var last = i == t.ln-1; //check if it is the last column's grip (usually hidden)
var min = i? t.g[i-1].position().left+t.cs+mw: l; //min position according to the contiguous cells
var max = t.f ? //fixed mode?
i == t.ln-1?
t.w-l:
t.g[i+1].position().left-t.cs-mw:
Infinity; //max position according to the contiguous cells
x = M.max(min, M.min(max, x)); //apply bounding
drag.x = x; drag.css("left", x + PX); //apply position increment
if(last){ //if it is the last grip
var c = t.c[drag.i]; //width of the last column is obtained
drag.w = c.w + x- drag.l;
}
if(t.opt.liveDrag){ //if liveDrag is enabled
if(last){
c.width(drag.w);
if(!t.f && t.opt.overflow){ //if overflow is set, incriment min-width to force overflow
t.css('min-width', t.w + x - drag.l);
}else {
t.w = t.width();
}
}else{
syncCols(t,i); //columns are synchronized
}
syncGrips(t);
var cb = t.opt.onDrag; //check if there is an onDrag callback
if (cb) { e.currentTarget = t[0]; cb(e); } //if any, it is fired
}
return false; //prevent text selection while dragging
};
/**
* Event handler fired when the dragging is over, updating table layout
* @param {event} e - grip's drag over event
*/
var onGripDragOver = function(e){
d.unbind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE).unbind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE);
$("head :last-child").remove(); //remove the dragging cursor style
if(!drag) return;
drag.removeClass(drag.t.opt.draggingClass); //remove the grip's dragging css-class
if (!(drag.x - drag.l == 0)) {
var t = drag.t;
var cb = t.opt.onResize; //get some values
var i = drag.i; //column index
var last = i == t.ln-1; //check if it is the last column's grip (usually hidden)
var c = t.g[i].c; //the column being dragged
if(last){
c.width(drag.w);
c.w = drag.w;
}else{
syncCols(t, i, true); //the columns are updated
}
if(!t.f) applyBounds(t); //if not fixed mode, then apply bounds to obtain real width values
syncGrips(t); //the grips are updated
if (cb) { e.currentTarget = t[0]; cb(e); } //if there is a callback function, it is fired
if(t.p && S) memento(t); //if postbackSafe is enabled and there is sessionStorage support, the new layout is serialized and stored
}
drag = null; //since the grip's dragging is over
};
/**
* Event handler fired when the grip's dragging is about to start. Its main goal is to set up events
* and store some values used while dragging.
* @param {event} e - grip's mousedown event
*/
var onGripMouseDown = function(e){
var o = $(this).data(SIGNATURE); //retrieve grip's data
var t = tables[o.t], g = t.g[o.i]; //shortcuts for the table and grip objects
var oe = e.originalEvent.touches; //touch or mouse event?
g.ox = oe? oe[0].pageX: e.pageX; //the initial position is kept
g.l = g.position().left;
g.x = g.l;
d.bind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE, onGripDrag ).bind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE, onGripDragOver); //mousemove and mouseup events are bound
h.append("<style type='text/css'>*{cursor:"+ t.opt.dragCursor +"!important}</style>"); //change the mouse cursor
g.addClass(t.opt.draggingClass); //add the dragging class (to allow some visual feedback)
drag = g; //the current grip is stored as the current dragging object
if(t.c[o.i].l) for(var i=0,c; i<t.ln; i++){ c=t.c[i]; c.l = false; c.w= c.width(); } //if the colum is locked (after browser resize), then c.w must be updated
return false; //prevent text selection
};
/**
* Event handler fired when the browser is resized. The main purpose of this function is to update
* table layout according to the browser's size synchronizing related grips
*/
var onResize = function(){
for(var t in tables){
if( tables.hasOwnProperty( t ) ) {
t = tables[t];
var i, mw=0;
t.removeClass(SIGNATURE); //firefox doesn't like layout-fixed in some cases
if (t.f) { //in fixed mode
t.w = t.width(); //its new width is kept
for(i=0; i<t.ln; i++) mw+= t.c[i].w;
//cell rendering is not as trivial as it might seem, and it is slightly different for
//each browser. In the beginning i had a big switch for each browser, but since the code
//was extremely ugly now I use a different approach with several re-flows. This works
//pretty well but it's a bit slower. For now, lets keep things simple...
for(i=0; i<t.ln; i++) t.c[i].css("width", M.round(1000*t.c[i].w/mw)/10 + "%").l=true;
//c.l locks the column, telling us that its c.w is outdated
}else{ //in non fixed-sized tables
applyBounds(t); //apply the new bounds
if(t.mode == 'flex' && t.p && S){ //if postbackSafe is enabled and there is sessionStorage support,
memento(t); //the new layout is serialized and stored for 'flex' tables
}
}
syncGrips(t.addClass(SIGNATURE));
}
}
};
//bind resize event, to update grips position
$(window).bind('resize.'+SIGNATURE, onResize);
/**
* The plugin is added to the jQuery library
* @param {Object} options - an object that holds some basic customization values
*/
$.fn.extend({
colResizable: function(options) {
var defaults = {
//attributes:
resizeMode: 'fit', //mode can be 'fit', 'flex' or 'overflow'
draggingClass: 'JCLRgripDrag', //css-class used when a grip is being dragged (for visual feedback purposes)
gripInnerHtml: '', //if it is required to use a custom grip it can be done using some custom HTML
liveDrag: false, //enables table-layout updating while dragging
minWidth: 15, //minimum width value in pixels allowed for a column
headerOnly: false, //specifies that the size of the the column resizing anchors will be bounded to the size of the first row
hoverCursor: "col-resize", //cursor to be used on grip hover
dragCursor: "col-resize", //cursor to be used while dragging
postbackSafe: false, //when it is enabled, table layout can persist after postback or page refresh. It requires browsers with sessionStorage support (it can be emulated with sessionStorage.js).
flush: false, //when postbakSafe is enabled, and it is required to prevent layout restoration after postback, 'flush' will remove its associated layout data
marginLeft: null, //in case the table contains any margins, colResizable needs to know the values used, e.g. "10%", "15em", "5px" ...
marginRight: null, //in case the table contains any margins, colResizable needs to know the values used, e.g. "10%", "15em", "5px" ...
disable: false, //disables all the enhancements performed in a previously colResized table
partialRefresh: false, //can be used in combination with postbackSafe when the table is inside of an updatePanel,
disabledColumns: [], //column indexes to be excluded
removePadding: true, //for some uses (such as multiple range slider), it is advised to set this modifier to true, it will remove padding from the header cells.
//events:
onDrag: null, //callback function to be fired during the column resizing process if liveDrag is enabled
onResize: null //callback function fired when the dragging process is over
}
var options = $.extend(defaults, options);
//since now there are 3 different ways of resizing columns, I changed the external interface to make it clear
//calling it 'resizeMode' but also to remove the "fixed" attribute which was confusing for many people
options.fixed = true;
options.overflow = false;
switch(options.resizeMode){
case 'flex': options.fixed = false; break;
case 'overflow': options.fixed = false; options.overflow = true; break;
}
return this.each(function() {
init( this, options);
});
}
});
})(jQuery);
......@@ -2,7 +2,7 @@ import request from '@/utils/request'
export function getMaList(params) {
return request({
url: `/league/competition/webList`,
url: `/league/competition/webList?topFlag=1&status=1`,
method: 'get',
params: params
})
......@@ -252,13 +252,7 @@ export function getMyGroupForCptFilter(groupId, cptId, query) {
data: query
})
}
//todo
export function bindWdsf(perId,card) {
return request({
url: `/systemj/personInfo/bindWdsf/${perId}?card=${card}`,
method: 'post'
})
}
export function getGroupPersonList(query,groupId) {
return request({
url: `/systemj/personInfo/getPersonInfoListByGroupIdNoLabel/${groupId}`,
......@@ -403,9 +397,8 @@ export function commitSign(data) {
}
export function getTotalFee(data) {
return request({
url: `/league/expenseConfig/getTotalFee`,
method: 'post',
data: data
url: `/league/expenseConfig/getTotalFee/${data.cptId}/${data.entryId}`,
method: 'get'
})
}
export function getMemberInfoByCptId(cptId) {
......@@ -463,8 +456,8 @@ export function getMySignListTree(cptId, personId, teamId) {
export function getMySignInfoList(data) {
return request({
url: `/league/sign/getMySignInfoList`,
method: 'post',
data: data
method: 'get',
params: data
})
}
export function saveMyGroupExtraInfo(data) {
......@@ -498,4 +491,18 @@ export function getPayedOrderPdf(cptId, groupId) {
method: 'get'
})
}
//todo
export function bindWdsf(perId,card) {
return request({
url: `/systemj/personInfo/bindWdsf/${perId}?card=${card}`,
method: 'post'
})
}
export function getProjectPageByPerIds(query) {
return request({
url: `/league/competitionProject/getProjectPageByPerIds/${query.cptId}/${query.perIds}`,
method: 'get',
params: query
})
}
......

1.32 KB | W: | H:

1.6 KB | W: | H:

src/assets/sign/tag04.png
src/assets/sign/tag04.png
src/assets/sign/tag04.png
src/assets/sign/tag04.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -182,7 +182,9 @@ aside {
margin-bottom: 10px;
}
}
.m20{margin: 20px;}
.flexCenter{display: flex;align-items: center;justify-content: center;}
.flexBetween{display: flex;align-items: center;justify-content: space-between;}
.primary-kx{border:1px solid var(--el-color-primary)!important;color: var(--el-color-primary)!important;}
.primary-kx:hover{}
.border-info{background: rgba(69,61,234,0.04);
......@@ -222,8 +224,8 @@ aside {
font-size: 24px;}
.el-dialog__headerbtn{font-size: 24px!important;color: #A0A0A0;}
}
.w200px{width: 200px;}
.w100{width: 100%;}
.w200px{min-width: 200px;}
.pt30{padding-top: 30px;}
.d-form-border{
border: 1px solid #E5E5E5;margin: 20px 0;padding: 20px}
......
......@@ -18,7 +18,7 @@
:accept="accept"
>
<!-- 上传按钮 -->
<el-button type="primary" :disabled="props.disabled">选取文件</el-button>
<el-button type="primary" :disabled="props.disabled">{{ buttonText }}</el-button>
</el-upload>
<!-- 上传提示 -->
<div v-if="showTip && !disabled" class="el-upload__tip">
......@@ -89,6 +89,10 @@ const props = defineProps({
disabled: {
type: Boolean,
default: false
},
buttonText:{
type: String,
default: '上传文件'
}
})
const accept = computed(() => {
......
......@@ -6,40 +6,21 @@
<div class="home-menu forPc" style="margin: 0 20px">
<el-menu
v-if="language==0"
router :default-active="activeIndex" :mode="mode" :ellipsis="true"
popper-effect="dark" @select="handleSelect"
>
<el-menu-item index="/">首页</el-menu-item>
<el-menu-item index="/news">新闻资讯</el-menu-item>
<el-menu-item index="/notice">通知公告</el-menu-item>
<el-menu-item index="/match/list/0">大赛报名</el-menu-item>
<el-menu-item index="/saiC">赛程安排</el-menu-item>
<el-menu-item index="/meta">媒体中心</el-menu-item>
<el-menu-item index="/guide">参赛指南</el-menu-item>
<el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item>
<el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item>
<el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item>
<el-menu-item index="/match/list/0">{{ language==0?'大赛报名':'SIGN UP' }}</el-menu-item>
<el-menu-item index="/saiC">{{ language==0?'赛程安排':'COMPETITIONS' }}</el-menu-item>
<el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item>
<el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>
<el-sub-menu index="/about">
<template #title>关于我们</template>
<el-menu-item index="/about/wuDao">舞蹈节</el-menu-item>
<el-menu-item index="/about/culture">地方文化</el-menu-item>
</el-sub-menu>
</el-menu>
<el-menu
v-if="language==1"
router :default-active="activeIndex" mode="horizontal" :ellipsis="true"
popper-effect="dark" @select="handleSelect"
>
<el-menu-item index="/">HOME</el-menu-item>
<el-menu-item index="/news">NEWS</el-menu-item>
<el-menu-item index="/notice">NOTICEBOARD</el-menu-item>
<el-menu-item index="/match/list/0">SIGN UP</el-menu-item>
<el-menu-item index="/saiC">COMPETITIONS</el-menu-item>
<el-menu-item index="/meta">MEDIA</el-menu-item>
<el-menu-item index="/guide">GUIDELINE</el-menu-item>
<el-sub-menu index="/about">
<template #title>CONTACT & MORE</template>
<el-menu-item index="/about/wuDao">About Us</el-menu-item>
<el-menu-item index="/about/regulations">Rules & Regulations</el-menu-item>
<el-menu-item index="/about/culture">Culture</el-menu-item>
<template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>
<el-menu-item index="/about/wuDao">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>
<el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>
<el-menu-item index="/about/culture">{{ language==0?'地方文化':'Culture' }}</el-menu-item>
</el-sub-menu>
</el-menu>
</div>
......@@ -49,25 +30,19 @@
<el-button :icon="Search" circle @click="searchNews" />
</div>
<div class="languageBtn">
<span v-if="language==0" :class="language==0?'active':''" @click="changeLanguage(0)">中文</span>
<span v-else :class="language==0?'active':''" @click="changeLanguage(0)">CN</span>
<span :class="language==0?'active':''" @click="changeLanguage(0)">{{ language==0?'中文':'CN' }}</span>
|
<span :class="language==1?'active':''" @click="changeLanguage(1)">EN</span>
</div>
<div class="ml20 forPc" >
<el-button v-if="!isLogin" style="border-radius: 20px;" class="loginBtn">
<span v-if="language==0" @click="goLogin">登录</span>
<span v-if="language==1" @click="goLogin">LOGIN</span>
<span @click="goLogin">{{ language==0?'登录':'LOGIN' }}</span>
<!-- | &nbsp;<span @click="goRegister">注册</span>-->
</el-button>
<el-button v-if="language==0&&isLogin" style="border-radius: 20px;" class="loginBtn">
<span @click="router.push('/center/myInfo')">个人中心</span>
&nbsp;&nbsp;<span @click="logout()">退出</span>
</el-button>
<el-button v-if="language==1&&isLogin" style="border-radius: 20px;" class="loginBtn">
<span @click="router.push('/center/myInfo')">Personal</span>
&nbsp;&nbsp;<span @click="logout()">Exit</span>
<el-button v-if="isLogin" style="border-radius: 20px;" class="loginBtn">
<span @click="router.push('/center/myInfo')">{{ language==0?'个人中心':'Personal' }}</span>
&nbsp;&nbsp;<span @click="logout()">{{language==0?'退出':'Exit'}}</span>
</el-button>
</div>
</div>
......
......@@ -522,10 +522,16 @@ export const constantRoutes = [
meta: { title: '我的报名' }
},
{
path: 'myTrain',
component: () => import('@/viewsPc/center/myTrain'),
name: 'myTrain',
path: 'myReservation',
component: () => import('@/viewsPc/center/myReservation'),
name: 'myReservation',
meta: { title: '我的预定' }
},
{
path: 'mySms',
component: () => import('@/viewsPc/center/mySms'),
name: 'mySms',
meta: { title: '系统消息' }
}
]
}
......
......@@ -278,6 +278,12 @@ export const constantRoutes = [
redirect: '/match/list',
children: [
{
path: 'pay',
component: () => import('@/viewsPc/match/pay'),
name: 'signPay',
meta: { title: '缴费清单' }
},
{
path: 'list',
component: () => import('@/viewsPc/match/index'),
name: 'matchList',
......@@ -324,6 +330,12 @@ export const constantRoutes = [
component: () => import('@/viewsPc/match/expenseDetails'),
name: 'expenseDetails',
meta: { title: '费用明细' }
},
{
path: 'list/:id/signPreview',
component: () => import('@/viewsPc/match/signPreview'),
name: 'signPreview',
meta: { title: '提交审核' }
}
]
},
......@@ -391,26 +403,43 @@ export const constantRoutes = [
meta: { title: '个人中心' }
},
{
path: 'myTeam',
component: () => import('@/viewsPc/center/teamInfo'),
name: 'myTeam',
meta: { title: '我的团队' }
path: 'myPassword',
component: () => import('@/viewsPc/center/myPassword'),
name: 'myPassword',
meta: { title: '修改密码' }
},
{
path: 'myCertification',
component: () => import('@/viewsPc/center/myCertification'),
name: 'myCertification',
meta: { title: 'institutional accreditation' }
},
{
path: 'myMember',
component: () => import('@/viewsPc/center/myMember'),
name: 'myMember',
meta: { title: 'Player Management' }
},
{
path: 'myMatch',
component: () => import('@/viewsPc/center/myMatch'),
name: 'myMatch',
meta: { title: '我的赛事' }
meta: { title: 'My registration' }
},
{
path: 'myReservation',
component: () => import('@/viewsPc/center/myReservation'),
name: 'myReservation',
meta: { title: 'My reservation' }
},
{
path: 'myTrain',
component: () => import('@/viewsPc/center/myTrain'),
name: 'myTrain',
meta: { title: '我的培训' }
path: 'mySms',
component: () => import('@/viewsPc/center/mySms'),
name: 'mySms',
meta: { title: 'System messages' }
}
]
}
]
}]
}
]
......
......@@ -14,6 +14,7 @@ import { saveAs } from 'file-saver'
import useUserStore from '@/store/modules/user'
import { sendNotification } from '@/assets/lib/extend'
import _ from 'lodash'
const language = cache.local.get('language') || 0
let downloadLoadingInstance
// 是否显示重新登录
......@@ -21,7 +22,7 @@ export const isRelogin = { show: false }
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 对应国际化资源文件后缀
axios.defaults.headers['Content-Language'] = 'zh_CN'
axios.defaults.headers['Content-Language'] = (language==0? 'zh_CN':'en_US' )
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
......
......@@ -4,7 +4,7 @@
<el-row :gutter="20">
<el-col :lg="5" :md="5" :xl="6" :sm="8" :xs="8">
<el-card class="mb20">
<div class="center-menu">
<div :class="language==0?'center-menu':'center-menu en-menu'">
<ul v-if="user.utype=='2'">
<li
v-for="(m, i) in menus"
......@@ -13,7 +13,7 @@
>
<a href="javascript:void(0)" @click="toInfo(m)">
<img :src="m.isActive ? m.picUrl2 : m.picUrl1">
{{ m.name }}
{{m.name}}
</a>
</li>
</ul>
......@@ -46,6 +46,8 @@ import {useRoute, useRouter} from 'vue-router'
import {onMounted} from '@vue/runtime-core'
import useUserStore from '@/store/modules/user'
import _ from 'lodash'
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const route = useRoute()
const router = useRouter()
......@@ -53,50 +55,50 @@ const router = useRouter()
const user = ref({})
const menus = ref([
{
name: '基础信息',
name: language.value==0?'基础信息':'Basic Information',
routeName: 'myInfo',
picUrl1: '/img/nav_26.png',
picUrl2: '/img/nav_26_dwn.png',
isActive: false
},
{
name: '修改密码',
name: language.value==0?'修改密码':'Change Password',
routeName: 'myPassword',
picUrl1: '/img/nav_27.png',
picUrl2: '/img/nav_27_dwn.png',
isActive: false
},
{
name: '团队认证',
name: language.value==0?'团队认证':'Institutional Accreditation',
routeName: 'myCertification',
picUrl1: '/img/nav_32.png',
picUrl2: '/img/nav_32_dwn.png',
isActive: false
},
{
name: '选手管理',
name: language.value==0?'选手管理':'Player Management',
routeName: 'myMember',
picUrl1: '/img/nav_31.png',
picUrl2: '/img/nav_31_dwn.png',
isActive: false
},
{
name: '我的报名',
name: language.value==0?'我的报名':'My Eegistration',
routeName: 'myMatch',
picUrl1: '/img/nav_28.png',
picUrl2: '/img/nav_28_dwn.png',
isActive: false
},
{
name: '我的预定',
routeName: 'myMatch',
name: language.value==0?'我的预定':'My Reservation',
routeName: 'myReservation',
picUrl1: '/img/nav_29.png',
picUrl2: '/img/nav_29_dwn.png',
isActive: false
},
{
name: '系统消息',
routeName: 'myTrain',
name: language.value==0?'系统消息':'System messages',
routeName: 'mySms',
picUrl1: '/img/nav_30.png',
picUrl2: '/img/nav_30_dwn.png',
isActive: false
......@@ -104,36 +106,36 @@ const menus = ref([
])
const menusPersonal = ref([
{
name: '基础信息',
name: language.value==0?'基础信息':'Basic Information',
routeName: 'myInfo',
picUrl1: '/img/nav_26.png',
picUrl2: '/img/nav_26_dwn.png',
isActive: false
},
{
name: '修改密码',
name: language.value==0?'修改密码':'Change Password',
routeName: 'myPassword',
picUrl1: '/img/nav_27.png',
picUrl2: '/img/nav_27_dwn.png',
isActive: false
},
{
name: '我的报名',
name: language.value==0?'我的报名':'My Eegistration',
routeName: 'myMatch',
picUrl1: '/img/nav_28.png',
picUrl2: '/img/nav_28_dwn.png',
isActive: false
},
{
name: '我的预定',
routeName: 'myMatch',
name: language.value==0?'我的预定':'My Reservation',
routeName: 'myReservation',
picUrl1: '/img/nav_29.png',
picUrl2: '/img/nav_29_dwn.png',
isActive: false
},
{
name: '系统消息',
routeName: 'myTrain',
name: language.value==0?'系统消息':'System messages',
routeName: 'mySms',
picUrl1: '/img/nav_30.png',
picUrl2: '/img/nav_30_dwn.png',
isActive: false
......@@ -174,12 +176,18 @@ const toInfo = (item) => {
li {
margin-bottom: 15px;
}
&.en-menu{text-align: left;
li{padding: 6px 0 6px 14px;
a{display: flex;align-items: center;}
}
img{padding: 0;width: 26px;}
}
}
li img {
display: inline-block;
vertical-align: middle;
margin-right: 20px;
margin-right: 10px;
padding: 5px;
}
......
<template>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">团队认证</h3></div>
<el-card :body-style="{'padding':'0'}" class="mb20">
<div class="indexTitle">
<h3 class="leftboderTT">{{ language==0?'团队认证':'Institutional Accreditation' }}</h3>
</div>
<div class="pd20">
<el-form :model="form" label-width="160px">
<el-form :model="form" label-width="160px" :label-position="language==0?'left':'top'">
<fieldset class="fieldset-form">
<legend>机构类型</legend>
<legend>{{ language==0?'机构类型':'Institution Type' }}</legend>
<div class="pt30">
<el-form-item label="选择机构类型" required>
<el-form-item :label="language==0?'选择机构类型':'Select institution type'" required>
<el-radio-group v-model="form.type">
<el-radio-button label="0">普通院校</el-radio-button>
<el-radio-button label="1">专业舞蹈学校</el-radio-button>
<el-radio-button label="2">培训机构/俱乐部</el-radio-button>
<el-radio-button label="3">地方协会</el-radio-button>
<el-radio-button label="4">国家协会</el-radio-button>
<el-radio-button label="0">{{ language==0?'普通院校':'School' }}</el-radio-button>
<el-radio-button label="1">{{ language==0?'专业舞蹈学校':'Professional dance school' }}</el-radio-button>
<el-radio-button label="2">{{ language==0?'培训机构/俱乐部':'Company/Club' }}</el-radio-button>
<el-radio-button label="3">{{ language==0?'地方协会':'Local Association' }}</el-radio-button>
<el-radio-button label="4">{{ language==0?'国家协会':'National Association' }}</el-radio-button>
</el-radio-group>
</el-form-item>
</div>
</fieldset>
<fieldset class="fieldset-form mt30">
<legend>机构基础信息 </legend>
<legend>{{ language==0?'机构基础信息':'Institutional Basic Information' }} </legend>
<div class="pt30" style="max-width: 500px">
<el-form-item label="所属国家" required>
<el-form-item :label="language==0?'所属国家':'Nationality'" required>
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" />
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="详细地址" required prop="address">
<el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
style="width: 100%;"
:options="regionsList"
:props="{ label:'text' }"
/>
<el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
<el-input type="textarea" v-model="form.address" class="mt10"/>
</el-form-item>
<el-form-item label="机构名称" required prop="name">
<el-input type="text" v-model="form.name" placeholder="请输入内容"/>
<el-form-item :label="language==0?'机构名称':'Team Name'" required prop="name">
<el-input type="text" v-model="form.name" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="联系人姓名" required prop="contactPerson">
<el-input type="text" v-model="form.contactPerson" placeholder="请输入内容"/>
<el-form-item :label="language==0?'联系人姓名':'Contact Person'" required prop="contactPerson">
<el-input type="text" v-model="form.contactPerson" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="联系人电话" required prop="contactTelno">
<el-input v-model="form.contactTelno" type="phone" placeholder="请输入内容"/>
<el-form-item :label="language==0?'联系人电话':'Contact Phone'" required prop="contactTelno">
<el-input v-model="form.contactTelno" type="phone" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="联系人邮箱" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
<el-form-item :label="language==0?'联系人邮箱':'Contact Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
</div>
</fieldset>
<fieldset class="fieldset-form mt30">
<legend>机构认证信息 </legend>
<legend>{{ language==0?'机构认证信息':'Institutional certification information' }} </legend>
<div class="pt30" style="max-width: 500px">
<el-form-item label="机构代码" required prop="orgCode">
<el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/>
<el-form-item :label="language==0?'机构代码':'Organization Code'" required prop="orgCode">
<el-input type="text" v-model="form.orgCode" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="机构证件" required prop="orgCert">
<file-upload v-model="form.orgCert"/>
<el-form-item :label="language==0?'机构证件':'Institutional documents'" required prop="orgCert">
<file-upload v-model="form.orgCert" :button-text="language==0?'上传文件':'Upload'"/>
</el-form-item>
</div>
</fieldset>
<fieldset class="fieldset-form mt30">
<legend>机构法人信息 </legend>
<legend>{{ language==0?'机构法人信息':'Institutional legal person information' }} </legend>
<div class="pt30" style="max-width: 500px">
<el-form-item label="法人姓名" required prop="orgCode">
<el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/>
<el-form-item :label="language==0?'法人姓名':'Legal Person Name'" required prop="orgCode">
<el-input type="text" v-model="form.orgCode" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="法定代表人身份文件" required prop="orgCert">
<file-upload v-model="form.orgCert"/>
<el-form-item :label="language==0?'法定代表人身份文件':'Identity documents of the legal representative'" required prop="orgCert">
<file-upload v-model="form.orgCert" :button-text="language==0?'上传文件':'Upload'"/>
</el-form-item>
</div>
......@@ -77,7 +79,7 @@
</el-form>
<div class="text-center mt30">
<el-button type="primary" class="btn-lineG w200px" round>提交审核</el-button>
<el-button type="primary" class="btn-lineG w200px" round>{{ language==0?'提交审核':'Submit' }}</el-button>
</div>
</div>
</el-card>
......@@ -91,9 +93,12 @@ import {useRouter} from 'vue-router'
import {ElMessage, ElMessageBox} from 'element-plus'
import FileUpload from "@/components/FileUpload";
import * as match from "@/apiPc/match";
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const form = ref({})
const regionsList = ref([])
const countryList = ref([])
function submit() {
commitAudit().then(res => {
......@@ -101,9 +106,15 @@ function submit() {
}
onMounted(() => {
getCountryList()
getRegionsList()
getData()
})
function getCountryList() {
match.countryList().then(res => {
countryList.value = res.data
})
}
function getRegionsList() {
match.regionsList().then(res => {
regionsList.value = res.data
......
<template>
<div>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">机构基础信息</h3></div>
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'机构基础信息':'Institutional Basic Information' }}</h3></div>
<!-- uType字段 1 是个人 2是团体-->
<!-- {{user}}-->
<team-info :form="myform" v-if="user.utype=='2'"/>
<team-info :form="myform" :language="language" v-if="user.utype=='2'"/>
</el-card>
......@@ -20,7 +20,8 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { nationList } from '@/assets/js/data'
import {getGroupInfo} from "@/apiPc/match";
import TeamInfo from "@/viewsPc/center/teamInfo";
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const router = useRouter()
const { proxy } = getCurrentInstance()
const props = defineProps({
......
<template>
<el-card>
<div class="grid-content">
<!-- <el-tabs v-model="activeName">-->
<!-- <el-tab-pane label="报项" name="first">-->
<div class="pad20">
<el-form :model="query" :inline="true">
<el-form-item label="赛事名称">
<el-input v-model="query.name" style="width: 214px;" @change="getList" />
</el-form-item>
<el-form-item label="赛事时间">
<el-date-picker
v-model="cptPeriodArr"
format="YYYY-MM-DD" type="daterange"
value-format="YYYY-MM-DD" range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
@change="getList"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getList">查询</el-button>
<el-button type="info" @click="reset(query)">重置</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData" style="width: 100%">
<el-table-column type="index" label="序号" width="80" align="center" />
<el-table-column label="赛事名称" min-width="260">
<template #default="scope">
{{ scope.row.name }}
</template>
</el-table-column>
<el-table-column label="参赛队" min-width="260">
<template #default="scope">
<span v-if="scope.row.groupName">{{ scope.row.groupName }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="赛事开始时间" min-width="120">
<template #default="scope">{{ scope.row.beginTime.substring(0, 10) }}</template>
</el-table-column>
<el-table-column label="赛事结束时间" min-width="120">
<template #default="scope">{{ scope.row.endTime.substring(0, 10) }}</template>
</el-table-column>
<el-table-column label="审批状态" min-width="100" align="center">
<template #default="scope">
<el-tag v-if="scope.row.auditStatus=='1'" type="info">已提交</el-tag>
<el-tag v-if="scope.row.auditStatus=='2'" type="success">审核通过</el-tag>
<el-tag v-if="scope.row.auditStatus=='3'" type="danger">未通过</el-tag>
<el-tag v-if="scope.row.auditStatus=='4'" type="warning">已取消</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="180">
<template #default="scope">
<el-button v-if="scope.row.auditStatus!='0'" type="text" @click="downloadVoucher(scope.row)">
下载报名凭证
</el-button>
<el-button type="text" @click="signRow(scope.row)">详情</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
v-model:page="query.pageNum"
v-model:limit="query.pageSize"
:total="total"
@pagination="getList"
/>
</div>
<!-- </el-tab-pane>-->
<!-- <el-tab-pane label="订单" name="two">-->
<!-- <div class="pad20">-->
<!-- <el-form :model="query2" :inline="true">-->
<!-- <el-form-item label="订单状态">-->
<!-- <el-select v-model="query2.payStatus" @change="getBillList">-->
<!-- <el-option value="" label="全部" />-->
<!-- <el-option value="0" label="待支付" />-->
<!-- <el-option value="3" label="已完成" />-->
<!-- <el-option value="5" label="已退回" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="支付方式">-->
<!-- <el-select v-model="query2.payTypeParam" @change="getBillList">-->
<!-- <el-option value="" label="全部">全部</el-option>-->
<!-- <el-option value="0" label="线上支付">线上支付</el-option>-->
<!-- <el-option value="1" label="线下支付">线下支付</el-option>-->
<!-- <el-option value="2" label="会员卡支付">会员卡支付</el-option>-->
<!-- <el-option value="3" label="微信支付">微信支付</el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="订单号">-->
<!-- <el-input v-model="query2.code" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="订单名称">-->
<!-- <el-input v-model="query2.cptName" style="width: 214px;" @change="getBillList" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="付款时间">-->
<!-- <el-date-picker-->
<!-- v-model="payTimeArr"-->
<!-- format="YYYY-MM-DD" type="daterange"-->
<!-- value-format="YYYY-MM-DD" range-separator="至"-->
<!-- start-placeholder="开始时间"-->
<!-- end-placeholder="结束时间"-->
<!-- @change="getBillList"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="下单时间">-->
<!-- <el-date-picker-->
<!-- v-model="commitTimeArr"-->
<!-- format="YYYY-MM-DD" type="daterange"-->
<!-- value-format="YYYY-MM-DD" range-separator="至"-->
<!-- start-placeholder="开始时间"-->
<!-- end-placeholder="结束时间"-->
<!-- @change="getBillList"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" @click="getBillList">查询</el-button>-->
<!-- <el-button type="info" @click="reset(query2)">重置</el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-table v-if="billList.length>0" :data="billList" style="width: 100%">-->
<!-- &lt;!&ndash; <el-table-column type="selection" width="80" />&ndash;&gt;-->
<!-- <el-table-column prop="id" label="订单编号" min-width="200" />-->
<!-- <el-table-column prop="cptName" label="订单名称" min-width="200" />-->
<!-- <el-table-column prop="commitTime" label="下单时间" min-width="180" />-->
<!-- <el-table-column prop="payTime" label="付款时间" min-width="180" />-->
<!-- <el-table-column label="支付金额" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
<!-- <span v-else>¥{{ scope.row.totalAmount }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- &lt;!&ndash; <el-table-column label="已付金额" min-width="120" align="center">&ndash;&gt;-->
<!-- &lt;!&ndash; <template #default="scope">&ndash;&gt;-->
<!-- &lt;!&ndash; <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>&ndash;&gt;-->
<!-- &lt;!&ndash; <span v-else-if="scope.row.totalPayAmount" class="orange">¥{{ scope.row.totalPayAmount }}</span>&ndash;&gt;-->
<!-- &lt;!&ndash; <span v-else>&#45;&#45;</span>&ndash;&gt;-->
<!-- &lt;!&ndash; </template>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
<!-- <el-table-column label="付款方式" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- <span v-if="scope.row.payType=='0'">会员卡支付</span>-->
<!-- <span v-else-if="scope.row.payType=='1'">微信支付</span>-->
<!-- <span v-else-if="scope.row.payType=='2'">线下支付</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="name" label="支付状态" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
<!-- <div v-else>-->
<!-- <span v-if="scope.row.payStatus=='0'">待支付</span>-->
<!-- <span v-if="scope.row.payStatus=='1'">待核销</span>-->
<!-- <span v-if="scope.row.payStatus=='2'">付款中</span>-->
<!-- <span v-if="scope.row.payStatus=='3'" class="green">已完成</span>-->
<!-- <span v-if="scope.row.payStatus=='4'">退款中</span>-->
<!-- <span v-if="scope.row.payStatus=='5'" class="text-danger">已退回</span>-->
<!-- <span v-if="scope.row.payStatus=='6'">退款核销中</span>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="name" label="审核状态" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- &lt;!&ndash; 待核销,待审核,审核拒绝,审核通过,已取消&ndash;&gt;-->
<!-- <span v-if="scope.row.auditStatus=='1'" class="text-warning">审核中</span>-->
<!-- <span v-if="scope.row.auditStatus=='2'" class="green">审核通过</span>-->
<!-- <span v-if="scope.row.auditStatus=='3'" class="text-danger">审核拒绝</span>-->
<!-- <span v-if="scope.row.auditStatus=='4'">已取消</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="150">-->
<!-- <template #default="scope">-->
<!-- <el-button type="text" @click="billDetail(scope.row)">详情</el-button>-->
<!-- <el-button-->
<!-- v-if="scope.row.payType!='2'&&scope.row.payStatus=='0'&&scope.row.auditStatus=='0'" type="text"-->
<!-- @click="goPay(scope.row)"-->
<!-- >支付-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- v-if="scope.row.payStatus=='0'&&scope.row.auditStatus=='0'&&scope.row.payType!='2'" type="text"-->
<!-- @click="cancelBill(scope.row)"-->
<!-- >取消-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- <el-empty v-if="billList.length==0" description="暂无数据" />-->
<!-- <pagination-->
<!-- v-show="total > 0"-->
<!-- v-model:page="query2.pageNum"-->
<!-- v-model:limit="query2.pageSize"-->
<!-- :total="total2"-->
<!-- @pagination="getBillList"-->
<!-- />-->
<!-- </div>-->
<!-- </el-tab-pane>-->
<!-- </el-tabs>-->
<!-- 报项详情-->
<dialogModifySign :props="dialogModifySignProps" />
<!-- 订单详情-->
<dialogModifyBill :props="dialogModifyBillProps" />
<el-dialog v-model="payPop" title="请选择支付方式" width="720px">
<div class="centerPrice">
¥<span>{{ nowBill?.totalAmount }}</span>
<el-card class="mb20">
<div class="pad20">
<el-form :model="query" :inline="true">
<el-form-item label="赛事名称">
<el-input v-model="query.name" style="width: 214px;" @change="getList"/>
</el-form-item>
<el-form-item label="赛事时间">
<el-date-picker
v-model="cptPeriodArr"
format="YYYY-MM-DD" type="daterange"
value-format="YYYY-MM-DD" range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
@change="getList"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getList">查询</el-button>
<el-button type="info" @click="reset(query)">重置</el-button>
</el-form-item>
</el-form>
<div class="pd20">
<div class="matchItem" v-for="n in tableData" :key="n.id" @click="goDetail(n.id)">
<el-row :gutter="15">
<el-col :lg="6" :md="8" :xl="10">
<img class="mauto" :src="fillImgUrl(n.coverUrl)">
</el-col>
<el-col :lg="18" :md="16" :xl="14">
<div class="info">
<h3>{{ n.name }}</h3>
<p class="ppl"><label>比赛时间:</label>{{ n.beginTime?.slice(0, 10) }}{{ n.endTime?.slice(0, 10) }}
</p>
<p class="ppl"><label>&ensp;&ensp;&ensp;&ensp;点:</label>{{ n.address }}</p>
<p class="ppl"><label>报名截止:</label>{{ n.signEndTime?.slice(0, 10) }}</p>
<p class="ppl"><label>联系人员:</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>联系电话:</label>{{ n.contactTelno }}</p>
<p class="ppl"><label>&ensp;&ensp;&ensp;&ensp;箱:</label>{{ n.contactEmail }}</p>
</div>
</el-col>
</el-row>
</div>
<div style="margin: 40px">
<el-radio-group v-model="payType">
<el-radio v-if="myBalance>'0'" label="0" size="large" border><img
src="@/assets/img/zf02.png"
style="width: 30px;"
>
会员卡支付<span>(余额 <i class="orange">¥{{ myBalance }}</i>)</span>
</el-radio>
<el-radio label="1" size="large" border><img src="@/assets/img/zf_wx.png">微信</el-radio>
<el-radio label="2" size="large" border><img src="@/assets/img/zf_xj.png">线下支付</el-radio>
</el-radio-group>
</div>
<div class="panel-footer text-center">
<el-button type="success" round @click="payBill">立即支付</el-button>
</div>
</el-dialog>
<el-dialog v-model="showOrganizerInfo" title=" 线下支付" width="400px">
<ul class="orgbox">
<li>单位:{{ org.organizerName }}</li>
<li>开户行:{{ org.organizerBank }}</li>
<li>账户:{{ org.organizerAccount }}</li>
<li>打款金额:<span class="orange">¥{{ org.organizerFee }}</span></li>
</ul>
<div class="text-center">
<el-button type="success" round @click="payMationDone">我已复制</el-button>
</div>
</el-dialog>
<el-dialog v-model="showResult">
<el-result
icon="success"
title="支付成功"
/>
</el-dialog>
<we-pay ref="wePayRef" @close="wePayDone" />
</div>
<el-table :data="tableData" style="width: 100%">
<el-table-column type="index" label="序号" width="80" align="center"/>
<el-table-column label="赛事名称" min-width="260">
<template #default="scope">
{{ scope.row.name }}
</template>
</el-table-column>
<el-table-column label="参赛队" min-width="260">
<template #default="scope">
<span v-if="scope.row.groupName">{{ scope.row.groupName }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="赛事开始时间" min-width="120">
<template #default="scope">{{ scope.row.beginTime.substring(0, 10) }}</template>
</el-table-column>
<el-table-column label="赛事结束时间" min-width="120">
<template #default="scope">{{ scope.row.endTime.substring(0, 10) }}</template>
</el-table-column>
<el-table-column label="审批状态" min-width="100" align="center">
<template #default="scope">
<el-tag v-if="scope.row.auditStatus=='1'" type="info">已提交</el-tag>
<el-tag v-if="scope.row.auditStatus=='2'" type="success">审核通过</el-tag>
<el-tag v-if="scope.row.auditStatus=='3'" type="danger">未通过</el-tag>
<el-tag v-if="scope.row.auditStatus=='4'" type="warning">已取消</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="180">
<template #default="scope">
<el-button v-if="scope.row.auditStatus!='0'" type="text" @click="downloadVoucher(scope.row)">
下载报名凭证
</el-button>
<el-button type="text" @click="signRow(scope.row)">详情</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
v-model:page="query.pageNum"
v-model:limit="query.pageSize"
:total="total"
@pagination="getList"
/>
</div>
<!-- 报项详情-->
<dialogModifySign :props="dialogModifySignProps"/>
<!-- 订单详情-->
<dialogModifyBill :props="dialogModifyBillProps"/>
</el-card>
</template>
<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import {ref} from 'vue'
import {useRouter} from 'vue-router'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import dialogModifySign from './component/modifySign'
import dialogModifyBill from './component/modifyBill'
import * as match from '@/apiPc/match'
import { ElMessage, ElMessageBox } from 'element-plus'
import {ElMessage, ElMessageBox} from 'element-plus'
import _ from 'lodash'
const router = useRouter()
const { proxy } = getCurrentInstance()
const {proxy} = getCurrentInstance()
const total = ref(0)
const total2 = ref(0)
const payMationDone = () => {
......@@ -286,7 +138,7 @@ const cptPeriodArr = ref([])
const payTimeArr = ref([])
const commitTimeArr = ref([])
const countryList = ref([])
const tableData = ref([])
const tableData = ref([{name: '111'}])
const billList = ref([])
const query = ref({
pageNum: 1,
......@@ -305,8 +157,6 @@ const nowBill = ref({})
const org = ref({})
onMounted(() => {
getCountryList()
getData()
getList()
getBillList()
})
......@@ -326,13 +176,6 @@ const reset = (form) => {
getList()
}
function getData() {
match.getMyPersonInfo().then(res => {
myform.value = res.data
myform.value.labelArr = myform.value.label?.split(',')
groupList.value = myform.value.groups
})
}
function wePayDone() {
payPop.value = false
......@@ -344,10 +187,10 @@ function getList() {
if (cptPeriodArr.value) {
query.value.cptPeriod = cptPeriodArr.value.toString()
}
match.getMySignCptList(query.value).then(res => {
tableData.value = res.rows
total.value = res.total
})
// match.getMySignCptList(query.value).then(res => {
// tableData.value = res.rows
// total.value = res.total
// })
}
function getBillList() {
......@@ -360,18 +203,12 @@ function getBillList() {
})
}
function getCountryList() {
match.countryList().then(res => {
countryList.value = res.data
})
}
function signRow(row) {
_.assign(dialogModifySignProps.value, dialogPropsBase, {
open: true,
isView: true,
title: '报项详情',
data: { ...row }
data: {...row}
})
}
......@@ -393,7 +230,7 @@ function payBill() {
ElMessage.error('请选择支付方式')
return
}
match.payMatch({ orderId: nowBill.value.id, payType: payType.value }).then(res => {
match.payMatch({orderId: nowBill.value.id, payType: payType.value}).then(res => {
if (payType.value == 2) {
org.value = res.data.org
showOrganizerInfo.value = true
......@@ -411,7 +248,7 @@ function billDetail(bill) {
open: true,
isView: true,
title: '订单详情',
data: { ...bill }
data: {...bill}
})
}
......@@ -432,12 +269,59 @@ function cancelBill(bill) {
function downloadVoucher(row) {
proxy.download(
`/ztx-match/pdf/getPayedOrderPdf/${row.id}/${row.groupId || 0}`, {}, '报项凭证.pdf'
`/ztx-match/pdf/getPayedOrderPdf/${row.id}/${row.groupId || 0}`, {}, '报项凭证.pdf'
)
}
</script>
<style scoped lang="scss">
.matchItem {
cursor: pointer;
margin: 0 0 20px;
padding: 0 0 20px;
background: #FFFFFF;
border-bottom: 1px solid #e5e5e5;
position: relative;
&:last-child {
border-bottom: none;
}
.el-avatar {
position: absolute;
left: 20px;
top: 30px;
img {
background: #fff;
}
}
.info {
p {
font-size: 14px;
}
}
.typeTag {
position: absolute;
right: 0;
top: 0;
}
h3 {
font-weight: 500;
margin: 0 0 10px;
font-size: 18px;
color: #000000;
text-overflow: ellipsis;
}
&:hover h3 {
color: var(--el-color-primary);
}
}
.centerPrice {
text-align: center;
font-size: 26px;
......@@ -449,13 +333,6 @@ function downloadVoucher(row) {
}
}
.app-container {
background: #F5F7F9;
}
.grid-content {
background: #fff;
}
:deep(.el-tabs__nav-wrap) {
padding: 0 15px;
......
<template>
<el-card>
<el-card class="mb20">
<div class="funcBtns">
<el-button type="primary" @click="addMember">添加选手</el-button>
<el-button type="primary" plain @click="importSportman">导入选手</el-button>
<el-button type="primary" @click="addMember">{{ language==0?'添加选手':'Add Player'}}</el-button>
<el-button type="primary" plain @click="importSportman">{{ language==0?'导入选手':'Import Player' }}</el-button>
<el-button type="primary" plain>
<a href="/file/sportsmanTemplate.xlsx" target="_blank">下载模板</a>
<a href="/file/sportsmanTemplate.xlsx" target="_blank">Download template</a>
</el-button>
</div>
<div class="from-Card">
<el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
<el-form-item label="姓名">
<el-form-item :label="language==0?'姓名':'Name'">
<el-input v-model="query.realName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="短名">
<el-form-item :label="language==0?'短名':'Short Name'">
<el-input v-model="query.shortName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="手机号码">
<el-form-item :label="language==0?'手机号码':'Phone Number'">
<el-input v-model="query.phone" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="邮箱">
<el-form-item :label="language==0?'邮箱':'E-mail'">
<el-input v-model="query.email" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="证件类型">
<el-form-item :label="language==0?'证件类型':'ID Type'">
<el-input v-model="query.idcType" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="证件号">
<el-form-item :label="language==0?'证件号码':'ID NO.'">
<el-input v-model="query.idcode" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="角色">
<el-input v-model="query.label" style="width: 120px;" clearable/>
<el-form-item :label="language==0?'会员角色':'Role'">
<el-select v-model="query.label" multiple>
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?(l.label):(l.enlabel)"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getList">查询</el-button>
<el-button type="primary" @click="getList">{{ language==0?'查询':'Search' }}</el-button>
</el-form-item>
</el-form>
</div>
<!-- 人员表格-->
<person-table :table-data="tableData" @edit="editCoach" @delete="delperson"/>
<el-table :data="tableData" class="mt20">
<el-table-column type="index" label="序号" width="80" align="center"/>
<el-table-column label="所属国家" prop="countryName"/>
<el-table-column label="姓氏" prop="xing"/>
<el-table-column label="名" prop="ming"/>
<el-table-column label="短名" prop="shortName"/>
<el-table-column label="性别" prop="sexStr"/>
<el-table-column label="年龄" prop="age"/>
<el-table-column label="出生日期" prop="birth" width="100"/>
<el-table-column label="手机号码" prop="phone" width="120"/>
<el-table-column label="邮箱" prop="email" width="150"/>
<el-table-column label="证件类型" prop="idcTypeStr"/>
<el-table-column label="证件号码" prop="idcCode" width="200"/>
<el-table-column label="会员角色">
<template #default="scope">
<span v-for="item in scope.row.label?.split(',')" :key="item.id">
<el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag>
<el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag>
<el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag>
<el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag>
<el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag>
<el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag>
<el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag>
</span>
</template>
</el-table-column>
<el-table-column label="详细地址" prop="address"/>
<el-table-column label="操作" fixed="right" width="160" header-align="center" align="center">
<template #default="scope">
<a class="text-primary pd10" @click="editCoach(scope.row)">编辑</a>
<a class="text-primary pd10" @click="delperson(scope.row)">删除</a>
</template>
</el-table-column>
</el-table>
<person-table :table-data="tableData" @edit="editCoach" @delete="delperson"/>
<paginationPc
v-show="total>0"
v-model:page="query.pageNum"
......@@ -100,20 +68,32 @@ import * as match from '@/apiPc/match'
import {ElMessage, ElMessageBox} from 'element-plus'
import {getGroupPersonList} from "@/apiPc/match";
import PersonTable from "@/viewsPc/match/components/personTable";
import cache from "@/plugins/cache";
import useUserStore from "@/store/modules/user";
const language = ref(cache.local.get('language') || 0)
const tableData = ref([])
const labels = ref([
{value: '0', label: '运动员', enlabel: 'Sportsman'},
{value: '1', label: '教练', enlabel: 'Coach'},
{value: '2', label: '领队', enlabel: 'Leader'},
{value: '3', label: '队医', enlabel: 'Nurse'},
{value: '4', label: '翻译', enlabel: 'Translator'},
{value: '5', label: '官员', enlabel: 'Official'},
{value: '6', label: '其他', enlabel: 'Other'}
])
const query = ref({
pageNum: 1, pageSize: 10
})
const total = ref(0)
const groupId = ref('1759813142128967681')
const group = useUserStore().group
const groupId = ref(group.id)
onMounted(() => {
getList(groupId.value)
})
function addMember() {
const params = {
title: '添加人员',
title: language.value==0?'添加人员':'Add',
id: 0,
groupId: groupId.value
}
......@@ -122,7 +102,7 @@ function addMember() {
function importSportman() {
const params = {
title: '批量导入选手',
title: language.value==0?'批量导入选手':'Import',
groupId: groupId.value
}
proxy.$refs['dialogImportProps'].open(params)
......@@ -135,23 +115,38 @@ function getList() {
})
}
function editCoach(row) {
function editCoach(row,title) {
const params = {
id: row.id,
groupId: row.groupId
groupId: row.groupId,
title: title
}
proxy.$refs['dialogAddCoach'].open(params)
}
function delperson(p) {
//删除团队下的人
ElMessageBox.confirm(`确定删除${p.realName}吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
let text = ''
let t = '提示'
let s = '确定'
let c = '取消'
let msg = '操作成功'
if (language.value==0){
text = `确定删除${p.realName}吗?`
} else {
text = `Delete ${p.realName}?`
t = 'Tips'
s = 'Confirm'
c = 'Cancel'
msg = ' Successful!'
}
ElMessageBox.confirm(text, t, {
confirmButtonText: s,
cancelButtonText: c,
type: 'warning'
}).then(() => {
match.delPerson(p.id).then(res => {
ElMessage.success('操作成功')
ElMessage.success(msg)
getList(groupId.value)
})
})
......
<template>
<div>
<div class="mb20">
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">修改密码</h3></div>
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'修改密码':'Change Password' }}</h3></div>
<div class="pd20">
<div class="d-form-border" style="margin-top: 0">
<el-form class="d-form" ref="pwdRef" :model="user" :rules="rules" label-width="120px"
<el-form class="d-form" ref="pwdRef" :model="user" :rules="rules"
label-width="120px" :label-position="language==0?'left':'top'"
style="max-width: 500px;margin: auto">
<el-form-item label="旧密码" prop="oldPassword">
<el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password/>
<el-form-item :label="language==0?'旧密码':'Old Password'" prop="oldPassword">
<el-input v-model="user.oldPassword" :placeholder="language==0?'请输入旧密码':''" type="password" show-password/>
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-input v-model="user.newPassword" placeholder="请设置8位以上大小写字母、数字、特殊符号" type="password"
<el-form-item :label="language==0?'新密码':'New Password'" prop="newPassword">
<el-input v-model="user.newPassword" :placeholder="language==0?'请设置8位以上大小写字母、数字、特殊符号':''" type="password"
show-password/>
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/>
<el-form-item :label="language==0?'确认密码':'Confirm Password'" prop="confirmPassword">
<el-input v-model="user.confirmPassword" :placeholder="language==0?'请确认新密码':''" type="password" show-password/>
</el-form-item>
</el-form>
</div>
<el-row justify="center">
<el-button type="primary" class="btn-lineG" @click="submit">保存</el-button>
<el-button type="primary" class="btn-lineG" @click="submit">{{ language==0?'保存':'Save' }}</el-button>
</el-row>
</div>
</el-card>
......@@ -33,6 +34,8 @@ import {updateUserPwd} from '@/api/system/user'
import useUserStore from '@/store/modules/user'
import {reactive, ref, getCurrentInstance} from 'vue'
import {validPassword} from '@/utils/validate'
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const show = ref(false)
const {proxy} = getCurrentInstance()
......
<template>
<div>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}</h3></div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0"/>
<div class="pd20"></div>
</el-card>
</div>
</template>
<script setup>
import cache from "@/plugins/cache";
import {onMounted} from "@vue/runtime-core";
const language = ref(cache.local.get('language') || 0)
const list = ref([])
</script>
<style scoped lang="scss">
.indexTitle {
margin: 20px 0 12px;
padding: 0 20px 15px;
border-bottom: 1px solid #e5e5e5;
h3 {
font-size: 16px;
color: var(--el-color-primary);
}
}
</style>
<template>
<div>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'系统消息':'System messages' }}</h3></div>
<ul>
<li v-for="(n,index) in list" :key="index">
<div class="dot"></div>
<h3>{{ n.title }}</h3>
<span>{{ n.time }}</span>
</li>
</ul>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0"/>
</el-card>
</div>
</template>
<script setup>
import cache from "@/plugins/cache";
import {onMounted} from "@vue/runtime-core";
const language = ref(cache.local.get('language') || 0)
const list = ref([])
onMounted(()=>{
getList()
})
const getList =()=>{
list.value = []
}
</script>
<style scoped lang="scss">
.indexTitle {
margin: 20px 0 12px;
padding: 0 20px 15px;
border-bottom: 1px solid #e5e5e5;
h3 {
font-size: 16px;
color: var(--el-color-primary);
}
}
ul{padding: 20px;
li{background: #FBFCFD;position: relative;padding: 20px 20px 20px 40px;margin-bottom: 18px;
cursor: pointer;
&:hover{
h3{color: var(--el-color-primary)}
}
.dot{position: absolute;width: 7px;
height: 7px;left: 20px;top: 24px;
background: #C5161E;
border-radius: 50%;}
h3{font-weight: 400;margin: 0;
font-size: 16px;
color: #29343C;}
span{font-weight: 400;display: inline-block;
font-size: 12px;margin: 10px 0 0;
color: #929AA0;}
}
}
</style>
......@@ -2,37 +2,37 @@
<div class="pd20">
<div class="d-form-border" style="margin-top: 0">
<el-form class="d-form" size="large" :model="form" ref="registerRef" :rules="registerRules" label-width="120"
style="max-width: 500px;margin: auto">
<el-form-item label="用户名">
:label-position="language==0?'left':'top'" style="max-width: 500px;margin: auto">
<el-form-item :label="language==0?'用户名':'Account'">
{{userName}}
</el-form-item>
<el-form-item label="所属国家" required>
<el-form-item :label="language==0?'所属国家':'Nationality'" required>
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" />
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="详细地址" required prop="address">
<el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
style="width: 100%;"
:options="regionsList"
:props="{ label:'text' }"
/>
<el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
<el-input type="textarea" v-model="form.address" class="mt10" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="机构名称" required prop="name">
<el-input type="text" v-model="form.name" placeholder="请输入内容"/>
<el-form-item :label="language==0?'机构名称':'Team Name'" required prop="name">
<el-input type="text" v-model="form.name" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="联系人姓名" required prop="contactPerson">
<el-input type="text" v-model="form.contactPerson" placeholder="请输入内容"/>
<el-form-item :label="language==0?'联系人姓名':'Contact Person'" required prop="contactPerson">
<el-input type="text" v-model="form.contactPerson" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="联系人电话" required prop="contactTelno">
<el-input v-model="form.contactTelno" type="phone" placeholder="请输入内容"/>
<el-form-item :label="language==0?'联系人电话':'Contact Phone'" required prop="contactTelno">
<el-input v-model="form.contactTelno" type="phone" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item label="联系人邮箱" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
<el-form-item :label="language==0?'联系人邮箱':'Contact Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item prop="imgUrl" required label="机构LOGO">
<el-form-item prop="imgUrl" required :label="language==0?'机构Logo':'Group Logo'">
<ImageUpload2
v-model="form.imgUrl" :crop-height="200" :crop-width="200" :limit="1"
:is-show-tip="false"
......@@ -41,7 +41,7 @@
</el-form>
</div>
<div class="text-center">
<el-button type="primary" class="btn-lineG" round @click="save">确定修改</el-button>
<el-button type="primary" class="btn-lineG" round @click="save">{{ language==0?'确定修改':'Save' }}</el-button>
</div>
</div>
......@@ -62,6 +62,10 @@ const props = defineProps({
form:{
type:Object,
required:true
},
language:{
type:Number,
required:true
}
})
const countryList = ref([])
......
......@@ -3,12 +3,7 @@
<div class="box ph-30">
<el-card>
<el-steps :active="activeStep" align-center>
<el-step :title="language==0?'团队信息':'Team Information'" />
<el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" />
<el-step :title="language==0?'选手报名':'Participant Registration'" />
<el-step :title="language==0?'提交审核':'Submit for review'" />
</el-steps>
<team-sign-step :activeStep="activeStep" :language="language"/>
</el-card>
<el-row class="mt20" :gutter="20">
......@@ -17,7 +12,9 @@
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag01.png"/>
教练<span class="tip">(教练/领队,至少选择一项)</span>
{{ language==0?'教练':'Coach' }}
<span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>
<span class="tip" v-else>(Coach/Team Leader, select at least one)</span>
</div>
</template>
<div class="chooseForm">
......@@ -40,7 +37,9 @@
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag02.png"/>
领队<span class="tip">(教练/领队,至少选择一项)</span>
{{ language==0?'领队':'Team leader' }}
<span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>
<span class="tip" v-else>(Coach/Team Leader, select at least one)</span>
</div>
</template>
<div class="chooseForm">
......@@ -63,7 +62,7 @@
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag03.png"/>
队医
{{ language==0?'队医':'Team doctor' }}
</div>
</template>
<div class="chooseForm">
......@@ -86,7 +85,7 @@
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag04.png"/>
翻译
{{ language==0?'翻译':'Translator' }}
</div>
</template>
<div class="chooseForm">
......@@ -109,7 +108,7 @@
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag05.png"/>
官员
{{ language==0?'官员':'Official' }}
</div>
</template>
<div class="chooseForm">
......@@ -132,7 +131,7 @@
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag06.png"/>
其他
{{ language==0?'其他':'Other' }}
</div>
</template>
<div class="chooseForm">
......@@ -153,8 +152,8 @@
</el-row>
<el-card class="mt20">
<div class="text-center">
<el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="goNext()">下一步</el-button>
<el-button type="primary" class="w200px" plain round @click="goPrev()">{{ language==0?'上一步':'Go back' }}</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="goNext()">{{language==0?'下一步':'Next'}}</el-button>
</div>
</el-card>
......@@ -171,7 +170,8 @@ import {ref, reactive} from 'vue'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import dialogAddCoach from './components/addCoach'
import cache from '@/utils/cache'
import TeamSignStep from './components/teamSignStep'
import cache from "@/plugins/cache"
const {proxy} = getCurrentInstance()
const router = useRouter()
const route = useRoute()
......@@ -326,7 +326,7 @@ function goNext() {
}
})
})
} else if (signType.value == '1') {
} else {
// 团队报名
match.groupSignSavePerson(obj).then(res => {
router.push({
......
......@@ -2,12 +2,7 @@
<div>
<div class="box ph-30">
<el-card class="mb20">
<el-steps :active="activeStep" align-center>
<el-step title="团队信息"/>
<el-step title="教练/领队/其他"/>
<el-step title="选手报名"/>
<el-step title="提交审核"/>
</el-steps>
<team-sign-step :activeStep="activeStep" :language="language"/>
</el-card>
<el-card :body-style="{'padding-top': '0'}">
......@@ -15,8 +10,9 @@
<el-col :lg="8">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title">选择参赛运动员清单</h3>
<a class="fr" @click="emptyChoosed">清空</a>
<h3 class="panel-title" v-if="language==0">选择参赛运动员清单</h3>
<h3 class="panel-title" v-else>Select list of participating athletes</h3>
<a class="fr" @click="emptyChoosed">{{ language == 0 ? '清空' : 'Empty' }}</a>
</div>
<div class="panel-body">
<div class="chooseForm">
......@@ -27,10 +23,10 @@
<el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
<el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit/>
</el-icon>
<p class="name">{{ c.shortName }}({{ c.sexStr }})
<!-- <el-icon @click.stop="editPerson(c.id)">-->
<!-- <Edit/>-->
<!-- </el-icon>-->
<!-- <el-icon @click.stop="delthischoosed(c)">-->
<!-- <Delete/>-->
<!-- </el-icon>-->
......@@ -44,20 +40,21 @@
<el-col :lg="8">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title">选择一个参赛组合</h3>
<h3 class="panel-title" v-if="language==0">选择一个参赛组合</h3>
<h3 class="panel-title" v-else>Select a Participating team</h3>
</div>
<div class="panel-body">
<div class="chooseForm">
<el-checkbox-group v-model="choosedchoosed" @change="changechoosed">
<!-- v-show="choosedchoosed.indexOf(c.id) !== -1"-->
<!-- v-show="choosedchoosed.indexOf(c.id) !== -1"-->
<el-checkbox v-for="c in choosed2List" :label="c.id" checked>
<el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/>
<el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
<el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit/>
</el-icon>
<p class="name">{{ c.shortName }}({{ c.sexStr }})
<!-- <el-icon @click.stop="editPerson(c.id)">-->
<!-- <Edit/>-->
<!-- </el-icon>-->
</p>
</el-checkbox>
</el-checkbox-group>
......@@ -68,13 +65,27 @@
<el-col :lg="8">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title">可参与报名的项目</h3>
<h3 class="panel-title" v-if="language==0">可参与报名的项目</h3>
<h3 class="panel-title" v-else>Eligible Events for Registration</h3>
<div class="fr">
<el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList" clearable/>
<el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList"
clearable/>
</div>
</div>
<div class="panel-body" v-loading="loadingProject">
<el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228" description="无可选项目" />
<el-checkbox-group v-model="projectIds">
<el-checkbox class="w100" v-for="c in projectList" :label="c.id" :key="c.id">
<div class="flexBetween w100">
<div class="l">
{{ c.code }}:{{ c.name }}
<div>{{ c.danceTypeDetailStr }}</div>
</div>
<div class="text-primary">¥{{ c.serviceFee }}</div>
</div>
</el-checkbox>
</el-checkbox-group>
<el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228"
:description="language==0?'无可选项目':''"/>
</div>
</div>
</el-col>
......@@ -82,78 +93,77 @@
<el-row class="mt20">
<el-col :span="24">
<div class="text-center">
<el-button type="primary" class="btn-lineG w200px" round>确定</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="signUp">
{{ language == 0 ? '确定' : 'Confirm' }}
</el-button>
</div>
</el-col>
</el-row>
</el-card>
<el-card class="mt20" :body-style="{'padding-top': '0'}">
<div class="border-info mt20">
<el-row>
<el-col :lg="8">
<div class="item"><label>教练</label>
<span v-for="c in names.coachList">{{ c.shortName }}</span>
</div>
<div class="item"><label>翻译</label>
<span v-for="c in names.translatorList">{{ c.shortName }}</span>
</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>领队</label>
<span v-for="c in names.leaderList">{{ c.shortName }}</span>
</div>
<div class="item"><label>官员</label>
<span class="mr5" v-for="c in names.officialList">{{ c.shortName }}</span>
<span v-if="!names.officialList">--</span>
</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>队医</label><span class="mr5" v-for="c in names.teamDoctorList">{{
c.shortName
}}</span></div>
<div class="item"><label>其他</label><span class="mr5" v-for="c in names.otherList">{{
c.shortName
}}</span></div>
</el-col>
</el-row>
</div>
<div>
<el-card class="mt20" :body-style="{'padding': '0'}">
<coach-info-row :names="names" :language="language"/>
<div class="m20">
<!-- <el-button type="success" @click="importSportman">批量导入人员</el-button>-->
<!-- <el-button type="success" @click="addCoach">新增运动员</el-button>-->
<div class="fr mb20" @click="switchTabletype">
<el-button plain type="primary" :icon="Switch" v-if="tableType==1">按人员查看报项</el-button>
<el-button plain type="primary" :icon="Switch" v-else>按组别查看报项</el-button>
<div class="ttbb">
<div :class="tableType==1 ? 'active' : ''" @click="switchTabletype">{{ language == 0 ? '按组别查看报项' : 'View Entries by Group' }}</div>
<div :class="tableType==0 ? 'active' : ''" @click="switchTabletype">{{ language == 0 ? '按人员查看报项' : 'View Entries by Participant' }}</div>
</div>
<el-table :data="signInfoTable" border style="width: 100%" v-if="tableType==0">
<el-table-column label="运动员" width="240px">
<!-- <div class="fr mb20" @click="switchTabletype">-->
<!-- <el-button plain type="primary" :icon="Switch" v-if="tableType==1">-->
<!-- {{ language == 0 ? '按人员查看报项' : 'View Entries by Participant' }}-->
<!-- </el-button>-->
<!-- <el-button plain type="primary" :icon="Switch" v-else>-->
<!-- {{ language == 0 ? '按组别查看报项' : 'View Entries by Group' }}-->
<!-- </el-button>-->
<!-- </div>-->
<el-table :data="signInfoTable" border style="width: 100%" v-if="tableType==0">
<el-table-column :label="language==0?'所属国家':'Nationality'" prop="personInfo.countryName" min-width="100"/>
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="personInfo.xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="personInfo.ming" min-width="100"/>
<el-table-column :label="language==0?'短名':'Short Name'" prop="personInfo.shortName" min-width="110"/>
<el-table-column :label="language==0?'性别':'Gender'" prop="personInfo.sexStr"/>
<el-table-column :label="language==0?'年龄':'Age'" prop="personInfo.age"/>
<el-table-column :label="language==0?'出生日期':'Birth'" prop="personInfo.birth" width="110"/>
<el-table-column :label="language==0?'手机号码':'Phone Number'" prop="personInfo.phone" width="120"/>
<el-table-column :label="language==0?'邮箱':'E-mail'" prop="personInfo.email" width="150"/>
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="personInfo.idcTypeStr"/>
<el-table-column :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200"/>
<el-table-column :label="language==0?'会员角色':'Role'" width="150">
<template #default="scope">
<div style="display: flex;align-items: center;">
<!-- <el-image v-if="scope.row.personInfo.picUrl" style="width: 50px; height: 50px" fit="contain" :src="scope.row.personInfo.picUrl" />-->
<p>{{ scope.row.personInfo.shortName }}({{ scope.row.personInfo.sexStr }})</p>
<div class="esp">
<span v-for="item in scope.row.personInfo.label?.split(',')" :key="item.id" class="text-primary">
<span v-if="item==='0'" class="ml5">{{ language==0?'运动员':'athletes' }}</span>
<span v-if="item==='1'" class="ml5">{{ language==0?'教练':'coach' }}</span>
<span v-if="item==='2'" class="ml5">{{ language==0?'领队':'team leader' }}</span>
<span v-if="item==='3'" class="ml5">{{ language==0?'队医':'team doctor' }}</span>
<span v-if="item==='4'" class="ml5">{{ language==0?'翻译':'translator' }}</span>
<span v-if="item==='5'" class="ml5">{{ language==0?'官员':'official' }}</span>
<span v-if="item==='6'" class="ml5">{{ language==0?'其他':'other' }}</span>
</span>
</div>
</template>
</el-table-column>
<el-table-column label="报项">
<el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="personInfo.address" min-width="140"/>
<el-table-column :label="language==0?'报项':'Entries'" width="300">
<template #default="props">
<ol>
<li v-for="s in props.row.signInfo">
{{ s.cptProjectName }}
{{ s.cptGroupName }}{{ s.cptLevelName }}
<span v-show="s.cptSonLevelName">[{{ s.cptSonLevelName }}]</span>
{{ s.zu }}
<el-button type="text" @click="editThis(s)">编辑</el-button>
<span v-show="s.zu">-{{ s.zu }}</span>
<!-- <el-button type="text" @click="editThis(s)">{{ language == 0 ? '修改' : 'Edit' }}</el-button>-->
<!-- <el-button type="text" @click="editMates(s)">更换队友</el-button>-->
<el-button type="text" @click="removeThis(s.id)">删除</el-button>
<!-- <el-button type="text" @click="removeThis(s.id)">{{ language == 0 ? '删除' : 'Delete' }}</el-button>-->
</li>
</ol>
</template>
</el-table-column>
<el-table-column :label="language==0?'保险费':'Premium'" prop="insuranceFee"/>
<!-- 补充信息-->
<!-- <el-table-column v-for="(e,index) in extraTableHead" :key="index" :label="e">-->
<!-- <template #default="scope">-->
......@@ -164,42 +174,56 @@
<!-- <span v-else>{{ scope.row.signInfo[0].extraPersonInfoMapList[index]?.value }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="操作" fixed="right" width="150" align="center">
<el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="150" align="center">
<template #default="scope">
<el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)">
<span v-if="scope.row.extraPersonInfo">修改</span>
<span v-if="scope.row.extraPersonInfo">{{ language == 0 ? '修改' : 'Edit' }}</span>
<span v-else class="red">完善补充信息</span>
</el-button>
</template>
</el-table-column>
</el-table>
<el-table v-if="tableType==1" :data="signInfoTable" border style="width: 100%">
<el-table-column label="组别代码" width="120px">
<template #default="scope">
NO.1
</template>
</el-table-column>
<el-table-column label="组别" />
<el-table-column label="舞种" width="120px"/>
<el-table-column label="参赛说明" />
<el-table-column label="参赛运动员" width="120px"/>
<el-table-column label="报名费" width="120px"/>
<el-table-column label="操作" fixed="right" width="150" align="center">
<template #default="scope">
<el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)">
<span v-if="scope.row.extraPersonInfo">修改</span>
<span v-else class="red">完善补充信息</span>
</el-button>
<el-button type="text" @click="goPersonInfo(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="text-center mt20">
<el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">预览报名信息</el-button>
<el-table v-if="tableType==1" :data="zuTable" border style="width: 100%">
<el-table-column :label="language==0?'组别代码':'Group code'" width="120px" prop="zuName"/>
<el-table-column :label="language==0?'组别':'Group'" prop="project.name"/>
<el-table-column :label="language==0?'舞种':'Dance Style'" width="120px" prop="project.danceType"/>
<el-table-column :label="language==0?'参赛说明':'Participation Instructions'" prop="project.remarks"/>
<el-table-column :label="language==0?'参赛运动员':'Participating athletes'" width="120px">
<template #default="scope">
<div>
<span v-for="s in scope.row.athletes">{{ s.name }},</span>
</div>
</template>
</el-table-column>
<el-table-column :label="language==0?'报名费':'Registration Fee'" width="120px" prop="">
<template #default="scope">
<div class="text-primary">
¥{{scope.row.project.serviceFee}}
</div>
</template>
</el-table-column>
<el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="150" align="center">
<template #default="scope">
<!-- <el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)">-->
<!-- <span v-if="scope.row.extraPersonInfo">{{ language == 0 ? '修改' : 'Edit' }}</span>-->
<!-- <span v-else class="red">-->
<!-- {{language == 0 ? '完善补充信息' : 'Complete Supplementary Information'}}</span>-->
<!-- </el-button>-->
<el-button type="text" @click="removeThis(scope.row.id)">{{ language == 0 ? '删除' : 'Delete' }}</el-button>
</template>
</el-table-column>
</el-table>
<div class="text-center mt20">
<el-button type="primary" class="w200px" plain round @click="goPrev()">
{{ language == 0 ? "上一步" : 'Go back' }}
</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">
{{ language == 0 ? '预览报名信息' : 'Preview registration information' }}
</el-button>
</div>
</div>
</div>
</el-card>
</div>
......@@ -212,23 +236,23 @@
<dialogImport ref="dialogImportProps" @submitForm="getMySignInfo"/>
<el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false">
<el-result icon="success" title="报名成功">
<el-result icon="success" :title="language==0?'报名成功':'Sign up successful'">
<template #extra>
<el-button type="primary" @click="downloadVoucher">下载凭证</el-button>
<el-button type="primary" @click="goMySign">查看报项</el-button>
<el-button type="primary" @click="goMySign">{{ language == 0 ? '查看报项' : 'View Entries' }}</el-button>
</template>
</el-result>
</el-dialog>
<!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>-->
<!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>-->
<dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/>
</div>
</template>
<script setup>
import {ref, reactive} from 'vue'
import {ref, reactive, toRefs} from 'vue'
import * as match from '@/apiPc/match'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import dialogAddCoach from './components/addCoach'
......@@ -238,16 +262,26 @@ import dialogImport from './components/import'
import dialogChangeCoach from './components/changeCoach'
import dialogExtraForm from './components/extraForm'
import dialogMates from './components/dialogMates'
import {Search,Switch} from "@element-plus/icons-vue";
import {Search, Switch} from "@element-plus/icons-vue";
const {proxy} = getCurrentInstance()
const router = useRouter()
const route = useRoute()
import _ from 'lodash'
import {ElMessage, ElMessageBox} from 'element-plus'
import cache from "@/plugins/cache"
import TeamSignStep from "@/viewsPc/match/components/teamSignStep";
import {getProjectPageByPerIds} from "@/apiPc/match";
import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row";
const language = ref(cache.local.get('language') || 0)
const data = reactive({
coachForm: {}, activeStep: 2,
tableData: [], signInfoTable: [], choosedList: [],
tableData: [],
signInfoTable: [],
zuTable: [],
choosedList: [],
extraPersonInfoMapList: [],
teamList: [],
extraform: [],
......@@ -262,13 +296,14 @@ const data = reactive({
activeTeam: '',
names: {},
choosedchoosed: [],
projectIds: [],
projectList: [],
choosed2List:[],projectQuery:{},tableType:0
choosed2List: [], projectQuery: {}, tableType: 1
})
const {
activeTeam, names, tableData, signInfoTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList,
activeTeam, names, tableData, signInfoTable, zuTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList,
extraform, groupId, signType, coachOrLeaderFlag, showResult, noPhotoCanSign, extraTableHead,
coachForm, choosedchoosed, activeStep,projectList,choosed2List,loadingProject,projectQuery,tableType
coachForm, projectIds, choosedchoosed, activeStep, projectList, choosed2List, loadingProject, projectQuery, tableType
} = toRefs(data)
let matchId = ''
let signInfoType = null
......@@ -276,12 +311,8 @@ onMounted(() => {
groupId.value = route.query.groupId
signType.value = route.query.signType
matchId = route.query.matchId
if (signType.value == '2') {
// 团队-队伍报名-获取队伍
getTeamList(matchId, groupId.value)
} else {
getSignInfoList()
}
getSignInfoList()
if (signType.value == '0') {
geren()
} else {
......@@ -329,13 +360,13 @@ function getMySignInfo() {
}
function getSignInfoList() {
// console.log(activeTeam.value)
match.getMySignInfoList({
cptId: matchId,
groupId: groupId.value,
teamId: activeTeam.value || ''
}).then(res => {
signInfoTable.value = res.data
signInfoTable.value = res.data.singleData
zuTable.value = res.data.zuData
// if(signInfoTable.value.length>0){
// let choosedIds = []
// for(let p of choosedList.value){
......@@ -358,28 +389,7 @@ function getTableHead() {
})
}
function getTeamList(a, b) {
match.getMyTeamList(a, b).then(res => {
teamList.value = res.data
activeTeam.value = teamList.value[0].id
getSignInfoList()
})
}
function teamClick(tab, event) {
activeTeam.value = tab.props.name
getSignInfoList()
}
function submitForm() {
router.push({
name: 'signPreview',
query: {
matchId: matchId,
groupId: groupId.value,
teamId: activeTeam.value
}
})
if (signInfoType == '1') {
ElMessageBox.confirm('已报项,前往我的报项', '提示', {
confirmButtonText: '确定',
......@@ -400,6 +410,7 @@ function submitForm() {
for (const s of signInfoTable.value) {
if (s.extraPersonInfo == null && needBuchong) {
ElMessage.error('请完善运动员补充信息')
tableType.value = 0
return
}
}
......@@ -423,11 +434,22 @@ function submitForm() {
} else {
afterRecover()
}
router.push({
name: 'signPreview',
query: {
matchId: matchId,
groupId: groupId.value
}
})
}
function afterRecover() {
if (signInfoTable.value.length == 0) {
ElMessage.error('请至少选择一个项目')
if (language.value == 0) {
ElMessage.error('请至少选择一个项目')
} else {
ElMessage.error('select at least one project')
}
return
}
// 判断是否收费
......@@ -478,7 +500,7 @@ function chooseSportman() {
}
const params = {
title: '选择运动员',
title: language.value == 0 ? '选择运动员' : 'Participating athletes',
matchId: matchId,
groupId: groupId.value,
rankId: activeTeam.value,
......@@ -493,7 +515,7 @@ function chooseSportman() {
function changechoosed(e) {
console.log(e)
choosed2List.value = []
for(var c of choosedList.value){
for (var c of choosedList.value) {
if (choosedchoosed.value.indexOf(c.id) > -1) {
choosed2List.value.push(c)
}
......@@ -501,22 +523,33 @@ function changechoosed(e) {
getProjectList()
}
function getProjectList() {
if(choosed2List.value.length==0){
ElMessage.error('请先选择运动员')
projectIds.value = []
if (choosed2List.value.length == 0) {
// ElMessage.error('请先选择运动员')
projectList.value = []
return
}
loadingProject.value = true
//根据已选人员id 获取项目列表
match.getCanSignProjectList(matchId).then(res=>{
projectList.value = res.data
var obj = {
cptId: matchId,
perIds: choosedchoosed.value.toString()
}
match.getProjectPageByPerIds(obj).then(res => {
projectList.value = res.rows
loadingProject.value = false
}).catch(err => {
loadingProject.value = false
ElMessage.error(err.msg)
})
}
function getChoosed(list) {
console.log(list)
choosedList.value = list
console.log('选好了',choosedchoosed.value)
console.log('选好了', choosedchoosed.value)
}
function addCoach() {
......@@ -601,6 +634,21 @@ function editMates(row) {
proxy.$refs['dialogMatesRef'].open(params)
}
function signUp() {
if (projectIds.value.length == 0) {
return
}
const obj = {
athleteIds: choosedchoosed.value.toString(),
projectIds: projectIds.value.toString(),
groupId: groupId.value
}
match.sportsmanDone(obj).then(res => {
getSignInfoList()
})
}
function removeThis(id) {
ElMessageBox.confirm('确定移除这条报项吗?', '提示', {
confirmButtonText: '确定',
......@@ -675,16 +723,30 @@ function editPerson(id) {
groupId: groupId.value
})
}
function switchTabletype() {
if(tableType.value == 0){
if (tableType.value == 0) {
tableType.value = 1
}else{
} else {
tableType.value = 0
}
}
</script>
<style scoped lang="scss">
:deep(.el-checkbox__label) {
flex: 1 1 auto;
}
.flexBetween {
.l {
div {
margin: 4px 0 0;
color: #999;
}
}
}
.app-container {
padding: 0;
background: #F5F7F9;
......@@ -733,7 +795,7 @@ function switchTabletype() {
}
.el-checkbox {
height: auto;
height: auto;margin-right: 20px;
}
:deep(.el-checkbox__input) {
......@@ -750,5 +812,35 @@ function switchTabletype() {
:deep(.el-avatar) > img {
width: 100%;
}
.panel{height: 100%;}
.panel {
height: 100%;
}
.border-info {
.item {
margin: 5px 0;
color: #4C5359;
font-size: 14px;
label {
font-size: 14px;
margin-right: 14px
}
}
}
.ttbb{font-size: 14px;
color: #4C5359;
display: flex;justify-content: center;
div{padding: 20px;position: relative;cursor: pointer;}
div:first-child::after {content: '';position: absolute;right: 0;
background: #ccc;width: 1px;height: 14px;top:0;bottom: 0;margin: auto;}
.active{color: var(--el-color-primary);
&::before{width: 33px;content: '';position: absolute;
height: 2px;bottom: 14px;left: 0;right: 0;margin: auto;
background: #453DEA;
border-radius: 1px;}
}
}
</style>
......
......@@ -13,21 +13,20 @@
:is-show-tip="false"
/>
</el-form-item>
<el-form-item label="姓氏" prop="xing" required>
<el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required>
<el-input v-model="form.xing"/>
</el-form-item>
<el-form-item label="短名" prop="shortName" required>
<el-form-item :label="language==0?'短名':'short name'" prop="shortName" required>
<el-input v-model="form.shortName" placeholder="赛事用名"/>
</el-form-item>
<el-form-item label="出生日期" prop="birth" required>
<el-form-item :label="language==0?'出生日期':'birth'" prop="birth" required>
<el-date-picker
v-model="form.birth"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="请选择出生日期"
/>
</el-form-item>
<el-form-item label="证件类型" prop="idcType" required>
<el-form-item :label="language==0?'证件类型':'ID type'" prop="idcType" required>
<el-select v-model="form.idcType" style="width: 100%;">
<el-option
v-for="item in certificates"
......@@ -37,17 +36,17 @@
/>
</el-select>
</el-form-item>
<el-form-item label="手机号码" prop="phone" required>
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone" required>
<el-input v-model="form.phone" type="number"/>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="所属国家" prop="countryId" required>
<el-form-item :label="language==0?'所属国家':'Nationality'" prop="countryId" required>
<el-select v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id"/>
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="详细地址" prop="address" required>
<el-form-item :label="language==0?'详细地址':'Address'" prop="address" required>
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
style="width: 100%;margin-bottom: 15px"
......@@ -57,24 +56,24 @@
<el-input v-model="form.address" type="textarea" :rows="4"/>
</el-form-item>
<el-form-item label="名" prop="ming" required>
<el-form-item :label="language==0?'名':'name'" prop="ming" required>
<el-input v-model="form.ming"/>
</el-form-item>
<el-form-item label="性别" prop="sex">
<el-form-item :label="language==0?'性别':'sex'" prop="sex">
<el-radio-group v-model="form.sex">
<el-radio label="0"></el-radio>
<el-radio label="1"></el-radio>
<el-radio label="0">{{ language==0?'女':'female' }}</el-radio>
<el-radio label="1">{{ language==0?'男':'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="邮箱" prop="idcCode" required>
<el-form-item :label="language==0?'邮箱':'Email'" prop="idcCode" required>
<el-input v-model="form.email"/>
</el-form-item>
<el-form-item label="证件号码" prop="idcCode" required>
<el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
<el-input v-model="form.idcCode" @blur="checkCode"/>
</el-form-item>
<el-form-item label="主要会员角色" prop="labelArr">
<el-form-item :label="language==0?'主要会员角色':'roles'" prop="labelArr">
<el-select v-model="form.labelArr" multiple @change="labelvalue">
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="l.label"/>
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/>
</el-select>
</el-form-item>
</el-col>
......@@ -82,7 +81,7 @@
</el-form>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm">确定</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm">{{ language==0?'确定':'Save' }}</el-button>
</div>
</template>
</el-dialog>
......@@ -96,6 +95,8 @@ import {certificates} from '@/assets/lib/nation'
import {ElMessage} from 'element-plus'
import {nationList} from '@/assets/js/data'
import _ from 'lodash'
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm'])
......@@ -122,13 +123,14 @@ const data = reactive({
show: false,
countryList: [],
regionsList: [],
labels: [{value: '0', label: '运动员'},
{value: '1', label: '教练'},
{value: '2', label: '领队'},
{value: '3', label: '队医'},
{value: '4', label: '翻译'},
{value: '5', label: '官员'},
{value: '6', label: '其他'}
labels: [
{value: '0', label: '运动员', enlabel: 'Sportsman'},
{value: '1', label: '教练', enlabel: 'Coach'},
{value: '2', label: '领队', enlabel: 'Leader'},
{value: '3', label: '队医', enlabel: 'Nurse'},
{value: '4', label: '翻译', enlabel: 'Translator'},
{value: '5', label: '官员', enlabel: 'Official'},
{value: '6', label: '其他', enlabel: 'Other'}
],
title: '添加选手信息',
groupId: '0',
......
<template>
<el-dialog v-model="show" :title="title" width="1000px" append-to-body>
<div class="funcBtns">
<el-button type="primary" @click="addMember">添加选手</el-button>
<el-button type="primary" plain @click="importSportman">导入选手</el-button>
<el-button type="primary" @click="addMember">
{{ language == 0 ? '添加选手' : 'Add Player' }}
</el-button>
<el-button type="primary" plain @click="importSportman">
{{language == 0 ? '导入选手' : 'Import Player'}}
</el-button>
</div>
<div class="from-Card">
<el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
<el-form-item label="姓名">
<el-form-item :label="language==0?'姓名':'Name'">
<el-input v-model="query.realName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="短名">
<el-form-item :label="language==0?'短名':'Short Name'">
<el-input v-model="query.shortName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="手机号码">
<el-form-item :label="language==0?'手机号码':'Phone Number'">
<el-input v-model="query.phone" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="邮箱">
<el-form-item :label="language==0?'邮箱':'E-mail'">
<el-input v-model="query.email" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="证件类型">
<el-form-item :label="language==0?'证件类型':'ID Type'">
<el-input v-model="query.idcType" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="证件号">
<el-form-item :label="language==0?'证件号码':'ID NO.'">
<el-input v-model="query.idcode" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="角色">
<el-input v-model="query.label" style="width: 120px;" clearable/>
</el-form-item>
<!-- <el-form-item label="角色">-->
<!-- <el-input v-model="query.label" style="width: 120px;" clearable/>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" @click="getList">查询</el-button>
<el-button type="primary" @click="getList">{{language==0?'查询':'Search'}}</el-button>
</el-form-item>
</el-form>
</div>
<p v-if="noPhotoCanSign == 0" class="text-danger">*需上传照片才可报名</p>
<el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
@selection-change="handleSelectionChange">
<el-table-column type="selection" label="选择" :selectable="selectable"/>
<el-table-column label="所属国家" prop="countryName"/>
<el-table-column label="姓氏" prop="xing"/>
<el-table-column label="名" prop="ming"/>
<el-table-column label="短名" prop="shortName"/>
<el-table-column label="性别" prop="sexStr"/>
<el-table-column label="年龄" prop="age"/>
<el-table-column label="出生日期" prop="birth" width="100"/>
<el-table-column label="手机号码" prop="phone" width="120"/>
<el-table-column label="邮箱" prop="email" width="150"/>
<el-table-column label="证件类型" prop="idcTypeStr"/>
<el-table-column label="证件号码" prop="idcCode" width="200"/>
<el-table-column label="会员角色" width="200">
<template #default="scope">
<div>
<div style="white-space: nowrap" class="esp">
<span v-for="item in scope.row.label?.split(',')" :key="item.id">
<el-tag type="warning" size="small" v-if="item==='0'" effect="plain" class="ml10">运动员</el-tag>
<el-tag type="warning" size="small" v-if="item==='1'" effect="plain" class="ml10">教练</el-tag>
<el-tag type="warning" size="small" v-if="item==='2'" effect="plain" class="ml10">领队</el-tag>
<el-tag type="warning" size="small" v-if="item==='3'" effect="plain" class="ml10">队医</el-tag>
<el-tag type="warning" size="small" v-if="item==='4'" effect="plain" class="ml10">翻译</el-tag>
<el-tag type="warning" size="small" v-if="item==='5'" effect="plain" class="ml10">官员</el-tag>
<el-tag type="warning" size="small" v-if="item==='6'" effect="plain" class="ml10">其他</el-tag>
</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="详细地址" prop="address"/>
<el-table-column label="操作" width="120" fixed="right" align="center">
<el-table-column type="selection" :label="language==0?'选择':'Selection'" :selectable="selectable"/>
<el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
<el-table-column :label="language==0?'短名':'Short Name'" prop="shortName" min-width="110"/>
<el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
<el-table-column :label="language==0?'年龄':'Age'" prop="age"/>
<el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
<el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/>
<el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr"/>
<el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
<!-- <el-table-column label="会员角色" width="200">-->
<!-- <template #default="scope">-->
<!-- <div>-->
<!-- <div style="white-space: nowrap" class="esp">-->
<!-- <span v-for="item in scope.row.label?.split(',')" :key="item.id">-->
<!-- <span v-if="item==='0'" class="ml5">{{ language==0?'运动员':'athletes' }}</span>-->
<!-- <span v-if="item==='1'" class="ml5">{{ language==0?'教练':'coach' }}</span>-->
<!-- <span v-if="item==='2'" class="ml5">{{ language==0?'领队':'team leader' }}</span>-->
<!-- <span v-if="item==='3'" class="ml5">{{ language==0?'队医':'team doctor' }}</span>-->
<!-- <span v-if="item==='4'" class="ml5">{{ language==0?'翻译':'translator' }}</span>-->
<!-- <span v-if="item==='5'" class="ml5">{{ language==0?'官员':'official' }}</span>-->
<!-- <span v-if="item==='6'" class="ml5">{{ language==0?'其他':'other' }}</span>-->
<!-- </span>-->
<!-- </div>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>
<el-table-column :label="language==0?'操作':'Actions'" width="120" fixed="right" align="center">
<template #default="scope">
<el-button type="text" @click="editPerson(scope.row)">编辑</el-button>
<el-button type="text" @click="editPerson(scope.row)">
{{language==0?'编辑':'Edit'}}
</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" @click="submitForm">确定</el-button>
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="submitForm">{{language==0?'确定':'Confirm'}}</el-button>
<el-button @click="cancel">{{language==0?'取消':'Cancel'}}</el-button>
</div>
</template>
</el-dialog>
......@@ -91,6 +96,9 @@ import * as match from '@/apiPc/match'
import addCoach from '../components/addCoach'
import {getGroupPersonList} from "@/apiPc/match";
import Import from '../components/import'
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm', 'transfer'])
......@@ -109,6 +117,7 @@ let groupId
let choosedList = []
const choosedIds = []
const open = (params) => {
title.value = params.title
matchId = params.matchId
groupId = params.groupId
noPhotoCanSign.value = params.noPhotoCanSign
......
<template>
<div class="border-info" style="margin: 20px">
<el-row>
<el-col :lg="8">
<div class="item"><label>{{ language == 0 ? '教练' : 'Coach' }}</label>
<span v-for="c in names.coachList">{{ c.shortName }}</span>
</div>
<div class="item"><label>{{ language == 0 ? '翻译' : 'Translator' }}</label>
<span v-for="c in names.translatorList">{{ c.shortName }}</span>
</div>
</el-col>
<el-col :lg="8">
<div class="item">
<label>{{ language == 0 ? '领队' : 'Team leader' }}</label>
<span v-for="c in names.leaderList">{{ c.shortName }}</span>
</div>
<div class="item">
<label>{{ language == 0 ? '官员' : 'Official' }}</label>
<span class="mr5" v-for="c in names.officialList">{{ c.shortName }}</span>
<span v-if="!names.officialList">--</span>
</div>
</el-col>
<el-col :lg="8">
<div class="item">
<label>{{ language == 0 ? '队医' : 'Team doctor' }}</label>
<span class="mr5" v-for="c in names.teamDoctorList">
{{ c.shortName }}
</span>
</div>
<div class="item">
<label>{{ language == 0 ? '其他' : 'Other' }}</label>
<span class="mr5" v-for="c in names.otherList">
{{ c.shortName }}
</span>
</div>
</el-col>
</el-row>
</div>
</template>
<script setup>
const props = defineProps({
names: {
type: Object,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
</script>
<style scoped lang="scss">
.border-info {
.item {
margin: 5px 0;
color: #4C5359;
font-size: 14px;
label {
font-size: 14px;
margin-right: 14px
}
}
}
</style>
<template>
<div class="border-info gray" style="margin: 20px">
<el-row>
<el-col :lg="8">
<el-row :gutter="15">
<el-col :span="4">
<img class="w100" :src="fillImgUrl(groupInfo.imgUrl)"/>
</el-col>
<el-col :span="20">
<div class="item"><label>{{ language==0?'团体名称':'Team Name' }}</label>{{ groupInfo.name }}</div>
<div class="item"><label>{{ language==0?'团体类型':'Group type' }}</label>{{ groupInfo.typeStr }}</div>
</el-col>
</el-row>
</el-col>
<el-col :lg="8">
<div class="item"><label>{{ language==0?'负责人姓名':'Contact Person' }}</label>{{ groupInfo.contactPerson }}</div>
<div class="item"><label>{{ language==0?'参赛队名称':'Name of participating team' }}</label>{{ groupInfo.abreviations }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>{{ language==0?'邮箱':'Email' }}</label>{{ groupInfo.contactEmail }}</div>
<div class="item"><label>{{ language==0?'详细地址':'Detailed Address' }}</label>{{ groupInfo.address }}</div>
</el-col>
</el-row>
</div>
</template>
<script setup>
const props = defineProps({
groupInfo: {
type: Object,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
</script>
<style scoped lang="scss">
.border-info{
.item{margin: 5px 0;color: #4C5359; font-size: 14px;
label{font-size: 14px;margin-right: 14px}
}
}
</style>
<template>
<div class="border-info" style="margin: 20px">
<el-row v-if="language==0">
<el-col :lg="8"><div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}}{{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
<el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }}{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
<el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col>
</el-row>
<el-row v-else>
<el-col :lg="8"><div class="item"><label>Event Name</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>Event Type</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>Event Date</label>{{matchInfo.beginTime?.slice(0,10)}} ~ {{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
<el-col :lg="8"><div class="item"><label>Registration Period</label>{{ matchInfo.signBeginTime?.slice(0,10) }} ~{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
<el-col :lg="16"><div class="item"><label>Event Address</label>{{matchInfo.address}}</div></el-col>
</el-row>
</div>
</template>
<script setup>
const props = defineProps({
matchInfo: {
type: Object,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
</script>
<style scoped lang="scss">
.border-info{
.item{margin: 5px 0;color: #4C5359; font-size: 14px;
label{font-size: 14px;margin-right: 14px}
}
}
</style>
<template>
<div style="padding: 0 20px 20px">
<div style="padding: 30px 20px 20px">
<!--日程-->
<el-timeline>
<el-timeline-item
......
<template>
<!-- 人员表格-->
<el-table :data="tableData" class="mt20">
<el-table-column type="index" label="序号" width="80" align="center"/>
<el-table-column label="所属国家" prop="countryName"/>
<el-table-column label="姓氏" prop="xing"/>
<el-table-column label="名" prop="ming"/>
<el-table-column label="短名" prop="shortName"/>
<el-table-column label="性别" prop="sexStr"/>
<el-table-column label="年龄" prop="age"/>
<el-table-column label="出生日期" prop="birth" width="100"/>
<el-table-column label="手机号码" prop="phone" width="120"/>
<el-table-column label="邮箱" prop="email" width="150"/>
<el-table-column label="证件类型" prop="idcTypeStr"/>
<el-table-column label="证件号码" prop="idcCode" width="200"/>
<el-table-column label="会员角色">
<el-table-column type="index" :label="language==0?'序号':'index'" width="80" align="center"/>
<el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
<el-table-column :label="language==0?'短名':'Short Name'" prop="shortName" min-width="110"/>
<el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
<el-table-column :label="language==0?'年龄':'Age'" prop="age"/>
<el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
<el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/>
<el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr"/>
<el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
<el-table-column :label="language==0?'会员角色':'Role'" width="150">
<template #default="scope">
<span v-for="item in scope.row.label?.split(',')" :key="item.id">
<el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag>
<el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag>
<el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag>
<el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag>
<el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag>
<el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag>
<el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag>
<div class="esp">
<span v-for="item in scope.row.label?.split(',')" :key="item.id" class="text-primary">
<span v-if="item==='0'" class="ml5">{{ language==0?'运动员':'athletes' }}</span>
<span v-if="item==='1'" class="ml5">{{ language==0?'教练':'coach' }}</span>
<span v-if="item==='2'" class="ml5">{{ language==0?'领队':'team leader' }}</span>
<span v-if="item==='3'" class="ml5">{{ language==0?'队医':'team doctor' }}</span>
<span v-if="item==='4'" class="ml5">{{ language==0?'翻译':'translator' }}</span>
<span v-if="item==='5'" class="ml5">{{ language==0?'官员':'official' }}</span>
<span v-if="item==='6'" class="ml5">{{ language==0?'其他':'other' }}</span>
</span>
</div>
</template>
</el-table-column>
<el-table-column label="详细地址" prop="address"/>
<el-table-column label="操作" fixed="right" width="160" header-align="center" align="center">
<el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>
<el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="160" header-align="center"
align="center">
<template #default="scope">
<a class="text-primary pd10" @click="editCoach(scope.row.id,scope.row.groupId)">编辑</a>
<a class="text-primary pd10" @click="delperson(scope.row)">删除</a>
<a class="text-primary pd10" @click="editCoach(scope.row)">
{{language==0?'编辑':'Edit'}}
</a>
<a class="text-primary pd10" @click="delperson(scope.row)">
{{language==0?'删除':'Delete'}}
</a>
</template>
</el-table-column>
</el-table>
<!-- <paginationPc-->
<!-- v-show="total>0"-->
<!-- v-model:page="query.pageNum"-->
<!-- v-model:limit="query.pageSize"-->
<!-- :total="total"-->
<!-- @pagination="getList"-->
<!-- />-->
<!-- <paginationPc-->
<!-- v-show="total>0"-->
<!-- v-model:page="query.pageNum"-->
<!-- v-model:limit="query.pageSize"-->
<!-- :total="total"-->
<!-- @pagination="getList"-->
<!-- />-->
</template>
<script setup>
import {ref} from "vue";
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const emit = defineEmits(['edit', 'delete'])
let title = ''
const props = defineProps({
tableData:{
type:Array,
required:true
tableData: {
type: Array,
required: true
}
})
const editCoach = () => {
const editCoach = (row) => {
// scope.row.id,scope.row.groupId
title = (language.value==0?'编辑人员':'Edit')
emit('edit', row,title)
}
const delperson = (row) => {
emit('delete', row)
}
</script>
......
<template>
<div class="pd20">
<div class="matchItem" v-for="n in list" :key="n.id" @click="goDetail(n.id)">
<el-row :gutter="15">
<el-col :lg="7" :md="24" :xl="6">
<img class="mauto w100" :src="fillImgUrl(n.coverUrl)">
</el-col>
<el-col :lg="10" :md="12" :xl="12">
<div class="info">
<h3>{{ n.name }}</h3>
<p class="ppl"><label>{{ language==0?'比赛时间':'Playing Time' }}</label>{{n.beginTime?.slice(0,10)}}{{ n.endTime?.slice(0,10) }}</p>
<p class="ppl"><label>{{ language==0?'地&ensp;&ensp;&ensp;&ensp;点':'Location' }}</label>{{ n.address }}</p>
<p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}</label>{{ n.signEndTime?.slice(0,10) }}</p>
<p class="ppl"><label>{{ language==0?'联系人员':'Contact Person' }}</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>{{ language==0?'联系电话':'Phone' }}</label>{{ n.contactTelno }}</p>
<p class="ppl"><label>{{ language==0?'邮&ensp;&ensp;&ensp;&ensp;箱':'E-mail' }}</label>{{ n.contactEmail }}</p>
</div>
</el-col>
<el-col :lg="7" :md="12" :xl="6">
<p class="countDownTitle">
<span v-if="language==0">报名截止倒计时</span>
<span v-else>Registration deadline countdown</span>
</p>
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<span class="block">{{ timeData.days }}</span>
<span class="colon">{{ language==0?'天':'Days' }}</span>
<span class="block">{{ timeData.hours }}</span>
<span class="colon">{{ language==0?'时':'Hrs' }}</span>
<span class="block">{{ timeData.minutes }}</span>
<span class="colon">{{ language==0?'分':'Min' }}</span>
<span class="block">{{ timeData.seconds }}</span>
<span class="colon">{{ language==0?'秒':'Sec' }}</span>
</template>
</van-count-down>
<div class="text-center mt30">
<a class="btn-lineG mb20 mauto" style="display: block;">
{{ language==0?'我要报名':'Application' }}</a>
</div>
</el-col>
</el-row>
</div>
</div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0" description=" "/>
</template>
<script setup>
import {ref} from "vue";
import {onMounted} from "@vue/runtime-core";
import {dayjs} from "element-plus"
import cache from "@/plugins/cache"
const language = ref(cache.local.get('language') || 0)
const router = useRouter()
const time = ref(0)
const props = defineProps({
list: {
type: Array,
required: true
}
})
onMounted(()=>{
for(let n of props.list){
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
n.time = dayjs(n.signEndTime).diff(today, 'millisecond')
}
})
function goDetail(id) {
const routeData = router.resolve({
path: `${id}`
})
window.open(routeData.href, '_blank')
}
</script>
<style scoped lang="scss">
.mt60{margin-top: 60px}
.matchItem {
cursor: pointer;margin: 0 0 20px;padding: 0 0 20px;
background: #FFFFFF;border-bottom: 1px solid #e5e5e5;
position: relative;
&:last-child {
border-bottom: none;
}
.el-avatar {
position: absolute;
left: 20px;
top: 30px;
img {
background: #fff;
}
}
.info {
p {
font-size: 14px;
}
}
.typeTag {
position: absolute;
right: 0;
top: 0;
}
h3 {
font-weight: 500;margin: 0 0 10px;
font-size: 18px;
color: #000000;
text-overflow: ellipsis;
}
&:hover h3 {
color: var(--el-color-primary);
}
}
.countDownTitle {
text-align: center;
color: #525F6B;
position: relative;
width: 100%;
left: 0;
font-size: 14px;
}
.countDownTitle span {
background: #fff;
padding: 0 10px;
position: relative;
z-index: 1;
}
.countDownTitle::after {
position: absolute;
background: #ccc;
height: 1px;
content: '';
top: 0;
bottom: 0;
margin: auto;
width: 100%;
left: 0;
}
.info .ppl{margin: 5px 0;}
.ppl{color: #29343C;
label{color: #929AA0;}
}
.van-count-down {
text-align: center;
margin: 20px 0;
}
.colon {
display: inline-block;
font-size: 16px;
margin: 0 8px;
color: #7B7F83;
}
.block {
display: inline-block; opacity: 0.7;
width: 52px;
color: #fff;
font-size: 26px;
font-weight: bold;
border-radius: 10px;
background: url(@/assets/img/djs_bg.png) left;
background-size: 100% 100%;
line-height: 50px;
text-align: center;
}
</style>
<template>
<el-steps :active="activeStep" align-center>
<el-step :title="language==0?'团队信息':'Team Information'" />
<el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" />
<el-step :title="language==0?'选手报名':'Participant Registration'" />
<el-step :title="language==0?'提交审核':'Submit for review'" />
</el-steps>
</template>
<script setup>
const props = defineProps({
activeStep: {
type: Number,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
</script>
<style scoped>
</style>
......@@ -5,7 +5,7 @@
<el-card class="mb20">
<el-row :gutter="20">
<el-col :lg="7" :md="24" :xl="6" >
<img class="mauto" :src="matchData.bgImgUrl" >
<img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)" >
</el-col>
<el-col :lg="9" :md="12" :xl="10">
<h3>
......@@ -88,90 +88,29 @@
<matchInfo :form="matchData" v-if="menu[0].active==1"/>
<div v-if="menu[1].active==1">
<div class="collapsebox">
<el-collapse v-if="matchData.cptProjectList?.length > 0">
<el-collapse-item :title="p.name" :name="index" :key="index" v-for="(p,index) in matchData.cptProjectList">
<div class="pd20">
<table class="table">
<tr>
<td>日期</td>
<td>单元</td>
<td>组别</td>
<td>时间</td>
<td>阶段</td>
</tr>
<tr>
<td rowspan="4">2023/10/6(星期五)</td>
<td rowspan="4">BRK01</td>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>资格赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>资格赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>循环赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>循环赛</td>
</tr>
<tr>
<td rowspan="8">2023/10/7(星期六)</td>
<td rowspan="8">BRK02</td>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>四分之一决赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>四分之一决赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>半决赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>半决赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>季军赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>季军赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>决赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>决赛</td>
</tr>
<tr>
<td colspan="5" style="text-align: left">
注:竞赛日程将根据最终参赛人数和电视转播的要求进行调整
</td>
</tr>
</table>
</div>
</el-collapse-item>
</el-collapse>
<div class="pd20">
<table class="table" cellspacing="0" cellpadding="0" v-if="matchData.cptProjectList?.length > 0">
<tr>
<th>组别编号</th>
<th>组别名称</th>
<th>舞种</th>
<th>舞种明细</th>
<th>参赛性别</th>
<th>参赛年龄</th>
<th>服务费(元)</th>
</tr>
<tr v-for="(p,index) in matchData.cptProjectList" :key="index">
<td>{{ p.code }}</td>
<td>{{ p.name }}</td>
<td>{{ p.danceType }}</td>
<td>{{ p.danceTypeDetailStr }}</td>
<td>{{ p.playTypeStr }}</td>
<td>{{ p.birthPeriod }}</td>
<td>¥{{ p.serviceFee }}</td>
</tr>
</table>
</div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
</div>
</div>
......@@ -231,38 +170,7 @@
</ul>
</div>
<!-- 分站赛-->
<div v-if="menu1[0].active==1">
<div class="matchItem" v-for="n in matchData.cpts" :key="n.id" @click="goDetail(n.id)">
<el-avatar alt="logo" :size="100" :src="n.logoUrl" />
<div class="info">
<h3>{{ n.name }}</h3>
<p>
报名截止:{{ n.signEndTime?.substring(0, 10) }}
<el-tag v-if="n.progressStatusCode==3" type="warning">即将开始</el-tag>
<el-tag v-if="n.progressStatusCode==2" type="success">报名中</el-tag>
<el-tag v-if="n.progressStatusCode==4">进行中</el-tag>
<el-tag v-if="n.progressStatusCode==5" type="info">已结束</el-tag>
<el-tag v-if="n.progressStatusCode==1" type="info">报名未开始</el-tag>
</p>
<p>
比赛时间:{{ n.beginTime?.substring(0, 10) }}-{{ n.endTime?.substring(0, 10) }}
</p>
<p>
比赛地点:{{ n.address }}
</p>
</div>
<div class="pobtns">
<el-button v-if="n.progressStatusCode==2" round type="success" @click="goDetail(n.id)">
我要报名
</el-button>
<el-button v-else-if="n.progressStatusCode==5" round type="info" @click="goDetail(n.id)">
报名结束
</el-button>
<el-button v-else round type="warning" @click="goDetail(n.id)">查看详情</el-button>
</div>
</div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cpts?.length == 0" description=" "/>
</div>
<substation-list v-if="menu1[0].active==1" :list="matchData.cpts"/>
<matchInfo :form="matchData" v-if="menu1[1].active==1"/>
<match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/>
</el-card>
......@@ -273,10 +181,10 @@
</template>
<script setup>
import groupDetail from '@/viewsPc/center/component/teamInfo_form'
import matchInfo from '@/viewsPc/match/components/matchInfo'
import MatchInfo from '@/viewsPc/match/components/matchInfo'
import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList";
import MatchNews from "@/viewsPc/match/components/matchNews";
import SubstationList from "@/viewsPc/match/components/substation-list";
import { getCurrentInstance, ref } from 'vue'
import { reactive, onMounted } from '@vue/runtime-core'
......@@ -288,6 +196,7 @@ const { proxy } = getCurrentInstance()
import * as match from '@/apiPc/match'
import { toRefs } from '@vueuse/shared'
import { ElMessage } from 'element-plus'
import useUserStore from "@/store/modules/user";
const data = reactive({
matchData: {},
matchId: 0,
......@@ -299,11 +208,20 @@ const data = reactive({
signDoneGroupList: []
})
const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
const group = useUserStore().group
const user = useUserStore().user
onMounted(() => {
// matchId.value = route.params.id
matchId.value = '1759477811976183809'
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
groupId.value = group.id
match.getMaList().then((res) => {
if(route.params.id!=0){
matchId.value = route.params.id
} else {
matchId.value = res.rows[0].id
}
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
})
})
function building() {
ElMessage.warning('暂未开发,敬请期待!')
......@@ -329,38 +247,36 @@ function changeMenu(menu,l){
}
}
function choseSignType() {
if (matchData.value.signType == '0') {
// 个人报名
checkIsSign(matchData.value.signType).then((res) => {
if(!user){
ElMessage.warning('请登录')
return
}
console.log(matchData.value.signType)
// checkIsSign().then(() => {
if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) {
// 个人报名
router.push({
path: `${route.params.id}/singleSign`
path: `${matchId.value}/singleSign`
})
})
} else {
// 团队报名 团体-队伍报名
match.getMyGroupList().then(res => {
checkIsSign(matchData.value.signType,res.data[0].id).then(() => {
goSignType2(res.data[0].id)
}
if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){
router.push({
path: `${matchId.value}/teamSign`,
query: {
matchId: matchId.value,
groupId: groupId.value,
signType: matchData.value.signType
}
})
})
}
}
function goSignType2(groupId) {
router.push({
path: `${route.params.id}/teamSign`,
query: {
matchId: matchId.value,
groupId: groupId,
signType: matchData.value.signType
}
})
// })
}
// 获取已报信息
function checkIsSign(signType,groupId) {
function checkIsSign() {
var obj = {
cptId: matchId.value,
groupId: groupId
groupId: groupId.value
}
return match.getMySignInfo(obj).then(res => {
if (res.data.type == '1') {
......
......@@ -5,16 +5,16 @@
<el-card class="mb20">
<el-row :gutter="20">
<el-col :lg="7" :md="24" :xl="6" >
<img class="mauto" :src="(matchData.enCpt.bgImgUrl)" >
<img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)" >
</el-col>
<el-col :lg="9" :md="12" :xl="10">
<h3>
{{ matchData.enCpt.name }}
{{ matchData.name }}
</h3>
<p class="ppl"><label class="bm1">Playing Time:</label>{{matchData.enCpt.beginTime?.slice(0,10)}} ~ {{ matchData.enCpt.endTime?.slice(0,10) }}</p>
<p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.enCpt.level }}</p>
<p class="ppl"><label class="bm3">Location:</label>{{ matchData.enCpt.address }}</p>
<p class="ppl"><label class="bm4">Registration Deadline:</label>{{ matchData.enCpt.signEndTime?.slice(0,10) }}</p>
<p class="ppl"><label class="bm1">Playing Time:</label>{{matchData.beginTime?.slice(0,10)}} ~ {{ matchData.endTime?.slice(0,10) }}</p>
<p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.level }}</p>
<p class="ppl"><label class="bm3">Location:</label>{{ matchData.address }}</p>
<p class="ppl"><label class="bm4">Registration Deadline:</label>{{ matchData.signEndTime?.slice(0,10) }}</p>
</el-col>
<el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'">
<p class="countDownTitle"><span>Registration deadline countdown</span></p>
......@@ -88,90 +88,29 @@
<matchInfo :form="matchData" v-if="menu[0].active==1"/>
<div v-if="menu[1].active==1">
<div class="collapsebox">
<el-collapse v-if="matchData.cptProjectList?.length > 0">
<el-collapse-item :title="p.name" :name="index" :key="index" v-for="(p,index) in matchData.cptProjectList">
<div class="pd20">
<table class="table">
<div class="pd20">
<table class="table" cellspacing="0" cellpadding="0" v-if="matchData.cptProjectList?.length > 0">
<tr>
<td>日期</td>
<td>单元</td>
<td>组别</td>
<td>时间</td>
<td>阶段</td>
<th>Group code</th>
<th>Group</th>
<th>Dance Style</th>
<th>Dance Detail</th>
<th>Sex</th>
<th>Age</th>
<th>Registration Fee</th>
</tr>
<tr>
<td rowspan="4">2023/10/6(星期五)</td>
<td rowspan="4">BRK01</td>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>资格赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>资格赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>循环赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>循环赛</td>
</tr>
<tr>
<td rowspan="8">2023/10/7(星期六)</td>
<td rowspan="8">BRK02</td>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>四分之一决赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>四分之一决赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>半决赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>半决赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>季军赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>季军赛</td>
</tr>
<tr>
<td>男子</td>
<td>14:30 - 15:30</td>
<td>决赛</td>
</tr>
<tr>
<td>女子</td>
<td>14:30 - 15:30</td>
<td>决赛</td>
</tr>
<tr>
<td colspan="5" style="text-align: left">
注:竞赛日程将根据最终参赛人数和电视转播的要求进行调整
</td>
<tr v-for="(p,index) in matchData.cptProjectList" :key="index">
<td>{{ p.code }}</td>
<td>{{ p.name }}</td>
<td>{{ p.danceType }}</td>
<td>{{ p.danceTypeDetailStr }}</td>
<td>{{ p.playTypeStr }}</td>
<td>{{ p.birthPeriod }}</td>
<td>¥{{ p.serviceFee }}</td>
</tr>
</table>
</div>
</el-collapse-item>
</el-collapse>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
</div>
</div>
......@@ -231,38 +170,7 @@
</ul>
</div>
<!-- 分站赛-->
<div v-if="menu1[0].active==1">
<div class="matchItem" v-for="n in matchData.cpts" :key="n.id" @click="goDetail(n.id)">
<el-avatar alt="logo" :size="100" :src="n.logoUrl" />
<div class="info">
<h3>{{ n.name }}</h3>
<p>
Registration deadline:{{ n.signEndTime?.substring(0, 10) }}
<el-tag v-if="n.progressStatusCode==3" type="warning">About to begin</el-tag>
<el-tag v-if="n.progressStatusCode==2" type="success">Registration in progress</el-tag>
<el-tag v-if="n.progressStatusCode==4">In play</el-tag>
<el-tag v-if="n.progressStatusCode==5" type="info">Ended</el-tag>
<el-tag v-if="n.progressStatusCode==1" type="info">Not started</el-tag>
</p>
<p>
Playing time:{{ n.beginTime?.substring(0, 10) }}-{{ n.endTime?.substring(0, 10) }}
</p>
<p>
Location:{{ n.address }}
</p>
</div>
<div class="pobtns">
<el-button v-if="n.progressStatusCode==2" round type="success" @click="goDetail(n.id)">
Application
</el-button>
<el-button v-else-if="n.progressStatusCode==5" round type="info" @click="goDetail(n.id)">
Registration ended
</el-button>
<el-button v-else round type="warning" @click="goDetail(n.id)">Detail</el-button>
</div>
</div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cpts?.length == 0" description=" "/>
</div>
<substation-list v-if="menu1[0].active==1" :list="matchData.cpts"/>
<matchInfo :form="matchData" v-if="menu1[1].active==1"/>
<match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/>
</el-card>
......@@ -275,10 +183,10 @@
</template>
<script setup>
import groupDetail from '@/viewsPc/center/component/teamInfo_form'
import matchInfo from '@/viewsPc/match/components/matchInfo'
import MatchInfo from '@/viewsPc/match/components/matchInfo'
import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList";
import MatchNews from "@/viewsPc/match/components/matchNews";
import SubstationList from "@/viewsPc/match/components/substation-list";
import { getCurrentInstance, ref } from 'vue'
import { reactive, onMounted } from '@vue/runtime-core'
......@@ -290,10 +198,11 @@ const { proxy } = getCurrentInstance()
import * as match from '@/apiPc/match'
import { toRefs } from '@vueuse/shared'
import { ElMessage } from 'element-plus'
import useUserStore from "@/store/modules/user";
const user = useUserStore().user || {}
const group = useUserStore().group || {}
const data = reactive({
matchData: {
enCpt:{}
},
matchData: {},
matchId: 0,
groupId: '',
activeName2:'first',
......@@ -305,10 +214,16 @@ const data = reactive({
})
const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
onMounted(() => {
// matchId.value = route.params.id
matchId.value = '1759477811976183809'
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
groupId.value = group.id
match.getMaList().then((res) => {
if(route.params.id!=0){
matchId.value = route.params.id
} else {
matchId.value = res.rows[0].id
}
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
})
})
function building() {
ElMessage.warning('Building!')
......@@ -334,38 +249,35 @@ function changeMenu(menu,l){
}
}
function choseSignType() {
if (matchData.value.signType == '0') {
// 个人报名
checkIsSign(matchData.value.signType).then((res) => {
if(!user){
ElMessage.warning('Please login')
return
}
//判断signType,如果是2且utype是2,则跳转到团体报名
// checkIsSign().then(() => {
if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) {
// 个人报名
router.push({
path: `${route.params.id}/singleSign`
})
}
if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){
router.push({
path: `${route.params.id}/singleSign`
path: `${route.params.id}/teamSign`,
query: {
matchId: matchId.value,
groupId: groupId.value,
signType: matchData.value.signType
}
})
})
} else {
// 团队报名 团体-队伍报名
match.getMyGroupList().then(res => {
checkIsSign(matchData.value.signType,res.data[0].id).then(() => {
goSignType2(res.data[0].id)
})
})
}
}
function goSignType2(groupId) {
router.push({
path: `${route.params.id}/teamSign`,
query: {
matchId: matchId.value,
groupId: groupId,
signType: matchData.value.signType
}
})
// })
}
// 获取已报信息
function checkIsSign(signType,groupId) {
function checkIsSign() {
var obj = {
cptId: matchId.value,
groupId: groupId
groupId: groupId.value
}
return match.getMySignInfo(obj).then(res => {
if (res.data.type == '1') {
......
......@@ -275,7 +275,7 @@ onMounted(() => {
})
function getTotalFee() {
match.getTotalFee({
entryId: entryId,
entryId: groupId,
cptId: cptId
}).then(res => {
form.value = res.data
......
......@@ -2,72 +2,13 @@
<div>
<div class="box ph-30">
<el-card class="mb20">
<el-steps :active="activeStep" align-center>
<el-step title="团队信息"/>
<el-step title="教练/领队/其他"/>
<el-step title="选手报名"/>
<el-step title="提交审核"/>
</el-steps>
<team-sign-step :language="language" :active-step="activeStep"/>
</el-card>
<el-card>
<div class="border-info">
<el-row>
<el-col :lg="8">
<div class="item"><label>赛事名称</label>{{ matchInfo.name }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>赛事类型</label>{{ matchInfo.name }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>赛事时间</label>{{ matchInfo.beginTime?.slice(0, 10) }}
{{ matchInfo.endTime?.slice(0, 10) }}
</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0, 10) }}
{{ matchInfo.signEndTime?.slice(0, 10) }}
</div>
</el-col>
<el-col :lg="16">
<div class="item"><label>比赛地址</label>{{ matchInfo.address }}</div>
</el-col>
</el-row>
</div>
<div class="border-info gray mt20">
<el-row>
<el-col :lg="8">
<img/>
<div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>负责人姓名</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>参赛队名称</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>邮箱</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>详细地址</label>{{ matchInfo.signFee }}</div>
</el-col>
</el-row>
</div>
<div class="border-info mt20">
<el-row>
<el-col :lg="8">
<div class="item"><label>教练</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>翻译</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>领队</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>官员</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>队医</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>其他</label>{{ matchInfo.signFee }}</div>
</el-col>
</el-row>
</div>
<el-card :body-style="{ padding: '0px' }">
<match-info-row :matchInfo="matchInfo" :language="language"/>
<group-info-row :groupInfo="groupInfo" :language="language"/>
<coach-info-row :names="names" :language="language"/>
<div style="margin: 20px">
<div class="mt20">
<div class="leftboderTT">参赛人员清单</div>
......@@ -115,6 +56,7 @@
</el-table-column>
</el-table>
</div>
</div>
</el-card>
......@@ -143,9 +85,68 @@
</template>
<script setup>
import TeamSignStep from './components/teamSignStep'
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row"
import GroupInfoRow from "@/viewsPc/match/components/groupInfo-row"
import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row"
import {ref} from "vue"
import cache from "@/plugins/cache";
import {onMounted} from "@vue/runtime-core";
import * as match from "@/apiPc/match"
import {useRoute, useRouter} from "vue-router";
import useUserStore from "@/store/modules/user";
const route = useRoute()
const router = useRouter()
const activeStep = ref(3)
const matchInfo = ref({})
const groupInfo = useUserStore().group || {}
const language = ref(cache.local.get('language') || 0)
const groupId = ref()
const form = ref({})
const matchId = ref()
const names = ref({})
onMounted(()=>{
console.log(route.query)
groupId.value = route.query.groupId || 0
matchId.value = route.query.matchId
getMatch()
getFee()
if(groupId.value!=0){
tuandui()
} else {
geren()
}
})
const getMatch = () => {
match.getMatchById({ id: matchId.value }).then(res => {
matchInfo.value = res.data
})
}
function geren() {
match.getChooseDoneSingleCoachs(matchId.value).then(res => {
names.value = res.data
})
}
function tuandui() {
match.getChooseDoneGroupCoachs(matchId.value, groupId.value).then(res => {
names.value = res.data
})
}
const goPrev = () => {
router.go(-1)
}
const getFee = () => {
console.log(groupId.value)
match.getTotalFee({
entryId: groupId.value,
cptId: matchId.value
}).then(res => {
form.value = res.data
})
}
</script>
<style scoped lang="scss">
......@@ -169,4 +170,9 @@ const matchInfo = ref({})
.text-right{text-align: right;
a{margin-left: 20px;}
}
.border-info{
.item{margin: 5px 0;color: #4C5359; font-size: 14px;
label{font-size: 14px;margin-right: 14px}
}
}
</style>
......
......@@ -52,7 +52,7 @@
</el-form-item>
<el-form-item label="国籍" prop="countryId">
<el-select v-model="form.countryId" class="m-2" @change="changeCountryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" />
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="民族" prop="nation">
......
......@@ -3,72 +3,56 @@
<div class="box ph-30">
<el-card>
<el-steps active="1" align-center>
<el-step :title="language==0?'团队信息':'Team Information'" />
<el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" />
<el-step :title="language==0?'选手报名':'Participant Registration'" />
<el-step :title="language==0?'提交审核':'Submit for review'" />
</el-steps>
<team-sign-step :language="language" :active-step="0"/>
</el-card>
<div class="h20"></div>
<div class="panel" style="box-shadow: var(--el-box-shadow)">
<div class="border-info" style="margin: 20px">
<el-row v-if="language==0">
<el-col :lg="8"><div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}}{{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
<el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }}{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
<el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col>
</el-row>
<el-row v-else>
<el-col :lg="8"><div class="item"><label>Event Name</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>Event Type</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>Event Date</label>{{matchInfo.beginTime?.slice(0,10)}} ~ {{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
<el-col :lg="8"><div class="item"><label>Registration Period</label>{{ matchInfo.signBeginTime?.slice(0,10) }} ~{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
<el-col :lg="16"><div class="item"><label>Event Address</label>{{matchInfo.address}}</div></el-col>
</el-row>
</div>
<match-info-row :matchInfo="matchInfo" :language="language"/>
<div class="h20"></div>
<el-form ref="ruleFormRef" label-width="120px" class="signForm" :model="form" :rules="rules">
<el-form ref="ruleFormRef" label-width="120px" class="signForm"
:model="form" :rules="rules"
:label-position="language==0?'left':'top'">
<el-row>
<el-col :lg="8" :offset="2">
<el-form-item label="团体Logo" prop="imgUrl">
<el-form-item :label="language==0?'团体Logo':'Group Logo'" prop="imgUrl">
<ImageUpload2 v-model="form.imgUrl" :crop-width="200" :crop-height="200" :limit="1"/>
<span class="tip">请上传不超过 <i>5M</i> 的文件 格式为 <i>png/jpg/jpeg</i> 的文件</span>
<span class="tip" v-if="language==0">请上传不超过 <i>5M</i> 的文件 格式为 <i>png/jpg/jpeg</i> 的文件</span>
<span class="tip" v-else>Please upload a file in the format of
<i>png/jpg/jpeg</i> that does not exceed <i>5MB</i>
</span>
</el-form-item>
</el-col>
<el-col :lg="10">
<el-form-item label="团体名称" prop="name">
<el-input v-model="form.name" placeholder="请输入团体名称" />
<el-form-item :label="language==0?'团体名称':'Team Name'" prop="name">
<el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" />
</el-form-item>
<el-form-item label="负责人姓名" prop="contactPerson">
<el-form-item :label="language==0?'负责人姓名':'Contact Person'" prop="contactPerson">
<el-input v-model="form.contactPerson" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="邮箱" required prop="contactEmail">
<el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="详细地址" required prop="address">
<el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
<el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
</el-form-item>
<el-form-item label="团体类型" prop="type">
<el-select v-model="form.type" placeholder="请选择团体类型" style="width: 100%;">
<el-option label="普通院校" value="0" />
<el-option label="专业舞蹈学校" value="1" />
<el-option label="培训机构/俱乐部" value="2" />
<el-option label="地方协会" value="3" />
<el-option label="国家协会" value="4" />
<el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
<el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">
<el-option :label="language==0?'普通院校':'School'" value="0" />
<el-option :label="language==0?'专业舞蹈学校':'Professional dance school'" value="1" />
<el-option :label="language==0?'培训机构/俱乐部':'Company/Club'" value="2" />
<el-option :label="language==0?'地方协会':'Local Association'" value="3" />
<el-option :label="language==0?'国家协会':'National Association'" value="4" />
</el-select>
</el-form-item>
<el-form-item label="参赛队名称" required prop="abreviations">
<el-input type="text" v-model="form.abreviations" placeholder="请输入内容"/>
<el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">
<el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="participantsInfoArr&&participantsInfoArr.length>0">
<el-col :span="16" :offset="4">
<h3>补充信息</h3>
<h3>{{ language==0?'补充信息':'Supplemental information'}}</h3>
<el-form-item v-for="(s,index) in participantsInfoArr" :key="index">
<template #label>
<span v-if="s.status == 0" class="red">*</span>{{ s.name }}
......@@ -104,6 +88,9 @@ import { reactive, ref } from 'vue'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import { useRoute, useRouter } from 'vue-router'
import { toRefs } from '@vueuse/shared'
import TeamSignStep from './components/teamSignStep'
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
import cache from "@/plugins/cache"
const language = ref(cache.local.get('language') || 0)
......@@ -282,11 +269,7 @@ function goNext() {
padding: 0;
background: #F5F7F9;
}
.border-info{
.item{margin: 5px 0;color: #4C5359; font-size: 14px;
label{font-size: 14px;margin-right: 14px}
}
}
.panel-footer .el-button--success {
padding: 0 40px;
}
......
......@@ -5,8 +5,8 @@
<!-- 国内-机构注册-->
<el-card>
<el-steps :active="activeStep" finish-status="success" align-center>
<el-step title="创建账号" />
<el-step title="注册完成" />
<el-step title="创建账号"/>
<el-step title="注册完成"/>
</el-steps>
</el-card>
......@@ -14,12 +14,19 @@
<div v-if="activeStep==0">
<el-card style="min-height: 50vh">
<div class="pt30">
<el-form class="d-form" size="large" label-width="120" style="max-width: 500px;margin: auto">
<el-form class="d-form" size="large" label-width="120"
style="max-width: 500px;margin: auto">
<el-form-item label="WDSF卡号" required>
<el-input type="text" v-model="form.WDSF" @change="resetCode" @blur="verifyCode"/>
<el-input type="text" v-model="form.WDSF" @change="resetCode(0)" @blur="verifyCode">
<template #append>
<el-button type="primary" plain style="width: 110px" @click="checkwdsf">
<span>校验卡号</span>
</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item label="手机/邮箱" required>
<el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"/>
<el-input type="text" v-model="form.account" @change="resetCode(1)" @blur="verifyCode"/>
</el-form-item>
<el-form-item label="验证码" required>
<el-input v-model="form.code">
......@@ -28,15 +35,10 @@
<count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
{{ totalSeconds }}
</count-down>
<span v-else>
发送验证码
</span>
<span v-else>发送验证码</span>
</el-button>
</template>
</el-input>
<div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
<Vcode :show="isShow" type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode>
</div>
</el-form-item>
</el-form>
</div>
......@@ -47,17 +49,98 @@
</el-card>
</div>
<div v-if="activeStep==1">
<Step3 :accont="form.account"/>
</div>
<Vcode :show="isShow" @success="codeSuccess()"></Vcode>
</div>
</div>
</div>
</template>
<script setup>
import {ref} from "vue"
const activeStep = ref(0)
import {ref,toRefs,reactive} from "vue"
import {onMounted} from "@vue/runtime-core";
import Step3 from "./team/step3"
import Vcode from "vue3-puzzle-vcode"
import { ElMessage } from 'element-plus'
import CountDown from '@chenfengyuan/vue-countdown'
import cache from '@/plugins/cache'
const language = ref(cache.local.get('language') || 0)
const data = reactive({
isShow:false,
isCodeTrue:0,
counting:false,
form:{},
activeStep: 0,
failVcode:'验证失败,请重试',
successVcode:'验证通过!',
sliderText: '拖动滑块完成拼图',
})
const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText} = toRefs(data)
onMounted(()=>{
if(language.value==1){
failVcode.value = 'Error!'
successVcode.value = 'Success!'
sliderText.value = 'Drag the slider to complete the puzzle'
}
})
function sendsmsMsg() {
if(!form.value.account){
if(language.value==0){
ElMessage.error('请填写手机/邮箱')
} else {
ElMessage.error('Please fill in your phone/email address')
}
return
}
if(counting.value){
return
} else {
isShow.value = true
}
}
function checkwdsf() {
if(!form.value.WDSF){
if(language.value==0){
ElMessage.error('请填写WDSF卡号')
} else {
ElMessage.error('Please fill in your WDSF code')
}
return
}
isShow.value = true
}
function verifyCode() {
if(!form.value.account){
return
}
if(form.value.account.indexOf('@')>-1){
//邮箱
}
}
function codeSuccess(msg) {
console.log('验证通过' + msg);
isShow.value = false
isCodeTrue.value += 1
if(isCodeTrue.value==1){
}
if(isCodeTrue.value==2){
counting.value = true
// getCaptchaSms({account:form.value.account}).then(res=>{
//
// })
}
}
function resetCode(n) {
isCodeTrue.value = n
}
function next() {
activeStep.value = 1
}
</script>
<style scoped>
......
......@@ -20,7 +20,7 @@
</el-input>
<div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
<Vcode :show="isShow" :successText="successVcode" :failText="failVcode" :slider-text="sliderText"
type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode>
type="inside" @success="codeSuccess"></Vcode>
</div>
</el-form-item>
</el-form>
......@@ -96,12 +96,7 @@ function codeSuccess(msg) {
function resetCode() {
isCodeTrue.value = false
}
function codeFail() {
}
function codeClose() {
}
const goBack = () => {
router.go(-1)
}
......
......@@ -27,7 +27,7 @@
style="max-width: 500px;margin: auto">
<el-form-item :label="language==0?'所属国家':'Nationality'" required>
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id"/>
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'详细地址':'Address'" required prop="address">
......
......@@ -22,7 +22,9 @@ import {toRefs} from "@vueuse/shared/index";
import Vcode from "vue3-puzzle-vcode"
import {ElMessage} from 'element-plus'
import CountDown from '@chenfengyuan/vue-countdown'
import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match";
import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match"
import cache from '@/plugins/cache'
const language = ref(cache.local.get('language') || 0)
const props = defineProps({
accont:{
type:String,
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!