05ebb5dc by 杨炀

no message

1 parent b790e0e8
Showing 42 changed files with 2078 additions and 1195 deletions
1 /**
2 * @author: Dennis Hernández
3 * @webSite: http://djhvscf.github.io/Blog
4 * @version: v1.0.0
5 */
6 (function ($) {
7 'use strict';
8
9 var initResizable = function (that) {
10 //Deletes the plugin to re-create it
11 that.$el.colResizable({disable: true});
12
13 //Creates the plugin
14 that.$el.colResizable({
15 liveDrag: that.options.liveDrag,
16 fixed: that.options.fixed,
17 headerOnly: that.options.headerOnly,
18 minWidth: that.options.minWidth,
19 hoverCursor: that.options.hoverCursor,
20 dragCursor: that.options.dragCursor,
21 onResize: that.onResize,
22 onDrag: that.options.onResizableDrag,
23 resizeMode: that.options.resizeMode
24 });
25 };
26
27 $.extend($.fn.bootstrapTable.defaults, {
28 resizable: false,
29 liveDrag: false,
30 fixed: true,
31 headerOnly: false,
32 minWidth: 15,
33 hoverCursor: 'e-resize',
34 dragCursor: 'e-resize',
35 onResizableResize: function (e) {
36 return false;
37 },
38 onResizableDrag: function (e) {
39 return false;
40 }
41 });
42
43 var BootstrapTable = $.fn.bootstrapTable.Constructor,
44 _toggleView = BootstrapTable.prototype.toggleView,
45 _resetView = BootstrapTable.prototype.resetView;
46
47 BootstrapTable.prototype.toggleView = function () {
48 _toggleView.apply(this, Array.prototype.slice.apply(arguments));
49
50 if (this.options.resizable && this.options.cardView) {
51 //Deletes the plugin
52 $(this.$el).colResizable({disable: true});
53 }
54 };
55
56 BootstrapTable.prototype.resetView = function () {
57 var that = this;
58
59 _resetView.apply(this, Array.prototype.slice.apply(arguments));
60
61 if (this.options.resizable) {
62 // because in fitHeader function, we use setTimeout(func, 100);
63 setTimeout(function () {
64 initResizable(that);
65 }, 100);
66 }
67 };
68
69 BootstrapTable.prototype.onResize = function (e) {
70 var that = $(e.currentTarget);
71 that.bootstrapTable('resetView');
72 that.data('bootstrap.table').options.onResizableResize.apply(e);
73 }
74 })(jQuery);
1 /**
2 _ _____ _ _ _
3 | | __ \ (_) | | | |
4 ___ ___ | | |__) |___ ___ _ ______ _| |__ | | ___
5 / __/ _ \| | _ // _ \/ __| |_ / _` | '_ \| |/ _ \
6 | (_| (_) | | | \ \ __/\__ \ |/ / (_| | |_) | | __/
7 \___\___/|_|_| \_\___||___/_/___\__,_|_.__/|_|\___|
8
9 v1.7 - jQuery plugin created by Alvaro Prieto Lauroba
10
11 Licences: MIT & GPL
12 Feel free to use or modify this plugin as far as my full name is kept
13 */
14 (function($){
15
16 //IE8 Polyfill
17 if(!Array.indexOf) { Array.prototype.indexOf = function(obj) { for(var i=0; i<this.length;i++){if(this[i]==obj){return i;}} return -1; }}
18
19 var d = $(document); //window object
20 var h = $("head"); //head object
21 var drag = null; //reference to the current grip that is being dragged
22 var tables = {}; //object of the already processed tables (table.id as key)
23 var count = 0; //internal count to create unique IDs when needed.
24
25 //common strings for packing
26 var ID = "id";
27 var PX = "px";
28 var SIGNATURE ="JColResizer";
29 var FLEX = "JCLRFlex";
30
31 //short-cuts
32 var I = parseInt;
33 var M = Math;
34 var ie = navigator.userAgent.indexOf('Trident/4.0')>0;
35 var S;
36 var pad = ""
37 try{S = sessionStorage;}catch(e){} //Firefox crashes when executed as local file system
38
39
40 //append required CSS rules
41 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>");
42
43 /**
44 * Function to allow column resizing for table objects. It is the starting point to apply the plugin.
45 * @param {DOM node} tb - reference to the DOM table object to be enhanced
46 * @param {Object} options - some customization values
47 */
48 var init = function( tb, options){
49 var t = $(tb); //the table object is wrapped
50 t.opt = options; //each table has its own options available at anytime
51 t.mode = options.resizeMode; //shortcuts
52 t.dc = t.opt.disabledColumns;
53 if(t.opt.removePadding) t.addClass("JPadding");
54 if(t.opt.disable) return destroy(t); //the user is asking to destroy a previously colResized table
55 var id = t.id = t.attr(ID) || SIGNATURE+count++; //its id is obtained, if null new one is generated
56 t.p = t.opt.postbackSafe; //short-cut to detect postback safe
57 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.
58 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
59 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
60 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
61 if(options.marginLeft) t.gc.css("marginLeft", options.marginLeft); //if the table contains margins, it must be specified
62 if(options.marginRight) t.gc.css("marginRight", options.marginRight); //since there is no (direct) way to obtain margin values in its original units (%, em, ...)
63 t.cs = I(ie? tb.cellSpacing || tb.currentStyle.borderSpacing :t.css('border-spacing'))||2; //table cellspacing (not even jQuery is fully cross-browser)
64 t.b = I(ie? tb.border || tb.currentStyle.borderLeftWidth :t.css('border-left-width'))||1; //outer border width (again cross-browser issues)
65 // 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"
66 tables[id] = t; //the table object is stored using its id as key
67 createGrips(t); //grips are created
68
69 };
70
71
72 /**
73 * This function allows to remove any enhancements performed by this plugin on a previously processed table.
74 * @param {jQuery ref} t - table object
75 */
76 var destroy = function(t){
77 var id=t.attr(ID), t=tables[id]; //its table object is found
78 if(!t||!t.is("table")) return; //if none, then it wasn't processed
79 t.removeClass(SIGNATURE+" "+FLEX).gc.remove(); //class and grips are removed
80 delete tables[id]; //clean up data
81 };
82 /**
83 * Function to create all the grips associated with the table given by parameters
84 * @param {jQuery ref} t - table object
85 */
86 var createGrips = function(t){
87
88 var th = t.find(">thead>tr:first>th,>thead>tr:first>td"); //table headers are obtained
89 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
90 th = th.filter(":visible"); //filter invisible columns
91 t.cg = t.find("col"); //a table can also contain a colgroup with col elements
92 t.ln = th.length; //table length is stored
93 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
94 th.each(function(i){ //iterate through the table column headers
95 var c = $(this); //jquery wrap for the current column
96 var dc = t.dc.indexOf(i)!=-1; //is this a disabled column?
97 var g = $(t.gc.append('<div class="JCLRgrip"></div>')[0].lastChild); //add the visual node to be used as grip
98 g.append(dc ? "": t.opt.gripInnerHtml).append('<div class="'+SIGNATURE+'"></div>');
99 if(i == t.ln-1){ //if the current grip is the las one
100 g.addClass("JCLRLastGrip"); //add a different css class to stlye it in a different way if needed
101 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
102 }
103 g.bind('touchstart mousedown', onGripMouseDown); //bind the mousedown event to start dragging
104
105 if (!dc){
106 //if normal column bind the mousedown event to start dragging, if disabled then apply its css class
107 g.removeClass('JCLRdisabledGrip').bind('touchstart mousedown', onGripMouseDown);
108 }else{
109 g.addClass('JCLRdisabledGrip');
110 }
111 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
112 t.g.push(g); t.c.push(c); //the current grip and column are added to its table object
113 c.width(c.w).removeAttr("width"); //the width of the column is converted into pixel-based measurements
114 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
115 });
116 t.cg.removeAttr("width"); //remove the width attribute from elements in the colgroup
117
118 t.find('td, th').not(th).not('table th, table td').each(function(){
119 $(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
120 });
121 if(!t.f){
122 t.removeAttr('width').addClass(FLEX); //if not fixed, let the table grow as needed
123 }
124 syncGrips(t); //the grips are positioned according to the current table layout
125 //there is a small problem, some cells in the table could contain dimension values interfering with the
126 //width value set by this plugin. Those values are removed
127
128 };
129
130
131 /**
132 * Function to allow the persistence of columns dimensions after a browser postback. It is based in
133 * the HTML5 sessionStorage object, which can be emulated for older browsers using sessionstorage.js
134 * @param {jQuery ref} t - table object
135 * @param {jQuery ref} th - reference to the first row elements (only set in deserialization)
136 */
137 var memento = function(t, th){
138 var w,m=0,i=0,aux =[],tw;
139 if(th){ //in deserialization mode (after a postback)
140 t.cg.removeAttr("width");
141 if(t.opt.flush){ S[t.id] =""; return;} //if flush is activated, stored data is removed
142 w = S[t.id].split(";"); //column widths is obtained
143 tw = w[t.ln+1];
144 if(!t.f && tw){ //if not fixed and table width data available its size is restored
145 t.width(tw*=1);
146 if(t.opt.overflow) { //if overfolw flag is set, restore table width also as table min-width
147 t.css('min-width', tw + PX);
148 t.w = tw;
149 }
150 }
151 for(;i<t.ln;i++){ //for each column
152 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
153 th.eq(i).css("width", aux[i] ); //each column width in % is restored
154 }
155 for(i=0;i<t.ln;i++)
156 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
157 }else{ //in serialization mode (after resizing a column)
158 S[t.id] =""; //clean up previous data
159 for(;i < t.c.length; i++){ //iterate through columns
160 w = t.c[i].width(); //width is obtained
161 S[t.id] += w+";"; //width is appended to the sessionStorage object using ID as key
162 m+=w; //carriage is updated to obtain the full size used by columns
163 }
164 S[t.id]+=m; //the last item of the serialized string is the table's active area (width),
165 //to be able to obtain % width value of each columns while deserializing
166 if(!t.f) S[t.id] += ";"+t.width(); //if not fixed, table width is stored
167 }
168 };
169
170
171 /**
172 * Function that places each grip in the correct position according to the current table layout
173 * @param {jQuery ref} t - table object
174 */
175 var syncGrips = function (t){
176 t.gc.width(t.w); //the grip's container width is updated
177 for(var i=0; i<t.ln; i++){ //for each column
178 var c = t.c[i];
179 t.g[i].css({ //height and position of the grip is updated according to the table layout
180 left: c.offset().left - t.offset().left + c.outerWidth(false) + t.cs / 2 + PX,
181 height: t.opt.headerOnly? t.c[0].outerHeight(false) : t.outerHeight(false)
182 });
183 }
184 };
185
186
187
188 /**
189 * This function updates column's width according to the horizontal position increment of the grip being
190 * dragged. The function can be called while dragging if liveDragging is enabled and also from the onGripDragOver
191 * event handler to synchronize grip's position with their related columns.
192 * @param {jQuery ref} t - table object
193 * @param {number} i - index of the grip being dragged
194 * @param {bool} isOver - to identify when the function is being called from the onGripDragOver event
195 */
196 var syncCols = function(t,i,isOver){
197 var inc = drag.x-drag.l, c = t.c[i], c2 = t.c[i+1];
198 var w = c.w + inc; var w2= c2.w- inc; //their new width is obtained
199 c.width( w + PX);
200 t.cg.eq(i).width( w + PX);
201 if(t.f){ //if fixed mode
202 c2.width(w2 + PX);
203 t.cg.eq(i+1).width( w2 + PX);
204 }else if(t.opt.overflow) { //if overflow is set, incriment min-width to force overflow
205 t.css('min-width', t.w + inc);
206 }
207 if(isOver){
208 c.w=w;
209 c2.w= t.f ? w2 : c2.w;
210 }
211 };
212
213
214 /**
215 * This function updates all columns width according to its real width. It must be taken into account that the
216 * sum of all columns can exceed the table width in some cases (if fixed is set to false and table has some kind
217 * of max-width).
218 * @param {jQuery ref} t - table object
219 */
220 var applyBounds = function(t){
221 var w = $.map(t.c, function(c){ //obtain real widths
222 return c.width();
223 });
224 t.width(t.w = t.width()).removeClass(FLEX); //prevent table width changes
225 $.each(t.c, function(i,c){
226 c.width(w[i]).w = w[i]; //set column widths applying bounds (table's max-width)
227 });
228 t.addClass(FLEX); //allow table width changes
229 };
230
231
232 /**
233 * Event handler used while dragging a grip. It checks if the next grip's position is valid and updates it.
234 * @param {event} e - mousemove event binded to the window object
235 */
236 var onGripDrag = function(e){
237 if(!drag) return;
238 var t = drag.t; //table object reference
239 var oe = e.originalEvent.touches;
240 var ox = oe ? oe[0].pageX : e.pageX; //original position (touch or mouse)
241 var x = ox - drag.ox + drag.l; //next position according to horizontal mouse position increment
242 var mw = t.opt.minWidth, i = drag.i ; //cell's min width
243 var l = t.cs*1.5 + mw + t.b;
244 var last = i == t.ln-1; //check if it is the last column's grip (usually hidden)
245 var min = i? t.g[i-1].position().left+t.cs+mw: l; //min position according to the contiguous cells
246 var max = t.f ? //fixed mode?
247 i == t.ln-1?
248 t.w-l:
249 t.g[i+1].position().left-t.cs-mw:
250 Infinity; //max position according to the contiguous cells
251 x = M.max(min, M.min(max, x)); //apply bounding
252 drag.x = x; drag.css("left", x + PX); //apply position increment
253 if(last){ //if it is the last grip
254 var c = t.c[drag.i]; //width of the last column is obtained
255 drag.w = c.w + x- drag.l;
256 }
257 if(t.opt.liveDrag){ //if liveDrag is enabled
258 if(last){
259 c.width(drag.w);
260 if(!t.f && t.opt.overflow){ //if overflow is set, incriment min-width to force overflow
261 t.css('min-width', t.w + x - drag.l);
262 }else {
263 t.w = t.width();
264 }
265 }else{
266 syncCols(t,i); //columns are synchronized
267 }
268 syncGrips(t);
269 var cb = t.opt.onDrag; //check if there is an onDrag callback
270 if (cb) { e.currentTarget = t[0]; cb(e); } //if any, it is fired
271 }
272 return false; //prevent text selection while dragging
273 };
274
275
276 /**
277 * Event handler fired when the dragging is over, updating table layout
278 * @param {event} e - grip's drag over event
279 */
280 var onGripDragOver = function(e){
281
282 d.unbind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE).unbind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE);
283 $("head :last-child").remove(); //remove the dragging cursor style
284 if(!drag) return;
285 drag.removeClass(drag.t.opt.draggingClass); //remove the grip's dragging css-class
286 if (!(drag.x - drag.l == 0)) {
287 var t = drag.t;
288 var cb = t.opt.onResize; //get some values
289 var i = drag.i; //column index
290 var last = i == t.ln-1; //check if it is the last column's grip (usually hidden)
291 var c = t.g[i].c; //the column being dragged
292 if(last){
293 c.width(drag.w);
294 c.w = drag.w;
295 }else{
296 syncCols(t, i, true); //the columns are updated
297 }
298 if(!t.f) applyBounds(t); //if not fixed mode, then apply bounds to obtain real width values
299 syncGrips(t); //the grips are updated
300 if (cb) { e.currentTarget = t[0]; cb(e); } //if there is a callback function, it is fired
301 if(t.p && S) memento(t); //if postbackSafe is enabled and there is sessionStorage support, the new layout is serialized and stored
302 }
303 drag = null; //since the grip's dragging is over
304 };
305
306
307 /**
308 * Event handler fired when the grip's dragging is about to start. Its main goal is to set up events
309 * and store some values used while dragging.
310 * @param {event} e - grip's mousedown event
311 */
312 var onGripMouseDown = function(e){
313 var o = $(this).data(SIGNATURE); //retrieve grip's data
314 var t = tables[o.t], g = t.g[o.i]; //shortcuts for the table and grip objects
315 var oe = e.originalEvent.touches; //touch or mouse event?
316 g.ox = oe? oe[0].pageX: e.pageX; //the initial position is kept
317 g.l = g.position().left;
318 g.x = g.l;
319
320 d.bind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE, onGripDrag ).bind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE, onGripDragOver); //mousemove and mouseup events are bound
321 h.append("<style type='text/css'>*{cursor:"+ t.opt.dragCursor +"!important}</style>"); //change the mouse cursor
322 g.addClass(t.opt.draggingClass); //add the dragging class (to allow some visual feedback)
323 drag = g; //the current grip is stored as the current dragging object
324 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
325 return false; //prevent text selection
326 };
327
328
329 /**
330 * Event handler fired when the browser is resized. The main purpose of this function is to update
331 * table layout according to the browser's size synchronizing related grips
332 */
333 var onResize = function(){
334 for(var t in tables){
335 if( tables.hasOwnProperty( t ) ) {
336 t = tables[t];
337 var i, mw=0;
338 t.removeClass(SIGNATURE); //firefox doesn't like layout-fixed in some cases
339 if (t.f) { //in fixed mode
340 t.w = t.width(); //its new width is kept
341 for(i=0; i<t.ln; i++) mw+= t.c[i].w;
342 //cell rendering is not as trivial as it might seem, and it is slightly different for
343 //each browser. In the beginning i had a big switch for each browser, but since the code
344 //was extremely ugly now I use a different approach with several re-flows. This works
345 //pretty well but it's a bit slower. For now, lets keep things simple...
346 for(i=0; i<t.ln; i++) t.c[i].css("width", M.round(1000*t.c[i].w/mw)/10 + "%").l=true;
347 //c.l locks the column, telling us that its c.w is outdated
348 }else{ //in non fixed-sized tables
349 applyBounds(t); //apply the new bounds
350 if(t.mode == 'flex' && t.p && S){ //if postbackSafe is enabled and there is sessionStorage support,
351 memento(t); //the new layout is serialized and stored for 'flex' tables
352 }
353 }
354 syncGrips(t.addClass(SIGNATURE));
355 }
356 }
357
358 };
359
360
361 //bind resize event, to update grips position
362 $(window).bind('resize.'+SIGNATURE, onResize);
363
364
365 /**
366 * The plugin is added to the jQuery library
367 * @param {Object} options - an object that holds some basic customization values
368 */
369 $.fn.extend({
370 colResizable: function(options) {
371 var defaults = {
372
373 //attributes:
374
375 resizeMode: 'fit', //mode can be 'fit', 'flex' or 'overflow'
376 draggingClass: 'JCLRgripDrag', //css-class used when a grip is being dragged (for visual feedback purposes)
377 gripInnerHtml: '', //if it is required to use a custom grip it can be done using some custom HTML
378 liveDrag: false, //enables table-layout updating while dragging
379 minWidth: 15, //minimum width value in pixels allowed for a column
380 headerOnly: false, //specifies that the size of the the column resizing anchors will be bounded to the size of the first row
381 hoverCursor: "col-resize", //cursor to be used on grip hover
382 dragCursor: "col-resize", //cursor to be used while dragging
383 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).
384 flush: false, //when postbakSafe is enabled, and it is required to prevent layout restoration after postback, 'flush' will remove its associated layout data
385 marginLeft: null, //in case the table contains any margins, colResizable needs to know the values used, e.g. "10%", "15em", "5px" ...
386 marginRight: null, //in case the table contains any margins, colResizable needs to know the values used, e.g. "10%", "15em", "5px" ...
387 disable: false, //disables all the enhancements performed in a previously colResized table
388 partialRefresh: false, //can be used in combination with postbackSafe when the table is inside of an updatePanel,
389 disabledColumns: [], //column indexes to be excluded
390 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.
391
392 //events:
393 onDrag: null, //callback function to be fired during the column resizing process if liveDrag is enabled
394 onResize: null //callback function fired when the dragging process is over
395 }
396 var options = $.extend(defaults, options);
397
398 //since now there are 3 different ways of resizing columns, I changed the external interface to make it clear
399 //calling it 'resizeMode' but also to remove the "fixed" attribute which was confusing for many people
400 options.fixed = true;
401 options.overflow = false;
402 switch(options.resizeMode){
403 case 'flex': options.fixed = false; break;
404 case 'overflow': options.fixed = false; options.overflow = true; break;
405 }
406
407 return this.each(function() {
408 init( this, options);
409 });
410 }
411 });
412 })(jQuery);
413
...@@ -2,7 +2,7 @@ import request from '@/utils/request' ...@@ -2,7 +2,7 @@ import request from '@/utils/request'
2 2
3 export function getMaList(params) { 3 export function getMaList(params) {
4 return request({ 4 return request({
5 url: `/league/competition/webList`, 5 url: `/league/competition/webList?topFlag=1&status=1`,
6 method: 'get', 6 method: 'get',
7 params: params 7 params: params
8 }) 8 })
...@@ -252,13 +252,7 @@ export function getMyGroupForCptFilter(groupId, cptId, query) { ...@@ -252,13 +252,7 @@ export function getMyGroupForCptFilter(groupId, cptId, query) {
252 data: query 252 data: query
253 }) 253 })
254 } 254 }
255 //todo 255
256 export function bindWdsf(perId,card) {
257 return request({
258 url: `/systemj/personInfo/bindWdsf/${perId}?card=${card}`,
259 method: 'post'
260 })
261 }
262 export function getGroupPersonList(query,groupId) { 256 export function getGroupPersonList(query,groupId) {
263 return request({ 257 return request({
264 url: `/systemj/personInfo/getPersonInfoListByGroupIdNoLabel/${groupId}`, 258 url: `/systemj/personInfo/getPersonInfoListByGroupIdNoLabel/${groupId}`,
...@@ -403,9 +397,8 @@ export function commitSign(data) { ...@@ -403,9 +397,8 @@ export function commitSign(data) {
403 } 397 }
404 export function getTotalFee(data) { 398 export function getTotalFee(data) {
405 return request({ 399 return request({
406 url: `/league/expenseConfig/getTotalFee`, 400 url: `/league/expenseConfig/getTotalFee/${data.cptId}/${data.entryId}`,
407 method: 'post', 401 method: 'get'
408 data: data
409 }) 402 })
410 } 403 }
411 export function getMemberInfoByCptId(cptId) { 404 export function getMemberInfoByCptId(cptId) {
...@@ -463,8 +456,8 @@ export function getMySignListTree(cptId, personId, teamId) { ...@@ -463,8 +456,8 @@ export function getMySignListTree(cptId, personId, teamId) {
463 export function getMySignInfoList(data) { 456 export function getMySignInfoList(data) {
464 return request({ 457 return request({
465 url: `/league/sign/getMySignInfoList`, 458 url: `/league/sign/getMySignInfoList`,
466 method: 'post', 459 method: 'get',
467 data: data 460 params: data
468 }) 461 })
469 } 462 }
470 export function saveMyGroupExtraInfo(data) { 463 export function saveMyGroupExtraInfo(data) {
...@@ -498,4 +491,18 @@ export function getPayedOrderPdf(cptId, groupId) { ...@@ -498,4 +491,18 @@ export function getPayedOrderPdf(cptId, groupId) {
498 method: 'get' 491 method: 'get'
499 }) 492 })
500 } 493 }
494 //todo
495 export function bindWdsf(perId,card) {
496 return request({
497 url: `/systemj/personInfo/bindWdsf/${perId}?card=${card}`,
498 method: 'post'
499 })
500 }
501 export function getProjectPageByPerIds(query) {
502 return request({
503 url: `/league/competitionProject/getProjectPageByPerIds/${query.cptId}/${query.perIds}`,
504 method: 'get',
505 params: query
506 })
507 }
501 508
......

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 { ...@@ -182,7 +182,9 @@ aside {
182 margin-bottom: 10px; 182 margin-bottom: 10px;
183 } 183 }
184 } 184 }
185 .m20{margin: 20px;}
185 .flexCenter{display: flex;align-items: center;justify-content: center;} 186 .flexCenter{display: flex;align-items: center;justify-content: center;}
187 .flexBetween{display: flex;align-items: center;justify-content: space-between;}
186 .primary-kx{border:1px solid var(--el-color-primary)!important;color: var(--el-color-primary)!important;} 188 .primary-kx{border:1px solid var(--el-color-primary)!important;color: var(--el-color-primary)!important;}
187 .primary-kx:hover{} 189 .primary-kx:hover{}
188 .border-info{background: rgba(69,61,234,0.04); 190 .border-info{background: rgba(69,61,234,0.04);
...@@ -222,8 +224,8 @@ aside { ...@@ -222,8 +224,8 @@ aside {
222 font-size: 24px;} 224 font-size: 24px;}
223 .el-dialog__headerbtn{font-size: 24px!important;color: #A0A0A0;} 225 .el-dialog__headerbtn{font-size: 24px!important;color: #A0A0A0;}
224 } 226 }
225 227 .w100{width: 100%;}
226 .w200px{width: 200px;} 228 .w200px{min-width: 200px;}
227 .pt30{padding-top: 30px;} 229 .pt30{padding-top: 30px;}
228 .d-form-border{ 230 .d-form-border{
229 border: 1px solid #E5E5E5;margin: 20px 0;padding: 20px} 231 border: 1px solid #E5E5E5;margin: 20px 0;padding: 20px}
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
18 :accept="accept" 18 :accept="accept"
19 > 19 >
20 <!-- 上传按钮 --> 20 <!-- 上传按钮 -->
21 <el-button type="primary" :disabled="props.disabled">选取文件</el-button> 21 <el-button type="primary" :disabled="props.disabled">{{ buttonText }}</el-button>
22 </el-upload> 22 </el-upload>
23 <!-- 上传提示 --> 23 <!-- 上传提示 -->
24 <div v-if="showTip && !disabled" class="el-upload__tip"> 24 <div v-if="showTip && !disabled" class="el-upload__tip">
...@@ -89,6 +89,10 @@ const props = defineProps({ ...@@ -89,6 +89,10 @@ const props = defineProps({
89 disabled: { 89 disabled: {
90 type: Boolean, 90 type: Boolean,
91 default: false 91 default: false
92 },
93 buttonText:{
94 type: String,
95 default: '上传文件'
92 } 96 }
93 }) 97 })
94 const accept = computed(() => { 98 const accept = computed(() => {
......
...@@ -6,40 +6,21 @@ ...@@ -6,40 +6,21 @@
6 6
7 <div class="home-menu forPc" style="margin: 0 20px"> 7 <div class="home-menu forPc" style="margin: 0 20px">
8 <el-menu 8 <el-menu
9 v-if="language==0"
10 router :default-active="activeIndex" :mode="mode" :ellipsis="true" 9 router :default-active="activeIndex" :mode="mode" :ellipsis="true"
11 popper-effect="dark" @select="handleSelect" 10 popper-effect="dark" @select="handleSelect"
12 > 11 >
13 <el-menu-item index="/">首页</el-menu-item> 12 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item>
14 <el-menu-item index="/news">新闻资讯</el-menu-item> 13 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item>
15 <el-menu-item index="/notice">通知公告</el-menu-item> 14 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item>
16 <el-menu-item index="/match/list/0">大赛报名</el-menu-item> 15 <el-menu-item index="/match/list/0">{{ language==0?'大赛报名':'SIGN UP' }}</el-menu-item>
17 <el-menu-item index="/saiC">赛程安排</el-menu-item> 16 <el-menu-item index="/saiC">{{ language==0?'赛程安排':'COMPETITIONS' }}</el-menu-item>
18 <el-menu-item index="/meta">媒体中心</el-menu-item> 17 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item>
19 <el-menu-item index="/guide">参赛指南</el-menu-item> 18 <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>
20 <el-sub-menu index="/about"> 19 <el-sub-menu index="/about">
21 <template #title>关于我们</template> 20 <template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>
22 <el-menu-item index="/about/wuDao">舞蹈节</el-menu-item> 21 <el-menu-item index="/about/wuDao">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>
23 <el-menu-item index="/about/culture">地方文化</el-menu-item> 22 <el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>
24 </el-sub-menu> 23 <el-menu-item index="/about/culture">{{ language==0?'地方文化':'Culture' }}</el-menu-item>
25 </el-menu>
26 <el-menu
27 v-if="language==1"
28 router :default-active="activeIndex" mode="horizontal" :ellipsis="true"
29 popper-effect="dark" @select="handleSelect"
30 >
31 <el-menu-item index="/">HOME</el-menu-item>
32 <el-menu-item index="/news">NEWS</el-menu-item>
33 <el-menu-item index="/notice">NOTICEBOARD</el-menu-item>
34 <el-menu-item index="/match/list/0">SIGN UP</el-menu-item>
35 <el-menu-item index="/saiC">COMPETITIONS</el-menu-item>
36 <el-menu-item index="/meta">MEDIA</el-menu-item>
37 <el-menu-item index="/guide">GUIDELINE</el-menu-item>
38 <el-sub-menu index="/about">
39 <template #title>CONTACT & MORE</template>
40 <el-menu-item index="/about/wuDao">About Us</el-menu-item>
41 <el-menu-item index="/about/regulations">Rules & Regulations</el-menu-item>
42 <el-menu-item index="/about/culture">Culture</el-menu-item>
43 </el-sub-menu> 24 </el-sub-menu>
44 </el-menu> 25 </el-menu>
45 </div> 26 </div>
...@@ -49,25 +30,19 @@ ...@@ -49,25 +30,19 @@
49 <el-button :icon="Search" circle @click="searchNews" /> 30 <el-button :icon="Search" circle @click="searchNews" />
50 </div> 31 </div>
51 <div class="languageBtn"> 32 <div class="languageBtn">
52 <span v-if="language==0" :class="language==0?'active':''" @click="changeLanguage(0)">中文</span> 33 <span :class="language==0?'active':''" @click="changeLanguage(0)">{{ language==0?'中文':'CN' }}</span>
53 <span v-else :class="language==0?'active':''" @click="changeLanguage(0)">CN</span>
54 | 34 |
55 <span :class="language==1?'active':''" @click="changeLanguage(1)">EN</span> 35 <span :class="language==1?'active':''" @click="changeLanguage(1)">EN</span>
56 </div> 36 </div>
57 <div class="ml20 forPc" > 37 <div class="ml20 forPc" >
58 <el-button v-if="!isLogin" style="border-radius: 20px;" class="loginBtn"> 38 <el-button v-if="!isLogin" style="border-radius: 20px;" class="loginBtn">
59 <span v-if="language==0" @click="goLogin">登录</span> 39 <span @click="goLogin">{{ language==0?'登录':'LOGIN' }}</span>
60 <span v-if="language==1" @click="goLogin">LOGIN</span>
61 <!-- | &nbsp;<span @click="goRegister">注册</span>--> 40 <!-- | &nbsp;<span @click="goRegister">注册</span>-->
62 </el-button> 41 </el-button>
63 42
64 <el-button v-if="language==0&&isLogin" style="border-radius: 20px;" class="loginBtn"> 43 <el-button v-if="isLogin" style="border-radius: 20px;" class="loginBtn">
65 <span @click="router.push('/center/myInfo')">个人中心</span> 44 <span @click="router.push('/center/myInfo')">{{ language==0?'个人中心':'Personal' }}</span>
66 &nbsp;&nbsp;<span @click="logout()">退出</span> 45 &nbsp;&nbsp;<span @click="logout()">{{language==0?'退出':'Exit'}}</span>
67 </el-button>
68 <el-button v-if="language==1&&isLogin" style="border-radius: 20px;" class="loginBtn">
69 <span @click="router.push('/center/myInfo')">Personal</span>
70 &nbsp;&nbsp;<span @click="logout()">Exit</span>
71 </el-button> 46 </el-button>
72 </div> 47 </div>
73 </div> 48 </div>
......
...@@ -522,10 +522,16 @@ export const constantRoutes = [ ...@@ -522,10 +522,16 @@ export const constantRoutes = [
522 meta: { title: '我的报名' } 522 meta: { title: '我的报名' }
523 }, 523 },
524 { 524 {
525 path: 'myTrain', 525 path: 'myReservation',
526 component: () => import('@/viewsPc/center/myTrain'), 526 component: () => import('@/viewsPc/center/myReservation'),
527 name: 'myTrain', 527 name: 'myReservation',
528 meta: { title: '我的预定' } 528 meta: { title: '我的预定' }
529 },
530 {
531 path: 'mySms',
532 component: () => import('@/viewsPc/center/mySms'),
533 name: 'mySms',
534 meta: { title: '系统消息' }
529 } 535 }
530 ] 536 ]
531 } 537 }
......
...@@ -278,6 +278,12 @@ export const constantRoutes = [ ...@@ -278,6 +278,12 @@ export const constantRoutes = [
278 redirect: '/match/list', 278 redirect: '/match/list',
279 children: [ 279 children: [
280 { 280 {
281 path: 'pay',
282 component: () => import('@/viewsPc/match/pay'),
283 name: 'signPay',
284 meta: { title: '缴费清单' }
285 },
286 {
281 path: 'list', 287 path: 'list',
282 component: () => import('@/viewsPc/match/index'), 288 component: () => import('@/viewsPc/match/index'),
283 name: 'matchList', 289 name: 'matchList',
...@@ -324,6 +330,12 @@ export const constantRoutes = [ ...@@ -324,6 +330,12 @@ export const constantRoutes = [
324 component: () => import('@/viewsPc/match/expenseDetails'), 330 component: () => import('@/viewsPc/match/expenseDetails'),
325 name: 'expenseDetails', 331 name: 'expenseDetails',
326 meta: { title: '费用明细' } 332 meta: { title: '费用明细' }
333 },
334 {
335 path: 'list/:id/signPreview',
336 component: () => import('@/viewsPc/match/signPreview'),
337 name: 'signPreview',
338 meta: { title: '提交审核' }
327 } 339 }
328 ] 340 ]
329 }, 341 },
...@@ -391,26 +403,43 @@ export const constantRoutes = [ ...@@ -391,26 +403,43 @@ export const constantRoutes = [
391 meta: { title: '个人中心' } 403 meta: { title: '个人中心' }
392 }, 404 },
393 { 405 {
394 path: 'myTeam', 406 path: 'myPassword',
395 component: () => import('@/viewsPc/center/teamInfo'), 407 component: () => import('@/viewsPc/center/myPassword'),
396 name: 'myTeam', 408 name: 'myPassword',
397 meta: { title: '我的团队' } 409 meta: { title: '修改密码' }
410 },
411 {
412 path: 'myCertification',
413 component: () => import('@/viewsPc/center/myCertification'),
414 name: 'myCertification',
415 meta: { title: 'institutional accreditation' }
416 },
417 {
418 path: 'myMember',
419 component: () => import('@/viewsPc/center/myMember'),
420 name: 'myMember',
421 meta: { title: 'Player Management' }
398 }, 422 },
399 { 423 {
400 path: 'myMatch', 424 path: 'myMatch',
401 component: () => import('@/viewsPc/center/myMatch'), 425 component: () => import('@/viewsPc/center/myMatch'),
402 name: 'myMatch', 426 name: 'myMatch',
403 meta: { title: '我的赛事' } 427 meta: { title: 'My registration' }
428 },
429 {
430 path: 'myReservation',
431 component: () => import('@/viewsPc/center/myReservation'),
432 name: 'myReservation',
433 meta: { title: 'My reservation' }
404 }, 434 },
405 { 435 {
406 path: 'myTrain', 436 path: 'mySms',
407 component: () => import('@/viewsPc/center/myTrain'), 437 component: () => import('@/viewsPc/center/mySms'),
408 name: 'myTrain', 438 name: 'mySms',
409 meta: { title: '我的培训' } 439 meta: { title: 'System messages' }
410 } 440 }
411 ] 441 ]
412 } 442 }]
413 ]
414 } 443 }
415 ] 444 ]
416 445
......
...@@ -14,6 +14,7 @@ import { saveAs } from 'file-saver' ...@@ -14,6 +14,7 @@ import { saveAs } from 'file-saver'
14 import useUserStore from '@/store/modules/user' 14 import useUserStore from '@/store/modules/user'
15 import { sendNotification } from '@/assets/lib/extend' 15 import { sendNotification } from '@/assets/lib/extend'
16 import _ from 'lodash' 16 import _ from 'lodash'
17 const language = cache.local.get('language') || 0
17 18
18 let downloadLoadingInstance 19 let downloadLoadingInstance
19 // 是否显示重新登录 20 // 是否显示重新登录
...@@ -21,7 +22,7 @@ export const isRelogin = { show: false } ...@@ -21,7 +22,7 @@ export const isRelogin = { show: false }
21 22
22 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' 23 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
23 // 对应国际化资源文件后缀 24 // 对应国际化资源文件后缀
24 axios.defaults.headers['Content-Language'] = 'zh_CN' 25 axios.defaults.headers['Content-Language'] = (language==0? 'zh_CN':'en_US' )
25 // 创建axios实例 26 // 创建axios实例
26 const service = axios.create({ 27 const service = axios.create({
27 // axios中请求配置有baseURL选项,表示请求URL公共部分 28 // axios中请求配置有baseURL选项,表示请求URL公共部分
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
4 <el-row :gutter="20"> 4 <el-row :gutter="20">
5 <el-col :lg="5" :md="5" :xl="6" :sm="8" :xs="8"> 5 <el-col :lg="5" :md="5" :xl="6" :sm="8" :xs="8">
6 <el-card class="mb20"> 6 <el-card class="mb20">
7 <div class="center-menu"> 7 <div :class="language==0?'center-menu':'center-menu en-menu'">
8 <ul v-if="user.utype=='2'"> 8 <ul v-if="user.utype=='2'">
9 <li 9 <li
10 v-for="(m, i) in menus" 10 v-for="(m, i) in menus"
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 > 13 >
14 <a href="javascript:void(0)" @click="toInfo(m)"> 14 <a href="javascript:void(0)" @click="toInfo(m)">
15 <img :src="m.isActive ? m.picUrl2 : m.picUrl1"> 15 <img :src="m.isActive ? m.picUrl2 : m.picUrl1">
16 {{ m.name }} 16 {{m.name}}
17 </a> 17 </a>
18 </li> 18 </li>
19 </ul> 19 </ul>
...@@ -46,6 +46,8 @@ import {useRoute, useRouter} from 'vue-router' ...@@ -46,6 +46,8 @@ import {useRoute, useRouter} from 'vue-router'
46 import {onMounted} from '@vue/runtime-core' 46 import {onMounted} from '@vue/runtime-core'
47 import useUserStore from '@/store/modules/user' 47 import useUserStore from '@/store/modules/user'
48 import _ from 'lodash' 48 import _ from 'lodash'
49 import cache from "@/plugins/cache";
50 const language = ref(cache.local.get('language') || 0)
49 51
50 const route = useRoute() 52 const route = useRoute()
51 const router = useRouter() 53 const router = useRouter()
...@@ -53,50 +55,50 @@ const router = useRouter() ...@@ -53,50 +55,50 @@ const router = useRouter()
53 const user = ref({}) 55 const user = ref({})
54 const menus = ref([ 56 const menus = ref([
55 { 57 {
56 name: '基础信息', 58 name: language.value==0?'基础信息':'Basic Information',
57 routeName: 'myInfo', 59 routeName: 'myInfo',
58 picUrl1: '/img/nav_26.png', 60 picUrl1: '/img/nav_26.png',
59 picUrl2: '/img/nav_26_dwn.png', 61 picUrl2: '/img/nav_26_dwn.png',
60 isActive: false 62 isActive: false
61 }, 63 },
62 { 64 {
63 name: '修改密码', 65 name: language.value==0?'修改密码':'Change Password',
64 routeName: 'myPassword', 66 routeName: 'myPassword',
65 picUrl1: '/img/nav_27.png', 67 picUrl1: '/img/nav_27.png',
66 picUrl2: '/img/nav_27_dwn.png', 68 picUrl2: '/img/nav_27_dwn.png',
67 isActive: false 69 isActive: false
68 }, 70 },
69 { 71 {
70 name: '团队认证', 72 name: language.value==0?'团队认证':'Institutional Accreditation',
71 routeName: 'myCertification', 73 routeName: 'myCertification',
72 picUrl1: '/img/nav_32.png', 74 picUrl1: '/img/nav_32.png',
73 picUrl2: '/img/nav_32_dwn.png', 75 picUrl2: '/img/nav_32_dwn.png',
74 isActive: false 76 isActive: false
75 }, 77 },
76 { 78 {
77 name: '选手管理', 79 name: language.value==0?'选手管理':'Player Management',
78 routeName: 'myMember', 80 routeName: 'myMember',
79 picUrl1: '/img/nav_31.png', 81 picUrl1: '/img/nav_31.png',
80 picUrl2: '/img/nav_31_dwn.png', 82 picUrl2: '/img/nav_31_dwn.png',
81 isActive: false 83 isActive: false
82 }, 84 },
83 { 85 {
84 name: '我的报名', 86 name: language.value==0?'我的报名':'My Eegistration',
85 routeName: 'myMatch', 87 routeName: 'myMatch',
86 picUrl1: '/img/nav_28.png', 88 picUrl1: '/img/nav_28.png',
87 picUrl2: '/img/nav_28_dwn.png', 89 picUrl2: '/img/nav_28_dwn.png',
88 isActive: false 90 isActive: false
89 }, 91 },
90 { 92 {
91 name: '我的预定', 93 name: language.value==0?'我的预定':'My Reservation',
92 routeName: 'myMatch', 94 routeName: 'myReservation',
93 picUrl1: '/img/nav_29.png', 95 picUrl1: '/img/nav_29.png',
94 picUrl2: '/img/nav_29_dwn.png', 96 picUrl2: '/img/nav_29_dwn.png',
95 isActive: false 97 isActive: false
96 }, 98 },
97 { 99 {
98 name: '系统消息', 100 name: language.value==0?'系统消息':'System messages',
99 routeName: 'myTrain', 101 routeName: 'mySms',
100 picUrl1: '/img/nav_30.png', 102 picUrl1: '/img/nav_30.png',
101 picUrl2: '/img/nav_30_dwn.png', 103 picUrl2: '/img/nav_30_dwn.png',
102 isActive: false 104 isActive: false
...@@ -104,36 +106,36 @@ const menus = ref([ ...@@ -104,36 +106,36 @@ const menus = ref([
104 ]) 106 ])
105 const menusPersonal = ref([ 107 const menusPersonal = ref([
106 { 108 {
107 name: '基础信息', 109 name: language.value==0?'基础信息':'Basic Information',
108 routeName: 'myInfo', 110 routeName: 'myInfo',
109 picUrl1: '/img/nav_26.png', 111 picUrl1: '/img/nav_26.png',
110 picUrl2: '/img/nav_26_dwn.png', 112 picUrl2: '/img/nav_26_dwn.png',
111 isActive: false 113 isActive: false
112 }, 114 },
113 { 115 {
114 name: '修改密码', 116 name: language.value==0?'修改密码':'Change Password',
115 routeName: 'myPassword', 117 routeName: 'myPassword',
116 picUrl1: '/img/nav_27.png', 118 picUrl1: '/img/nav_27.png',
117 picUrl2: '/img/nav_27_dwn.png', 119 picUrl2: '/img/nav_27_dwn.png',
118 isActive: false 120 isActive: false
119 }, 121 },
120 { 122 {
121 name: '我的报名', 123 name: language.value==0?'我的报名':'My Eegistration',
122 routeName: 'myMatch', 124 routeName: 'myMatch',
123 picUrl1: '/img/nav_28.png', 125 picUrl1: '/img/nav_28.png',
124 picUrl2: '/img/nav_28_dwn.png', 126 picUrl2: '/img/nav_28_dwn.png',
125 isActive: false 127 isActive: false
126 }, 128 },
127 { 129 {
128 name: '我的预定', 130 name: language.value==0?'我的预定':'My Reservation',
129 routeName: 'myMatch', 131 routeName: 'myReservation',
130 picUrl1: '/img/nav_29.png', 132 picUrl1: '/img/nav_29.png',
131 picUrl2: '/img/nav_29_dwn.png', 133 picUrl2: '/img/nav_29_dwn.png',
132 isActive: false 134 isActive: false
133 }, 135 },
134 { 136 {
135 name: '系统消息', 137 name: language.value==0?'系统消息':'System messages',
136 routeName: 'myTrain', 138 routeName: 'mySms',
137 picUrl1: '/img/nav_30.png', 139 picUrl1: '/img/nav_30.png',
138 picUrl2: '/img/nav_30_dwn.png', 140 picUrl2: '/img/nav_30_dwn.png',
139 isActive: false 141 isActive: false
...@@ -174,12 +176,18 @@ const toInfo = (item) => { ...@@ -174,12 +176,18 @@ const toInfo = (item) => {
174 li { 176 li {
175 margin-bottom: 15px; 177 margin-bottom: 15px;
176 } 178 }
179 &.en-menu{text-align: left;
180 li{padding: 6px 0 6px 14px;
181 a{display: flex;align-items: center;}
182 }
183 img{padding: 0;width: 26px;}
184 }
177 } 185 }
178 186
179 li img { 187 li img {
180 display: inline-block; 188 display: inline-block;
181 vertical-align: middle; 189 vertical-align: middle;
182 margin-right: 20px; 190 margin-right: 10px;
183 padding: 5px; 191 padding: 5px;
184 } 192 }
185 193
......
1 <template> 1 <template>
2 <el-card :body-style="{'padding':'0'}"> 2 <el-card :body-style="{'padding':'0'}" class="mb20">
3 <div class="indexTitle"><h3 class="leftboderTT">团队认证</h3></div> 3 <div class="indexTitle">
4 <h3 class="leftboderTT">{{ language==0?'团队认证':'Institutional Accreditation' }}</h3>
5 </div>
4 6
5 <div class="pd20"> 7 <div class="pd20">
6 <el-form :model="form" label-width="160px"> 8 <el-form :model="form" label-width="160px" :label-position="language==0?'left':'top'">
7 <fieldset class="fieldset-form"> 9 <fieldset class="fieldset-form">
8 <legend>机构类型</legend> 10 <legend>{{ language==0?'机构类型':'Institution Type' }}</legend>
9 <div class="pt30"> 11 <div class="pt30">
10 <el-form-item label="选择机构类型" required> 12 <el-form-item :label="language==0?'选择机构类型':'Select institution type'" required>
11 <el-radio-group v-model="form.type"> 13 <el-radio-group v-model="form.type">
12 <el-radio-button label="0">普通院校</el-radio-button> 14 <el-radio-button label="0">{{ language==0?'普通院校':'School' }}</el-radio-button>
13 <el-radio-button label="1">专业舞蹈学校</el-radio-button> 15 <el-radio-button label="1">{{ language==0?'专业舞蹈学校':'Professional dance school' }}</el-radio-button>
14 <el-radio-button label="2">培训机构/俱乐部</el-radio-button> 16 <el-radio-button label="2">{{ language==0?'培训机构/俱乐部':'Company/Club' }}</el-radio-button>
15 <el-radio-button label="3">地方协会</el-radio-button> 17 <el-radio-button label="3">{{ language==0?'地方协会':'Local Association' }}</el-radio-button>
16 <el-radio-button label="4">国家协会</el-radio-button> 18 <el-radio-button label="4">{{ language==0?'国家协会':'National Association' }}</el-radio-button>
17 </el-radio-group> 19 </el-radio-group>
18 </el-form-item> 20 </el-form-item>
19 </div> 21 </div>
20 </fieldset> 22 </fieldset>
21 <fieldset class="fieldset-form mt30"> 23 <fieldset class="fieldset-form mt30">
22 <legend>机构基础信息 </legend> 24 <legend>{{ language==0?'机构基础信息':'Institutional Basic Information' }} </legend>
23 <div class="pt30" style="max-width: 500px"> 25 <div class="pt30" style="max-width: 500px">
24 <el-form-item label="所属国家" required> 26 <el-form-item :label="language==0?'所属国家':'Nationality'" required>
25 <el-select filterable v-model="form.countryId"> 27 <el-select filterable v-model="form.countryId">
26 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" /> 28 <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
27 </el-select> 29 </el-select>
28 </el-form-item> 30 </el-form-item>
29 <el-form-item label="详细地址" required prop="address"> 31 <el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
30 <el-cascader v-if="form.countryId == 240" 32 <el-cascader v-if="form.countryId == 240"
31 v-model="form.regionId" 33 v-model="form.regionId"
32 style="width: 100%;" 34 style="width: 100%;"
33 :options="regionsList" 35 :options="regionsList"
34 :props="{ label:'text' }" 36 :props="{ label:'text' }"
35 /> 37 />
36 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/> 38 <el-input type="textarea" v-model="form.address" class="mt10"/>
37 </el-form-item> 39 </el-form-item>
38 <el-form-item label="机构名称" required prop="name"> 40 <el-form-item :label="language==0?'机构名称':'Team Name'" required prop="name">
39 <el-input type="text" v-model="form.name" placeholder="请输入内容"/> 41 <el-input type="text" v-model="form.name" :placeholder="language==0?'请输入内容':''"/>
40 </el-form-item> 42 </el-form-item>
41 <el-form-item label="联系人姓名" required prop="contactPerson"> 43 <el-form-item :label="language==0?'联系人姓名':'Contact Person'" required prop="contactPerson">
42 <el-input type="text" v-model="form.contactPerson" placeholder="请输入内容"/> 44 <el-input type="text" v-model="form.contactPerson" :placeholder="language==0?'请输入内容':''"/>
43 </el-form-item> 45 </el-form-item>
44 <el-form-item label="联系人电话" required prop="contactTelno"> 46 <el-form-item :label="language==0?'联系人电话':'Contact Phone'" required prop="contactTelno">
45 <el-input v-model="form.contactTelno" type="phone" placeholder="请输入内容"/> 47 <el-input v-model="form.contactTelno" type="phone" :placeholder="language==0?'请输入内容':''"/>
46 </el-form-item> 48 </el-form-item>
47 <el-form-item label="联系人邮箱" required prop="contactEmail"> 49 <el-form-item :label="language==0?'联系人邮箱':'Contact Email'" required prop="contactEmail">
48 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/> 50 <el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
49 </el-form-item> 51 </el-form-item>
50 52
51 </div> 53 </div>
52 </fieldset> 54 </fieldset>
53 <fieldset class="fieldset-form mt30"> 55 <fieldset class="fieldset-form mt30">
54 <legend>机构认证信息 </legend> 56 <legend>{{ language==0?'机构认证信息':'Institutional certification information' }} </legend>
55 <div class="pt30" style="max-width: 500px"> 57 <div class="pt30" style="max-width: 500px">
56 <el-form-item label="机构代码" required prop="orgCode"> 58 <el-form-item :label="language==0?'机构代码':'Organization Code'" required prop="orgCode">
57 <el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/> 59 <el-input type="text" v-model="form.orgCode" :placeholder="language==0?'请输入内容':''"/>
58 </el-form-item> 60 </el-form-item>
59 <el-form-item label="机构证件" required prop="orgCert"> 61 <el-form-item :label="language==0?'机构证件':'Institutional documents'" required prop="orgCert">
60 <file-upload v-model="form.orgCert"/> 62 <file-upload v-model="form.orgCert" :button-text="language==0?'上传文件':'Upload'"/>
61 </el-form-item> 63 </el-form-item>
62 64
63 </div> 65 </div>
64 </fieldset> 66 </fieldset>
65 <fieldset class="fieldset-form mt30"> 67 <fieldset class="fieldset-form mt30">
66 <legend>机构法人信息 </legend> 68 <legend>{{ language==0?'机构法人信息':'Institutional legal person information' }} </legend>
67 <div class="pt30" style="max-width: 500px"> 69 <div class="pt30" style="max-width: 500px">
68 <el-form-item label="法人姓名" required prop="orgCode"> 70 <el-form-item :label="language==0?'法人姓名':'Legal Person Name'" required prop="orgCode">
69 <el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/> 71 <el-input type="text" v-model="form.orgCode" :placeholder="language==0?'请输入内容':''"/>
70 </el-form-item> 72 </el-form-item>
71 <el-form-item label="法定代表人身份文件" required prop="orgCert"> 73 <el-form-item :label="language==0?'法定代表人身份文件':'Identity documents of the legal representative'" required prop="orgCert">
72 <file-upload v-model="form.orgCert"/> 74 <file-upload v-model="form.orgCert" :button-text="language==0?'上传文件':'Upload'"/>
73 </el-form-item> 75 </el-form-item>
74 76
75 </div> 77 </div>
...@@ -77,7 +79,7 @@ ...@@ -77,7 +79,7 @@
77 79
78 </el-form> 80 </el-form>
79 <div class="text-center mt30"> 81 <div class="text-center mt30">
80 <el-button type="primary" class="btn-lineG w200px" round>提交审核</el-button> 82 <el-button type="primary" class="btn-lineG w200px" round>{{ language==0?'提交审核':'Submit' }}</el-button>
81 </div> 83 </div>
82 </div> 84 </div>
83 </el-card> 85 </el-card>
...@@ -91,9 +93,12 @@ import {useRouter} from 'vue-router' ...@@ -91,9 +93,12 @@ import {useRouter} from 'vue-router'
91 import {ElMessage, ElMessageBox} from 'element-plus' 93 import {ElMessage, ElMessageBox} from 'element-plus'
92 import FileUpload from "@/components/FileUpload"; 94 import FileUpload from "@/components/FileUpload";
93 import * as match from "@/apiPc/match"; 95 import * as match from "@/apiPc/match";
96 import cache from "@/plugins/cache";
97 const language = ref(cache.local.get('language') || 0)
94 98
95 const form = ref({}) 99 const form = ref({})
96 const regionsList = ref([]) 100 const regionsList = ref([])
101 const countryList = ref([])
97 function submit() { 102 function submit() {
98 commitAudit().then(res => { 103 commitAudit().then(res => {
99 104
...@@ -101,9 +106,15 @@ function submit() { ...@@ -101,9 +106,15 @@ function submit() {
101 } 106 }
102 107
103 onMounted(() => { 108 onMounted(() => {
109 getCountryList()
104 getRegionsList() 110 getRegionsList()
105 getData() 111 getData()
106 }) 112 })
113 function getCountryList() {
114 match.countryList().then(res => {
115 countryList.value = res.data
116 })
117 }
107 function getRegionsList() { 118 function getRegionsList() {
108 match.regionsList().then(res => { 119 match.regionsList().then(res => {
109 regionsList.value = res.data 120 regionsList.value = res.data
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <el-card :body-style="{'padding':'0'}"> 3 <el-card :body-style="{'padding':'0'}">
4 <div class="indexTitle"><h3 class="leftboderTT">机构基础信息</h3></div> 4 <div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'机构基础信息':'Institutional Basic Information' }}</h3></div>
5 <!-- uType字段 1 是个人 2是团体--> 5 <!-- uType字段 1 是个人 2是团体-->
6 <!-- {{user}}--> 6 <!-- {{user}}-->
7 <team-info :form="myform" v-if="user.utype=='2'"/> 7 <team-info :form="myform" :language="language" v-if="user.utype=='2'"/>
8 8
9 </el-card> 9 </el-card>
10 10
...@@ -20,7 +20,8 @@ import { ElMessage, ElMessageBox } from 'element-plus' ...@@ -20,7 +20,8 @@ import { ElMessage, ElMessageBox } from 'element-plus'
20 import { nationList } from '@/assets/js/data' 20 import { nationList } from '@/assets/js/data'
21 import {getGroupInfo} from "@/apiPc/match"; 21 import {getGroupInfo} from "@/apiPc/match";
22 import TeamInfo from "@/viewsPc/center/teamInfo"; 22 import TeamInfo from "@/viewsPc/center/teamInfo";
23 23 import cache from "@/plugins/cache";
24 const language = ref(cache.local.get('language') || 0)
24 const router = useRouter() 25 const router = useRouter()
25 const { proxy } = getCurrentInstance() 26 const { proxy } = getCurrentInstance()
26 const props = defineProps({ 27 const props = defineProps({
......
1 <template> 1 <template>
2 <el-card> 2 <el-card class="mb20">
3 <div class="grid-content"> 3 <div class="pad20">
4 <!-- <el-tabs v-model="activeName">--> 4 <el-form :model="query" :inline="true">
5 <!-- <el-tab-pane label="报项" name="first">--> 5 <el-form-item label="赛事名称">
6 <div class="pad20"> 6 <el-input v-model="query.name" style="width: 214px;" @change="getList"/>
7 <el-form :model="query" :inline="true"> 7 </el-form-item>
8 <el-form-item label="赛事名称"> 8 <el-form-item label="赛事时间">
9 <el-input v-model="query.name" style="width: 214px;" @change="getList" /> 9 <el-date-picker
10 </el-form-item> 10 v-model="cptPeriodArr"
11 <el-form-item label="赛事时间"> 11 format="YYYY-MM-DD" type="daterange"
12 <el-date-picker 12 value-format="YYYY-MM-DD" range-separator="至"
13 v-model="cptPeriodArr" 13 start-placeholder="开始时间"
14 format="YYYY-MM-DD" type="daterange" 14 end-placeholder="结束时间"
15 value-format="YYYY-MM-DD" range-separator="至" 15 @change="getList"
16 start-placeholder="开始时间" 16 />
17 end-placeholder="结束时间" 17 </el-form-item>
18 @change="getList" 18 <el-form-item>
19 /> 19 <el-button type="primary" @click="getList">查询</el-button>
20 </el-form-item> 20 <el-button type="info" @click="reset(query)">重置</el-button>
21 <el-form-item> 21 </el-form-item>
22 <el-button type="primary" @click="getList">查询</el-button> 22 </el-form>
23 <el-button type="info" @click="reset(query)">重置</el-button> 23
24 </el-form-item> 24 <div class="pd20">
25 </el-form> 25 <div class="matchItem" v-for="n in tableData" :key="n.id" @click="goDetail(n.id)">
26 <el-table :data="tableData" style="width: 100%"> 26 <el-row :gutter="15">
27 <el-table-column type="index" label="序号" width="80" align="center" /> 27 <el-col :lg="6" :md="8" :xl="10">
28 <el-table-column label="赛事名称" min-width="260"> 28 <img class="mauto" :src="fillImgUrl(n.coverUrl)">
29 <template #default="scope"> 29 </el-col>
30 {{ scope.row.name }} 30 <el-col :lg="18" :md="16" :xl="14">
31 </template> 31 <div class="info">
32 </el-table-column> 32 <h3>{{ n.name }}</h3>
33 <el-table-column label="参赛队" min-width="260"> 33 <p class="ppl"><label>比赛时间:</label>{{ n.beginTime?.slice(0, 10) }}{{ n.endTime?.slice(0, 10) }}
34 <template #default="scope"> 34 </p>
35 <span v-if="scope.row.groupName">{{ scope.row.groupName }}</span> 35 <p class="ppl"><label>&ensp;&ensp;&ensp;&ensp;点:</label>{{ n.address }}</p>
36 <span v-else>-</span> 36 <p class="ppl"><label>报名截止:</label>{{ n.signEndTime?.slice(0, 10) }}</p>
37 </template> 37
38 </el-table-column> 38 <p class="ppl"><label>联系人员:</label>{{ n.contactPerson }}</p>
39 <el-table-column label="赛事开始时间" min-width="120"> 39 <p class="ppl"><label>联系电话:</label>{{ n.contactTelno }}</p>
40 <template #default="scope">{{ scope.row.beginTime.substring(0, 10) }}</template> 40 <p class="ppl"><label>&ensp;&ensp;&ensp;&ensp;箱:</label>{{ n.contactEmail }}</p>
41 </el-table-column> 41
42 <el-table-column label="赛事结束时间" min-width="120"> 42 </div>
43 <template #default="scope">{{ scope.row.endTime.substring(0, 10) }}</template> 43 </el-col>
44 </el-table-column> 44 </el-row>
45 <el-table-column label="审批状态" min-width="100" align="center">
46 <template #default="scope">
47 <el-tag v-if="scope.row.auditStatus=='1'" type="info">已提交</el-tag>
48 <el-tag v-if="scope.row.auditStatus=='2'" type="success">审核通过</el-tag>
49 <el-tag v-if="scope.row.auditStatus=='3'" type="danger">未通过</el-tag>
50 <el-tag v-if="scope.row.auditStatus=='4'" type="warning">已取消</el-tag>
51 </template>
52 </el-table-column>
53 <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="180">
54 <template #default="scope">
55 <el-button v-if="scope.row.auditStatus!='0'" type="text" @click="downloadVoucher(scope.row)">
56 下载报名凭证
57 </el-button>
58 <el-button type="text" @click="signRow(scope.row)">详情</el-button>
59 </template>
60 </el-table-column>
61 </el-table>
62 <pagination
63 v-show="total > 0"
64 v-model:page="query.pageNum"
65 v-model:limit="query.pageSize"
66 :total="total"
67 @pagination="getList"
68 />
69 </div>
70 <!-- </el-tab-pane>-->
71 <!-- <el-tab-pane label="订单" name="two">-->
72 <!-- <div class="pad20">-->
73 <!-- <el-form :model="query2" :inline="true">-->
74 <!-- <el-form-item label="订单状态">-->
75 <!-- <el-select v-model="query2.payStatus" @change="getBillList">-->
76 <!-- <el-option value="" label="全部" />-->
77 <!-- <el-option value="0" label="待支付" />-->
78 <!-- <el-option value="3" label="已完成" />-->
79 <!-- <el-option value="5" label="已退回" />-->
80 <!-- </el-select>-->
81 <!-- </el-form-item>-->
82 <!-- <el-form-item label="支付方式">-->
83 <!-- <el-select v-model="query2.payTypeParam" @change="getBillList">-->
84 <!-- <el-option value="" label="全部">全部</el-option>-->
85 <!-- <el-option value="0" label="线上支付">线上支付</el-option>-->
86 <!-- <el-option value="1" label="线下支付">线下支付</el-option>-->
87 <!-- <el-option value="2" label="会员卡支付">会员卡支付</el-option>-->
88 <!-- <el-option value="3" label="微信支付">微信支付</el-option>-->
89 <!-- </el-select>-->
90 <!-- </el-form-item>-->
91 <!-- <el-form-item label="订单号">-->
92 <!-- <el-input v-model="query2.code" />-->
93 <!-- </el-form-item>-->
94 <!-- <el-form-item label="订单名称">-->
95 <!-- <el-input v-model="query2.cptName" style="width: 214px;" @change="getBillList" />-->
96 <!-- </el-form-item>-->
97 <!-- <el-form-item label="付款时间">-->
98 <!-- <el-date-picker-->
99 <!-- v-model="payTimeArr"-->
100 <!-- format="YYYY-MM-DD" type="daterange"-->
101 <!-- value-format="YYYY-MM-DD" range-separator="至"-->
102 <!-- start-placeholder="开始时间"-->
103 <!-- end-placeholder="结束时间"-->
104 <!-- @change="getBillList"-->
105 <!-- />-->
106 <!-- </el-form-item>-->
107 <!-- <el-form-item label="下单时间">-->
108 <!-- <el-date-picker-->
109 <!-- v-model="commitTimeArr"-->
110 <!-- format="YYYY-MM-DD" type="daterange"-->
111 <!-- value-format="YYYY-MM-DD" range-separator="至"-->
112 <!-- start-placeholder="开始时间"-->
113 <!-- end-placeholder="结束时间"-->
114 <!-- @change="getBillList"-->
115 <!-- />-->
116 <!-- </el-form-item>-->
117 <!-- <el-form-item>-->
118 <!-- <el-button type="primary" @click="getBillList">查询</el-button>-->
119 <!-- <el-button type="info" @click="reset(query2)">重置</el-button>-->
120 <!-- </el-form-item>-->
121
122 <!-- </el-form>-->
123
124 <!-- <el-table v-if="billList.length>0" :data="billList" style="width: 100%">-->
125 <!-- &lt;!&ndash; <el-table-column type="selection" width="80" />&ndash;&gt;-->
126 <!-- <el-table-column prop="id" label="订单编号" min-width="200" />-->
127 <!-- <el-table-column prop="cptName" label="订单名称" min-width="200" />-->
128 <!-- <el-table-column prop="commitTime" label="下单时间" min-width="180" />-->
129 <!-- <el-table-column prop="payTime" label="付款时间" min-width="180" />-->
130 <!-- <el-table-column label="支付金额" min-width="120" align="center">-->
131 <!-- <template #default="scope">-->
132 <!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
133 <!-- <span v-else>¥{{ scope.row.totalAmount }}</span>-->
134 <!-- </template>-->
135 <!-- </el-table-column>-->
136 <!-- &lt;!&ndash; <el-table-column label="已付金额" min-width="120" align="center">&ndash;&gt;-->
137 <!-- &lt;!&ndash; <template #default="scope">&ndash;&gt;-->
138 <!-- &lt;!&ndash; <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>&ndash;&gt;-->
139 <!-- &lt;!&ndash; <span v-else-if="scope.row.totalPayAmount" class="orange">¥{{ scope.row.totalPayAmount }}</span>&ndash;&gt;-->
140 <!-- &lt;!&ndash; <span v-else>&#45;&#45;</span>&ndash;&gt;-->
141 <!-- &lt;!&ndash; </template>&ndash;&gt;-->
142 <!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
143 <!-- <el-table-column label="付款方式" min-width="120" align="center">-->
144 <!-- <template #default="scope">-->
145 <!-- <span v-if="scope.row.payType=='0'">会员卡支付</span>-->
146 <!-- <span v-else-if="scope.row.payType=='1'">微信支付</span>-->
147 <!-- <span v-else-if="scope.row.payType=='2'">线下支付</span>-->
148 <!-- </template>-->
149 <!-- </el-table-column>-->
150 <!-- <el-table-column prop="name" label="支付状态" min-width="120" align="center">-->
151 <!-- <template #default="scope">-->
152 <!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
153 <!-- <div v-else>-->
154 <!-- <span v-if="scope.row.payStatus=='0'">待支付</span>-->
155 <!-- <span v-if="scope.row.payStatus=='1'">待核销</span>-->
156 <!-- <span v-if="scope.row.payStatus=='2'">付款中</span>-->
157 <!-- <span v-if="scope.row.payStatus=='3'" class="green">已完成</span>-->
158 <!-- <span v-if="scope.row.payStatus=='4'">退款中</span>-->
159 <!-- <span v-if="scope.row.payStatus=='5'" class="text-danger">已退回</span>-->
160 <!-- <span v-if="scope.row.payStatus=='6'">退款核销中</span>-->
161 <!-- </div>-->
162 <!-- </template>-->
163 <!-- </el-table-column>-->
164 <!-- <el-table-column prop="name" label="审核状态" min-width="120" align="center">-->
165 <!-- <template #default="scope">-->
166 <!-- &lt;!&ndash; 待核销,待审核,审核拒绝,审核通过,已取消&ndash;&gt;-->
167 <!-- <span v-if="scope.row.auditStatus=='1'" class="text-warning">审核中</span>-->
168 <!-- <span v-if="scope.row.auditStatus=='2'" class="green">审核通过</span>-->
169 <!-- <span v-if="scope.row.auditStatus=='3'" class="text-danger">审核拒绝</span>-->
170 <!-- <span v-if="scope.row.auditStatus=='4'">已取消</span>-->
171 <!-- </template>-->
172 <!-- </el-table-column>-->
173 <!-- <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="150">-->
174 <!-- <template #default="scope">-->
175 <!-- <el-button type="text" @click="billDetail(scope.row)">详情</el-button>-->
176 <!-- <el-button-->
177 <!-- v-if="scope.row.payType!='2'&&scope.row.payStatus=='0'&&scope.row.auditStatus=='0'" type="text"-->
178 <!-- @click="goPay(scope.row)"-->
179 <!-- >支付-->
180 <!-- </el-button>-->
181 <!-- <el-button-->
182 <!-- v-if="scope.row.payStatus=='0'&&scope.row.auditStatus=='0'&&scope.row.payType!='2'" type="text"-->
183 <!-- @click="cancelBill(scope.row)"-->
184 <!-- >取消-->
185 <!-- </el-button>-->
186 <!-- </template>-->
187 <!-- </el-table-column>-->
188 <!-- </el-table>-->
189 <!-- <el-empty v-if="billList.length==0" description="暂无数据" />-->
190 <!-- <pagination-->
191 <!-- v-show="total > 0"-->
192 <!-- v-model:page="query2.pageNum"-->
193 <!-- v-model:limit="query2.pageSize"-->
194 <!-- :total="total2"-->
195 <!-- @pagination="getBillList"-->
196 <!-- />-->
197 <!-- </div>-->
198 <!-- </el-tab-pane>-->
199
200 <!-- </el-tabs>-->
201
202 <!-- 报项详情-->
203 <dialogModifySign :props="dialogModifySignProps" />
204 <!-- 订单详情-->
205 <dialogModifyBill :props="dialogModifyBillProps" />
206
207 <el-dialog v-model="payPop" title="请选择支付方式" width="720px">
208
209 <div class="centerPrice">
210 ¥<span>{{ nowBill?.totalAmount }}</span>
211 </div> 45 </div>
212 <div style="margin: 40px"> 46 </div>
213 <el-radio-group v-model="payType"> 47
214 <el-radio v-if="myBalance>'0'" label="0" size="large" border><img 48 <el-table :data="tableData" style="width: 100%">
215 src="@/assets/img/zf02.png" 49 <el-table-column type="index" label="序号" width="80" align="center"/>
216 style="width: 30px;" 50 <el-table-column label="赛事名称" min-width="260">
217 > 51 <template #default="scope">
218 会员卡支付<span>(余额 <i class="orange">¥{{ myBalance }}</i>)</span> 52 {{ scope.row.name }}
219 </el-radio> 53 </template>
220 <el-radio label="1" size="large" border><img src="@/assets/img/zf_wx.png">微信</el-radio> 54 </el-table-column>
221 <el-radio label="2" size="large" border><img src="@/assets/img/zf_xj.png">线下支付</el-radio> 55 <el-table-column label="参赛队" min-width="260">
222 </el-radio-group> 56 <template #default="scope">
223 </div> 57 <span v-if="scope.row.groupName">{{ scope.row.groupName }}</span>
224 <div class="panel-footer text-center"> 58 <span v-else>-</span>
225 <el-button type="success" round @click="payBill">立即支付</el-button> 59 </template>
226 </div> 60 </el-table-column>
227 </el-dialog> 61 <el-table-column label="赛事开始时间" min-width="120">
228 <el-dialog v-model="showOrganizerInfo" title=" 线下支付" width="400px"> 62 <template #default="scope">{{ scope.row.beginTime.substring(0, 10) }}</template>
229 <ul class="orgbox"> 63 </el-table-column>
230 <li>单位:{{ org.organizerName }}</li> 64 <el-table-column label="赛事结束时间" min-width="120">
231 <li>开户行:{{ org.organizerBank }}</li> 65 <template #default="scope">{{ scope.row.endTime.substring(0, 10) }}</template>
232 <li>账户:{{ org.organizerAccount }}</li> 66 </el-table-column>
233 <li>打款金额:<span class="orange">¥{{ org.organizerFee }}</span></li> 67 <el-table-column label="审批状态" min-width="100" align="center">
234 </ul> 68 <template #default="scope">
235 <div class="text-center"> 69 <el-tag v-if="scope.row.auditStatus=='1'" type="info">已提交</el-tag>
236 <el-button type="success" round @click="payMationDone">我已复制</el-button> 70 <el-tag v-if="scope.row.auditStatus=='2'" type="success">审核通过</el-tag>
237 </div> 71 <el-tag v-if="scope.row.auditStatus=='3'" type="danger">未通过</el-tag>
238 </el-dialog> 72 <el-tag v-if="scope.row.auditStatus=='4'" type="warning">已取消</el-tag>
239 <el-dialog v-model="showResult"> 73 </template>
240 <el-result 74 </el-table-column>
241 icon="success" 75 <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="180">
242 title="支付成功" 76 <template #default="scope">
243 /> 77 <el-button v-if="scope.row.auditStatus!='0'" type="text" @click="downloadVoucher(scope.row)">
244 </el-dialog> 78 下载报名凭证
245 <we-pay ref="wePayRef" @close="wePayDone" /> 79 </el-button>
80 <el-button type="text" @click="signRow(scope.row)">详情</el-button>
81 </template>
82 </el-table-column>
83 </el-table>
84
85 <pagination
86 v-show="total > 0"
87 v-model:page="query.pageNum"
88 v-model:limit="query.pageSize"
89 :total="total"
90 @pagination="getList"
91 />
246 </div> 92 </div>
93
94 <!-- 报项详情-->
95 <dialogModifySign :props="dialogModifySignProps"/>
96 <!-- 订单详情-->
97 <dialogModifyBill :props="dialogModifyBillProps"/>
98
247 </el-card> 99 </el-card>
248 100
249 </template> 101 </template>
250 102
251 <script setup> 103 <script setup>
252 import { ref } from 'vue' 104 import {ref} from 'vue'
253 import { useRouter } from 'vue-router' 105 import {useRouter} from 'vue-router'
254 import { getCurrentInstance, onMounted } from '@vue/runtime-core' 106 import {getCurrentInstance, onMounted} from '@vue/runtime-core'
255 import dialogModifySign from './component/modifySign' 107 import dialogModifySign from './component/modifySign'
256 import dialogModifyBill from './component/modifyBill' 108 import dialogModifyBill from './component/modifyBill'
257 import * as match from '@/apiPc/match' 109 import * as match from '@/apiPc/match'
258 import { ElMessage, ElMessageBox } from 'element-plus' 110 import {ElMessage, ElMessageBox} from 'element-plus'
259 import _ from 'lodash' 111 import _ from 'lodash'
260 112
261 const router = useRouter() 113 const router = useRouter()
262 const { proxy } = getCurrentInstance() 114 const {proxy} = getCurrentInstance()
263 const total = ref(0) 115 const total = ref(0)
264 const total2 = ref(0) 116 const total2 = ref(0)
265 const payMationDone = () => { 117 const payMationDone = () => {
...@@ -286,7 +138,7 @@ const cptPeriodArr = ref([]) ...@@ -286,7 +138,7 @@ const cptPeriodArr = ref([])
286 const payTimeArr = ref([]) 138 const payTimeArr = ref([])
287 const commitTimeArr = ref([]) 139 const commitTimeArr = ref([])
288 const countryList = ref([]) 140 const countryList = ref([])
289 const tableData = ref([]) 141 const tableData = ref([{name: '111'}])
290 const billList = ref([]) 142 const billList = ref([])
291 const query = ref({ 143 const query = ref({
292 pageNum: 1, 144 pageNum: 1,
...@@ -305,8 +157,6 @@ const nowBill = ref({}) ...@@ -305,8 +157,6 @@ const nowBill = ref({})
305 const org = ref({}) 157 const org = ref({})
306 158
307 onMounted(() => { 159 onMounted(() => {
308 getCountryList()
309 getData()
310 getList() 160 getList()
311 getBillList() 161 getBillList()
312 }) 162 })
...@@ -326,13 +176,6 @@ const reset = (form) => { ...@@ -326,13 +176,6 @@ const reset = (form) => {
326 getList() 176 getList()
327 } 177 }
328 178
329 function getData() {
330 match.getMyPersonInfo().then(res => {
331 myform.value = res.data
332 myform.value.labelArr = myform.value.label?.split(',')
333 groupList.value = myform.value.groups
334 })
335 }
336 179
337 function wePayDone() { 180 function wePayDone() {
338 payPop.value = false 181 payPop.value = false
...@@ -344,10 +187,10 @@ function getList() { ...@@ -344,10 +187,10 @@ function getList() {
344 if (cptPeriodArr.value) { 187 if (cptPeriodArr.value) {
345 query.value.cptPeriod = cptPeriodArr.value.toString() 188 query.value.cptPeriod = cptPeriodArr.value.toString()
346 } 189 }
347 match.getMySignCptList(query.value).then(res => { 190 // match.getMySignCptList(query.value).then(res => {
348 tableData.value = res.rows 191 // tableData.value = res.rows
349 total.value = res.total 192 // total.value = res.total
350 }) 193 // })
351 } 194 }
352 195
353 function getBillList() { 196 function getBillList() {
...@@ -360,18 +203,12 @@ function getBillList() { ...@@ -360,18 +203,12 @@ function getBillList() {
360 }) 203 })
361 } 204 }
362 205
363 function getCountryList() {
364 match.countryList().then(res => {
365 countryList.value = res.data
366 })
367 }
368
369 function signRow(row) { 206 function signRow(row) {
370 _.assign(dialogModifySignProps.value, dialogPropsBase, { 207 _.assign(dialogModifySignProps.value, dialogPropsBase, {
371 open: true, 208 open: true,
372 isView: true, 209 isView: true,
373 title: '报项详情', 210 title: '报项详情',
374 data: { ...row } 211 data: {...row}
375 }) 212 })
376 } 213 }
377 214
...@@ -393,7 +230,7 @@ function payBill() { ...@@ -393,7 +230,7 @@ function payBill() {
393 ElMessage.error('请选择支付方式') 230 ElMessage.error('请选择支付方式')
394 return 231 return
395 } 232 }
396 match.payMatch({ orderId: nowBill.value.id, payType: payType.value }).then(res => { 233 match.payMatch({orderId: nowBill.value.id, payType: payType.value}).then(res => {
397 if (payType.value == 2) { 234 if (payType.value == 2) {
398 org.value = res.data.org 235 org.value = res.data.org
399 showOrganizerInfo.value = true 236 showOrganizerInfo.value = true
...@@ -411,7 +248,7 @@ function billDetail(bill) { ...@@ -411,7 +248,7 @@ function billDetail(bill) {
411 open: true, 248 open: true,
412 isView: true, 249 isView: true,
413 title: '订单详情', 250 title: '订单详情',
414 data: { ...bill } 251 data: {...bill}
415 }) 252 })
416 } 253 }
417 254
...@@ -432,12 +269,59 @@ function cancelBill(bill) { ...@@ -432,12 +269,59 @@ function cancelBill(bill) {
432 269
433 function downloadVoucher(row) { 270 function downloadVoucher(row) {
434 proxy.download( 271 proxy.download(
435 `/ztx-match/pdf/getPayedOrderPdf/${row.id}/${row.groupId || 0}`, {}, '报项凭证.pdf' 272 `/ztx-match/pdf/getPayedOrderPdf/${row.id}/${row.groupId || 0}`, {}, '报项凭证.pdf'
436 ) 273 )
437 } 274 }
438 </script> 275 </script>
439 276
440 <style scoped lang="scss"> 277 <style scoped lang="scss">
278 .matchItem {
279 cursor: pointer;
280 margin: 0 0 20px;
281 padding: 0 0 20px;
282 background: #FFFFFF;
283 border-bottom: 1px solid #e5e5e5;
284 position: relative;
285
286 &:last-child {
287 border-bottom: none;
288 }
289
290 .el-avatar {
291 position: absolute;
292 left: 20px;
293 top: 30px;
294
295 img {
296 background: #fff;
297 }
298 }
299
300 .info {
301 p {
302 font-size: 14px;
303 }
304 }
305
306 .typeTag {
307 position: absolute;
308 right: 0;
309 top: 0;
310 }
311
312 h3 {
313 font-weight: 500;
314 margin: 0 0 10px;
315 font-size: 18px;
316 color: #000000;
317 text-overflow: ellipsis;
318 }
319
320 &:hover h3 {
321 color: var(--el-color-primary);
322 }
323 }
324
441 .centerPrice { 325 .centerPrice {
442 text-align: center; 326 text-align: center;
443 font-size: 26px; 327 font-size: 26px;
...@@ -449,13 +333,6 @@ function downloadVoucher(row) { ...@@ -449,13 +333,6 @@ function downloadVoucher(row) {
449 } 333 }
450 } 334 }
451 335
452 .app-container {
453 background: #F5F7F9;
454 }
455
456 .grid-content {
457 background: #fff;
458 }
459 336
460 :deep(.el-tabs__nav-wrap) { 337 :deep(.el-tabs__nav-wrap) {
461 padding: 0 15px; 338 padding: 0 15px;
......
1 <template> 1 <template>
2 <el-card> 2 <el-card class="mb20">
3 <div class="funcBtns"> 3 <div class="funcBtns">
4 <el-button type="primary" @click="addMember">添加选手</el-button> 4 <el-button type="primary" @click="addMember">{{ language==0?'添加选手':'Add Player'}}</el-button>
5 <el-button type="primary" plain @click="importSportman">导入选手</el-button> 5 <el-button type="primary" plain @click="importSportman">{{ language==0?'导入选手':'Import Player' }}</el-button>
6 <el-button type="primary" plain> 6 <el-button type="primary" plain>
7 <a href="/file/sportsmanTemplate.xlsx" target="_blank">下载模板</a> 7 <a href="/file/sportsmanTemplate.xlsx" target="_blank">Download template</a>
8 </el-button> 8 </el-button>
9 </div> 9 </div>
10 <div class="from-Card"> 10 <div class="from-Card">
11 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small"> 11 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
12 <el-form-item label="姓名"> 12 <el-form-item :label="language==0?'姓名':'Name'">
13 <el-input v-model="query.realName" style="width: 120px;" clearable/> 13 <el-input v-model="query.realName" style="width: 120px;" clearable/>
14 </el-form-item> 14 </el-form-item>
15 <el-form-item label="短名"> 15 <el-form-item :label="language==0?'短名':'Short Name'">
16 <el-input v-model="query.shortName" style="width: 120px;" clearable/> 16 <el-input v-model="query.shortName" style="width: 120px;" clearable/>
17 </el-form-item> 17 </el-form-item>
18 <el-form-item label="手机号码"> 18 <el-form-item :label="language==0?'手机号码':'Phone Number'">
19 <el-input v-model="query.phone" style="width: 120px;" clearable/> 19 <el-input v-model="query.phone" style="width: 120px;" clearable/>
20 </el-form-item> 20 </el-form-item>
21 <el-form-item label="邮箱"> 21 <el-form-item :label="language==0?'邮箱':'E-mail'">
22 <el-input v-model="query.email" style="width: 120px;" clearable/> 22 <el-input v-model="query.email" style="width: 120px;" clearable/>
23 </el-form-item> 23 </el-form-item>
24 <el-form-item label="证件类型"> 24 <el-form-item :label="language==0?'证件类型':'ID Type'">
25 <el-input v-model="query.idcType" style="width: 120px;" clearable/> 25 <el-input v-model="query.idcType" style="width: 120px;" clearable/>
26 </el-form-item> 26 </el-form-item>
27 <el-form-item label="证件号"> 27 <el-form-item :label="language==0?'证件号码':'ID NO.'">
28 <el-input v-model="query.idcode" style="width: 120px;" clearable/> 28 <el-input v-model="query.idcode" style="width: 120px;" clearable/>
29 </el-form-item> 29 </el-form-item>
30 <el-form-item label="角色"> 30 <el-form-item :label="language==0?'会员角色':'Role'">
31 <el-input v-model="query.label" style="width: 120px;" clearable/> 31 <el-select v-model="query.label" multiple>
32 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?(l.label):(l.enlabel)"/>
33 </el-select>
32 </el-form-item> 34 </el-form-item>
33 <el-form-item> 35 <el-form-item>
34 <el-button type="primary" @click="getList">查询</el-button> 36 <el-button type="primary" @click="getList">{{ language==0?'查询':'Search' }}</el-button>
35 </el-form-item> 37 </el-form-item>
36 </el-form> 38 </el-form>
37 </div> 39 </div>
38 40
39 <!-- 人员表格--> 41 <!-- 人员表格-->
40 <person-table :table-data="tableData" @edit="editCoach" @delete="delperson"/> 42 <person-table :table-data="tableData" @edit="editCoach" @delete="delperson"/>
41 <el-table :data="tableData" class="mt20">
42 <el-table-column type="index" label="序号" width="80" align="center"/>
43 <el-table-column label="所属国家" prop="countryName"/>
44 <el-table-column label="姓氏" prop="xing"/>
45 <el-table-column label="名" prop="ming"/>
46 <el-table-column label="短名" prop="shortName"/>
47 <el-table-column label="性别" prop="sexStr"/>
48 <el-table-column label="年龄" prop="age"/>
49 <el-table-column label="出生日期" prop="birth" width="100"/>
50 <el-table-column label="手机号码" prop="phone" width="120"/>
51 <el-table-column label="邮箱" prop="email" width="150"/>
52 <el-table-column label="证件类型" prop="idcTypeStr"/>
53 <el-table-column label="证件号码" prop="idcCode" width="200"/>
54 <el-table-column label="会员角色">
55 <template #default="scope">
56 <span v-for="item in scope.row.label?.split(',')" :key="item.id">
57 <el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag>
58 <el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag>
59 <el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag>
60 <el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag>
61 <el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag>
62 <el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag>
63 <el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag>
64 </span>
65 </template>
66 </el-table-column>
67 <el-table-column label="详细地址" prop="address"/>
68 <el-table-column label="操作" fixed="right" width="160" header-align="center" align="center">
69 <template #default="scope">
70 <a class="text-primary pd10" @click="editCoach(scope.row)">编辑</a>
71 <a class="text-primary pd10" @click="delperson(scope.row)">删除</a>
72 </template>
73 </el-table-column>
74 </el-table>
75 <paginationPc 43 <paginationPc
76 v-show="total>0" 44 v-show="total>0"
77 v-model:page="query.pageNum" 45 v-model:page="query.pageNum"
...@@ -100,20 +68,32 @@ import * as match from '@/apiPc/match' ...@@ -100,20 +68,32 @@ import * as match from '@/apiPc/match'
100 import {ElMessage, ElMessageBox} from 'element-plus' 68 import {ElMessage, ElMessageBox} from 'element-plus'
101 import {getGroupPersonList} from "@/apiPc/match"; 69 import {getGroupPersonList} from "@/apiPc/match";
102 import PersonTable from "@/viewsPc/match/components/personTable"; 70 import PersonTable from "@/viewsPc/match/components/personTable";
103 71 import cache from "@/plugins/cache";
72 import useUserStore from "@/store/modules/user";
73 const language = ref(cache.local.get('language') || 0)
104 const tableData = ref([]) 74 const tableData = ref([])
75 const labels = ref([
76 {value: '0', label: '运动员', enlabel: 'Sportsman'},
77 {value: '1', label: '教练', enlabel: 'Coach'},
78 {value: '2', label: '领队', enlabel: 'Leader'},
79 {value: '3', label: '队医', enlabel: 'Nurse'},
80 {value: '4', label: '翻译', enlabel: 'Translator'},
81 {value: '5', label: '官员', enlabel: 'Official'},
82 {value: '6', label: '其他', enlabel: 'Other'}
83 ])
105 const query = ref({ 84 const query = ref({
106 pageNum: 1, pageSize: 10 85 pageNum: 1, pageSize: 10
107 }) 86 })
108 const total = ref(0) 87 const total = ref(0)
109 const groupId = ref('1759813142128967681') 88 const group = useUserStore().group
89 const groupId = ref(group.id)
110 onMounted(() => { 90 onMounted(() => {
111 getList(groupId.value) 91 getList(groupId.value)
112 }) 92 })
113 93
114 function addMember() { 94 function addMember() {
115 const params = { 95 const params = {
116 title: '添加人员', 96 title: language.value==0?'添加人员':'Add',
117 id: 0, 97 id: 0,
118 groupId: groupId.value 98 groupId: groupId.value
119 } 99 }
...@@ -122,7 +102,7 @@ function addMember() { ...@@ -122,7 +102,7 @@ function addMember() {
122 102
123 function importSportman() { 103 function importSportman() {
124 const params = { 104 const params = {
125 title: '批量导入选手', 105 title: language.value==0?'批量导入选手':'Import',
126 groupId: groupId.value 106 groupId: groupId.value
127 } 107 }
128 proxy.$refs['dialogImportProps'].open(params) 108 proxy.$refs['dialogImportProps'].open(params)
...@@ -135,23 +115,38 @@ function getList() { ...@@ -135,23 +115,38 @@ function getList() {
135 }) 115 })
136 } 116 }
137 117
138 function editCoach(row) { 118 function editCoach(row,title) {
139 const params = { 119 const params = {
140 id: row.id, 120 id: row.id,
141 groupId: row.groupId 121 groupId: row.groupId,
122 title: title
142 } 123 }
143 proxy.$refs['dialogAddCoach'].open(params) 124 proxy.$refs['dialogAddCoach'].open(params)
144 } 125 }
145 126
146 function delperson(p) { 127 function delperson(p) {
147 //删除团队下的人 128 //删除团队下的人
148 ElMessageBox.confirm(`确定删除${p.realName}吗?`, '提示', { 129 let text = ''
149 confirmButtonText: '确定', 130 let t = '提示'
150 cancelButtonText: '取消', 131 let s = '确定'
132 let c = '取消'
133 let msg = '操作成功'
134 if (language.value==0){
135 text = `确定删除${p.realName}吗?`
136 } else {
137 text = `Delete ${p.realName}?`
138 t = 'Tips'
139 s = 'Confirm'
140 c = 'Cancel'
141 msg = ' Successful!'
142 }
143 ElMessageBox.confirm(text, t, {
144 confirmButtonText: s,
145 cancelButtonText: c,
151 type: 'warning' 146 type: 'warning'
152 }).then(() => { 147 }).then(() => {
153 match.delPerson(p.id).then(res => { 148 match.delPerson(p.id).then(res => {
154 ElMessage.success('操作成功') 149 ElMessage.success(msg)
155 getList(groupId.value) 150 getList(groupId.value)
156 }) 151 })
157 }) 152 })
......
1 <template> 1 <template>
2 <div> 2 <div class="mb20">
3 <el-card :body-style="{'padding':'0'}"> 3 <el-card :body-style="{'padding':'0'}">
4 <div class="indexTitle"><h3 class="leftboderTT">修改密码</h3></div> 4 <div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'修改密码':'Change Password' }}</h3></div>
5 5
6 <div class="pd20"> 6 <div class="pd20">
7 <div class="d-form-border" style="margin-top: 0"> 7 <div class="d-form-border" style="margin-top: 0">
8 <el-form class="d-form" ref="pwdRef" :model="user" :rules="rules" label-width="120px" 8 <el-form class="d-form" ref="pwdRef" :model="user" :rules="rules"
9 label-width="120px" :label-position="language==0?'left':'top'"
9 style="max-width: 500px;margin: auto"> 10 style="max-width: 500px;margin: auto">
10 <el-form-item label="旧密码" prop="oldPassword"> 11 <el-form-item :label="language==0?'旧密码':'Old Password'" prop="oldPassword">
11 <el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password/> 12 <el-input v-model="user.oldPassword" :placeholder="language==0?'请输入旧密码':''" type="password" show-password/>
12 </el-form-item> 13 </el-form-item>
13 <el-form-item label="新密码" prop="newPassword"> 14 <el-form-item :label="language==0?'新密码':'New Password'" prop="newPassword">
14 <el-input v-model="user.newPassword" placeholder="请设置8位以上大小写字母、数字、特殊符号" type="password" 15 <el-input v-model="user.newPassword" :placeholder="language==0?'请设置8位以上大小写字母、数字、特殊符号':''" type="password"
15 show-password/> 16 show-password/>
16 </el-form-item> 17 </el-form-item>
17 <el-form-item label="确认密码" prop="confirmPassword"> 18 <el-form-item :label="language==0?'确认密码':'Confirm Password'" prop="confirmPassword">
18 <el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/> 19 <el-input v-model="user.confirmPassword" :placeholder="language==0?'请确认新密码':''" type="password" show-password/>
19 </el-form-item> 20 </el-form-item>
20 21
21 </el-form> 22 </el-form>
22 </div> 23 </div>
23 <el-row justify="center"> 24 <el-row justify="center">
24 <el-button type="primary" class="btn-lineG" @click="submit">保存</el-button> 25 <el-button type="primary" class="btn-lineG" @click="submit">{{ language==0?'保存':'Save' }}</el-button>
25 </el-row> 26 </el-row>
26 </div> 27 </div>
27 </el-card> 28 </el-card>
...@@ -33,6 +34,8 @@ import {updateUserPwd} from '@/api/system/user' ...@@ -33,6 +34,8 @@ import {updateUserPwd} from '@/api/system/user'
33 import useUserStore from '@/store/modules/user' 34 import useUserStore from '@/store/modules/user'
34 import {reactive, ref, getCurrentInstance} from 'vue' 35 import {reactive, ref, getCurrentInstance} from 'vue'
35 import {validPassword} from '@/utils/validate' 36 import {validPassword} from '@/utils/validate'
37 import cache from "@/plugins/cache";
38 const language = ref(cache.local.get('language') || 0)
36 39
37 const show = ref(false) 40 const show = ref(false)
38 const {proxy} = getCurrentInstance() 41 const {proxy} = getCurrentInstance()
......
1 <template>
2 <div>
3 <el-card :body-style="{'padding':'0'}">
4 <div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}</h3></div>
5 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0"/>
6
7 <div class="pd20"></div>
8 </el-card>
9 </div>
10 </template>
11
12 <script setup>
13 import cache from "@/plugins/cache";
14 import {onMounted} from "@vue/runtime-core";
15 const language = ref(cache.local.get('language') || 0)
16 const list = ref([])
17 </script>
18
19 <style scoped lang="scss">
20 .indexTitle {
21 margin: 20px 0 12px;
22 padding: 0 20px 15px;
23 border-bottom: 1px solid #e5e5e5;
24
25 h3 {
26 font-size: 16px;
27 color: var(--el-color-primary);
28 }
29 }
30
31
32 </style>
33
1 <template>
2 <div>
3 <el-card :body-style="{'padding':'0'}">
4 <div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'系统消息':'System messages' }}</h3></div>
5
6 <ul>
7 <li v-for="(n,index) in list" :key="index">
8 <div class="dot"></div>
9 <h3>{{ n.title }}</h3>
10 <span>{{ n.time }}</span>
11 </li>
12 </ul>
13 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0"/>
14
15 </el-card>
16 </div>
17 </template>
18
19 <script setup>
20 import cache from "@/plugins/cache";
21 import {onMounted} from "@vue/runtime-core";
22 const language = ref(cache.local.get('language') || 0)
23 const list = ref([])
24 onMounted(()=>{
25 getList()
26 })
27 const getList =()=>{
28 list.value = []
29 }
30 </script>
31
32 <style scoped lang="scss">
33 .indexTitle {
34 margin: 20px 0 12px;
35 padding: 0 20px 15px;
36 border-bottom: 1px solid #e5e5e5;
37
38 h3 {
39 font-size: 16px;
40 color: var(--el-color-primary);
41 }
42 }
43 ul{padding: 20px;
44 li{background: #FBFCFD;position: relative;padding: 20px 20px 20px 40px;margin-bottom: 18px;
45 cursor: pointer;
46 &:hover{
47 h3{color: var(--el-color-primary)}
48 }
49 .dot{position: absolute;width: 7px;
50 height: 7px;left: 20px;top: 24px;
51 background: #C5161E;
52 border-radius: 50%;}
53 h3{font-weight: 400;margin: 0;
54 font-size: 16px;
55 color: #29343C;}
56 span{font-weight: 400;display: inline-block;
57 font-size: 12px;margin: 10px 0 0;
58 color: #929AA0;}
59 }
60 }
61
62 </style>
...@@ -2,37 +2,37 @@ ...@@ -2,37 +2,37 @@
2 <div class="pd20"> 2 <div class="pd20">
3 <div class="d-form-border" style="margin-top: 0"> 3 <div class="d-form-border" style="margin-top: 0">
4 <el-form class="d-form" size="large" :model="form" ref="registerRef" :rules="registerRules" label-width="120" 4 <el-form class="d-form" size="large" :model="form" ref="registerRef" :rules="registerRules" label-width="120"
5 style="max-width: 500px;margin: auto"> 5 :label-position="language==0?'left':'top'" style="max-width: 500px;margin: auto">
6 <el-form-item label="用户名"> 6 <el-form-item :label="language==0?'用户名':'Account'">
7 {{userName}} 7 {{userName}}
8 </el-form-item> 8 </el-form-item>
9 <el-form-item label="所属国家" required> 9 <el-form-item :label="language==0?'所属国家':'Nationality'" required>
10 <el-select filterable v-model="form.countryId"> 10 <el-select filterable v-model="form.countryId">
11 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" /> 11 <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
12 </el-select> 12 </el-select>
13 </el-form-item> 13 </el-form-item>
14 <el-form-item label="详细地址" required prop="address"> 14 <el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
15 <el-cascader v-if="form.countryId == 240" 15 <el-cascader v-if="form.countryId == 240"
16 v-model="form.regionId" 16 v-model="form.regionId"
17 style="width: 100%;" 17 style="width: 100%;"
18 :options="regionsList" 18 :options="regionsList"
19 :props="{ label:'text' }" 19 :props="{ label:'text' }"
20 /> 20 />
21 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/> 21 <el-input type="textarea" v-model="form.address" class="mt10" :placeholder="language==0?'请输入内容':''"/>
22 </el-form-item> 22 </el-form-item>
23 <el-form-item label="机构名称" required prop="name"> 23 <el-form-item :label="language==0?'机构名称':'Team Name'" required prop="name">
24 <el-input type="text" v-model="form.name" placeholder="请输入内容"/> 24 <el-input type="text" v-model="form.name" :placeholder="language==0?'请输入内容':''"/>
25 </el-form-item> 25 </el-form-item>
26 <el-form-item label="联系人姓名" required prop="contactPerson"> 26 <el-form-item :label="language==0?'联系人姓名':'Contact Person'" required prop="contactPerson">
27 <el-input type="text" v-model="form.contactPerson" placeholder="请输入内容"/> 27 <el-input type="text" v-model="form.contactPerson" :placeholder="language==0?'请输入内容':''"/>
28 </el-form-item> 28 </el-form-item>
29 <el-form-item label="联系人电话" required prop="contactTelno"> 29 <el-form-item :label="language==0?'联系人电话':'Contact Phone'" required prop="contactTelno">
30 <el-input v-model="form.contactTelno" type="phone" placeholder="请输入内容"/> 30 <el-input v-model="form.contactTelno" type="phone" :placeholder="language==0?'请输入内容':''"/>
31 </el-form-item> 31 </el-form-item>
32 <el-form-item label="联系人邮箱" required prop="contactEmail"> 32 <el-form-item :label="language==0?'联系人邮箱':'Contact Email'" required prop="contactEmail">
33 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/> 33 <el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
34 </el-form-item> 34 </el-form-item>
35 <el-form-item prop="imgUrl" required label="机构LOGO"> 35 <el-form-item prop="imgUrl" required :label="language==0?'机构Logo':'Group Logo'">
36 <ImageUpload2 36 <ImageUpload2
37 v-model="form.imgUrl" :crop-height="200" :crop-width="200" :limit="1" 37 v-model="form.imgUrl" :crop-height="200" :crop-width="200" :limit="1"
38 :is-show-tip="false" 38 :is-show-tip="false"
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
41 </el-form> 41 </el-form>
42 </div> 42 </div>
43 <div class="text-center"> 43 <div class="text-center">
44 <el-button type="primary" class="btn-lineG" round @click="save">确定修改</el-button> 44 <el-button type="primary" class="btn-lineG" round @click="save">{{ language==0?'确定修改':'Save' }}</el-button>
45 </div> 45 </div>
46 46
47 </div> 47 </div>
...@@ -62,6 +62,10 @@ const props = defineProps({ ...@@ -62,6 +62,10 @@ const props = defineProps({
62 form:{ 62 form:{
63 type:Object, 63 type:Object,
64 required:true 64 required:true
65 },
66 language:{
67 type:Number,
68 required:true
65 } 69 }
66 }) 70 })
67 const countryList = ref([]) 71 const countryList = ref([])
......
...@@ -3,12 +3,7 @@ ...@@ -3,12 +3,7 @@
3 3
4 <div class="box ph-30"> 4 <div class="box ph-30">
5 <el-card> 5 <el-card>
6 <el-steps :active="activeStep" align-center> 6 <team-sign-step :activeStep="activeStep" :language="language"/>
7 <el-step :title="language==0?'团队信息':'Team Information'" />
8 <el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" />
9 <el-step :title="language==0?'选手报名':'Participant Registration'" />
10 <el-step :title="language==0?'提交审核':'Submit for review'" />
11 </el-steps>
12 </el-card> 7 </el-card>
13 8
14 <el-row class="mt20" :gutter="20"> 9 <el-row class="mt20" :gutter="20">
...@@ -17,7 +12,9 @@ ...@@ -17,7 +12,9 @@
17 <template #header> 12 <template #header>
18 <div class="card-header"> 13 <div class="card-header">
19 <img src="@/assets/sign/tag01.png"/> 14 <img src="@/assets/sign/tag01.png"/>
20 教练<span class="tip">(教练/领队,至少选择一项)</span> 15 {{ language==0?'教练':'Coach' }}
16 <span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>
17 <span class="tip" v-else>(Coach/Team Leader, select at least one)</span>
21 </div> 18 </div>
22 </template> 19 </template>
23 <div class="chooseForm"> 20 <div class="chooseForm">
...@@ -40,7 +37,9 @@ ...@@ -40,7 +37,9 @@
40 <template #header> 37 <template #header>
41 <div class="card-header"> 38 <div class="card-header">
42 <img src="@/assets/sign/tag02.png"/> 39 <img src="@/assets/sign/tag02.png"/>
43 领队<span class="tip">(教练/领队,至少选择一项)</span> 40 {{ language==0?'领队':'Team leader' }}
41 <span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>
42 <span class="tip" v-else>(Coach/Team Leader, select at least one)</span>
44 </div> 43 </div>
45 </template> 44 </template>
46 <div class="chooseForm"> 45 <div class="chooseForm">
...@@ -63,7 +62,7 @@ ...@@ -63,7 +62,7 @@
63 <template #header> 62 <template #header>
64 <div class="card-header"> 63 <div class="card-header">
65 <img src="@/assets/sign/tag03.png"/> 64 <img src="@/assets/sign/tag03.png"/>
66 队医 65 {{ language==0?'队医':'Team doctor' }}
67 </div> 66 </div>
68 </template> 67 </template>
69 <div class="chooseForm"> 68 <div class="chooseForm">
...@@ -86,7 +85,7 @@ ...@@ -86,7 +85,7 @@
86 <template #header> 85 <template #header>
87 <div class="card-header"> 86 <div class="card-header">
88 <img src="@/assets/sign/tag04.png"/> 87 <img src="@/assets/sign/tag04.png"/>
89 翻译 88 {{ language==0?'翻译':'Translator' }}
90 </div> 89 </div>
91 </template> 90 </template>
92 <div class="chooseForm"> 91 <div class="chooseForm">
...@@ -109,7 +108,7 @@ ...@@ -109,7 +108,7 @@
109 <template #header> 108 <template #header>
110 <div class="card-header"> 109 <div class="card-header">
111 <img src="@/assets/sign/tag05.png"/> 110 <img src="@/assets/sign/tag05.png"/>
112 官员 111 {{ language==0?'官员':'Official' }}
113 </div> 112 </div>
114 </template> 113 </template>
115 <div class="chooseForm"> 114 <div class="chooseForm">
...@@ -132,7 +131,7 @@ ...@@ -132,7 +131,7 @@
132 <template #header> 131 <template #header>
133 <div class="card-header"> 132 <div class="card-header">
134 <img src="@/assets/sign/tag06.png"/> 133 <img src="@/assets/sign/tag06.png"/>
135 其他 134 {{ language==0?'其他':'Other' }}
136 </div> 135 </div>
137 </template> 136 </template>
138 <div class="chooseForm"> 137 <div class="chooseForm">
...@@ -153,8 +152,8 @@ ...@@ -153,8 +152,8 @@
153 </el-row> 152 </el-row>
154 <el-card class="mt20"> 153 <el-card class="mt20">
155 <div class="text-center"> 154 <div class="text-center">
156 <el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button> 155 <el-button type="primary" class="w200px" plain round @click="goPrev()">{{ language==0?'上一步':'Go back' }}</el-button>
157 <el-button type="primary" class="btn-lineG w200px" round @click="goNext()">下一步</el-button> 156 <el-button type="primary" class="btn-lineG w200px" round @click="goNext()">{{language==0?'下一步':'Next'}}</el-button>
158 </div> 157 </div>
159 </el-card> 158 </el-card>
160 159
...@@ -171,7 +170,8 @@ import {ref, reactive} from 'vue' ...@@ -171,7 +170,8 @@ import {ref, reactive} from 'vue'
171 import {getCurrentInstance, onMounted} from '@vue/runtime-core' 170 import {getCurrentInstance, onMounted} from '@vue/runtime-core'
172 import * as match from '@/apiPc/match' 171 import * as match from '@/apiPc/match'
173 import dialogAddCoach from './components/addCoach' 172 import dialogAddCoach from './components/addCoach'
174 import cache from '@/utils/cache' 173 import TeamSignStep from './components/teamSignStep'
174 import cache from "@/plugins/cache"
175 const {proxy} = getCurrentInstance() 175 const {proxy} = getCurrentInstance()
176 const router = useRouter() 176 const router = useRouter()
177 const route = useRoute() 177 const route = useRoute()
...@@ -326,7 +326,7 @@ function goNext() { ...@@ -326,7 +326,7 @@ function goNext() {
326 } 326 }
327 }) 327 })
328 }) 328 })
329 } else if (signType.value == '1') { 329 } else {
330 // 团队报名 330 // 团队报名
331 match.groupSignSavePerson(obj).then(res => { 331 match.groupSignSavePerson(obj).then(res => {
332 router.push({ 332 router.push({
......
...@@ -2,12 +2,7 @@ ...@@ -2,12 +2,7 @@
2 <div> 2 <div>
3 <div class="box ph-30"> 3 <div class="box ph-30">
4 <el-card class="mb20"> 4 <el-card class="mb20">
5 <el-steps :active="activeStep" align-center> 5 <team-sign-step :activeStep="activeStep" :language="language"/>
6 <el-step title="团队信息"/>
7 <el-step title="教练/领队/其他"/>
8 <el-step title="选手报名"/>
9 <el-step title="提交审核"/>
10 </el-steps>
11 </el-card> 6 </el-card>
12 7
13 <el-card :body-style="{'padding-top': '0'}"> 8 <el-card :body-style="{'padding-top': '0'}">
...@@ -15,8 +10,9 @@ ...@@ -15,8 +10,9 @@
15 <el-col :lg="8"> 10 <el-col :lg="8">
16 <div class="panel border"> 11 <div class="panel border">
17 <div class="panel-header "> 12 <div class="panel-header ">
18 <h3 class="panel-title">选择参赛运动员清单</h3> 13 <h3 class="panel-title" v-if="language==0">选择参赛运动员清单</h3>
19 <a class="fr" @click="emptyChoosed">清空</a> 14 <h3 class="panel-title" v-else>Select list of participating athletes</h3>
15 <a class="fr" @click="emptyChoosed">{{ language == 0 ? '清空' : 'Empty' }}</a>
20 </div> 16 </div>
21 <div class="panel-body"> 17 <div class="panel-body">
22 <div class="chooseForm"> 18 <div class="chooseForm">
...@@ -27,10 +23,10 @@ ...@@ -27,10 +23,10 @@
27 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/> 23 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
28 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/> 24 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
29 25
30 <p class="name">{{ c.shortName }} 26 <p class="name">{{ c.shortName }}({{ c.sexStr }})
31 <el-icon @click.stop="editPerson(c.id)"> 27 <!-- <el-icon @click.stop="editPerson(c.id)">-->
32 <Edit/> 28 <!-- <Edit/>-->
33 </el-icon> 29 <!-- </el-icon>-->
34 <!-- <el-icon @click.stop="delthischoosed(c)">--> 30 <!-- <el-icon @click.stop="delthischoosed(c)">-->
35 <!-- <Delete/>--> 31 <!-- <Delete/>-->
36 <!-- </el-icon>--> 32 <!-- </el-icon>-->
...@@ -44,20 +40,21 @@ ...@@ -44,20 +40,21 @@
44 <el-col :lg="8"> 40 <el-col :lg="8">
45 <div class="panel border"> 41 <div class="panel border">
46 <div class="panel-header "> 42 <div class="panel-header ">
47 <h3 class="panel-title">选择一个参赛组合</h3> 43 <h3 class="panel-title" v-if="language==0">选择一个参赛组合</h3>
44 <h3 class="panel-title" v-else>Select a Participating team</h3>
48 </div> 45 </div>
49 <div class="panel-body"> 46 <div class="panel-body">
50 <div class="chooseForm"> 47 <div class="chooseForm">
51 <el-checkbox-group v-model="choosedchoosed" @change="changechoosed"> 48 <el-checkbox-group v-model="choosedchoosed" @change="changechoosed">
52 <!-- v-show="choosedchoosed.indexOf(c.id) !== -1"--> 49 <!-- v-show="choosedchoosed.indexOf(c.id) !== -1"-->
53 <el-checkbox v-for="c in choosed2List" :label="c.id" checked> 50 <el-checkbox v-for="c in choosed2List" :label="c.id" checked>
54 <el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/> 51 <el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/>
55 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/> 52 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
56 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/> 53 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
57 <p class="name">{{ c.shortName }} 54 <p class="name">{{ c.shortName }}({{ c.sexStr }})
58 <el-icon @click.stop="editPerson(c.id)"> 55 <!-- <el-icon @click.stop="editPerson(c.id)">-->
59 <Edit/> 56 <!-- <Edit/>-->
60 </el-icon> 57 <!-- </el-icon>-->
61 </p> 58 </p>
62 </el-checkbox> 59 </el-checkbox>
63 </el-checkbox-group> 60 </el-checkbox-group>
...@@ -68,13 +65,27 @@ ...@@ -68,13 +65,27 @@
68 <el-col :lg="8"> 65 <el-col :lg="8">
69 <div class="panel border"> 66 <div class="panel border">
70 <div class="panel-header "> 67 <div class="panel-header ">
71 <h3 class="panel-title">可参与报名的项目</h3> 68 <h3 class="panel-title" v-if="language==0">可参与报名的项目</h3>
69 <h3 class="panel-title" v-else>Eligible Events for Registration</h3>
72 <div class="fr"> 70 <div class="fr">
73 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList" clearable/> 71 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList"
72 clearable/>
74 </div> 73 </div>
75 </div> 74 </div>
76 <div class="panel-body" v-loading="loadingProject"> 75 <div class="panel-body" v-loading="loadingProject">
77 <el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228" description="无可选项目" /> 76 <el-checkbox-group v-model="projectIds">
77 <el-checkbox class="w100" v-for="c in projectList" :label="c.id" :key="c.id">
78 <div class="flexBetween w100">
79 <div class="l">
80 {{ c.code }}:{{ c.name }}
81 <div>{{ c.danceTypeDetailStr }}</div>
82 </div>
83 <div class="text-primary">¥{{ c.serviceFee }}</div>
84 </div>
85 </el-checkbox>
86 </el-checkbox-group>
87 <el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228"
88 :description="language==0?'无可选项目':''"/>
78 </div> 89 </div>
79 </div> 90 </div>
80 </el-col> 91 </el-col>
...@@ -82,78 +93,77 @@ ...@@ -82,78 +93,77 @@
82 <el-row class="mt20"> 93 <el-row class="mt20">
83 <el-col :span="24"> 94 <el-col :span="24">
84 <div class="text-center"> 95 <div class="text-center">
85 <el-button type="primary" class="btn-lineG w200px" round>确定</el-button> 96 <el-button type="primary" class="btn-lineG w200px" round @click="signUp">
97 {{ language == 0 ? '确定' : 'Confirm' }}
98 </el-button>
86 </div> 99 </div>
87 </el-col> 100 </el-col>
88 </el-row> 101 </el-row>
89 </el-card> 102 </el-card>
90 103
91 <el-card class="mt20" :body-style="{'padding-top': '0'}"> 104 <el-card class="mt20" :body-style="{'padding': '0'}">
92 <div class="border-info mt20"> 105 <coach-info-row :names="names" :language="language"/>
93 <el-row> 106 <div class="m20">
94 <el-col :lg="8">
95 <div class="item"><label>教练</label>
96 <span v-for="c in names.coachList">{{ c.shortName }}</span>
97 </div>
98 <div class="item"><label>翻译</label>
99 <span v-for="c in names.translatorList">{{ c.shortName }}</span>
100 </div>
101 </el-col>
102 <el-col :lg="8">
103 <div class="item"><label>领队</label>
104 <span v-for="c in names.leaderList">{{ c.shortName }}</span>
105 </div>
106 <div class="item"><label>官员</label>
107 <span class="mr5" v-for="c in names.officialList">{{ c.shortName }}</span>
108 <span v-if="!names.officialList">--</span>
109 </div>
110 </el-col>
111 <el-col :lg="8">
112 <div class="item"><label>队医</label><span class="mr5" v-for="c in names.teamDoctorList">{{
113 c.shortName
114 }}</span></div>
115 <div class="item"><label>其他</label><span class="mr5" v-for="c in names.otherList">{{
116 c.shortName
117 }}</span></div>
118 </el-col>
119 </el-row>
120 </div>
121
122 <div>
123 107
124 <!-- <el-button type="success" @click="importSportman">批量导入人员</el-button>--> 108 <!-- <el-button type="success" @click="importSportman">批量导入人员</el-button>-->
125 <!-- <el-button type="success" @click="addCoach">新增运动员</el-button>--> 109 <!-- <el-button type="success" @click="addCoach">新增运动员</el-button>-->
126 110 <div class="ttbb">
127 <div class="fr mb20" @click="switchTabletype"> 111 <div :class="tableType==1 ? 'active' : ''" @click="switchTabletype">{{ language == 0 ? '按组别查看报项' : 'View Entries by Group' }}</div>
128 <el-button plain type="primary" :icon="Switch" v-if="tableType==1">按人员查看报项</el-button> 112 <div :class="tableType==0 ? 'active' : ''" @click="switchTabletype">{{ language == 0 ? '按人员查看报项' : 'View Entries by Participant' }}</div>
129 <el-button plain type="primary" :icon="Switch" v-else>按组别查看报项</el-button>
130 </div> 113 </div>
131 <el-table :data="signInfoTable" border style="width: 100%" v-if="tableType==0"> 114 <!-- <div class="fr mb20" @click="switchTabletype">-->
132 <el-table-column label="运动员" width="240px"> 115 <!-- <el-button plain type="primary" :icon="Switch" v-if="tableType==1">-->
116 <!-- {{ language == 0 ? '按人员查看报项' : 'View Entries by Participant' }}-->
117 <!-- </el-button>-->
118 <!-- <el-button plain type="primary" :icon="Switch" v-else>-->
119 <!-- {{ language == 0 ? '按组别查看报项' : 'View Entries by Group' }}-->
120 <!-- </el-button>-->
121 <!-- </div>-->
122 <el-table :data="signInfoTable" border style="width: 100%" v-if="tableType==0">
123 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="personInfo.countryName" min-width="100"/>
124 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="personInfo.xing" min-width="100"/>
125 <el-table-column :label="language==0?'名':'First Name'" prop="personInfo.ming" min-width="100"/>
126 <el-table-column :label="language==0?'短名':'Short Name'" prop="personInfo.shortName" min-width="110"/>
127 <el-table-column :label="language==0?'性别':'Gender'" prop="personInfo.sexStr"/>
128 <el-table-column :label="language==0?'年龄':'Age'" prop="personInfo.age"/>
129 <el-table-column :label="language==0?'出生日期':'Birth'" prop="personInfo.birth" width="110"/>
130 <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="personInfo.phone" width="120"/>
131 <el-table-column :label="language==0?'邮箱':'E-mail'" prop="personInfo.email" width="150"/>
132 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="personInfo.idcTypeStr"/>
133 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200"/>
134 <el-table-column :label="language==0?'会员角色':'Role'" width="150">
133 <template #default="scope"> 135 <template #default="scope">
134 <div style="display: flex;align-items: center;"> 136 <div class="esp">
135 <!-- <el-image v-if="scope.row.personInfo.picUrl" style="width: 50px; height: 50px" fit="contain" :src="scope.row.personInfo.picUrl" />--> 137 <span v-for="item in scope.row.personInfo.label?.split(',')" :key="item.id" class="text-primary">
136 <p>{{ scope.row.personInfo.shortName }}({{ scope.row.personInfo.sexStr }})</p> 138 <span v-if="item==='0'" class="ml5">{{ language==0?'运动员':'athletes' }}</span>
139 <span v-if="item==='1'" class="ml5">{{ language==0?'教练':'coach' }}</span>
140 <span v-if="item==='2'" class="ml5">{{ language==0?'领队':'team leader' }}</span>
141 <span v-if="item==='3'" class="ml5">{{ language==0?'队医':'team doctor' }}</span>
142 <span v-if="item==='4'" class="ml5">{{ language==0?'翻译':'translator' }}</span>
143 <span v-if="item==='5'" class="ml5">{{ language==0?'官员':'official' }}</span>
144 <span v-if="item==='6'" class="ml5">{{ language==0?'其他':'other' }}</span>
145 </span>
137 </div> 146 </div>
138 </template> 147 </template>
139 </el-table-column> 148 </el-table-column>
140 <el-table-column label="报项"> 149 <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="personInfo.address" min-width="140"/>
150
151 <el-table-column :label="language==0?'报项':'Entries'" width="300">
141 <template #default="props"> 152 <template #default="props">
142 <ol> 153 <ol>
143 <li v-for="s in props.row.signInfo"> 154 <li v-for="s in props.row.signInfo">
144 {{ s.cptProjectName }} 155 {{ s.cptProjectName }}
145 {{ s.cptGroupName }}{{ s.cptLevelName }} 156 {{ s.cptGroupName }}{{ s.cptLevelName }}
146 <span v-show="s.cptSonLevelName">[{{ s.cptSonLevelName }}]</span> 157 <span v-show="s.cptSonLevelName">[{{ s.cptSonLevelName }}]</span>
147 {{ s.zu }} 158 <span v-show="s.zu">-{{ s.zu }}</span>
148 <el-button type="text" @click="editThis(s)">编辑</el-button> 159 <!-- <el-button type="text" @click="editThis(s)">{{ language == 0 ? '修改' : 'Edit' }}</el-button>-->
149 <!-- <el-button type="text" @click="editMates(s)">更换队友</el-button>--> 160 <!-- <el-button type="text" @click="editMates(s)">更换队友</el-button>-->
150 <el-button type="text" @click="removeThis(s.id)">删除</el-button> 161 <!-- <el-button type="text" @click="removeThis(s.id)">{{ language == 0 ? '删除' : 'Delete' }}</el-button>-->
151
152 </li> 162 </li>
153 </ol> 163 </ol>
154 </template> 164 </template>
155 </el-table-column> 165 </el-table-column>
156 166 <el-table-column :label="language==0?'保险费':'Premium'" prop="insuranceFee"/>
157 <!-- 补充信息--> 167 <!-- 补充信息-->
158 <!-- <el-table-column v-for="(e,index) in extraTableHead" :key="index" :label="e">--> 168 <!-- <el-table-column v-for="(e,index) in extraTableHead" :key="index" :label="e">-->
159 <!-- <template #default="scope">--> 169 <!-- <template #default="scope">-->
...@@ -164,42 +174,56 @@ ...@@ -164,42 +174,56 @@
164 <!-- <span v-else>{{ scope.row.signInfo[0].extraPersonInfoMapList[index]?.value }}</span>--> 174 <!-- <span v-else>{{ scope.row.signInfo[0].extraPersonInfoMapList[index]?.value }}</span>-->
165 <!-- </template>--> 175 <!-- </template>-->
166 <!-- </el-table-column>--> 176 <!-- </el-table-column>-->
167 <el-table-column label="操作" fixed="right" width="150" align="center"> 177 <el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="150" align="center">
168 <template #default="scope"> 178 <template #default="scope">
169 <el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)"> 179 <el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)">
170 <span v-if="scope.row.extraPersonInfo">修改</span> 180 <span v-if="scope.row.extraPersonInfo">{{ language == 0 ? '修改' : 'Edit' }}</span>
171 <span v-else class="red">完善补充信息</span> 181 <span v-else class="red">完善补充信息</span>
172 </el-button> 182 </el-button>
173 </template> 183 </template>
174 </el-table-column> 184 </el-table-column>
175 </el-table> 185 </el-table>
176 186
177 <el-table v-if="tableType==1" :data="signInfoTable" border style="width: 100%"> 187 <el-table v-if="tableType==1" :data="zuTable" border style="width: 100%">
178 <el-table-column label="组别代码" width="120px"> 188 <el-table-column :label="language==0?'组别代码':'Group code'" width="120px" prop="zuName"/>
179 <template #default="scope"> 189 <el-table-column :label="language==0?'组别':'Group'" prop="project.name"/>
180 NO.1 190 <el-table-column :label="language==0?'舞种':'Dance Style'" width="120px" prop="project.danceType"/>
181 </template> 191 <el-table-column :label="language==0?'参赛说明':'Participation Instructions'" prop="project.remarks"/>
182 </el-table-column> 192 <el-table-column :label="language==0?'参赛运动员':'Participating athletes'" width="120px">
183 <el-table-column label="组别" /> 193 <template #default="scope">
184 <el-table-column label="舞种" width="120px"/> 194 <div>
185 <el-table-column label="参赛说明" /> 195 <span v-for="s in scope.row.athletes">{{ s.name }},</span>
186 <el-table-column label="参赛运动员" width="120px"/> 196 </div>
187 <el-table-column label="报名费" width="120px"/> 197 </template>
188 <el-table-column label="操作" fixed="right" width="150" align="center"> 198 </el-table-column>
189 <template #default="scope"> 199 <el-table-column :label="language==0?'报名费':'Registration Fee'" width="120px" prop="">
190 <el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)"> 200 <template #default="scope">
191 <span v-if="scope.row.extraPersonInfo">修改</span> 201 <div class="text-primary">
192 <span v-else class="red">完善补充信息</span> 202 ¥{{scope.row.project.serviceFee}}
193 </el-button> 203 </div>
194 <el-button type="text" @click="goPersonInfo(scope.row)">删除</el-button> 204 </template>
195 </template> 205 </el-table-column>
196 </el-table-column> 206 <el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="150" align="center">
197 </el-table> 207 <template #default="scope">
198 <div class="text-center mt20"> 208 <!-- <el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)">-->
199 <el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button> 209 <!-- <span v-if="scope.row.extraPersonInfo">{{ language == 0 ? '修改' : 'Edit' }}</span>-->
200 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">预览报名信息</el-button> 210 <!-- <span v-else class="red">-->
211 <!-- {{language == 0 ? '完善补充信息' : 'Complete Supplementary Information'}}</span>-->
212 <!-- </el-button>-->
213 <el-button type="text" @click="removeThis(scope.row.id)">{{ language == 0 ? '删除' : 'Delete' }}</el-button>
214
215 </template>
216 </el-table-column>
217 </el-table>
218 <div class="text-center mt20">
219 <el-button type="primary" class="w200px" plain round @click="goPrev()">
220 {{ language == 0 ? "上一步" : 'Go back' }}
221 </el-button>
222 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">
223 {{ language == 0 ? '预览报名信息' : 'Preview registration information' }}
224 </el-button>
225 </div>
201 </div> 226 </div>
202 </div>
203 </el-card> 227 </el-card>
204 </div> 228 </div>
205 229
...@@ -212,23 +236,23 @@ ...@@ -212,23 +236,23 @@
212 <dialogImport ref="dialogImportProps" @submitForm="getMySignInfo"/> 236 <dialogImport ref="dialogImportProps" @submitForm="getMySignInfo"/>
213 237
214 <el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false"> 238 <el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false">
215 <el-result icon="success" title="报名成功"> 239 <el-result icon="success" :title="language==0?'报名成功':'Sign up successful'">
216 <template #extra> 240 <template #extra>
217 <el-button type="primary" @click="downloadVoucher">下载凭证</el-button> 241 <el-button type="primary" @click="downloadVoucher">下载凭证</el-button>
218 <el-button type="primary" @click="goMySign">查看报项</el-button> 242 <el-button type="primary" @click="goMySign">{{ language == 0 ? '查看报项' : 'View Entries' }}</el-button>
219 </template> 243 </template>
220 </el-result> 244 </el-result>
221 245
222 </el-dialog> 246 </el-dialog>
223 247
224 <!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>--> 248 <!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>-->
225 249
226 <dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/> 250 <dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/>
227 </div> 251 </div>
228 </template> 252 </template>
229 253
230 <script setup> 254 <script setup>
231 import {ref, reactive} from 'vue' 255 import {ref, reactive, toRefs} from 'vue'
232 import * as match from '@/apiPc/match' 256 import * as match from '@/apiPc/match'
233 import {getCurrentInstance, onMounted} from '@vue/runtime-core' 257 import {getCurrentInstance, onMounted} from '@vue/runtime-core'
234 import dialogAddCoach from './components/addCoach' 258 import dialogAddCoach from './components/addCoach'
...@@ -238,16 +262,26 @@ import dialogImport from './components/import' ...@@ -238,16 +262,26 @@ import dialogImport from './components/import'
238 import dialogChangeCoach from './components/changeCoach' 262 import dialogChangeCoach from './components/changeCoach'
239 import dialogExtraForm from './components/extraForm' 263 import dialogExtraForm from './components/extraForm'
240 import dialogMates from './components/dialogMates' 264 import dialogMates from './components/dialogMates'
241 import {Search,Switch} from "@element-plus/icons-vue"; 265 import {Search, Switch} from "@element-plus/icons-vue";
266
242 const {proxy} = getCurrentInstance() 267 const {proxy} = getCurrentInstance()
243 const router = useRouter() 268 const router = useRouter()
244 const route = useRoute() 269 const route = useRoute()
245 import _ from 'lodash' 270 import _ from 'lodash'
246 import {ElMessage, ElMessageBox} from 'element-plus' 271 import {ElMessage, ElMessageBox} from 'element-plus'
272 import cache from "@/plugins/cache"
273 import TeamSignStep from "@/viewsPc/match/components/teamSignStep";
274 import {getProjectPageByPerIds} from "@/apiPc/match";
275 import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row";
276
277 const language = ref(cache.local.get('language') || 0)
247 278
248 const data = reactive({ 279 const data = reactive({
249 coachForm: {}, activeStep: 2, 280 coachForm: {}, activeStep: 2,
250 tableData: [], signInfoTable: [], choosedList: [], 281 tableData: [],
282 signInfoTable: [],
283 zuTable: [],
284 choosedList: [],
251 extraPersonInfoMapList: [], 285 extraPersonInfoMapList: [],
252 teamList: [], 286 teamList: [],
253 extraform: [], 287 extraform: [],
...@@ -262,13 +296,14 @@ const data = reactive({ ...@@ -262,13 +296,14 @@ const data = reactive({
262 activeTeam: '', 296 activeTeam: '',
263 names: {}, 297 names: {},
264 choosedchoosed: [], 298 choosedchoosed: [],
299 projectIds: [],
265 projectList: [], 300 projectList: [],
266 choosed2List:[],projectQuery:{},tableType:0 301 choosed2List: [], projectQuery: {}, tableType: 1
267 }) 302 })
268 const { 303 const {
269 activeTeam, names, tableData, signInfoTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList, 304 activeTeam, names, tableData, signInfoTable, zuTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList,
270 extraform, groupId, signType, coachOrLeaderFlag, showResult, noPhotoCanSign, extraTableHead, 305 extraform, groupId, signType, coachOrLeaderFlag, showResult, noPhotoCanSign, extraTableHead,
271 coachForm, choosedchoosed, activeStep,projectList,choosed2List,loadingProject,projectQuery,tableType 306 coachForm, projectIds, choosedchoosed, activeStep, projectList, choosed2List, loadingProject, projectQuery, tableType
272 } = toRefs(data) 307 } = toRefs(data)
273 let matchId = '' 308 let matchId = ''
274 let signInfoType = null 309 let signInfoType = null
...@@ -276,12 +311,8 @@ onMounted(() => { ...@@ -276,12 +311,8 @@ onMounted(() => {
276 groupId.value = route.query.groupId 311 groupId.value = route.query.groupId
277 signType.value = route.query.signType 312 signType.value = route.query.signType
278 matchId = route.query.matchId 313 matchId = route.query.matchId
279 if (signType.value == '2') { 314 getSignInfoList()
280 // 团队-队伍报名-获取队伍 315
281 getTeamList(matchId, groupId.value)
282 } else {
283 getSignInfoList()
284 }
285 if (signType.value == '0') { 316 if (signType.value == '0') {
286 geren() 317 geren()
287 } else { 318 } else {
...@@ -329,13 +360,13 @@ function getMySignInfo() { ...@@ -329,13 +360,13 @@ function getMySignInfo() {
329 } 360 }
330 361
331 function getSignInfoList() { 362 function getSignInfoList() {
332 // console.log(activeTeam.value)
333 match.getMySignInfoList({ 363 match.getMySignInfoList({
334 cptId: matchId, 364 cptId: matchId,
335 groupId: groupId.value, 365 groupId: groupId.value,
336 teamId: activeTeam.value || '' 366 teamId: activeTeam.value || ''
337 }).then(res => { 367 }).then(res => {
338 signInfoTable.value = res.data 368 signInfoTable.value = res.data.singleData
369 zuTable.value = res.data.zuData
339 // if(signInfoTable.value.length>0){ 370 // if(signInfoTable.value.length>0){
340 // let choosedIds = [] 371 // let choosedIds = []
341 // for(let p of choosedList.value){ 372 // for(let p of choosedList.value){
...@@ -358,28 +389,7 @@ function getTableHead() { ...@@ -358,28 +389,7 @@ function getTableHead() {
358 }) 389 })
359 } 390 }
360 391
361 function getTeamList(a, b) {
362 match.getMyTeamList(a, b).then(res => {
363 teamList.value = res.data
364 activeTeam.value = teamList.value[0].id
365 getSignInfoList()
366 })
367 }
368
369 function teamClick(tab, event) {
370 activeTeam.value = tab.props.name
371 getSignInfoList()
372 }
373
374 function submitForm() { 392 function submitForm() {
375 router.push({
376 name: 'signPreview',
377 query: {
378 matchId: matchId,
379 groupId: groupId.value,
380 teamId: activeTeam.value
381 }
382 })
383 if (signInfoType == '1') { 393 if (signInfoType == '1') {
384 ElMessageBox.confirm('已报项,前往我的报项', '提示', { 394 ElMessageBox.confirm('已报项,前往我的报项', '提示', {
385 confirmButtonText: '确定', 395 confirmButtonText: '确定',
...@@ -400,6 +410,7 @@ function submitForm() { ...@@ -400,6 +410,7 @@ function submitForm() {
400 for (const s of signInfoTable.value) { 410 for (const s of signInfoTable.value) {
401 if (s.extraPersonInfo == null && needBuchong) { 411 if (s.extraPersonInfo == null && needBuchong) {
402 ElMessage.error('请完善运动员补充信息') 412 ElMessage.error('请完善运动员补充信息')
413 tableType.value = 0
403 return 414 return
404 } 415 }
405 } 416 }
...@@ -423,11 +434,22 @@ function submitForm() { ...@@ -423,11 +434,22 @@ function submitForm() {
423 } else { 434 } else {
424 afterRecover() 435 afterRecover()
425 } 436 }
437 router.push({
438 name: 'signPreview',
439 query: {
440 matchId: matchId,
441 groupId: groupId.value
442 }
443 })
426 } 444 }
427 445
428 function afterRecover() { 446 function afterRecover() {
429 if (signInfoTable.value.length == 0) { 447 if (signInfoTable.value.length == 0) {
430 ElMessage.error('请至少选择一个项目') 448 if (language.value == 0) {
449 ElMessage.error('请至少选择一个项目')
450 } else {
451 ElMessage.error('select at least one project')
452 }
431 return 453 return
432 } 454 }
433 // 判断是否收费 455 // 判断是否收费
...@@ -478,7 +500,7 @@ function chooseSportman() { ...@@ -478,7 +500,7 @@ function chooseSportman() {
478 } 500 }
479 501
480 const params = { 502 const params = {
481 title: '选择运动员', 503 title: language.value == 0 ? '选择运动员' : 'Participating athletes',
482 matchId: matchId, 504 matchId: matchId,
483 groupId: groupId.value, 505 groupId: groupId.value,
484 rankId: activeTeam.value, 506 rankId: activeTeam.value,
...@@ -493,7 +515,7 @@ function chooseSportman() { ...@@ -493,7 +515,7 @@ function chooseSportman() {
493 function changechoosed(e) { 515 function changechoosed(e) {
494 console.log(e) 516 console.log(e)
495 choosed2List.value = [] 517 choosed2List.value = []
496 for(var c of choosedList.value){ 518 for (var c of choosedList.value) {
497 if (choosedchoosed.value.indexOf(c.id) > -1) { 519 if (choosedchoosed.value.indexOf(c.id) > -1) {
498 choosed2List.value.push(c) 520 choosed2List.value.push(c)
499 } 521 }
...@@ -501,22 +523,33 @@ function changechoosed(e) { ...@@ -501,22 +523,33 @@ function changechoosed(e) {
501 getProjectList() 523 getProjectList()
502 524
503 } 525 }
526
504 function getProjectList() { 527 function getProjectList() {
505 if(choosed2List.value.length==0){ 528 projectIds.value = []
506 ElMessage.error('请先选择运动员') 529 if (choosed2List.value.length == 0) {
530 // ElMessage.error('请先选择运动员')
531 projectList.value = []
507 return 532 return
508 } 533 }
509 loadingProject.value = true 534 loadingProject.value = true
510 //根据已选人员id 获取项目列表 535 //根据已选人员id 获取项目列表
511 match.getCanSignProjectList(matchId).then(res=>{ 536 var obj = {
512 projectList.value = res.data 537 cptId: matchId,
538 perIds: choosedchoosed.value.toString()
539 }
540 match.getProjectPageByPerIds(obj).then(res => {
541 projectList.value = res.rows
542 loadingProject.value = false
543 }).catch(err => {
513 loadingProject.value = false 544 loadingProject.value = false
545 ElMessage.error(err.msg)
514 }) 546 })
515 } 547 }
548
516 function getChoosed(list) { 549 function getChoosed(list) {
517 console.log(list) 550 console.log(list)
518 choosedList.value = list 551 choosedList.value = list
519 console.log('选好了',choosedchoosed.value) 552 console.log('选好了', choosedchoosed.value)
520 } 553 }
521 554
522 function addCoach() { 555 function addCoach() {
...@@ -601,6 +634,21 @@ function editMates(row) { ...@@ -601,6 +634,21 @@ function editMates(row) {
601 proxy.$refs['dialogMatesRef'].open(params) 634 proxy.$refs['dialogMatesRef'].open(params)
602 } 635 }
603 636
637 function signUp() {
638 if (projectIds.value.length == 0) {
639 return
640 }
641 const obj = {
642 athleteIds: choosedchoosed.value.toString(),
643 projectIds: projectIds.value.toString(),
644 groupId: groupId.value
645 }
646 match.sportsmanDone(obj).then(res => {
647
648 getSignInfoList()
649 })
650 }
651
604 function removeThis(id) { 652 function removeThis(id) {
605 ElMessageBox.confirm('确定移除这条报项吗?', '提示', { 653 ElMessageBox.confirm('确定移除这条报项吗?', '提示', {
606 confirmButtonText: '确定', 654 confirmButtonText: '确定',
...@@ -675,16 +723,30 @@ function editPerson(id) { ...@@ -675,16 +723,30 @@ function editPerson(id) {
675 groupId: groupId.value 723 groupId: groupId.value
676 }) 724 })
677 } 725 }
726
678 function switchTabletype() { 727 function switchTabletype() {
679 if(tableType.value == 0){ 728 if (tableType.value == 0) {
680 tableType.value = 1 729 tableType.value = 1
681 }else{ 730 } else {
682 tableType.value = 0 731 tableType.value = 0
683 } 732 }
684 } 733 }
685 </script> 734 </script>
686 735
687 <style scoped lang="scss"> 736 <style scoped lang="scss">
737 :deep(.el-checkbox__label) {
738 flex: 1 1 auto;
739 }
740
741 .flexBetween {
742 .l {
743 div {
744 margin: 4px 0 0;
745 color: #999;
746 }
747 }
748 }
749
688 .app-container { 750 .app-container {
689 padding: 0; 751 padding: 0;
690 background: #F5F7F9; 752 background: #F5F7F9;
...@@ -733,7 +795,7 @@ function switchTabletype() { ...@@ -733,7 +795,7 @@ function switchTabletype() {
733 } 795 }
734 796
735 .el-checkbox { 797 .el-checkbox {
736 height: auto; 798 height: auto;margin-right: 20px;
737 } 799 }
738 800
739 :deep(.el-checkbox__input) { 801 :deep(.el-checkbox__input) {
...@@ -750,5 +812,35 @@ function switchTabletype() { ...@@ -750,5 +812,35 @@ function switchTabletype() {
750 :deep(.el-avatar) > img { 812 :deep(.el-avatar) > img {
751 width: 100%; 813 width: 100%;
752 } 814 }
753 .panel{height: 100%;} 815
816 .panel {
817 height: 100%;
818 }
819
820 .border-info {
821 .item {
822 margin: 5px 0;
823 color: #4C5359;
824 font-size: 14px;
825
826 label {
827 font-size: 14px;
828 margin-right: 14px
829 }
830 }
831 }
832 .ttbb{font-size: 14px;
833 color: #4C5359;
834 display: flex;justify-content: center;
835 div{padding: 20px;position: relative;cursor: pointer;}
836 div:first-child::after {content: '';position: absolute;right: 0;
837 background: #ccc;width: 1px;height: 14px;top:0;bottom: 0;margin: auto;}
838
839 .active{color: var(--el-color-primary);
840 &::before{width: 33px;content: '';position: absolute;
841 height: 2px;bottom: 14px;left: 0;right: 0;margin: auto;
842 background: #453DEA;
843 border-radius: 1px;}
844 }
845 }
754 </style> 846 </style>
......
...@@ -13,21 +13,20 @@ ...@@ -13,21 +13,20 @@
13 :is-show-tip="false" 13 :is-show-tip="false"
14 /> 14 />
15 </el-form-item> 15 </el-form-item>
16 <el-form-item label="姓氏" prop="xing" required> 16 <el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required>
17 <el-input v-model="form.xing"/> 17 <el-input v-model="form.xing"/>
18 </el-form-item> 18 </el-form-item>
19 <el-form-item label="短名" prop="shortName" required> 19 <el-form-item :label="language==0?'短名':'short name'" prop="shortName" required>
20 <el-input v-model="form.shortName" placeholder="赛事用名"/> 20 <el-input v-model="form.shortName" placeholder="赛事用名"/>
21 </el-form-item> 21 </el-form-item>
22 <el-form-item label="出生日期" prop="birth" required> 22 <el-form-item :label="language==0?'出生日期':'birth'" prop="birth" required>
23 <el-date-picker 23 <el-date-picker
24 v-model="form.birth" 24 v-model="form.birth"
25 style="width: 100%;" 25 style="width: 100%;"
26 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" 26 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
27 placeholder="请选择出生日期"
28 /> 27 />
29 </el-form-item> 28 </el-form-item>
30 <el-form-item label="证件类型" prop="idcType" required> 29 <el-form-item :label="language==0?'证件类型':'ID type'" prop="idcType" required>
31 <el-select v-model="form.idcType" style="width: 100%;"> 30 <el-select v-model="form.idcType" style="width: 100%;">
32 <el-option 31 <el-option
33 v-for="item in certificates" 32 v-for="item in certificates"
...@@ -37,17 +36,17 @@ ...@@ -37,17 +36,17 @@
37 /> 36 />
38 </el-select> 37 </el-select>
39 </el-form-item> 38 </el-form-item>
40 <el-form-item label="手机号码" prop="phone" required> 39 <el-form-item :label="language==0?'手机号码':'Phone'" prop="phone" required>
41 <el-input v-model="form.phone" type="number"/> 40 <el-input v-model="form.phone" type="number"/>
42 </el-form-item> 41 </el-form-item>
43 </el-col> 42 </el-col>
44 <el-col :lg="12"> 43 <el-col :lg="12">
45 <el-form-item label="所属国家" prop="countryId" required> 44 <el-form-item :label="language==0?'所属国家':'Nationality'" prop="countryId" required>
46 <el-select v-model="form.countryId" style="width: 100%;" @change="changeCountryId"> 45 <el-select v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
47 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id"/> 46 <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
48 </el-select> 47 </el-select>
49 </el-form-item> 48 </el-form-item>
50 <el-form-item label="详细地址" prop="address" required> 49 <el-form-item :label="language==0?'详细地址':'Address'" prop="address" required>
51 <el-cascader v-if="form.countryId == 240" 50 <el-cascader v-if="form.countryId == 240"
52 v-model="form.regionId" 51 v-model="form.regionId"
53 style="width: 100%;margin-bottom: 15px" 52 style="width: 100%;margin-bottom: 15px"
...@@ -57,24 +56,24 @@ ...@@ -57,24 +56,24 @@
57 <el-input v-model="form.address" type="textarea" :rows="4"/> 56 <el-input v-model="form.address" type="textarea" :rows="4"/>
58 57
59 </el-form-item> 58 </el-form-item>
60 <el-form-item label="名" prop="ming" required> 59 <el-form-item :label="language==0?'名':'name'" prop="ming" required>
61 <el-input v-model="form.ming"/> 60 <el-input v-model="form.ming"/>
62 </el-form-item> 61 </el-form-item>
63 <el-form-item label="性别" prop="sex"> 62 <el-form-item :label="language==0?'性别':'sex'" prop="sex">
64 <el-radio-group v-model="form.sex"> 63 <el-radio-group v-model="form.sex">
65 <el-radio label="0"></el-radio> 64 <el-radio label="0">{{ language==0?'女':'female' }}</el-radio>
66 <el-radio label="1"></el-radio> 65 <el-radio label="1">{{ language==0?'男':'male' }}</el-radio>
67 </el-radio-group> 66 </el-radio-group>
68 </el-form-item> 67 </el-form-item>
69 <el-form-item label="邮箱" prop="idcCode" required> 68 <el-form-item :label="language==0?'邮箱':'Email'" prop="idcCode" required>
70 <el-input v-model="form.email"/> 69 <el-input v-model="form.email"/>
71 </el-form-item> 70 </el-form-item>
72 <el-form-item label="证件号码" prop="idcCode" required> 71 <el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
73 <el-input v-model="form.idcCode" @blur="checkCode"/> 72 <el-input v-model="form.idcCode" @blur="checkCode"/>
74 </el-form-item> 73 </el-form-item>
75 <el-form-item label="主要会员角色" prop="labelArr"> 74 <el-form-item :label="language==0?'主要会员角色':'roles'" prop="labelArr">
76 <el-select v-model="form.labelArr" multiple @change="labelvalue"> 75 <el-select v-model="form.labelArr" multiple @change="labelvalue">
77 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="l.label"/> 76 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/>
78 </el-select> 77 </el-select>
79 </el-form-item> 78 </el-form-item>
80 </el-col> 79 </el-col>
...@@ -82,7 +81,7 @@ ...@@ -82,7 +81,7 @@
82 </el-form> 81 </el-form>
83 <template #footer> 82 <template #footer>
84 <div class="dialog-footer text-center"> 83 <div class="dialog-footer text-center">
85 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm">确定</el-button> 84 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm">{{ language==0?'确定':'Save' }}</el-button>
86 </div> 85 </div>
87 </template> 86 </template>
88 </el-dialog> 87 </el-dialog>
...@@ -96,6 +95,8 @@ import {certificates} from '@/assets/lib/nation' ...@@ -96,6 +95,8 @@ import {certificates} from '@/assets/lib/nation'
96 import {ElMessage} from 'element-plus' 95 import {ElMessage} from 'element-plus'
97 import {nationList} from '@/assets/js/data' 96 import {nationList} from '@/assets/js/data'
98 import _ from 'lodash' 97 import _ from 'lodash'
98 import cache from "@/plugins/cache";
99 const language = ref(cache.local.get('language') || 0)
99 100
100 const {proxy} = getCurrentInstance() 101 const {proxy} = getCurrentInstance()
101 const emit = defineEmits(['submitForm']) 102 const emit = defineEmits(['submitForm'])
...@@ -122,13 +123,14 @@ const data = reactive({ ...@@ -122,13 +123,14 @@ const data = reactive({
122 show: false, 123 show: false,
123 countryList: [], 124 countryList: [],
124 regionsList: [], 125 regionsList: [],
125 labels: [{value: '0', label: '运动员'}, 126 labels: [
126 {value: '1', label: '教练'}, 127 {value: '0', label: '运动员', enlabel: 'Sportsman'},
127 {value: '2', label: '领队'}, 128 {value: '1', label: '教练', enlabel: 'Coach'},
128 {value: '3', label: '队医'}, 129 {value: '2', label: '领队', enlabel: 'Leader'},
129 {value: '4', label: '翻译'}, 130 {value: '3', label: '队医', enlabel: 'Nurse'},
130 {value: '5', label: '官员'}, 131 {value: '4', label: '翻译', enlabel: 'Translator'},
131 {value: '6', label: '其他'} 132 {value: '5', label: '官员', enlabel: 'Official'},
133 {value: '6', label: '其他', enlabel: 'Other'}
132 ], 134 ],
133 title: '添加选手信息', 135 title: '添加选手信息',
134 groupId: '0', 136 groupId: '0',
......
1 <template> 1 <template>
2 <el-dialog v-model="show" :title="title" width="1000px" append-to-body> 2 <el-dialog v-model="show" :title="title" width="1000px" append-to-body>
3 <div class="funcBtns"> 3 <div class="funcBtns">
4 <el-button type="primary" @click="addMember">添加选手</el-button> 4 <el-button type="primary" @click="addMember">
5 <el-button type="primary" plain @click="importSportman">导入选手</el-button> 5 {{ language == 0 ? '添加选手' : 'Add Player' }}
6 </el-button>
7 <el-button type="primary" plain @click="importSportman">
8 {{language == 0 ? '导入选手' : 'Import Player'}}
9 </el-button>
6 </div> 10 </div>
7 <div class="from-Card"> 11 <div class="from-Card">
8 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small"> 12 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
9 <el-form-item label="姓名"> 13 <el-form-item :label="language==0?'姓名':'Name'">
10 <el-input v-model="query.realName" style="width: 120px;" clearable/> 14 <el-input v-model="query.realName" style="width: 120px;" clearable/>
11 </el-form-item> 15 </el-form-item>
12 <el-form-item label="短名"> 16 <el-form-item :label="language==0?'短名':'Short Name'">
13 <el-input v-model="query.shortName" style="width: 120px;" clearable/> 17 <el-input v-model="query.shortName" style="width: 120px;" clearable/>
14 </el-form-item> 18 </el-form-item>
15 <el-form-item label="手机号码"> 19 <el-form-item :label="language==0?'手机号码':'Phone Number'">
16 <el-input v-model="query.phone" style="width: 120px;" clearable/> 20 <el-input v-model="query.phone" style="width: 120px;" clearable/>
17 </el-form-item> 21 </el-form-item>
18 <el-form-item label="邮箱"> 22 <el-form-item :label="language==0?'邮箱':'E-mail'">
19 <el-input v-model="query.email" style="width: 120px;" clearable/> 23 <el-input v-model="query.email" style="width: 120px;" clearable/>
20 </el-form-item> 24 </el-form-item>
21 <el-form-item label="证件类型"> 25 <el-form-item :label="language==0?'证件类型':'ID Type'">
22 <el-input v-model="query.idcType" style="width: 120px;" clearable/> 26 <el-input v-model="query.idcType" style="width: 120px;" clearable/>
23 </el-form-item> 27 </el-form-item>
24 <el-form-item label="证件号"> 28 <el-form-item :label="language==0?'证件号码':'ID NO.'">
25 <el-input v-model="query.idcode" style="width: 120px;" clearable/> 29 <el-input v-model="query.idcode" style="width: 120px;" clearable/>
26 </el-form-item> 30 </el-form-item>
27 <el-form-item label="角色"> 31 <!-- <el-form-item label="角色">-->
28 <el-input v-model="query.label" style="width: 120px;" clearable/> 32 <!-- <el-input v-model="query.label" style="width: 120px;" clearable/>-->
29 </el-form-item> 33 <!-- </el-form-item>-->
30 <el-form-item> 34 <el-form-item>
31 <el-button type="primary" @click="getList">查询</el-button> 35 <el-button type="primary" @click="getList">{{language==0?'查询':'Search'}}</el-button>
32 </el-form-item> 36 </el-form-item>
33 </el-form> 37 </el-form>
34 </div> 38 </div>
35 <p v-if="noPhotoCanSign == 0" class="text-danger">*需上传照片才可报名</p> 39 <p v-if="noPhotoCanSign == 0" class="text-danger">*需上传照片才可报名</p>
36 <el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh" 40 <el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
37 @selection-change="handleSelectionChange"> 41 @selection-change="handleSelectionChange">
38 <el-table-column type="selection" label="选择" :selectable="selectable"/> 42 <el-table-column type="selection" :label="language==0?'选择':'Selection'" :selectable="selectable"/>
39 <el-table-column label="所属国家" prop="countryName"/> 43 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
40 <el-table-column label="姓氏" prop="xing"/> 44 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
41 <el-table-column label="名" prop="ming"/> 45 <el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
42 <el-table-column label="短名" prop="shortName"/> 46 <el-table-column :label="language==0?'短名':'Short Name'" prop="shortName" min-width="110"/>
43 <el-table-column label="性别" prop="sexStr"/> 47 <el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
44 <el-table-column label="年龄" prop="age"/> 48 <el-table-column :label="language==0?'年龄':'Age'" prop="age"/>
45 <el-table-column label="出生日期" prop="birth" width="100"/> 49 <el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
46 <el-table-column label="手机号码" prop="phone" width="120"/> 50 <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/>
47 <el-table-column label="邮箱" prop="email" width="150"/> 51 <el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>
48 <el-table-column label="证件类型" prop="idcTypeStr"/> 52 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr"/>
49 <el-table-column label="证件号码" prop="idcCode" width="200"/> 53 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
50 <el-table-column label="会员角色" width="200"> 54 <!-- <el-table-column label="会员角色" width="200">-->
51 <template #default="scope"> 55 <!-- <template #default="scope">-->
52 <div> 56 <!-- <div>-->
53 <div style="white-space: nowrap" class="esp"> 57 <!-- <div style="white-space: nowrap" class="esp">-->
54 <span v-for="item in scope.row.label?.split(',')" :key="item.id"> 58 <!-- <span v-for="item in scope.row.label?.split(',')" :key="item.id">-->
55 <el-tag type="warning" size="small" v-if="item==='0'" effect="plain" class="ml10">运动员</el-tag> 59 <!-- <span v-if="item==='0'" class="ml5">{{ language==0?'运动员':'athletes' }}</span>-->
56 <el-tag type="warning" size="small" v-if="item==='1'" effect="plain" class="ml10">教练</el-tag> 60 <!-- <span v-if="item==='1'" class="ml5">{{ language==0?'教练':'coach' }}</span>-->
57 <el-tag type="warning" size="small" v-if="item==='2'" effect="plain" class="ml10">领队</el-tag> 61 <!-- <span v-if="item==='2'" class="ml5">{{ language==0?'领队':'team leader' }}</span>-->
58 <el-tag type="warning" size="small" v-if="item==='3'" effect="plain" class="ml10">队医</el-tag> 62 <!-- <span v-if="item==='3'" class="ml5">{{ language==0?'队医':'team doctor' }}</span>-->
59 <el-tag type="warning" size="small" v-if="item==='4'" effect="plain" class="ml10">翻译</el-tag> 63 <!-- <span v-if="item==='4'" class="ml5">{{ language==0?'翻译':'translator' }}</span>-->
60 <el-tag type="warning" size="small" v-if="item==='5'" effect="plain" class="ml10">官员</el-tag> 64 <!-- <span v-if="item==='5'" class="ml5">{{ language==0?'官员':'official' }}</span>-->
61 <el-tag type="warning" size="small" v-if="item==='6'" effect="plain" class="ml10">其他</el-tag> 65 <!-- <span v-if="item==='6'" class="ml5">{{ language==0?'其他':'other' }}</span>-->
62 </span> 66 <!-- </span>-->
63 </div> 67 <!-- </div>-->
64 </div> 68 <!-- </div>-->
65 </template> 69 <!-- </template>-->
66 </el-table-column> 70 <!-- </el-table-column>-->
67 <el-table-column label="详细地址" prop="address"/> 71 <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>
68 72 <el-table-column :label="language==0?'操作':'Actions'" width="120" fixed="right" align="center">
69 <el-table-column label="操作" width="120" fixed="right" align="center">
70 <template #default="scope"> 73 <template #default="scope">
71 <el-button type="text" @click="editPerson(scope.row)">编辑</el-button> 74 <el-button type="text" @click="editPerson(scope.row)">
75 {{language==0?'编辑':'Edit'}}
76 </el-button>
72 </template> 77 </template>
73 </el-table-column> 78 </el-table-column>
74 </el-table> 79 </el-table>
75 <template #footer> 80 <template #footer>
76 <div class="dialog-footer text-center"> 81 <div class="dialog-footer text-center">
77 <el-button type="primary" @click="submitForm">确定</el-button> 82 <el-button type="primary" @click="submitForm">{{language==0?'确定':'Confirm'}}</el-button>
78 <el-button @click="cancel">取 消</el-button> 83 <el-button @click="cancel">{{language==0?'取消':'Cancel'}}</el-button>
79 </div> 84 </div>
80 </template> 85 </template>
81 </el-dialog> 86 </el-dialog>
...@@ -91,6 +96,9 @@ import * as match from '@/apiPc/match' ...@@ -91,6 +96,9 @@ import * as match from '@/apiPc/match'
91 import addCoach from '../components/addCoach' 96 import addCoach from '../components/addCoach'
92 import {getGroupPersonList} from "@/apiPc/match"; 97 import {getGroupPersonList} from "@/apiPc/match";
93 import Import from '../components/import' 98 import Import from '../components/import'
99 import cache from "@/plugins/cache";
100
101 const language = ref(cache.local.get('language') || 0)
94 102
95 const {proxy} = getCurrentInstance() 103 const {proxy} = getCurrentInstance()
96 const emit = defineEmits(['submitForm', 'transfer']) 104 const emit = defineEmits(['submitForm', 'transfer'])
...@@ -109,6 +117,7 @@ let groupId ...@@ -109,6 +117,7 @@ let groupId
109 let choosedList = [] 117 let choosedList = []
110 const choosedIds = [] 118 const choosedIds = []
111 const open = (params) => { 119 const open = (params) => {
120 title.value = params.title
112 matchId = params.matchId 121 matchId = params.matchId
113 groupId = params.groupId 122 groupId = params.groupId
114 noPhotoCanSign.value = params.noPhotoCanSign 123 noPhotoCanSign.value = params.noPhotoCanSign
......
1 <template>
2 <div class="border-info" style="margin: 20px">
3 <el-row>
4 <el-col :lg="8">
5 <div class="item"><label>{{ language == 0 ? '教练' : 'Coach' }}</label>
6 <span v-for="c in names.coachList">{{ c.shortName }}</span>
7 </div>
8 <div class="item"><label>{{ language == 0 ? '翻译' : 'Translator' }}</label>
9 <span v-for="c in names.translatorList">{{ c.shortName }}</span>
10 </div>
11 </el-col>
12 <el-col :lg="8">
13 <div class="item">
14 <label>{{ language == 0 ? '领队' : 'Team leader' }}</label>
15 <span v-for="c in names.leaderList">{{ c.shortName }}</span>
16 </div>
17 <div class="item">
18 <label>{{ language == 0 ? '官员' : 'Official' }}</label>
19 <span class="mr5" v-for="c in names.officialList">{{ c.shortName }}</span>
20 <span v-if="!names.officialList">--</span>
21 </div>
22 </el-col>
23 <el-col :lg="8">
24 <div class="item">
25 <label>{{ language == 0 ? '队医' : 'Team doctor' }}</label>
26 <span class="mr5" v-for="c in names.teamDoctorList">
27 {{ c.shortName }}
28 </span>
29 </div>
30 <div class="item">
31 <label>{{ language == 0 ? '其他' : 'Other' }}</label>
32 <span class="mr5" v-for="c in names.otherList">
33 {{ c.shortName }}
34 </span>
35 </div>
36 </el-col>
37 </el-row>
38 </div>
39 </template>
40
41 <script setup>
42 const props = defineProps({
43 names: {
44 type: Object,
45 required: true
46 },
47 language: {
48 type: Number,
49 required: true,
50 default: 0
51 }
52 })
53 </script>
54
55 <style scoped lang="scss">
56 .border-info {
57 .item {
58 margin: 5px 0;
59 color: #4C5359;
60 font-size: 14px;
61
62 label {
63 font-size: 14px;
64 margin-right: 14px
65 }
66 }
67 }
68 </style>
1 <template>
2 <div class="border-info gray" style="margin: 20px">
3 <el-row>
4 <el-col :lg="8">
5 <el-row :gutter="15">
6 <el-col :span="4">
7 <img class="w100" :src="fillImgUrl(groupInfo.imgUrl)"/>
8 </el-col>
9 <el-col :span="20">
10 <div class="item"><label>{{ language==0?'团体名称':'Team Name' }}</label>{{ groupInfo.name }}</div>
11 <div class="item"><label>{{ language==0?'团体类型':'Group type' }}</label>{{ groupInfo.typeStr }}</div>
12 </el-col>
13 </el-row>
14 </el-col>
15 <el-col :lg="8">
16 <div class="item"><label>{{ language==0?'负责人姓名':'Contact Person' }}</label>{{ groupInfo.contactPerson }}</div>
17 <div class="item"><label>{{ language==0?'参赛队名称':'Name of participating team' }}</label>{{ groupInfo.abreviations }}</div>
18
19 </el-col>
20 <el-col :lg="8">
21 <div class="item"><label>{{ language==0?'邮箱':'Email' }}</label>{{ groupInfo.contactEmail }}</div>
22 <div class="item"><label>{{ language==0?'详细地址':'Detailed Address' }}</label>{{ groupInfo.address }}</div>
23 </el-col>
24 </el-row>
25 </div>
26 </template>
27
28 <script setup>
29 const props = defineProps({
30 groupInfo: {
31 type: Object,
32 required: true
33 },
34 language: {
35 type: Number,
36 required: true,
37 default: 0
38 }
39 })
40 </script>
41
42 <style scoped lang="scss">
43 .border-info{
44 .item{margin: 5px 0;color: #4C5359; font-size: 14px;
45 label{font-size: 14px;margin-right: 14px}
46 }
47 }
48 </style>
1 <template>
2 <div class="border-info" style="margin: 20px">
3 <el-row v-if="language==0">
4 <el-col :lg="8"><div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col>
5 <el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col>
6 <el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}}{{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
7 <el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }}{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
8 <el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col>
9 </el-row>
10 <el-row v-else>
11 <el-col :lg="8"><div class="item"><label>Event Name</label>{{matchInfo.name}}</div></el-col>
12 <el-col :lg="8"><div class="item"><label>Event Type</label>{{matchInfo.name}}</div></el-col>
13 <el-col :lg="8"><div class="item"><label>Event Date</label>{{matchInfo.beginTime?.slice(0,10)}} ~ {{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
14 <el-col :lg="8"><div class="item"><label>Registration Period</label>{{ matchInfo.signBeginTime?.slice(0,10) }} ~{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
15 <el-col :lg="16"><div class="item"><label>Event Address</label>{{matchInfo.address}}</div></el-col>
16 </el-row>
17 </div>
18 </template>
19
20 <script setup>
21 const props = defineProps({
22 matchInfo: {
23 type: Object,
24 required: true
25 },
26 language: {
27 type: Number,
28 required: true,
29 default: 0
30 }
31 })
32 </script>
33
34 <style scoped lang="scss">
35 .border-info{
36 .item{margin: 5px 0;color: #4C5359; font-size: 14px;
37 label{font-size: 14px;margin-right: 14px}
38 }
39 }
40 </style>
1 <template> 1 <template>
2 <div style="padding: 0 20px 20px"> 2 <div style="padding: 30px 20px 20px">
3 <!--日程--> 3 <!--日程-->
4 <el-timeline> 4 <el-timeline>
5 <el-timeline-item 5 <el-timeline-item
......
1 <template> 1 <template>
2 <!-- 人员表格--> 2 <!-- 人员表格-->
3 <el-table :data="tableData" class="mt20"> 3 <el-table :data="tableData" class="mt20">
4 <el-table-column type="index" label="序号" width="80" align="center"/> 4 <el-table-column type="index" :label="language==0?'序号':'index'" width="80" align="center"/>
5 <el-table-column label="所属国家" prop="countryName"/> 5 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
6 <el-table-column label="姓氏" prop="xing"/> 6 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
7 <el-table-column label="名" prop="ming"/> 7 <el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
8 <el-table-column label="短名" prop="shortName"/> 8 <el-table-column :label="language==0?'短名':'Short Name'" prop="shortName" min-width="110"/>
9 <el-table-column label="性别" prop="sexStr"/> 9 <el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
10 <el-table-column label="年龄" prop="age"/> 10 <el-table-column :label="language==0?'年龄':'Age'" prop="age"/>
11 <el-table-column label="出生日期" prop="birth" width="100"/> 11 <el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
12 <el-table-column label="手机号码" prop="phone" width="120"/> 12 <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/>
13 <el-table-column label="邮箱" prop="email" width="150"/> 13 <el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>
14 <el-table-column label="证件类型" prop="idcTypeStr"/> 14 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr"/>
15 <el-table-column label="证件号码" prop="idcCode" width="200"/> 15 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
16 <el-table-column label="会员角色"> 16 <el-table-column :label="language==0?'会员角色':'Role'" width="150">
17 <template #default="scope"> 17 <template #default="scope">
18 <span v-for="item in scope.row.label?.split(',')" :key="item.id"> 18 <div class="esp">
19 <el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag> 19 <span v-for="item in scope.row.label?.split(',')" :key="item.id" class="text-primary">
20 <el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag> 20 <span v-if="item==='0'" class="ml5">{{ language==0?'运动员':'athletes' }}</span>
21 <el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag> 21 <span v-if="item==='1'" class="ml5">{{ language==0?'教练':'coach' }}</span>
22 <el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag> 22 <span v-if="item==='2'" class="ml5">{{ language==0?'领队':'team leader' }}</span>
23 <el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag> 23 <span v-if="item==='3'" class="ml5">{{ language==0?'队医':'team doctor' }}</span>
24 <el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag> 24 <span v-if="item==='4'" class="ml5">{{ language==0?'翻译':'translator' }}</span>
25 <el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag> 25 <span v-if="item==='5'" class="ml5">{{ language==0?'官员':'official' }}</span>
26 <span v-if="item==='6'" class="ml5">{{ language==0?'其他':'other' }}</span>
26 </span> 27 </span>
28 </div>
27 </template> 29 </template>
28 </el-table-column> 30 </el-table-column>
29 <el-table-column label="详细地址" prop="address"/> 31 <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>
30 <el-table-column label="操作" fixed="right" width="160" header-align="center" align="center"> 32 <el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="160" header-align="center"
33 align="center">
31 <template #default="scope"> 34 <template #default="scope">
32 <a class="text-primary pd10" @click="editCoach(scope.row.id,scope.row.groupId)">编辑</a> 35 <a class="text-primary pd10" @click="editCoach(scope.row)">
33 <a class="text-primary pd10" @click="delperson(scope.row)">删除</a> 36 {{language==0?'编辑':'Edit'}}
37 </a>
38 <a class="text-primary pd10" @click="delperson(scope.row)">
39 {{language==0?'删除':'Delete'}}
40 </a>
34 </template> 41 </template>
35 </el-table-column> 42 </el-table-column>
36 </el-table> 43 </el-table>
37 <!-- <paginationPc--> 44 <!-- <paginationPc-->
38 <!-- v-show="total>0"--> 45 <!-- v-show="total>0"-->
39 <!-- v-model:page="query.pageNum"--> 46 <!-- v-model:page="query.pageNum"-->
40 <!-- v-model:limit="query.pageSize"--> 47 <!-- v-model:limit="query.pageSize"-->
41 <!-- :total="total"--> 48 <!-- :total="total"-->
42 <!-- @pagination="getList"--> 49 <!-- @pagination="getList"-->
43 <!-- />--> 50 <!-- />-->
44 </template> 51 </template>
45 52
46 <script setup> 53 <script setup>
54 import {ref} from "vue";
55 import cache from "@/plugins/cache";
56 const language = ref(cache.local.get('language') || 0)
57 const emit = defineEmits(['edit', 'delete'])
58 let title = ''
47 const props = defineProps({ 59 const props = defineProps({
48 tableData:{ 60 tableData: {
49 type:Array, 61 type: Array,
50 required:true 62 required: true
51 } 63 }
52 }) 64 })
53 const editCoach = () => { 65 const editCoach = (row) => {
66 // scope.row.id,scope.row.groupId
67 title = (language.value==0?'编辑人员':'Edit')
68 emit('edit', row,title)
69 }
70 const delperson = (row) => {
71 emit('delete', row)
54 72
55 } 73 }
56 </script> 74 </script>
......
1 <template>
2 <div class="pd20">
3 <div class="matchItem" v-for="n in list" :key="n.id" @click="goDetail(n.id)">
4 <el-row :gutter="15">
5 <el-col :lg="7" :md="24" :xl="6">
6 <img class="mauto w100" :src="fillImgUrl(n.coverUrl)">
7 </el-col>
8 <el-col :lg="10" :md="12" :xl="12">
9 <div class="info">
10 <h3>{{ n.name }}</h3>
11 <p class="ppl"><label>{{ language==0?'比赛时间':'Playing Time' }}</label>{{n.beginTime?.slice(0,10)}}{{ n.endTime?.slice(0,10) }}</p>
12 <p class="ppl"><label>{{ language==0?'地&ensp;&ensp;&ensp;&ensp;点':'Location' }}</label>{{ n.address }}</p>
13 <p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}</label>{{ n.signEndTime?.slice(0,10) }}</p>
14
15 <p class="ppl"><label>{{ language==0?'联系人员':'Contact Person' }}</label>{{ n.contactPerson }}</p>
16 <p class="ppl"><label>{{ language==0?'联系电话':'Phone' }}</label>{{ n.contactTelno }}</p>
17 <p class="ppl"><label>{{ language==0?'邮&ensp;&ensp;&ensp;&ensp;箱':'E-mail' }}</label>{{ n.contactEmail }}</p>
18
19 </div>
20 </el-col>
21 <el-col :lg="7" :md="12" :xl="6">
22 <p class="countDownTitle">
23 <span v-if="language==0">报名截止倒计时</span>
24 <span v-else>Registration deadline countdown</span>
25 </p>
26 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
27 <template #default="timeData">
28 <span class="block">{{ timeData.days }}</span>
29 <span class="colon">{{ language==0?'天':'Days' }}</span>
30 <span class="block">{{ timeData.hours }}</span>
31 <span class="colon">{{ language==0?'时':'Hrs' }}</span>
32 <span class="block">{{ timeData.minutes }}</span>
33 <span class="colon">{{ language==0?'分':'Min' }}</span>
34 <span class="block">{{ timeData.seconds }}</span>
35 <span class="colon">{{ language==0?'秒':'Sec' }}</span>
36 </template>
37 </van-count-down>
38
39 <div class="text-center mt30">
40 <a class="btn-lineG mb20 mauto" style="display: block;">
41 {{ language==0?'我要报名':'Application' }}</a>
42 </div>
43 </el-col>
44 </el-row>
45 </div>
46 </div>
47
48 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0" description=" "/>
49 </template>
50
51 <script setup>
52 import {ref} from "vue";
53 import {onMounted} from "@vue/runtime-core";
54 import {dayjs} from "element-plus"
55 import cache from "@/plugins/cache"
56 const language = ref(cache.local.get('language') || 0)
57
58 const router = useRouter()
59 const time = ref(0)
60 const props = defineProps({
61 list: {
62 type: Array,
63 required: true
64 }
65 })
66 onMounted(()=>{
67 for(let n of props.list){
68 var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
69 n.time = dayjs(n.signEndTime).diff(today, 'millisecond')
70 }
71 })
72 function goDetail(id) {
73 const routeData = router.resolve({
74 path: `${id}`
75 })
76 window.open(routeData.href, '_blank')
77 }
78 </script>
79
80 <style scoped lang="scss">
81 .mt60{margin-top: 60px}
82 .matchItem {
83 cursor: pointer;margin: 0 0 20px;padding: 0 0 20px;
84 background: #FFFFFF;border-bottom: 1px solid #e5e5e5;
85 position: relative;
86 &:last-child {
87 border-bottom: none;
88 }
89 .el-avatar {
90 position: absolute;
91 left: 20px;
92 top: 30px;
93
94 img {
95 background: #fff;
96 }
97 }
98
99 .info {
100 p {
101 font-size: 14px;
102 }
103 }
104
105 .typeTag {
106 position: absolute;
107 right: 0;
108 top: 0;
109 }
110
111 h3 {
112 font-weight: 500;margin: 0 0 10px;
113 font-size: 18px;
114 color: #000000;
115 text-overflow: ellipsis;
116 }
117
118 &:hover h3 {
119 color: var(--el-color-primary);
120 }
121 }
122 .countDownTitle {
123 text-align: center;
124 color: #525F6B;
125 position: relative;
126 width: 100%;
127 left: 0;
128 font-size: 14px;
129 }
130
131 .countDownTitle span {
132 background: #fff;
133 padding: 0 10px;
134 position: relative;
135 z-index: 1;
136 }
137
138 .countDownTitle::after {
139 position: absolute;
140 background: #ccc;
141 height: 1px;
142 content: '';
143 top: 0;
144 bottom: 0;
145 margin: auto;
146 width: 100%;
147 left: 0;
148 }
149 .info .ppl{margin: 5px 0;}
150 .ppl{color: #29343C;
151 label{color: #929AA0;}
152 }
153 .van-count-down {
154 text-align: center;
155 margin: 20px 0;
156 }
157
158 .colon {
159 display: inline-block;
160 font-size: 16px;
161 margin: 0 8px;
162 color: #7B7F83;
163 }
164
165 .block {
166 display: inline-block; opacity: 0.7;
167 width: 52px;
168 color: #fff;
169 font-size: 26px;
170 font-weight: bold;
171 border-radius: 10px;
172 background: url(@/assets/img/djs_bg.png) left;
173 background-size: 100% 100%;
174 line-height: 50px;
175 text-align: center;
176 }
177
178 </style>
1 <template>
2 <el-steps :active="activeStep" align-center>
3 <el-step :title="language==0?'团队信息':'Team Information'" />
4 <el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" />
5 <el-step :title="language==0?'选手报名':'Participant Registration'" />
6 <el-step :title="language==0?'提交审核':'Submit for review'" />
7 </el-steps>
8 </template>
9
10 <script setup>
11 const props = defineProps({
12 activeStep: {
13 type: Number,
14 required: true
15 },
16 language: {
17 type: Number,
18 required: true,
19 default: 0
20 }
21 })
22 </script>
23
24 <style scoped>
25
26 </style>
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
5 <el-card class="mb20"> 5 <el-card class="mb20">
6 <el-row :gutter="20"> 6 <el-row :gutter="20">
7 <el-col :lg="7" :md="24" :xl="6" > 7 <el-col :lg="7" :md="24" :xl="6" >
8 <img class="mauto" :src="matchData.bgImgUrl" > 8 <img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)" >
9 </el-col> 9 </el-col>
10 <el-col :lg="9" :md="12" :xl="10"> 10 <el-col :lg="9" :md="12" :xl="10">
11 <h3> 11 <h3>
...@@ -88,90 +88,29 @@ ...@@ -88,90 +88,29 @@
88 <matchInfo :form="matchData" v-if="menu[0].active==1"/> 88 <matchInfo :form="matchData" v-if="menu[0].active==1"/>
89 <div v-if="menu[1].active==1"> 89 <div v-if="menu[1].active==1">
90 <div class="collapsebox"> 90 <div class="collapsebox">
91 <el-collapse v-if="matchData.cptProjectList?.length > 0"> 91 <div class="pd20">
92 <el-collapse-item :title="p.name" :name="index" :key="index" v-for="(p,index) in matchData.cptProjectList"> 92 <table class="table" cellspacing="0" cellpadding="0" v-if="matchData.cptProjectList?.length > 0">
93 <div class="pd20"> 93 <tr>
94 <table class="table"> 94 <th>组别编号</th>
95 <tr> 95 <th>组别名称</th>
96 <td>日期</td> 96 <th>舞种</th>
97 <td>单元</td> 97 <th>舞种明细</th>
98 <td>组别</td> 98 <th>参赛性别</th>
99 <td>时间</td> 99 <th>参赛年龄</th>
100 <td>阶段</td> 100 <th>服务费(元)</th>
101 </tr> 101 </tr>
102 <tr> 102 <tr v-for="(p,index) in matchData.cptProjectList" :key="index">
103 <td rowspan="4">2023/10/6(星期五)</td> 103 <td>{{ p.code }}</td>
104 <td rowspan="4">BRK01</td> 104 <td>{{ p.name }}</td>
105 <td>男子</td> 105 <td>{{ p.danceType }}</td>
106 <td>14:30 - 15:30</td> 106 <td>{{ p.danceTypeDetailStr }}</td>
107 <td>资格赛</td> 107 <td>{{ p.playTypeStr }}</td>
108 </tr> 108 <td>{{ p.birthPeriod }}</td>
109 <tr> 109 <td>¥{{ p.serviceFee }}</td>
110 <td>女子</td> 110 </tr>
111 <td>14:30 - 15:30</td> 111 </table>
112 <td>资格赛</td> 112 </div>
113 </tr> 113
114 <tr>
115 <td>男子</td>
116 <td>14:30 - 15:30</td>
117 <td>循环赛</td>
118 </tr>
119 <tr>
120 <td>女子</td>
121 <td>14:30 - 15:30</td>
122 <td>循环赛</td>
123 </tr>
124 <tr>
125 <td rowspan="8">2023/10/7(星期六)</td>
126 <td rowspan="8">BRK02</td>
127 <td>男子</td>
128 <td>14:30 - 15:30</td>
129 <td>四分之一决赛</td>
130 </tr>
131 <tr>
132 <td>男子</td>
133 <td>14:30 - 15:30</td>
134 <td>四分之一决赛</td>
135 </tr>
136 <tr>
137 <td>女子</td>
138 <td>14:30 - 15:30</td>
139 <td>半决赛</td>
140 </tr>
141 <tr>
142 <td>女子</td>
143 <td>14:30 - 15:30</td>
144 <td>半决赛</td>
145 </tr>
146 <tr>
147 <td>男子</td>
148 <td>14:30 - 15:30</td>
149 <td>季军赛</td>
150 </tr>
151 <tr>
152 <td>女子</td>
153 <td>14:30 - 15:30</td>
154 <td>季军赛</td>
155 </tr>
156 <tr>
157 <td>男子</td>
158 <td>14:30 - 15:30</td>
159 <td>决赛</td>
160 </tr>
161 <tr>
162 <td>女子</td>
163 <td>14:30 - 15:30</td>
164 <td>决赛</td>
165 </tr>
166 <tr>
167 <td colspan="5" style="text-align: left">
168 注:竞赛日程将根据最终参赛人数和电视转播的要求进行调整
169 </td>
170 </tr>
171 </table>
172 </div>
173 </el-collapse-item>
174 </el-collapse>
175 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/> 114 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
176 </div> 115 </div>
177 </div> 116 </div>
...@@ -231,38 +170,7 @@ ...@@ -231,38 +170,7 @@
231 </ul> 170 </ul>
232 </div> 171 </div>
233 <!-- 分站赛--> 172 <!-- 分站赛-->
234 <div v-if="menu1[0].active==1"> 173 <substation-list v-if="menu1[0].active==1" :list="matchData.cpts"/>
235 <div class="matchItem" v-for="n in matchData.cpts" :key="n.id" @click="goDetail(n.id)">
236 <el-avatar alt="logo" :size="100" :src="n.logoUrl" />
237 <div class="info">
238 <h3>{{ n.name }}</h3>
239 <p>
240 报名截止:{{ n.signEndTime?.substring(0, 10) }}
241 <el-tag v-if="n.progressStatusCode==3" type="warning">即将开始</el-tag>
242 <el-tag v-if="n.progressStatusCode==2" type="success">报名中</el-tag>
243 <el-tag v-if="n.progressStatusCode==4">进行中</el-tag>
244 <el-tag v-if="n.progressStatusCode==5" type="info">已结束</el-tag>
245 <el-tag v-if="n.progressStatusCode==1" type="info">报名未开始</el-tag>
246 </p>
247 <p>
248 比赛时间:{{ n.beginTime?.substring(0, 10) }}-{{ n.endTime?.substring(0, 10) }}
249 </p>
250 <p>
251 比赛地点:{{ n.address }}
252 </p>
253 </div>
254 <div class="pobtns">
255 <el-button v-if="n.progressStatusCode==2" round type="success" @click="goDetail(n.id)">
256 我要报名
257 </el-button>
258 <el-button v-else-if="n.progressStatusCode==5" round type="info" @click="goDetail(n.id)">
259 报名结束
260 </el-button>
261 <el-button v-else round type="warning" @click="goDetail(n.id)">查看详情</el-button>
262 </div>
263 </div>
264 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cpts?.length == 0" description=" "/>
265 </div>
266 <matchInfo :form="matchData" v-if="menu1[1].active==1"/> 174 <matchInfo :form="matchData" v-if="menu1[1].active==1"/>
267 <match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/> 175 <match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/>
268 </el-card> 176 </el-card>
...@@ -273,10 +181,10 @@ ...@@ -273,10 +181,10 @@
273 </template> 181 </template>
274 182
275 <script setup> 183 <script setup>
276 import groupDetail from '@/viewsPc/center/component/teamInfo_form' 184 import MatchInfo from '@/viewsPc/match/components/matchInfo'
277 import matchInfo from '@/viewsPc/match/components/matchInfo'
278 import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList"; 185 import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList";
279 import MatchNews from "@/viewsPc/match/components/matchNews"; 186 import MatchNews from "@/viewsPc/match/components/matchNews";
187 import SubstationList from "@/viewsPc/match/components/substation-list";
280 188
281 import { getCurrentInstance, ref } from 'vue' 189 import { getCurrentInstance, ref } from 'vue'
282 import { reactive, onMounted } from '@vue/runtime-core' 190 import { reactive, onMounted } from '@vue/runtime-core'
...@@ -288,6 +196,7 @@ const { proxy } = getCurrentInstance() ...@@ -288,6 +196,7 @@ const { proxy } = getCurrentInstance()
288 import * as match from '@/apiPc/match' 196 import * as match from '@/apiPc/match'
289 import { toRefs } from '@vueuse/shared' 197 import { toRefs } from '@vueuse/shared'
290 import { ElMessage } from 'element-plus' 198 import { ElMessage } from 'element-plus'
199 import useUserStore from "@/store/modules/user";
291 const data = reactive({ 200 const data = reactive({
292 matchData: {}, 201 matchData: {},
293 matchId: 0, 202 matchId: 0,
...@@ -299,11 +208,20 @@ const data = reactive({ ...@@ -299,11 +208,20 @@ const data = reactive({
299 signDoneGroupList: [] 208 signDoneGroupList: []
300 }) 209 })
301 const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data) 210 const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
211 const group = useUserStore().group
212 const user = useUserStore().user
302 onMounted(() => { 213 onMounted(() => {
303 // matchId.value = route.params.id 214 groupId.value = group.id
304 matchId.value = '1759477811976183809' 215 match.getMaList().then((res) => {
305 getMatch(matchId.value) 216 if(route.params.id!=0){
306 getGroupListByCptId(matchId.value) 217 matchId.value = route.params.id
218 } else {
219 matchId.value = res.rows[0].id
220 }
221 getMatch(matchId.value)
222 getGroupListByCptId(matchId.value)
223 })
224
307 }) 225 })
308 function building() { 226 function building() {
309 ElMessage.warning('暂未开发,敬请期待!') 227 ElMessage.warning('暂未开发,敬请期待!')
...@@ -329,38 +247,36 @@ function changeMenu(menu,l){ ...@@ -329,38 +247,36 @@ function changeMenu(menu,l){
329 } 247 }
330 } 248 }
331 function choseSignType() { 249 function choseSignType() {
332 if (matchData.value.signType == '0') { 250 if(!user){
333 // 个人报名 251 ElMessage.warning('请登录')
334 checkIsSign(matchData.value.signType).then((res) => { 252 return
253 }
254 console.log(matchData.value.signType)
255 // checkIsSign().then(() => {
256 if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) {
257 // 个人报名
335 router.push({ 258 router.push({
336 path: `${route.params.id}/singleSign` 259 path: `${matchId.value}/singleSign`
337 }) 260 })
338 }) 261 }
339 } else { 262 if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){
340 // 团队报名 团体-队伍报名 263 router.push({
341 match.getMyGroupList().then(res => { 264 path: `${matchId.value}/teamSign`,
342 checkIsSign(matchData.value.signType,res.data[0].id).then(() => { 265 query: {
343 goSignType2(res.data[0].id) 266 matchId: matchId.value,
267 groupId: groupId.value,
268 signType: matchData.value.signType
269 }
344 }) 270 })
345 })
346
347 }
348 }
349 function goSignType2(groupId) {
350 router.push({
351 path: `${route.params.id}/teamSign`,
352 query: {
353 matchId: matchId.value,
354 groupId: groupId,
355 signType: matchData.value.signType
356 } 271 }
357 }) 272 // })
358 } 273 }
274
359 // 获取已报信息 275 // 获取已报信息
360 function checkIsSign(signType,groupId) { 276 function checkIsSign() {
361 var obj = { 277 var obj = {
362 cptId: matchId.value, 278 cptId: matchId.value,
363 groupId: groupId 279 groupId: groupId.value
364 } 280 }
365 return match.getMySignInfo(obj).then(res => { 281 return match.getMySignInfo(obj).then(res => {
366 if (res.data.type == '1') { 282 if (res.data.type == '1') {
......
...@@ -5,16 +5,16 @@ ...@@ -5,16 +5,16 @@
5 <el-card class="mb20"> 5 <el-card class="mb20">
6 <el-row :gutter="20"> 6 <el-row :gutter="20">
7 <el-col :lg="7" :md="24" :xl="6" > 7 <el-col :lg="7" :md="24" :xl="6" >
8 <img class="mauto" :src="(matchData.enCpt.bgImgUrl)" > 8 <img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)" >
9 </el-col> 9 </el-col>
10 <el-col :lg="9" :md="12" :xl="10"> 10 <el-col :lg="9" :md="12" :xl="10">
11 <h3> 11 <h3>
12 {{ matchData.enCpt.name }} 12 {{ matchData.name }}
13 </h3> 13 </h3>
14 <p class="ppl"><label class="bm1">Playing Time:</label>{{matchData.enCpt.beginTime?.slice(0,10)}} ~ {{ matchData.enCpt.endTime?.slice(0,10) }}</p> 14 <p class="ppl"><label class="bm1">Playing Time:</label>{{matchData.beginTime?.slice(0,10)}} ~ {{ matchData.endTime?.slice(0,10) }}</p>
15 <p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.enCpt.level }}</p> 15 <p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.level }}</p>
16 <p class="ppl"><label class="bm3">Location:</label>{{ matchData.enCpt.address }}</p> 16 <p class="ppl"><label class="bm3">Location:</label>{{ matchData.address }}</p>
17 <p class="ppl"><label class="bm4">Registration Deadline:</label>{{ matchData.enCpt.signEndTime?.slice(0,10) }}</p> 17 <p class="ppl"><label class="bm4">Registration Deadline:</label>{{ matchData.signEndTime?.slice(0,10) }}</p>
18 </el-col> 18 </el-col>
19 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'"> 19 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'">
20 <p class="countDownTitle"><span>Registration deadline countdown</span></p> 20 <p class="countDownTitle"><span>Registration deadline countdown</span></p>
...@@ -88,90 +88,29 @@ ...@@ -88,90 +88,29 @@
88 <matchInfo :form="matchData" v-if="menu[0].active==1"/> 88 <matchInfo :form="matchData" v-if="menu[0].active==1"/>
89 <div v-if="menu[1].active==1"> 89 <div v-if="menu[1].active==1">
90 <div class="collapsebox"> 90 <div class="collapsebox">
91 <el-collapse v-if="matchData.cptProjectList?.length > 0"> 91 <div class="pd20">
92 <el-collapse-item :title="p.name" :name="index" :key="index" v-for="(p,index) in matchData.cptProjectList"> 92 <table class="table" cellspacing="0" cellpadding="0" v-if="matchData.cptProjectList?.length > 0">
93 <div class="pd20">
94 <table class="table">
95 <tr> 93 <tr>
96 <td>日期</td> 94 <th>Group code</th>
97 <td>单元</td> 95 <th>Group</th>
98 <td>组别</td> 96 <th>Dance Style</th>
99 <td>时间</td> 97 <th>Dance Detail</th>
100 <td>阶段</td> 98 <th>Sex</th>
99 <th>Age</th>
100 <th>Registration Fee</th>
101 </tr> 101 </tr>
102 <tr> 102 <tr v-for="(p,index) in matchData.cptProjectList" :key="index">
103 <td rowspan="4">2023/10/6(星期五)</td> 103 <td>{{ p.code }}</td>
104 <td rowspan="4">BRK01</td> 104 <td>{{ p.name }}</td>
105 <td>男子</td> 105 <td>{{ p.danceType }}</td>
106 <td>14:30 - 15:30</td> 106 <td>{{ p.danceTypeDetailStr }}</td>
107 <td>资格赛</td> 107 <td>{{ p.playTypeStr }}</td>
108 </tr> 108 <td>{{ p.birthPeriod }}</td>
109 <tr> 109 <td>¥{{ p.serviceFee }}</td>
110 <td>女子</td>
111 <td>14:30 - 15:30</td>
112 <td>资格赛</td>
113 </tr>
114 <tr>
115 <td>男子</td>
116 <td>14:30 - 15:30</td>
117 <td>循环赛</td>
118 </tr>
119 <tr>
120 <td>女子</td>
121 <td>14:30 - 15:30</td>
122 <td>循环赛</td>
123 </tr>
124 <tr>
125 <td rowspan="8">2023/10/7(星期六)</td>
126 <td rowspan="8">BRK02</td>
127 <td>男子</td>
128 <td>14:30 - 15:30</td>
129 <td>四分之一决赛</td>
130 </tr>
131 <tr>
132 <td>男子</td>
133 <td>14:30 - 15:30</td>
134 <td>四分之一决赛</td>
135 </tr>
136 <tr>
137 <td>女子</td>
138 <td>14:30 - 15:30</td>
139 <td>半决赛</td>
140 </tr>
141 <tr>
142 <td>女子</td>
143 <td>14:30 - 15:30</td>
144 <td>半决赛</td>
145 </tr>
146 <tr>
147 <td>男子</td>
148 <td>14:30 - 15:30</td>
149 <td>季军赛</td>
150 </tr>
151 <tr>
152 <td>女子</td>
153 <td>14:30 - 15:30</td>
154 <td>季军赛</td>
155 </tr>
156 <tr>
157 <td>男子</td>
158 <td>14:30 - 15:30</td>
159 <td>决赛</td>
160 </tr>
161 <tr>
162 <td>女子</td>
163 <td>14:30 - 15:30</td>
164 <td>决赛</td>
165 </tr>
166 <tr>
167 <td colspan="5" style="text-align: left">
168 注:竞赛日程将根据最终参赛人数和电视转播的要求进行调整
169 </td>
170 </tr> 110 </tr>
171 </table> 111 </table>
172 </div> 112 </div>
173 </el-collapse-item> 113
174 </el-collapse>
175 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/> 114 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
176 </div> 115 </div>
177 </div> 116 </div>
...@@ -231,38 +170,7 @@ ...@@ -231,38 +170,7 @@
231 </ul> 170 </ul>
232 </div> 171 </div>
233 <!-- 分站赛--> 172 <!-- 分站赛-->
234 <div v-if="menu1[0].active==1"> 173 <substation-list v-if="menu1[0].active==1" :list="matchData.cpts"/>
235 <div class="matchItem" v-for="n in matchData.cpts" :key="n.id" @click="goDetail(n.id)">
236 <el-avatar alt="logo" :size="100" :src="n.logoUrl" />
237 <div class="info">
238 <h3>{{ n.name }}</h3>
239 <p>
240 Registration deadline:{{ n.signEndTime?.substring(0, 10) }}
241 <el-tag v-if="n.progressStatusCode==3" type="warning">About to begin</el-tag>
242 <el-tag v-if="n.progressStatusCode==2" type="success">Registration in progress</el-tag>
243 <el-tag v-if="n.progressStatusCode==4">In play</el-tag>
244 <el-tag v-if="n.progressStatusCode==5" type="info">Ended</el-tag>
245 <el-tag v-if="n.progressStatusCode==1" type="info">Not started</el-tag>
246 </p>
247 <p>
248 Playing time:{{ n.beginTime?.substring(0, 10) }}-{{ n.endTime?.substring(0, 10) }}
249 </p>
250 <p>
251 Location:{{ n.address }}
252 </p>
253 </div>
254 <div class="pobtns">
255 <el-button v-if="n.progressStatusCode==2" round type="success" @click="goDetail(n.id)">
256 Application
257 </el-button>
258 <el-button v-else-if="n.progressStatusCode==5" round type="info" @click="goDetail(n.id)">
259 Registration ended
260 </el-button>
261 <el-button v-else round type="warning" @click="goDetail(n.id)">Detail</el-button>
262 </div>
263 </div>
264 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cpts?.length == 0" description=" "/>
265 </div>
266 <matchInfo :form="matchData" v-if="menu1[1].active==1"/> 174 <matchInfo :form="matchData" v-if="menu1[1].active==1"/>
267 <match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/> 175 <match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/>
268 </el-card> 176 </el-card>
...@@ -275,10 +183,10 @@ ...@@ -275,10 +183,10 @@
275 </template> 183 </template>
276 184
277 <script setup> 185 <script setup>
278 import groupDetail from '@/viewsPc/center/component/teamInfo_form' 186 import MatchInfo from '@/viewsPc/match/components/matchInfo'
279 import matchInfo from '@/viewsPc/match/components/matchInfo'
280 import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList"; 187 import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList";
281 import MatchNews from "@/viewsPc/match/components/matchNews"; 188 import MatchNews from "@/viewsPc/match/components/matchNews";
189 import SubstationList from "@/viewsPc/match/components/substation-list";
282 190
283 import { getCurrentInstance, ref } from 'vue' 191 import { getCurrentInstance, ref } from 'vue'
284 import { reactive, onMounted } from '@vue/runtime-core' 192 import { reactive, onMounted } from '@vue/runtime-core'
...@@ -290,10 +198,11 @@ const { proxy } = getCurrentInstance() ...@@ -290,10 +198,11 @@ const { proxy } = getCurrentInstance()
290 import * as match from '@/apiPc/match' 198 import * as match from '@/apiPc/match'
291 import { toRefs } from '@vueuse/shared' 199 import { toRefs } from '@vueuse/shared'
292 import { ElMessage } from 'element-plus' 200 import { ElMessage } from 'element-plus'
201 import useUserStore from "@/store/modules/user";
202 const user = useUserStore().user || {}
203 const group = useUserStore().group || {}
293 const data = reactive({ 204 const data = reactive({
294 matchData: { 205 matchData: {},
295 enCpt:{}
296 },
297 matchId: 0, 206 matchId: 0,
298 groupId: '', 207 groupId: '',
299 activeName2:'first', 208 activeName2:'first',
...@@ -305,10 +214,16 @@ const data = reactive({ ...@@ -305,10 +214,16 @@ const data = reactive({
305 }) 214 })
306 const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data) 215 const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
307 onMounted(() => { 216 onMounted(() => {
308 // matchId.value = route.params.id 217 groupId.value = group.id
309 matchId.value = '1759477811976183809' 218 match.getMaList().then((res) => {
310 getMatch(matchId.value) 219 if(route.params.id!=0){
311 getGroupListByCptId(matchId.value) 220 matchId.value = route.params.id
221 } else {
222 matchId.value = res.rows[0].id
223 }
224 getMatch(matchId.value)
225 getGroupListByCptId(matchId.value)
226 })
312 }) 227 })
313 function building() { 228 function building() {
314 ElMessage.warning('Building!') 229 ElMessage.warning('Building!')
...@@ -334,38 +249,35 @@ function changeMenu(menu,l){ ...@@ -334,38 +249,35 @@ function changeMenu(menu,l){
334 } 249 }
335 } 250 }
336 function choseSignType() { 251 function choseSignType() {
337 if (matchData.value.signType == '0') { 252 if(!user){
338 // 个人报名 253 ElMessage.warning('Please login')
339 checkIsSign(matchData.value.signType).then((res) => { 254 return
255 }
256 //判断signType,如果是2且utype是2,则跳转到团体报名
257 // checkIsSign().then(() => {
258 if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) {
259 // 个人报名
260 router.push({
261 path: `${route.params.id}/singleSign`
262 })
263 }
264 if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){
340 router.push({ 265 router.push({
341 path: `${route.params.id}/singleSign` 266 path: `${route.params.id}/teamSign`,
267 query: {
268 matchId: matchId.value,
269 groupId: groupId.value,
270 signType: matchData.value.signType
271 }
342 }) 272 })
343 })
344 } else {
345 // 团队报名 团体-队伍报名
346 match.getMyGroupList().then(res => {
347 checkIsSign(matchData.value.signType,res.data[0].id).then(() => {
348 goSignType2(res.data[0].id)
349 })
350 })
351
352 }
353 }
354 function goSignType2(groupId) {
355 router.push({
356 path: `${route.params.id}/teamSign`,
357 query: {
358 matchId: matchId.value,
359 groupId: groupId,
360 signType: matchData.value.signType
361 } 273 }
362 }) 274 // })
363 } 275 }
364 // 获取已报信息 276 // 获取已报信息
365 function checkIsSign(signType,groupId) { 277 function checkIsSign() {
366 var obj = { 278 var obj = {
367 cptId: matchId.value, 279 cptId: matchId.value,
368 groupId: groupId 280 groupId: groupId.value
369 } 281 }
370 return match.getMySignInfo(obj).then(res => { 282 return match.getMySignInfo(obj).then(res => {
371 if (res.data.type == '1') { 283 if (res.data.type == '1') {
......
...@@ -275,7 +275,7 @@ onMounted(() => { ...@@ -275,7 +275,7 @@ onMounted(() => {
275 }) 275 })
276 function getTotalFee() { 276 function getTotalFee() {
277 match.getTotalFee({ 277 match.getTotalFee({
278 entryId: entryId, 278 entryId: groupId,
279 cptId: cptId 279 cptId: cptId
280 }).then(res => { 280 }).then(res => {
281 form.value = res.data 281 form.value = res.data
......
...@@ -2,72 +2,13 @@ ...@@ -2,72 +2,13 @@
2 <div> 2 <div>
3 <div class="box ph-30"> 3 <div class="box ph-30">
4 <el-card class="mb20"> 4 <el-card class="mb20">
5 <el-steps :active="activeStep" align-center> 5 <team-sign-step :language="language" :active-step="activeStep"/>
6 <el-step title="团队信息"/>
7 <el-step title="教练/领队/其他"/>
8 <el-step title="选手报名"/>
9 <el-step title="提交审核"/>
10 </el-steps>
11 </el-card> 6 </el-card>
12 <el-card> 7 <el-card :body-style="{ padding: '0px' }">
13 <div class="border-info"> 8 <match-info-row :matchInfo="matchInfo" :language="language"/>
14 <el-row> 9 <group-info-row :groupInfo="groupInfo" :language="language"/>
15 <el-col :lg="8"> 10 <coach-info-row :names="names" :language="language"/>
16 <div class="item"><label>赛事名称</label>{{ matchInfo.name }}</div> 11 <div style="margin: 20px">
17 </el-col>
18 <el-col :lg="8">
19 <div class="item"><label>赛事类型</label>{{ matchInfo.name }}</div>
20 </el-col>
21 <el-col :lg="8">
22 <div class="item"><label>赛事时间</label>{{ matchInfo.beginTime?.slice(0, 10) }}
23 {{ matchInfo.endTime?.slice(0, 10) }}
24 </div>
25 </el-col>
26 <el-col :lg="8">
27 <div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0, 10) }}
28 {{ matchInfo.signEndTime?.slice(0, 10) }}
29 </div>
30 </el-col>
31 <el-col :lg="16">
32 <div class="item"><label>比赛地址</label>{{ matchInfo.address }}</div>
33 </el-col>
34 </el-row>
35
36 </div>
37 <div class="border-info gray mt20">
38 <el-row>
39 <el-col :lg="8">
40 <img/>
41 <div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div>
42 <div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div>
43 </el-col>
44 <el-col :lg="8">
45 <div class="item"><label>负责人姓名</label>{{ matchInfo.signFee }}</div>
46 <div class="item"><label>参赛队名称</label>{{ matchInfo.signFee }}</div>
47
48 </el-col>
49 <el-col :lg="8">
50 <div class="item"><label>邮箱</label>{{ matchInfo.signFee }}</div>
51 <div class="item"><label>详细地址</label>{{ matchInfo.signFee }}</div>
52 </el-col>
53 </el-row>
54 </div>
55 <div class="border-info mt20">
56 <el-row>
57 <el-col :lg="8">
58 <div class="item"><label>教练</label>{{ matchInfo.signFee }}</div>
59 <div class="item"><label>翻译</label>{{ matchInfo.signFee }}</div>
60 </el-col>
61 <el-col :lg="8">
62 <div class="item"><label>领队</label>{{ matchInfo.signFee }}</div>
63 <div class="item"><label>官员</label>{{ matchInfo.signFee }}</div>
64 </el-col>
65 <el-col :lg="8">
66 <div class="item"><label>队医</label>{{ matchInfo.signFee }}</div>
67 <div class="item"><label>其他</label>{{ matchInfo.signFee }}</div>
68 </el-col>
69 </el-row>
70 </div>
71 12
72 <div class="mt20"> 13 <div class="mt20">
73 <div class="leftboderTT">参赛人员清单</div> 14 <div class="leftboderTT">参赛人员清单</div>
...@@ -115,6 +56,7 @@ ...@@ -115,6 +56,7 @@
115 </el-table-column> 56 </el-table-column>
116 </el-table> 57 </el-table>
117 </div> 58 </div>
59 </div>
118 60
119 61
120 </el-card> 62 </el-card>
...@@ -143,9 +85,68 @@ ...@@ -143,9 +85,68 @@
143 </template> 85 </template>
144 86
145 <script setup> 87 <script setup>
88 import TeamSignStep from './components/teamSignStep'
89 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row"
90 import GroupInfoRow from "@/viewsPc/match/components/groupInfo-row"
91 import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row"
92
146 import {ref} from "vue" 93 import {ref} from "vue"
94 import cache from "@/plugins/cache";
95 import {onMounted} from "@vue/runtime-core";
96 import * as match from "@/apiPc/match"
97 import {useRoute, useRouter} from "vue-router";
98 import useUserStore from "@/store/modules/user";
99 const route = useRoute()
100 const router = useRouter()
147 const activeStep = ref(3) 101 const activeStep = ref(3)
148 const matchInfo = ref({}) 102 const matchInfo = ref({})
103 const groupInfo = useUserStore().group || {}
104 const language = ref(cache.local.get('language') || 0)
105 const groupId = ref()
106 const form = ref({})
107 const matchId = ref()
108 const names = ref({})
109 onMounted(()=>{
110 console.log(route.query)
111 groupId.value = route.query.groupId || 0
112 matchId.value = route.query.matchId
113 getMatch()
114 getFee()
115 if(groupId.value!=0){
116 tuandui()
117 } else {
118 geren()
119 }
120 })
121 const getMatch = () => {
122 match.getMatchById({ id: matchId.value }).then(res => {
123 matchInfo.value = res.data
124 })
125 }
126 function geren() {
127 match.getChooseDoneSingleCoachs(matchId.value).then(res => {
128 names.value = res.data
129 })
130 }
131
132 function tuandui() {
133 match.getChooseDoneGroupCoachs(matchId.value, groupId.value).then(res => {
134 names.value = res.data
135 })
136 }
137 const goPrev = () => {
138 router.go(-1)
139 }
140 const getFee = () => {
141 console.log(groupId.value)
142
143 match.getTotalFee({
144 entryId: groupId.value,
145 cptId: matchId.value
146 }).then(res => {
147 form.value = res.data
148 })
149 }
149 </script> 150 </script>
150 151
151 <style scoped lang="scss"> 152 <style scoped lang="scss">
...@@ -169,4 +170,9 @@ const matchInfo = ref({}) ...@@ -169,4 +170,9 @@ const matchInfo = ref({})
169 .text-right{text-align: right; 170 .text-right{text-align: right;
170 a{margin-left: 20px;} 171 a{margin-left: 20px;}
171 } 172 }
173 .border-info{
174 .item{margin: 5px 0;color: #4C5359; font-size: 14px;
175 label{font-size: 14px;margin-right: 14px}
176 }
177 }
172 </style> 178 </style>
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
52 </el-form-item> 52 </el-form-item>
53 <el-form-item label="国籍" prop="countryId"> 53 <el-form-item label="国籍" prop="countryId">
54 <el-select v-model="form.countryId" class="m-2" @change="changeCountryId"> 54 <el-select v-model="form.countryId" class="m-2" @change="changeCountryId">
55 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" /> 55 <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
56 </el-select> 56 </el-select>
57 </el-form-item> 57 </el-form-item>
58 <el-form-item label="民族" prop="nation"> 58 <el-form-item label="民族" prop="nation">
......
...@@ -3,72 +3,56 @@ ...@@ -3,72 +3,56 @@
3 3
4 <div class="box ph-30"> 4 <div class="box ph-30">
5 <el-card> 5 <el-card>
6 <el-steps active="1" align-center> 6 <team-sign-step :language="language" :active-step="0"/>
7 <el-step :title="language==0?'团队信息':'Team Information'" />
8 <el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" />
9 <el-step :title="language==0?'选手报名':'Participant Registration'" />
10 <el-step :title="language==0?'提交审核':'Submit for review'" />
11 </el-steps>
12 </el-card> 7 </el-card>
13 <div class="h20"></div> 8 <div class="h20"></div>
14 <div class="panel" style="box-shadow: var(--el-box-shadow)"> 9 <div class="panel" style="box-shadow: var(--el-box-shadow)">
15 <div class="border-info" style="margin: 20px"> 10 <match-info-row :matchInfo="matchInfo" :language="language"/>
16 <el-row v-if="language==0">
17 <el-col :lg="8"><div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col>
18 <el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col>
19 <el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}}{{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
20 <el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }}{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
21 <el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col>
22 </el-row>
23 <el-row v-else>
24 <el-col :lg="8"><div class="item"><label>Event Name</label>{{matchInfo.name}}</div></el-col>
25 <el-col :lg="8"><div class="item"><label>Event Type</label>{{matchInfo.name}}</div></el-col>
26 <el-col :lg="8"><div class="item"><label>Event Date</label>{{matchInfo.beginTime?.slice(0,10)}} ~ {{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
27 <el-col :lg="8"><div class="item"><label>Registration Period</label>{{ matchInfo.signBeginTime?.slice(0,10) }} ~{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
28 <el-col :lg="16"><div class="item"><label>Event Address</label>{{matchInfo.address}}</div></el-col>
29 </el-row>
30
31 </div>
32 <div class="h20"></div> 11 <div class="h20"></div>
33 <el-form ref="ruleFormRef" label-width="120px" class="signForm" :model="form" :rules="rules"> 12 <el-form ref="ruleFormRef" label-width="120px" class="signForm"
13 :model="form" :rules="rules"
14 :label-position="language==0?'left':'top'">
34 <el-row> 15 <el-row>
35 <el-col :lg="8" :offset="2"> 16 <el-col :lg="8" :offset="2">
36 <el-form-item label="团体Logo" prop="imgUrl"> 17 <el-form-item :label="language==0?'团体Logo':'Group Logo'" prop="imgUrl">
37 <ImageUpload2 v-model="form.imgUrl" :crop-width="200" :crop-height="200" :limit="1"/> 18 <ImageUpload2 v-model="form.imgUrl" :crop-width="200" :crop-height="200" :limit="1"/>
38 <span class="tip">请上传不超过 <i>5M</i> 的文件 格式为 <i>png/jpg/jpeg</i> 的文件</span> 19 <span class="tip" v-if="language==0">请上传不超过 <i>5M</i> 的文件 格式为 <i>png/jpg/jpeg</i> 的文件</span>
20 <span class="tip" v-else>Please upload a file in the format of
21 <i>png/jpg/jpeg</i> that does not exceed <i>5MB</i>
22 </span>
39 </el-form-item> 23 </el-form-item>
40 </el-col> 24 </el-col>
41 <el-col :lg="10"> 25 <el-col :lg="10">
42 <el-form-item label="团体名称" prop="name"> 26 <el-form-item :label="language==0?'团体名称':'Team Name'" prop="name">
43 <el-input v-model="form.name" placeholder="请输入团体名称" /> 27 <el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" />
44 </el-form-item> 28 </el-form-item>
45 <el-form-item label="负责人姓名" prop="contactPerson"> 29 <el-form-item :label="language==0?'负责人姓名':'Contact Person'" prop="contactPerson">
46 <el-input v-model="form.contactPerson" placeholder="请输入联系人" /> 30 <el-input v-model="form.contactPerson" placeholder="请输入联系人" />
47 </el-form-item> 31 </el-form-item>
48 <el-form-item label="邮箱" required prop="contactEmail"> 32 <el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail">
49 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/> 33 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
50 </el-form-item> 34 </el-form-item>
51 <el-form-item label="详细地址" required prop="address"> 35 <el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
52 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/> 36 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
53 </el-form-item> 37 </el-form-item>
54 <el-form-item label="团体类型" prop="type"> 38 <el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
55 <el-select v-model="form.type" placeholder="请选择团体类型" style="width: 100%;"> 39 <el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">
56 <el-option label="普通院校" value="0" /> 40 <el-option :label="language==0?'普通院校':'School'" value="0" />
57 <el-option label="专业舞蹈学校" value="1" /> 41 <el-option :label="language==0?'专业舞蹈学校':'Professional dance school'" value="1" />
58 <el-option label="培训机构/俱乐部" value="2" /> 42 <el-option :label="language==0?'培训机构/俱乐部':'Company/Club'" value="2" />
59 <el-option label="地方协会" value="3" /> 43 <el-option :label="language==0?'地方协会':'Local Association'" value="3" />
60 <el-option label="国家协会" value="4" /> 44 <el-option :label="language==0?'国家协会':'National Association'" value="4" />
61 </el-select> 45 </el-select>
62 </el-form-item> 46 </el-form-item>
63 <el-form-item label="参赛队名称" required prop="abreviations"> 47 <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">
64 <el-input type="text" v-model="form.abreviations" placeholder="请输入内容"/> 48 <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>
65 </el-form-item> 49 </el-form-item>
66 50
67 </el-col> 51 </el-col>
68 </el-row> 52 </el-row>
69 <el-row v-if="participantsInfoArr&&participantsInfoArr.length>0"> 53 <el-row v-if="participantsInfoArr&&participantsInfoArr.length>0">
70 <el-col :span="16" :offset="4"> 54 <el-col :span="16" :offset="4">
71 <h3>补充信息</h3> 55 <h3>{{ language==0?'补充信息':'Supplemental information'}}</h3>
72 <el-form-item v-for="(s,index) in participantsInfoArr" :key="index"> 56 <el-form-item v-for="(s,index) in participantsInfoArr" :key="index">
73 <template #label> 57 <template #label>
74 <span v-if="s.status == 0" class="red">*</span>{{ s.name }} 58 <span v-if="s.status == 0" class="red">*</span>{{ s.name }}
...@@ -104,6 +88,9 @@ import { reactive, ref } from 'vue' ...@@ -104,6 +88,9 @@ import { reactive, ref } from 'vue'
104 import { getCurrentInstance, onMounted } from '@vue/runtime-core' 88 import { getCurrentInstance, onMounted } from '@vue/runtime-core'
105 import { useRoute, useRouter } from 'vue-router' 89 import { useRoute, useRouter } from 'vue-router'
106 import { toRefs } from '@vueuse/shared' 90 import { toRefs } from '@vueuse/shared'
91 import TeamSignStep from './components/teamSignStep'
92 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
93
107 import cache from "@/plugins/cache" 94 import cache from "@/plugins/cache"
108 const language = ref(cache.local.get('language') || 0) 95 const language = ref(cache.local.get('language') || 0)
109 96
...@@ -282,11 +269,7 @@ function goNext() { ...@@ -282,11 +269,7 @@ function goNext() {
282 padding: 0; 269 padding: 0;
283 background: #F5F7F9; 270 background: #F5F7F9;
284 } 271 }
285 .border-info{ 272
286 .item{margin: 5px 0;color: #4C5359; font-size: 14px;
287 label{font-size: 14px;margin-right: 14px}
288 }
289 }
290 .panel-footer .el-button--success { 273 .panel-footer .el-button--success {
291 padding: 0 40px; 274 padding: 0 40px;
292 } 275 }
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
5 <!-- 国内-机构注册--> 5 <!-- 国内-机构注册-->
6 <el-card> 6 <el-card>
7 <el-steps :active="activeStep" finish-status="success" align-center> 7 <el-steps :active="activeStep" finish-status="success" align-center>
8 <el-step title="创建账号" /> 8 <el-step title="创建账号"/>
9 <el-step title="注册完成" /> 9 <el-step title="注册完成"/>
10 </el-steps> 10 </el-steps>
11 </el-card> 11 </el-card>
12 12
...@@ -14,12 +14,19 @@ ...@@ -14,12 +14,19 @@
14 <div v-if="activeStep==0"> 14 <div v-if="activeStep==0">
15 <el-card style="min-height: 50vh"> 15 <el-card style="min-height: 50vh">
16 <div class="pt30"> 16 <div class="pt30">
17 <el-form class="d-form" size="large" label-width="120" style="max-width: 500px;margin: auto"> 17 <el-form class="d-form" size="large" label-width="120"
18 style="max-width: 500px;margin: auto">
18 <el-form-item label="WDSF卡号" required> 19 <el-form-item label="WDSF卡号" required>
19 <el-input type="text" v-model="form.WDSF" @change="resetCode" @blur="verifyCode"/> 20 <el-input type="text" v-model="form.WDSF" @change="resetCode(0)" @blur="verifyCode">
21 <template #append>
22 <el-button type="primary" plain style="width: 110px" @click="checkwdsf">
23 <span>校验卡号</span>
24 </el-button>
25 </template>
26 </el-input>
20 </el-form-item> 27 </el-form-item>
21 <el-form-item label="手机/邮箱" required> 28 <el-form-item label="手机/邮箱" required>
22 <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"/> 29 <el-input type="text" v-model="form.account" @change="resetCode(1)" @blur="verifyCode"/>
23 </el-form-item> 30 </el-form-item>
24 <el-form-item label="验证码" required> 31 <el-form-item label="验证码" required>
25 <el-input v-model="form.code"> 32 <el-input v-model="form.code">
...@@ -28,15 +35,10 @@ ...@@ -28,15 +35,10 @@
28 <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false"> 35 <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
29 {{ totalSeconds }} 36 {{ totalSeconds }}
30 </count-down> 37 </count-down>
31 <span v-else> 38 <span v-else>发送验证码</span>
32 发送验证码
33 </span>
34 </el-button> 39 </el-button>
35 </template> 40 </template>
36 </el-input> 41 </el-input>
37 <div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
38 <Vcode :show="isShow" type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode>
39 </div>
40 </el-form-item> 42 </el-form-item>
41 </el-form> 43 </el-form>
42 </div> 44 </div>
...@@ -47,17 +49,98 @@ ...@@ -47,17 +49,98 @@
47 </el-card> 49 </el-card>
48 </div> 50 </div>
49 <div v-if="activeStep==1"> 51 <div v-if="activeStep==1">
52 <Step3 :accont="form.account"/>
50 </div> 53 </div>
51 54
52 55 <Vcode :show="isShow" @success="codeSuccess()"></Vcode>
53 </div> 56 </div>
54 </div> 57 </div>
55 </div> 58 </div>
56 </template> 59 </template>
57 60
58 <script setup> 61 <script setup>
59 import {ref} from "vue" 62 import {ref,toRefs,reactive} from "vue"
60 const activeStep = ref(0) 63 import {onMounted} from "@vue/runtime-core";
64 import Step3 from "./team/step3"
65 import Vcode from "vue3-puzzle-vcode"
66 import { ElMessage } from 'element-plus'
67 import CountDown from '@chenfengyuan/vue-countdown'
68 import cache from '@/plugins/cache'
69 const language = ref(cache.local.get('language') || 0)
70
71 const data = reactive({
72 isShow:false,
73 isCodeTrue:0,
74 counting:false,
75 form:{},
76 activeStep: 0,
77 failVcode:'验证失败,请重试',
78 successVcode:'验证通过!',
79 sliderText: '拖动滑块完成拼图',
80 })
81 const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText} = toRefs(data)
82 onMounted(()=>{
83 if(language.value==1){
84 failVcode.value = 'Error!'
85 successVcode.value = 'Success!'
86 sliderText.value = 'Drag the slider to complete the puzzle'
87 }
88 })
89 function sendsmsMsg() {
90 if(!form.value.account){
91 if(language.value==0){
92 ElMessage.error('请填写手机/邮箱')
93 } else {
94 ElMessage.error('Please fill in your phone/email address')
95 }
96 return
97 }
98 if(counting.value){
99 return
100 } else {
101 isShow.value = true
102 }
103 }
104 function checkwdsf() {
105 if(!form.value.WDSF){
106 if(language.value==0){
107 ElMessage.error('请填写WDSF卡号')
108 } else {
109 ElMessage.error('Please fill in your WDSF code')
110 }
111 return
112 }
113 isShow.value = true
114 }
115 function verifyCode() {
116 if(!form.value.account){
117 return
118 }
119 if(form.value.account.indexOf('@')>-1){
120 //邮箱
121 }
122 }
123 function codeSuccess(msg) {
124 console.log('验证通过' + msg);
125 isShow.value = false
126 isCodeTrue.value += 1
127 if(isCodeTrue.value==1){
128
129 }
130 if(isCodeTrue.value==2){
131 counting.value = true
132 // getCaptchaSms({account:form.value.account}).then(res=>{
133 //
134 // })
135 }
136
137 }
138 function resetCode(n) {
139 isCodeTrue.value = n
140 }
141 function next() {
142 activeStep.value = 1
143 }
61 </script> 144 </script>
62 145
63 <style scoped> 146 <style scoped>
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
20 </el-input> 20 </el-input>
21 <div class="vcodeBox" :style="isShow?'height:240px':'height:0'"> 21 <div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
22 <Vcode :show="isShow" :successText="successVcode" :failText="failVcode" :slider-text="sliderText" 22 <Vcode :show="isShow" :successText="successVcode" :failText="failVcode" :slider-text="sliderText"
23 type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode> 23 type="inside" @success="codeSuccess"></Vcode>
24 </div> 24 </div>
25 </el-form-item> 25 </el-form-item>
26 </el-form> 26 </el-form>
...@@ -96,12 +96,7 @@ function codeSuccess(msg) { ...@@ -96,12 +96,7 @@ function codeSuccess(msg) {
96 function resetCode() { 96 function resetCode() {
97 isCodeTrue.value = false 97 isCodeTrue.value = false
98 } 98 }
99 function codeFail() {
100 99
101 }
102 function codeClose() {
103
104 }
105 const goBack = () => { 100 const goBack = () => {
106 router.go(-1) 101 router.go(-1)
107 } 102 }
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
27 style="max-width: 500px;margin: auto"> 27 style="max-width: 500px;margin: auto">
28 <el-form-item :label="language==0?'所属国家':'Nationality'" required> 28 <el-form-item :label="language==0?'所属国家':'Nationality'" required>
29 <el-select filterable v-model="form.countryId"> 29 <el-select filterable v-model="form.countryId">
30 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id"/> 30 <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
31 </el-select> 31 </el-select>
32 </el-form-item> 32 </el-form-item>
33 <el-form-item :label="language==0?'详细地址':'Address'" required prop="address"> 33 <el-form-item :label="language==0?'详细地址':'Address'" required prop="address">
......
...@@ -22,7 +22,9 @@ import {toRefs} from "@vueuse/shared/index"; ...@@ -22,7 +22,9 @@ import {toRefs} from "@vueuse/shared/index";
22 import Vcode from "vue3-puzzle-vcode" 22 import Vcode from "vue3-puzzle-vcode"
23 import {ElMessage} from 'element-plus' 23 import {ElMessage} from 'element-plus'
24 import CountDown from '@chenfengyuan/vue-countdown' 24 import CountDown from '@chenfengyuan/vue-countdown'
25 import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match"; 25 import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match"
26 import cache from '@/plugins/cache'
27 const language = ref(cache.local.get('language') || 0)
26 const props = defineProps({ 28 const props = defineProps({
27 accont:{ 29 accont:{
28 type:String, 30 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!