add local product category
This commit is contained in:
parent
bfe56c2f5b
commit
f4b814942d
1
.gitignore
vendored
1
.gitignore
vendored
@ -17,6 +17,7 @@
|
||||
/web/libpeerconnection.log
|
||||
/web/npm-debug.log
|
||||
/web/testem.log
|
||||
/web/package-lock.json
|
||||
|
||||
.*
|
||||
!.editorconfig
|
||||
|
@ -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}
|
||||
*/
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,9 @@ public class LocalProductFormForCreate extends FC2<String> {
|
||||
// Properties
|
||||
@Trim
|
||||
@NotBlank
|
||||
private String category;
|
||||
@Trim
|
||||
@NotBlank
|
||||
private String name;
|
||||
@Trim
|
||||
@EmptyToNull
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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: {
|
||||
|
@ -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">
|
||||
|
@ -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}} --}}
|
||||
|
@ -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
12854
web/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user