update sort

This commit is contained in:
Shaun Chyxion 2018-03-22 23:22:00 +08:00
parent c704d089bb
commit 0eacfd742b
10 changed files with 69 additions and 62 deletions

View File

@ -3,9 +3,6 @@ package com.pudonghot.ambition.crm.controller;
import java.util.List;
import java.util.Arrays;
import javax.validation.Valid;
import com.pudonghot.ambition.crm.form.create.ApplicationImageFormForCreate;
import com.pudonghot.ambition.crm.form.update.ApplicationImageFormForUpdate;
import me.chyxion.tigon.mybatis.Search;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
@ -14,9 +11,9 @@ import me.chyxion.tigon.model.ListResult;
import org.apache.commons.lang3.StringUtils;
import com.pudonghot.ambition.crm.model.User;
import org.apache.commons.lang3.tuple.Pair;
import org.hibernate.validator.constraints.NotBlank;
import org.springframework.stereotype.Controller;
import com.pudonghot.ambition.crm.model.Application;
import org.hibernate.validator.constraints.NotBlank;
import com.pudonghot.ambition.crm.service.UserService;
import org.apache.shiro.authz.annotation.RequiresRoles;
import com.pudonghot.ambition.crm.model.CustomerProperty;
@ -28,6 +25,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import com.pudonghot.ambition.crm.form.create.ApplicationFormForCreate;
import com.pudonghot.ambition.crm.form.update.ApplicationFormForUpdate;
import com.pudonghot.ambition.crm.form.create.ApplicationImageFormForCreate;
import com.pudonghot.ambition.crm.form.update.ApplicationImageFormForUpdate;
/**
* @author Shaun Chyxion <br>
@ -104,6 +103,19 @@ public class ApplicationController
((ApplicationService) queryService).update(form);
}
/**
* {@inheritDoc}
*/
@Override
public ViewModel<Application> find(final String id) {
final ViewModel<Application> viewModel = queryService.findViewModel(id);
if (getAuthUser().getUser().getData().isAdmin()) {
viewModel.setAttr("users", userService.listViewModels(
new Search().asc(User.EMPLOYEE_ID)));
}
return viewModel;
}
@RequestMapping(value = "/add-image", method = RequestMethod.POST)
public void addImage(
@Valid ApplicationImageFormForCreate form) {

View File

@ -54,7 +54,7 @@ public class ApplicationServiceSupport
final Date now = new Date();
application.setDateUpdated(now);
uploadImages(id, 0, form.getImages(), form.getImageTitles(), form.getCreatedBy());
uploadImages(id, 1, form.getImages(), form.getImageTitles(), form.getCreatedBy());
mapper.insert(application);
return toViewModel(application);
}
@ -122,13 +122,14 @@ public class ApplicationServiceSupport
final String updatedBy = form.getUpdatedBy();
validatePerm(applicationId, updatedBy, form.isAdmin());
final int sort = form.getSort();
final int sortOld = (int) appImage.getSort();
// client sort is array index
final float sort = form.getSort();
final float sortOld = appImage.getSort();
if (sort < sortOld) {
appImage.setSort(sortOld - 1.1f);
appImage.setSort(sortOld - 1.5f);
}
else if (sort > sortOld) {
appImage.setSort(sortOld + 1.1f);
appImage.setSort(sortOld + 1.5f);
}
appImage.setNote(form.getNote());
appImage.setDateUpdated(new Date());

View File

@ -1,5 +1,6 @@
package com.pudonghot.ambition.crm;
import com.pudonghot.ambition.crm.model.ApplicationImage;
import com.pudonghot.ambition.crm.util.AmDateUtil;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
@ -92,4 +93,12 @@ public class TestDriver {
return null;
}
}
@Test
public void testFloat() {
ApplicationImage image = new ApplicationImage();
int sortOld = 2;
image.setSort(sortOld - 1.5f);
System.err.println(image);
}
}

View File

@ -20,10 +20,11 @@
<update id="updateSort">
update crm_application_image a
join (
select id, (@cur_row := @cur_row + 1) - 1 sort
select id, @cur_row := @cur_row + 1 sort
from crm_application_image
join (select @cur_row := 0) r
where application_id = #{applicationId}) s
where application_id = #{applicationId}
order by crm_application_image.sort) s
on a.id = s.id
set a.sort = s.sort
</update>

View File

@ -18,5 +18,5 @@ public class ApplicationImageFormForUpdate extends FU2<String, String> {
// current user is admin
private boolean admin;
private int sort;
private float sort;
}

View File

