diff --git a/test_client/src/App.vue b/test_client/src/App.vue index ec9032c..01e47fe 100644 --- a/test_client/src/App.vue +++ b/test_client/src/App.vue @@ -3,7 +3,14 @@ - + diff --git a/test_client/src/views/crm/companychose.vue b/test_client/src/views/crm/companychose.vue new file mode 100644 index 0000000..6c8f72b --- /dev/null +++ b/test_client/src/views/crm/companychose.vue @@ -0,0 +1,147 @@ + + + diff --git a/test_client/src/views/crm/consumer.vue b/test_client/src/views/crm/consumer.vue index e546fc9..0b22314 100644 --- a/test_client/src/views/crm/consumer.vue +++ b/test_client/src/views/crm/consumer.vue @@ -228,14 +228,25 @@ - + + + @@ -281,6 +292,15 @@ 确认 + + + @@ -305,12 +325,14 @@ import { upUrl } from "@/api/file"; import { getUserList } from "@/api/user" import { getToken } from "@/utils/auth"; import Pagination from "@/components/Pagination"; // secondary package based on el-pagination +import Companychose from "@/views/crm/companychose" const defaultConsumer = { id: "", name: "", username: "", company: null, + company_:{}, subjects: [], workscope: null, role:3 @@ -321,7 +343,7 @@ const listQuery = { search: "" }; export default { - components: { Pagination }, + components: { Pagination, Companychose }, watch: { filterOrgText(val) { this.$refs.tree.filter(val); @@ -329,6 +351,7 @@ export default { }, data() { return { + dgVisiable:false, tableKey: 0, showCreate: true, upUrl: upUrl(), @@ -470,7 +493,7 @@ export default { }, searchCompany(val) { this.treeLoding = true; - getCompanyList({search:val}).then(response => { + getCompanyList({search:val, perm:'all'}).then(response => { this.companyData = genTree(response.data.results); this.treeLoding = false; }); @@ -512,6 +535,9 @@ export default { }, handleEdit(scope) { this.consumer = Object.assign({}, scope.row); // copy obj + if(this.consumer.company_ == null){ + this.consumer.company_ = {} + } this.dialogType = "edit"; this.dialogVisible = true; this.$nextTick(() => { @@ -659,7 +685,18 @@ export default { this.adminOptions = genTree(res.data.results) }) } - } + }, + choose() { + this.dgVisiable = true; + }, + chooseComplete(val) { + this.dgVisiable = false; + if (val) { + this.consumer.company_ = val + this.consumer.company = val.id + + } + }, } }; diff --git a/test_server/crm/serializers.py b/test_server/crm/serializers.py index ff0e668..f49f286 100644 --- a/test_server/crm/serializers.py +++ b/test_server/crm/serializers.py @@ -21,6 +21,7 @@ class CompanySerializer(serializers.ModelSerializer): """ create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True) update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True) + create_admin_name = serializers.StringRelatedField(source='create_admin', read_only=True) class Meta: model = Company fields = '__all__' @@ -33,6 +34,7 @@ class ConsumerSerializer(serializers.ModelSerializer): create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True) update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True) company_name = serializers.StringRelatedField(source='company', read_only=True) + company_ = CompanySerializer(source='company', read_only=True) subjects_name = serializers.StringRelatedField(source='subjects', many=True, read_only=True) workscope_name = serializers.StringRelatedField(source='workscope', read_only=True) role_name = serializers.StringRelatedField(source='role', read_only=True) diff --git a/test_server/crm/views.py b/test_server/crm/views.py index 100d8b4..2d22e86 100644 --- a/test_server/crm/views.py +++ b/test_server/crm/views.py @@ -32,6 +32,7 @@ from .models import Company, Consumer, PaySubject, SendCode, ConsumerPerm, Consu from .serializers import CompanySerializer, ConsumerSerializer, ConsumerPermSerializer, ConsumerRoleSerializer, ConsumerDetailSerializer import requests from lxml import etree +from rbac.models import UserProfile appid = 'wxf1e9471c93f05ad6' secret = '4bf7f9bd6c52634586bbe792a1f0a834' @@ -95,7 +96,7 @@ class CompanyViewSet(ModelViewSet): 客户企业:增删改查 """ perms_map = [ - {'get': 'company_list'}, {'post': 'company_create'}, + {'get': 'company_view'}, {'post': 'company_create'}, {'put': 'company_update'}, {'delete': 'company_delete'}] queryset = Company.objects.filter(is_delete=0).all() serializer_class = CompanySerializer @@ -105,12 +106,36 @@ class CompanyViewSet(ModelViewSet): ordering_fields = ('id',) ordering = ['-id'] + def get_queryset(self): + queryset = self.queryset + if self.request.query_params.get('perm', None): + return queryset + if not self.request.user.is_superuser: + queryset = queryset.filter(create_admin = self.request.user) + return queryset + + @action(methods=['put'], detail=True, url_name='company_transfer',perms_map=[{'*':'company_transfer'}]) + def transfer(self, request, *args, **kwargs): + """ + 转交 + """ + obj = self.get_object() + adminname = request.data.get('admin', None) + if adminname and UserProfile.objects.filter(username=adminname).exists(): + adminobj = UserProfile.objects.get(username=adminname) + obj.create_admin = adminobj + obj.save() + Consumer.objects.filter(company=obj).update(create_admin=adminobj) + return Response(status=status.HTTP_200_OK) + else: + return Response({"error":"账号错误"}) + class ConsumerViewSet(ModelViewSet): """ 学员:增删改查 """ perms_map = [ - {'get': 'consumer_list'}, {'post': 'consumer_create'}, + {'get': 'consumer_view'}, {'post': 'consumer_create'}, {'put': 'consumer_update'}, {'delete': 'consumer_delete'}] queryset = Consumer.objects.all() serializer_class = ConsumerSerializer