Commit 51e1a750 authored by Davve's avatar Davve

pick接口调通

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