@ -18,7 +18,12 @@ export default BaseEditRoute.extend({
},
removeImage(image) {
const me = this;
me.get('controller.model.images').removeObject(image);
me.get('dialog').confirm('Are you sure to remove image?', () => {
me.get('store').ajaxPost('application/remove-image', image, () => {
me.get('message').alert('Image removed');
me.get('controller.model.images').removeObject(image);
});
});
},
moveUp(image) {
let me = this;
@ -27,6 +32,7 @@ export default BaseEditRoute.extend({
let index = images.indexOf(image);
images.removeObject(image);
images.insertAt(index - 1, image);
--image.sort;
me.updateImage(image);
}
},
@ -37,6 +43,7 @@ export default BaseEditRoute.extend({
let index = images.indexOf(image);
images.removeObject(image);
images.insertAt(index + 1, image);
++image.sort;
me.updateImage(image);
}
}

View File

@ -3,7 +3,7 @@
{{#each images as |image i|}}
{{#if (eq i index)}}
<li class="no-margin no-padding clearfix" style="float: inherit; overflow: inherit; border-width: 0">
<a href="{{if image.image image.image iamge}}"
<a href="{{if image.image image.image image}}"
title={{image.title}} data-rel="{{elementId}}_preview">
<img height="{{image-height}}" style="{{image-style}}"
src="{{if image.image image.image image}}"

View File

@ -26,14 +26,15 @@
<table class="table table-striped table-bordered table-hover">
<thead class="thin-border-bottom">
<tr>
<th>
<i class="ace-icon fa fa-user"></i>
<th style="width: 86px;">
<i class="ace-icon fa fa-file-image-o"></i>
Image
</th>
<th>
<i class="ace-icon fa fa-sticky-note-o bigger-110 hidden-480"></i>
Description
</th>
<th>
<th style="width: 106px;">
<i class="ace-icon fa fa-cogs bigger-110 hidden-480"></i>
Settings
</th>
@ -44,23 +45,28 @@
{{#each model.images as |image|}}
<tr>
<td>
{{image.id}}
{{image-previews images=image.url}}
</td>
<td>
{{editable-cell model=image field='note' post-url='application/update-image'}}
</td>
<td>
{{!image.note}}
<div class="btn-group">
<a class="btn btn-xs btn-danger" data-rel="tooltip" title="Remove" {{action (route-action 'moveUp' image)}}>
<i class="ace-icon fa fa-trash-o"></i>
</a>
{{#if (not-eq model.images.firstObject.id image.id)}}
<a class="btn btn-xs btn-purple" data-rel="tooltip" title="Move Up" {{action (route-action 'moveUp' image)}}>
<a class="btn btn-xs btn-info" data-rel="tooltip" title="Move Up" {{action (route-action 'moveUp' image)}}>
<i class="ace-icon fa fa-arrow-up bigger-90"></i>
</a>
{{/if}}
{{#if (not-eq model.images.lastObject.id image.id)}}
<a class="btn btn-xs" data-rel="tooltip" title="Move Down" {{action (route-action 'moveDown' image)}}>
<a class="btn btn-xs btn-success" data-rel="tooltip" title="Move Down" {{action (route-action 'moveDown' image)}}>
<i class="ace-icon fa fa-arrow-down bigger-90"></i>
</a>
{{/if}}
</div>
</td>
</tr>
{{/each}}
@ -71,36 +77,19 @@
</div>
{{/form-input}}
{{#form-input name='image' label='Images'}}
<div class="widget-box transparent">
<div class="widget-header widget-header-small">
<div class="widget-toolbar action-buttons">
<a href="#" data-rel="tooltip" title="Add Image" {{action (route-action 'addImage')}}>
<i class="ace-icon fa fa-plus-circle green"></i>
</a>
</div>
</div>
<div class="widget-body">
<div class="widget-main padding-4">
{{#each model.images as |image i|}}
<div class="col-xs-6 no-padding-left">
<div class="space-4"></div>
{{input name=(concat 'imageTitles[' i ']') class='width-80' placeholder='Image title' value=image.title}}
&nbsp;
<a href="#" class="red" data-rel="tooltip" title="Remove Image" {{action (route-action 'removeImage' image)}}>
<i class="ace-icon fa fa-times bigger-125"></i>
</a>
<div class="space-2"></div>
{{image-input name=(concat 'images[' i ']') image=image}}
</div>
{{/each}}
</div>
</div>
</div>
{{/form-input}}
{{form-input-enabled label='Enabled' enabledText='TRUE' disabledText='FALSE'}}
{{form-input name='note' label='Remark'}}
{{#if ajax.user.admin}}
{{form-input-select2
nullable=true
name='owner'
label='Owner'
options=model.users
value-field='id'
text-field='name'
text-exp='$.employeeId ($.name)'
}}
{{/if}}
<hr />
{{form-footer-buttons type='update'}}
{{/form-content}}

View File

@ -79,18 +79,6 @@
{{#link-to 'customer-application.edit' it.id class='btn btn-xs btn-info' data-rel='tooltip' title='Edit'}}
<i class="ace-icon fa fa-pencil bigger-120"></i>
{{/link-to}}
{{!--
{{#if (not-eq model.data.firstObject.id it.id)}}
<button class="btn btn-xs btn-purple" title="Move Up" {{action (route-action 'moveUp' it)}}>
<i class="ace-icon fa fa-arrow-up bigger-120"></i>
</button>
{{/if}}
{{#if (not-eq model.data.lastObject.id it.id)}}
<button class="btn btn-xs" title="Move Down" {{action (route-action 'moveDown' it)}}>
<i class="ace-icon fa fa-arrow-down bigger-120"></i>
</button>
{{/if}}
--}}
</div>
<div class="hidden-md hidden-lg">
<div class="inline pos-rel">

View File

@ -52,12 +52,12 @@
<i class="ace-icon fa fa-pencil bigger-120"></i>
{{/link-to}}
{{#if (not-eq model.data.firstObject.id it.id)}}
<button class="btn btn-xs btn-purple" data-rel="tooltip" title="Move Up" {{action (route-action 'moveUp' it)}}>
<button class="btn btn-xs btn-info" data-rel="tooltip" title="Move Up" {{action (route-action 'moveUp' it)}}>
<i class="ace-icon fa fa-arrow-up bigger-120"></i>
</button>
{{/if}}
{{#if (not-eq model.data.lastObject.id it.id)}}
<button class="btn btn-xs" data-rel="tooltip" title="Move Down" {{action (route-action 'moveDown' it)}}>
<button class="btn btn-xs btn-success" data-rel="tooltip" title="Move Down" {{action (route-action 'moveDown' it)}}>
<i class="ace-icon fa fa-arrow-down bigger-120"></i>
</button>
{{/if}}