Commit 51e1a750 authored by Davve's avatar Davve

pick接口调通

parent 938e4cf3
......@@ -40,13 +40,14 @@ class UpdateOrCreateView(APIView):
def post(self, request):
data = {
'name': request.POST.get(' name'),
'desc': request.POST.get(' desc'),
'gender': request.POST.get(' gender'),
'region': request.POST.get(' region'),
'pick_type': request.POST.get(' pick_type'),
'position': request.POST.get(' position'),
'is_online': request.POST.get(' is_online'),
'name': request.POST.get('name'),
'desc': request.POST.get('desc'),
'gender': request.POST.get('gender'),
'region': list(set(request.POST.get('region', '').split(','))),
'pick_type': request.POST.get('pick_type'),
'pick_group': list(set(request.POST.get('pick_group', '').split(','))),
'position': request.POST.get('position'),
'is_online': request.POST.get('is_online'),
}
try:
self.rpc['venus/community/pick/update_or_create'](data=data).unwrap()
......
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "chenwei"
# Date: 2018/11/17
from utils.base import APIView
class GroupSearchView(APIView):
def get(self, request):
name = request.GET.get('name')
print(name, '0------')
try:
pass
except Exception as e:
raise e
return {
'total': 100,
'data': [
{'name': '小组1', 'id': 1},
{'name': '小组2', 'id': 2},
{'name': '小组3', 'id': 3},
{'name': '小组4', 'id': 4},
{'name': '小组5', 'id': 5},
{'name': '小组6', 'id': 6},
]
}
class RegionSearchView(APIView):
def get(self, request):
name = request.GET.get('name')
print(request.GET)
try:
pass
except Exception as e:
raise e
return {
'total': 100,
'data': [
{'name': '北京', 'id': 1},
{'name': '上海', 'id': 2},
{'name': '深圳', 'id': 3},
{'name': '武汉', 'id': 4},
{'name': '成都', 'id': 5},
{'name': '宁波', 'id': 6},
]
}
class UserSearchView(APIView):
def get(self, request):
pass
\ No newline at end of file
......@@ -13,17 +13,18 @@ from .user import *
from .topic import *
from .star import *
from .account import *
from .search import *
urlpatterns = [
# 登陆,注销相关
url(r'account/login$', LoginView.as_view()),
url(r'account/logout', LogoutView.as_view()),
url(r'account/get', LoginView.as_view()),
url(r'account/logout$', LogoutView.as_view()),
url(r'account/get$', LoginView.as_view()),
url(r'account/list', AccountList.as_view()),
url(r'account/list/update', AccountList.as_view()),
url(r'account/detail', AccountUpdateOrCreateView.as_view()),
url(r'account/create', AccountUpdateOrCreateView.as_view()),
url(r'account/list$', AccountList.as_view()),
url(r'account/list/update$', AccountList.as_view()),
url(r'account/detail$', AccountUpdateOrCreateView.as_view()),
url(r'account/create$', AccountUpdateOrCreateView.as_view()),
# user相关
url(r'user/list$', UserListView.as_view()),
......@@ -44,6 +45,14 @@ urlpatterns = [
url(r'pick/list$', PickListView.as_view()),
url(r'pick/list/update$', PickListView.as_view()),
url(r'pick/create', UpdateOrCreateView.as_view()),
url(r'pick/detail', UpdateOrCreateView.as_view()),
url(r'pick/create$', UpdateOrCreateView.as_view()),
url(r'pick/detail/', UpdateOrCreateView.as_view()),
]
searchurlpatterns = [
url(r'search/group$', GroupSearchView.as_view()),
url(r'search/region', RegionSearchView.as_view()),
url(r'search/user', UserSearchView.as_view()),
]
urlpatterns += searchurlpatterns
......@@ -9,7 +9,6 @@ function resolve(dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
......
var api = require('./api')
//
// const target = 'http://doctor.test.env'
const target = 'http://172.30.8.231:8000'
// const target = 'http://192.168.1.6:8000'
......
......@@ -47,6 +47,7 @@
"js-cookie": "2.2.0",
"jsonlint": "1.6.3",
"jszip": "3.1.5",
"linq": "^3.1.1",
"mockjs": "1.0.1-beta3",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
......
......@@ -28,6 +28,6 @@ export function fetchAccountDetail(id) {
return request({
url: '/api/account/detail',
method: 'get',
param: { id }
params: { id }
})
}
......@@ -8,7 +8,6 @@ export function fetchList(query) {
})
}
export function OffLineOrOnLine(data) {
return request({
url: '/api/group/update',
......
......@@ -20,6 +20,7 @@ export function logout() {
}
export function getUserInfo(token) {
console.log(token)
return request({
url: '/api/account/get',
method: 'get',
......
......@@ -29,6 +29,6 @@ export function fetchPickDetail(id) {
return request({
url: '/api/pick/detail',
method: 'get',
param: { id }
params: { id }
})
}
......@@ -7,3 +7,19 @@ export function userSearch(name) {
params: { name }
})
}
export function groupSearch(name) {
return request({
url: '/api/search/group',
method: 'get',
params: { name }
})
}
export function regionSearch(name) {
return request({
url: '/api/search/region',
method: 'get',
params: { name }
})
}
......@@ -26,12 +26,16 @@ export function parseTime(time, cFormat) {
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
if(key === 'a'
)
{
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
})
return time_str
}
......@@ -81,7 +85,8 @@ export function getQueryObject(url) {
val = String(val)
obj[name] = val
return rs
})
}
)
return obj
}
......@@ -116,10 +121,12 @@ export function param(json) {
if (!json) return ''
return cleanArray(
Object.keys(json).map(key => {
if (json[key] === undefined) return ''
if(json[key] === undefined)
return ''
return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
})
).join('&')
})
).
join('&')
}
export function param2Obj(url) {
......@@ -127,7 +134,6 @@ export function param2Obj(url) {
if (!search) {
return {}
}
console.log(url)
return JSON.parse(
'{"' +
decodeURIComponent(search)
......@@ -156,12 +162,16 @@ export function objectMerge(target, source) {
}
Object.keys(source).forEach(property => {
const sourceProperty = source[property]
if (typeof sourceProperty === 'object') {
if(typeof sourceProperty === 'object'
)
{
target[property] = objectMerge(target[property], sourceProperty)
} else {
}
else
{
target[property] = sourceProperty
}
})
})
return target
}
......@@ -231,7 +241,7 @@ export function getTime(type) {
export function debounce(func, wait, immediate) {
let timeout, args, context, timestamp, result
const later = function() {
const later = function () {
// 据上一次触发时间间隔
const last = +new Date() - timestamp
......@@ -248,7 +258,9 @@ export function debounce(func, wait, immediate) {
}
}
return function(...args) {
return function (...args
)
{
context = this
timestamp = +new Date()
const callNow = immediate && !timeout
......@@ -274,12 +286,16 @@ export function deepClone(source) {
}
const targetObj = source.constructor === Array ? [] : {}
Object.keys(source).forEach(keys => {
if (source[keys] && typeof source[keys] === 'object') {
if(source[keys] && typeof source[keys] === 'object'
)
{
targetObj[keys] = deepClone(source[keys])
} else {
}
else
{
targetObj[keys] = source[keys]
}
})
})
return targetObj
}
......@@ -290,3 +306,21 @@ export function uniqueArr(arr) {
export function isExternal(path) {
return /^(https?:|mailto:|tel:)/.test(path)
}
export function isInArray(arr, value) {
for (var i = 0; i < arr.length; i++) {
if (value === arr[i]) {
return true;
}
}
return false;
}
export function removeByvale(arr, val) {
for (var i=0;i<arr.length;i++){
if (arr[i] == val){
arr.splice(i, 1);
break
}
}
}
......@@ -9,60 +9,83 @@
<div class="createPost-main-container">
<el-row>
<el-col :span="24">
<el-form-item style="margin-bottom: 40px;" prop="name">
<MDinput v-model="postForm.name" :maxlength="100" name="name" required>
pick名称
</MDinput>
</el-form-item>
<div class="postInfo-container">
<el-row>
<el-col :span="8">
<el-form-item label-width="45px" label="性别:" class="postInfo-container-item" >
<el-select v-model="postForm.gender" :remote-method="getRemoteUserList" filterable remote placeholder="搜索用户">
<el-option v-for="(item,index) in userListOptions" :key="item+index" :label="item" :value="item"/>
<el-form-item label-width="45px" label="性别:" class="postInfo-container-item">
<el-select v-model="postForm.gender" :placeholder="'性别:'" clearable class="postInfo-container-item"
style="width: 120px">
<el-option v-for="item in GenderTypeOptions" :key="item.key" :label="item.display_name"
:value="item.key"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label-width="60px" label="地区:" class="postInfo-container-item" >
<el-select v-model="postForm.region" :remote-method="getRemoteUserList" filterable remote placeholder="搜索用户">
<el-option v-for="(item,index) in userListOptions" :key="item+index" :label="item" :value="item"/>
<el-form-item label-width="60px" label="属性:" class="postInfo-container-item">
<el-select v-model="postForm.pick_type" :placeholder="'性别:'" clearable
class="postInfo-container-item" style="width:120px">
<el-option v-for="item in PickTypeOptions" :key="item.key" :label="item.display_name"
:value="item.key"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label-width="60px" label="属性:" class="postInfo-container-item" >
<el-select v-model="postForm.pick_type" :remote-method="getRemoteUserList" filterable remote placeholder="搜索用户">
<el-option v-for="(item,index) in userListOptions" :key="item+index" :label="item" :value="item"/>
</el-select>
<el-form-item style="margin-bottom: 40px;" label-width="45px" label="位置:" prop="position">
<el-input :rows="1" v-model="postForm.position" type="number" class="article-textarea"
style="width: 120px"
placeholder="请输入内容"/>
</el-form-item>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
<el-form-item style="margin-bottom: 40px;" label-width="45px" label="位置:" prop="position">
<el-input :rows="1" v-model="postForm.position" type="number" class="article-textarea" autosize placeholder="请输入内容"/>
<el-row>
<el-col :span="12">
<el-form-item label-width="45px" label="地区:" class="postInfo-container-item">
<el-select v-model="postForm.region" :remote-method="getRemoteRegionList" filterable remote multiple value-key="id"
placeholder="搜索地区" style="width: 100%">
<el-option v-for="(item,index) in regionListOptions" :key="item+index" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="45px" label="小组:" class="postInfo-container-item">
<el-select
v-model="postForm.pick_group"
:remote-method="getRemoteGroupList"
multiple
filterable
remote
reserve-keyword
placeholder="搜索小组"
style="width: 100%"
:loading="loading"
value-key="id"
>
<el-option v-for="(item, index) in groupListOptions" :key="item+index" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item style="margin-bottom: 40px;" label-width="45px" label="简介:" prop="desc">
<el-input :rows="1" v-model="postForm.desc" type="textarea" class="article-textarea" autosize placeholder="请输入内容"/>
<el-input :rows="1" v-model="postForm.desc" type="textarea" class="article-textarea" autosize
placeholder="请输入内容"/>
<span v-show="contentShortLength" class="word-counter">{{ contentShortLength }}</span>
</el-form-item>
<el-form-item style="margin-bottom: 40px;" label-width="45px" label="下线:">
<el-radio-group v-model="postForm.is_online">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</div>
</el-form>
......@@ -70,25 +93,39 @@
</template>
<script>
import MDinput from '@/components/MDinput'
import Sticky from '@/components/Sticky' // 粘性header组件
import { fetchPickDetail, CreatePick} from '@/api/pick'
import { userSearch } from '@/api/remoteSearch'
import MDinput from '@/components/MDinput'
import Sticky from '@/components/Sticky' // 粘性header组件
import {fetchPickDetail, CreatePick} from '@/api/pick'
import {groupSearch, regionSearch} from '@/api/remoteSearch'
import { isInArray, removeByvale} from "@/utils";
function Assembledata(target, source) {
var region_data = []
for (var i=0;i<target.length;i++){
if (isInArray(source, target[i]['name'])){
region_data.push(target[i]['id'])
removeByvale(source, target[i]['name']);
}
}
region_data.push(...source)
return region_data.join(',')
}
const defaultForm = {
// status: 'draft',
const defaultForm = {
status: 'draft',
name: '',
desc: '',
gender: '',
region: '',
region: [],
pick_group: [],
pick_type: '',
position: '',
is_online: 1,
}
}
export default {
export default {
name: 'PickDetail',
components: { MDinput, Sticky},
components: {MDinput, Sticky},
props: {
isEdit: {
type: Boolean,
......@@ -110,13 +147,27 @@ export default {
return {
postForm: Object.assign({}, defaultForm),
loading: false,
userListOptions: [],
regionListOptions: [],
groupListOptions: [],
GenderTypeOptions: [
{'key': 2, 'display_name': '全部'},
{'key': 0, 'display_name': '男'},
{'key': 1, 'display_name': '女'},
],
PickTypeOptions: [
{'key': 1, 'display_name': '明星打榜'},
{'key': 0, 'display_name': '用戶打榜'},
],
rules: {
name: [{ validator: validateRequire, trigger: 'blur' }],
desc: [{ validator: validateRequire, trigger: 'blur' }],
position: [{ validator: validateRequire, trigger: 'blur' }],
name: [{validator: validateRequire, trigger: 'blur'}],
desc: [{validator: validateRequire, trigger: 'blur'}],
position: [{validator: validateRequire, trigger: 'blur'}],
},
tempRoute: {}
tempRoute: {},
temparray:{
'region':[],
'pick_group': [],
}
}
},
computed: {
......@@ -127,7 +178,6 @@ export default {
created() {
if (this.isEdit) {
const id = this.$route.params && this.$route.params.id
console.log(id)
this.fetchData(id)
} else {
this.postForm = Object.assign({}, defaultForm)
......@@ -138,18 +188,31 @@ export default {
methods: {
fetchData(id) {
fetchPickDetail(id).then(response => {
console.log(response.data.data.data)
// this.postForm = response.data.data.data
// select 回填数据处理,后期再进行优化
let rep = response.data.data.data;
let pick_temp = []
let region_temp = []
for (let i=0;i<rep.pick_group.length;i++){
pick_temp.push(rep.pick_group[i]['name']);
this.temparray['pick_group'].push(rep.pick_group[i])
}
for (let i=0;i<rep.region.length;i++){
region_temp.push(rep.region[i]['name']);
this.temparray['region'].push(rep.region[i])
}
rep.region = region_temp
rep.pick_group = pick_temp
this.postForm = rep
}).catch(err => {
console.log(err)
})
},
submitForm() {
console.log(this.postForm)
this.$refs.postForm.validate(valid => {
if (valid) {
this.loading = true
this.loading = true;
this.postForm.region = Assembledata(this.temparray['region'], this.postForm.region);
this.postForm.pick_group = Assembledata(this.temparray['pick_group'], this.postForm.pick_group);
CreatePick(this.postForm).then(response => {
this.$notify({
title: '成功',
......@@ -171,7 +234,7 @@ export default {
});
// this.postForm.status = 'published'
this.postForm.status = 'published'
this.loading = false
} else {
console.log('error submit!!')
......@@ -179,19 +242,26 @@ export default {
}
})
},
getRemoteUserList(query) {
userSearch(query).then(response => {
if (!response.data.items) return
this.userListOptions = response.data.items.map(v => v.name)
getRemoteRegionList(query) {
regionSearch(query).then(response => {
if (!response.data.data.data) return
this.regionListOptions = response.data.data.data
})
},
getRemoteGroupList(query) {
groupSearch(query).then(response => {
if (!response.data.data.data) return
this.groupListOptions = response.data.data.data
})
},
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import "src/styles/mixin.scss";
.createPost-container {
@import "src/styles/mixin.scss";
.createPost-container {
position: relative;
.createPost-main-container {
padding: 40px 45px 20px 50px;
......@@ -221,5 +291,5 @@ export default {
right: -10px;
top: 0px;
}
}
}
</style>
......@@ -29,7 +29,7 @@
</template>
</el-table-column>
<el-table-column width="120px" align="center" label="pick简介">
<el-table-column width="280px" align="center" label="pick简介">
<template slot-scope="scope">
<span>{{ scope.row.desc }}</span>
</template>
......@@ -41,6 +41,12 @@
</template>
</el-table-column>
<el-table-column width="120px" align="center" label="pick小组数">
<template slot-scope="scope">
<span>{{ scope.row.pick_group_nums }}</span>
</template>
</el-table-column>
<el-table-column width="120px" align="center" label="pick属性">
<template slot-scope="scope">
<span>{{ scope.row.pick_type }}</span>
......@@ -53,7 +59,7 @@
</template>
</el-table-column>
<el-table-column width="120px" align="center" label="地区">
<el-table-column width="130px" align="center" label="地区">
<template slot-scope="scope">
<span>{{ scope.row.region }}</span>
</template>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment