add local product category

This commit is contained in:
东皇 2018-12-10 20:43:41 +08:00
parent bfe56c2f5b
commit f4b814942d
13 changed files with 69 additions and 12924 deletions

1
.gitignore vendored
View File

@ -17,6 +17,7 @@
/web/libpeerconnection.log
/web/npm-debug.log
/web/testem.log
/web/package-lock.json
.*
!.editorconfig

View File

@ -10,7 +10,9 @@ import javax.validation.constraints.Min;
import me.chyxion.tigon.model.ViewModel;
import me.chyxion.tigon.model.ListResult;
import com.pudonghot.ambition.crm.model.*;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.StringUtils;
import javax.validation.constraints.NotBlank;
import org.springframework.stereotype.Controller;
import org.apache.shiro.authz.annotation.Logical;
@ -55,25 +57,26 @@ public class LocalProductController
final int limit,
@RequestParam(value = "filters", required = false)
final String filters,
@RequestParam(value = "orders", required = false)
final String orders,
@RequestParam(value = "search", required = false)
final String strSearch) {
final ListResult<ViewModel<LocalProduct>> result =
listViewModels(new Search().asc(LocalProduct.NAME),
start, limit, strSearch, null, filters, null);
listViewModels(start, limit, strSearch, null, filters, orders);
result.setAttr("namePrefixes",
((LocalProductService) queryService).listNamePrefixes());
return result;
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/create", method = RequestMethod.POST)
public void create(
@Valid LocalProductFormForCreate form) {
((LocalProductService) queryService).create(form);
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/update", method = RequestMethod.POST)
public void update(
@Valid LocalProductFormForUpdate form) {
@ -93,7 +96,7 @@ public class LocalProductController
return viewModel;
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/add-image", method = RequestMethod.POST)
public ViewModel<AttachedImage> addImage(
@Valid LocalProductImageFormForCreate form) {
@ -101,19 +104,19 @@ public class LocalProductController
return new ViewModel<>(((LocalProductService) queryService).addImage(form));
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/remove-image", method = RequestMethod.POST)
public void removeImage(@NotBlank @RequestParam("id") String id) {
((LocalProductService) queryService).removeImage(id);
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/update-image", method = RequestMethod.POST)
public void updateImage(@Valid LocalProductImageFormForUpdate form) {
((LocalProductService) queryService).updateImage(form);
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/add-attachment", method = RequestMethod.POST)
public ViewModel<AttachedFile> addAttachment(
@Valid LocalProductAttachedFileFormForCreate form) {
@ -126,13 +129,13 @@ public class LocalProductController
((LocalProductService) queryService).removeAttachment(id);
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/update-attachment", method = RequestMethod.POST)
public void updateImage(@Valid LocalProductAttachedFileFormForUpdate form) {
((LocalProductService) queryService).updateAttachment(form);
}
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION}, logical = Logical.OR)
@RequiresRoles(value = {User.ROLE_LELI, User.ROLE_CHYXION, User.ROLE_ADMIN}, logical = Logical.OR)
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public void delete(@NotBlank @RequestParam("id") String id) {
((LocalProductService) queryService).delete(id);
@ -146,6 +149,18 @@ public class LocalProductController
return SEARCH_COLS;
}
/**
* {@inheritDoc}
*/
@Override
protected String orderCol(final String field) {
return StringUtils.isNotBlank(field) &&
ArrayUtils.contains(new String[] {
LocalProduct.NAME,
LocalProduct.CATEGORY
}, field) ? field : null;
}
/**
* {@inheritDoc}
*/

View File

@ -11,7 +11,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pudonghot.ambition.crm.mapper.LocalProductMapper">
<select id="list" resultType="com.pudonghot.ambition.crm.model.Application">
<select id="list" resultType="com.pudonghot.ambition.crm.model.LocalProduct">
<include refid="com.pudonghot.ambition.crm.mapper.AttachmentMapper.listForOwner" />
</select>

View File

@ -1,5 +1,6 @@
package com.pudonghot.ambition.crm.mapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import java.util.Date;
@ -17,64 +18,22 @@ import com.pudonghot.ambition.crm.model.User;
* Tech Support <a href="mailto:chyxion@163.com">Shaun Chyxion</a><br>
* Jun 7, 2017 8:55:14 PM
*/
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:spring/spring-*.xml")
public class UserMapperTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private UserMapper mapper;
@Autowired
private LocalProductMapper localProductMapper;
@Test
public void mapperTest() {
// String id = String.valueOf(new Date().getTime());
// init model
User m = new User();
String id = "id";
m.setId(id);
m.setDateCreated(new Date());
m.setAccount("s");
m.setPassword("s");
m.setMobile("s");
m.setEmail("s");
m.setName("s");
m.setGender("s");
mapper.insert(m);
Assert.assertTrue(mapper.list(null).size() > 0);
/*
// Your Test Logics
User m1 = mapper.find(id);
// asserts
Assert.assertEquals(id, m1.getId());
Assert.assertEquals("s", m.getLoginId());
Assert.assertEquals("s", m.getPassword());
Assert.assertEquals("s", m.getMobile());
Assert.assertEquals("s", m.getEmail());
Assert.assertEquals("s", m.getName());
Assert.assertEquals("s", m.getGender());
// update
m.setDateUpdated(new Date());
m.setLoginId("S");
m.setPassword("S");
m.setMobile("S");
m.setEmail("S");
m.setName("S");
m.setGender("S");
mapper.update(m);
m1 = mapper.find(id);
// asserts
Assert.assertEquals(id, m1.getId());
Assert.assertNotNull(m1.getDateUpdated());
Assert.assertEquals("S", m.getLoginId());
Assert.assertEquals("S", m.getPassword());
Assert.assertEquals("S", m.getMobile());
Assert.assertEquals("S", m.getEmail());
Assert.assertEquals("S", m.getName());
Assert.assertEquals("S", m.getGender());
// list
Assert.assertTrue(mapper.list(null).size() > 0);
// delete
mapper.delete(id);
m1 = mapper.find(id);
Assert.assertNull(m1);
*/
}
@Test
public void testListProducts() {
log.info("local products [{}].", localProductMapper.list(null));
}
}

View File

@ -21,6 +21,9 @@ public class LocalProductFormForCreate extends FC2<String> {
// Properties
@Trim
@NotBlank
private String category;
@Trim
@NotBlank
private String name;
@Trim
@EmptyToNull

View File

@ -20,6 +20,9 @@ import me.chyxion.tigon.format.annotation.EmptyToNull;
public class LocalProductFormForUpdate extends FU2<String, String> {
private static final long serialVersionUID = 1L;
@Trim
@NotBlank
private String category;
@NotBlank
@Length(max = 64)
private String name;

View File

@ -20,6 +20,7 @@ public class LocalProduct extends M3<String, String> {
private static final long serialVersionUID = 1L;
// Properties
private String category;
private String name;
private String namePrefix;
private String content;

View File

@ -1,7 +1,8 @@
import { helper } from '@ember/component/helper';
export function localProductHasPerm(params/*, hash*/) {
return ['leli', 'chyxion'].includes(params[0].account);
const user = params[0];
return user.admin || ['leli', 'chyxion'].includes(user.account);
}
export default helper(localProductHasPerm);

View File

@ -4,6 +4,13 @@ export default BaseService.extend({
pageSize: 128,
modelName: 'LocalProduct',
constraints: {
category: {
presence: true,
length: {
minimum: 1,
maximum: 128
}
},
name: {
presence: true,
length: {

View File

@ -1,7 +1,8 @@
{{#form-content}}
{{form-input name='name' label='Name'}}
{{form-input name='category' label='Category'}}
{{form-input name='name' label='Name & P.N.'}}
{{form-input name='note' label='Remark'}}
{{form-input name='content' label='Content' type='textarea'}}
{{form-input name='content' label='Description' type='textarea'}}
{{#form-input name='image' label='Images'}}
<div class="widget-box transparent">

View File

@ -1,9 +1,10 @@
{{#form-content}}
{{input type='hidden' name='id' value=model.id}}
{{form-input name='name' label='Name'}}
{{form-input name='category' label='Category'}}
{{form-input name='name' label='Name & P.N.'}}
{{form-input name='note' label='Remark'}}
{{form-input name='content' label='Content' type='textarea'}}
{{form-input name='content' label='Description' type='textarea'}}
{{!-- {{#form-input name='content' label='Content'}}
{{wysiwyg-editor model=model name='content'}}
{{/form-input}} --}}

View File

@ -19,15 +19,19 @@
<table class="table table-striped table-bordered table-hover dataTable" style="border: 1px solid #ddd;">
<thead class="thin-border-bottom">
<tr>
<th>
{{#sortable-th name='category'}}
<i class="ace-icon fa fa-list-alt bigger-110 hidden-480"></i>
Category
{{/sortable-th}}
{{#sortable-th name='name'}}
{{th-filter name='namePrefix'
text='Name'
label='Name Filter'
text='Name & P.N.'
label='Name & P.N. Filter'
options=model.namePrefixes
value-field='value'
text-field='text'
}}
</th>
{{/sortable-th}}
<th>
<i class="ace-icon fa fa-sticky-note-o bigger-110 hidden-480"></i>
Remark
@ -48,6 +52,9 @@
<tbody>
{{#each model.data as |it|}}
<tr>
<td>
{{it.category}}
</td>
<td>
{{customer-application/preview-btn model=it}}
</td>

12854
web/package-lock.json generated

File diff suppressed because it is too large Load Diff