|
|
|
@ -2,148 +2,155 @@ import React, {Component} from 'react';
|
|
|
|
|
import {Link} from "react-router-dom";
|
|
|
|
|
import axios from 'axios';
|
|
|
|
|
import { Input ,Icon,Button,Pagination,DatePicker,Breadcrumb} from 'antd';
|
|
|
|
|
import { handleDateString,markdownToHTML} from 'educoder';
|
|
|
|
|
import locale from 'antd/lib/date-picker/locale/zh_CN';
|
|
|
|
|
import MDEditors from '../MDEditors';
|
|
|
|
|
import PhoneModel from '../PackageIndexNewandEdit/PhoneModel';
|
|
|
|
|
import { handleDateString,markdownToHTML,bytesToSize} from 'educoder';
|
|
|
|
|
import NEITaskDetailsModel from './NEITaskDetailsModel';
|
|
|
|
|
import moment from 'moment';
|
|
|
|
|
import '../packageconcnet.css';
|
|
|
|
|
import './pds.css'
|
|
|
|
|
import gouxuan from './img/gouxuan.png'
|
|
|
|
|
import weigouxuan from './img/weigouxuan.png'
|
|
|
|
|
const { Search } = Input;
|
|
|
|
|
let categorylist=[
|
|
|
|
|
{name:"全部",value:undefined},
|
|
|
|
|
{name:"前端开发",value:"front"},
|
|
|
|
|
{name:"后端开发",value:"backend"},
|
|
|
|
|
{name:"移动开发",value:"mobile"},
|
|
|
|
|
{name:"数据库",value:"database"},
|
|
|
|
|
{name:"云计算和大数据",value:"cloud_compute_and_big_data"},
|
|
|
|
|
{name:"人工智能",value:"ai"},
|
|
|
|
|
{name:"其他",value:"other"},
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
function setcategorylist(val){
|
|
|
|
|
let vals=""
|
|
|
|
|
categorylist.some((item,key)=> {
|
|
|
|
|
if (item.value === val) {
|
|
|
|
|
vals=item.name
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return vals
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
constructor(props) {
|
|
|
|
|
super(props)
|
|
|
|
|
this.contentMdRef = React.createRef();
|
|
|
|
|
this.state = {
|
|
|
|
|
data:undefined,
|
|
|
|
|
modalCancel: false,
|
|
|
|
|
overtype:false,
|
|
|
|
|
gouxuans1: [{id: 1, name: "前端开发", bool: false, url: ""}, {id: 2, name: "后端开发", bool: false, url: ""}, {
|
|
|
|
|
id: 3,
|
|
|
|
|
name: "移动开发",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: ""
|
|
|
|
|
}, {id: 4, name: "数据库", bool: false, url: ""}, {id: 5, name: "云计算和大数据", bool: false, url: ""}, {
|
|
|
|
|
id: 6,
|
|
|
|
|
name: "运维与测试",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: ""
|
|
|
|
|
}, {id: 7, name: "人工智能", bool: false, url: ""}, {id: 8, name: "其他", bool: false, url: ""}, {
|
|
|
|
|
id: 9,
|
|
|
|
|
name: "人工智能9",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: ""
|
|
|
|
|
}, {id: 10, name: "其他10", bool: false, url: ""}, {id: 1, name: "其他10", bool: false, url: ""}],
|
|
|
|
|
gouxuans2: [{id: 1, name: "前端开发", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 2,
|
|
|
|
|
name: "后端开发",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 3, name: "移动开发", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 4,
|
|
|
|
|
name: "数据库",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 5, name: "云计算和大数据", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 6,
|
|
|
|
|
name: "运维与测试",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 7, name: "人工智能", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 8,
|
|
|
|
|
name: "其他",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 9, name: "人工智能9", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 10,
|
|
|
|
|
name: "其他10",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 11, name: "其他10", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id:12,
|
|
|
|
|
name: "前端开发",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 13, name: "后端开发", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 14,
|
|
|
|
|
name: "移动开发",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 15, name: "数据库", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 16,
|
|
|
|
|
name: "云计算和大数据",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 17, name: "运维与测试", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 18,
|
|
|
|
|
name: "人工智能",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 19, name: "其他", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 20,
|
|
|
|
|
name: "人工智能9",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"
|
|
|
|
|
}, {id: 21, name: "其他10", bool: false, url: "https://www.educoder.net/images/avatars/User/1"}, {
|
|
|
|
|
id: 22,
|
|
|
|
|
name: "其他10",
|
|
|
|
|
bool: false,
|
|
|
|
|
url: "https://www.educoder.net/images/avatars/User/1"},],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setbiddingmantype:false,
|
|
|
|
|
datalist:[]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
componentDidMount() {
|
|
|
|
|
|
|
|
|
|
let url =`/api/v1/project_packages/${this.props.match.params.id}.json`;
|
|
|
|
|
axios.get(url).then((response) => {
|
|
|
|
|
this.setState({
|
|
|
|
|
data:response.data
|
|
|
|
|
})
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
console.log(error);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
setclick=()=>{
|
|
|
|
|
const mdContnet = this.contentMdRef.current.getValue().trim();
|
|
|
|
|
console.log(mdContnet)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onChangeTimePicker = (value, dateString) => {
|
|
|
|
|
this.setState({
|
|
|
|
|
TimePickervalue: dateString
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setbiddingman=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
setbiddingmantype:true
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setPublication=()=>{
|
|
|
|
|
this.props.setPublicationfun()
|
|
|
|
|
notsetbiddingman=()=>{
|
|
|
|
|
let {data} =this.state;
|
|
|
|
|
let gouxuans2=data.bidding_users
|
|
|
|
|
for (var i=0;i<gouxuans2.length;i++){
|
|
|
|
|
if(gouxuans2[i].bool === true){
|
|
|
|
|
gouxuans2[i].bool=false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.setState({
|
|
|
|
|
setbiddingmantype:false,
|
|
|
|
|
datalist:[]
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
modalCancel=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
modalCancel:false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
editmodels=()=>{
|
|
|
|
|
setbiddingusers=()=>{
|
|
|
|
|
let{datalist}=this.state;
|
|
|
|
|
if(datalist.length>0){
|
|
|
|
|
this.setState({
|
|
|
|
|
applytype:true,
|
|
|
|
|
applyvalue:`选择的${datalist.length}个竞标者将被设定为“中标”`,
|
|
|
|
|
applybottom:"是否确认执行?",
|
|
|
|
|
applycancel:this.setApplycancel,
|
|
|
|
|
applyconfirm:this.setApplysumbit
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setApplysumbit=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
modalCancel:true
|
|
|
|
|
applytype:false,
|
|
|
|
|
})
|
|
|
|
|
let{datalist}=this.state;
|
|
|
|
|
let newlist=[];
|
|
|
|
|
datalist.map((item,key)=>{
|
|
|
|
|
newlist.push(item.id)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let url=`/api/v1/project_packages/${this.props.match.params.id}/bidding_users/win.json`;
|
|
|
|
|
axios.post(url,{
|
|
|
|
|
user_ids:newlist
|
|
|
|
|
}).then((response) => {
|
|
|
|
|
if(response.data.status===0){
|
|
|
|
|
this.props.showSnackbar("提交成功");
|
|
|
|
|
}
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
console.log(error)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Clickteacher2=(e)=>{
|
|
|
|
|
let {gouxuans2} =this.state;
|
|
|
|
|
let {data} =this.state;
|
|
|
|
|
let newlist=[]
|
|
|
|
|
let gouxuans2=data.bidding_users
|
|
|
|
|
for (var i=0;i<gouxuans2.length;i++){
|
|
|
|
|
if(gouxuans2[i].id === e){
|
|
|
|
|
console.log("51");
|
|
|
|
|
console.log(e);
|
|
|
|
|
// console.log("51");
|
|
|
|
|
// console.log(e);
|
|
|
|
|
if(gouxuans2[i].bool === true){
|
|
|
|
|
gouxuans2[i].bool=false;
|
|
|
|
|
}else{
|
|
|
|
|
gouxuans2[i].bool=true;
|
|
|
|
|
newlist.push(gouxuans2[i])
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
if(gouxuans2[i].bool === true){
|
|
|
|
|
newlist.push(gouxuans2[i])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
console.log(gouxuans2);
|
|
|
|
|
console.log(newlist);
|
|
|
|
|
this.setState({
|
|
|
|
|
gouxuans3:gouxuans2,
|
|
|
|
|
datalist:newlist,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -158,23 +165,88 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
overtype:false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
deletePackages=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
applytype:true,
|
|
|
|
|
applyvalue:"是否确认删除?",
|
|
|
|
|
applycancel:this.setApplycancel,
|
|
|
|
|
applyconfirm:this.setApplydelect
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setApplydelect=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
applytype:false,
|
|
|
|
|
})
|
|
|
|
|
let url=`/project_packages/${this.props.match.params.id}.json`;
|
|
|
|
|
axios.delete(url ).then((response) => {
|
|
|
|
|
// const status = response.data.status
|
|
|
|
|
console.log(response)
|
|
|
|
|
this.props.showSnackbar('删除成功');
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
console.log(error)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setBiddingApply=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
applytype:true,
|
|
|
|
|
applyvalue:"是否确认报名?",
|
|
|
|
|
applycancel:this.setApplycancel,
|
|
|
|
|
applyconfirm:this.setApplyconfirm
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setApplycancel=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
applytype:false,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setApplyconfirm=()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
applytype:false,
|
|
|
|
|
})
|
|
|
|
|
let url=`/api/v1/project_packages/${this.props.match.params.id}/bidding_users.json`;
|
|
|
|
|
axios.post(url).then((response) => {
|
|
|
|
|
if(response.data.status===0){
|
|
|
|
|
this.props.showSnackbar(response.data.message);
|
|
|
|
|
}
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
console.log(error)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
goback = () => {
|
|
|
|
|
window.history.go(-1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
render() {
|
|
|
|
|
let {overtype}=this.state;
|
|
|
|
|
// console.log(overtype)
|
|
|
|
|
let {gouxuans2}=this.state;
|
|
|
|
|
let {overtype,data}=this.state;
|
|
|
|
|
console.log(data)
|
|
|
|
|
console.log(this.props)
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
|
|
|
|
<div className="clearfix">
|
|
|
|
|
<NEITaskDetailsModel
|
|
|
|
|
applytype={this.state.applytype}
|
|
|
|
|
applyvalue={this.state.applyvalue}
|
|
|
|
|
applybottom={this.state.applybottom}
|
|
|
|
|
applycancel={this.state.applycancel}
|
|
|
|
|
applyconfirm={this.state.applyconfirm}
|
|
|
|
|
/>
|
|
|
|
|
<div className={"educontent mt20 mb50"}>
|
|
|
|
|
|
|
|
|
|
<Breadcrumb separator={'>'}>
|
|
|
|
|
<Breadcrumb.Item>admin</Breadcrumb.Item>
|
|
|
|
|
<Breadcrumb separator={'>'} className={"fl"}>
|
|
|
|
|
<Breadcrumb.Item>{this.props.current_user.login}</Breadcrumb.Item>
|
|
|
|
|
<Breadcrumb.Item>
|
|
|
|
|
<a href="/project_packages">任务大厅</a>
|
|
|
|
|
</Breadcrumb.Item>
|
|
|
|
|
<Breadcrumb.Item>详情</Breadcrumb.Item>
|
|
|
|
|
</Breadcrumb>
|
|
|
|
|
|
|
|
|
|
</Breadcrumb>
|
|
|
|
|
<a className="color-grey-6 fr font-15 mr20" onClick={this.goback}>返回</a>
|
|
|
|
|
<div className="mb20">
|
|
|
|
|
|
|
|
|
|
<p className="clearfix ">
|
|
|
|
@ -183,37 +255,34 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
<div className={"ant-row contentbox mdInForm "}>
|
|
|
|
|
|
|
|
|
|
<div className="educontent project-packages-list">
|
|
|
|
|
<div>
|
|
|
|
|
{data&&data.status==="pending"?<div>
|
|
|
|
|
<div className="publicpart orangeBlack "></div>
|
|
|
|
|
<span className="smalltrangle"></span>
|
|
|
|
|
<span className="publicword publicwords"> 未申请 </span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{/*<div>*/}
|
|
|
|
|
{/*<div className="publicpart orangeGreen"></div>*/}
|
|
|
|
|
{/*<span className="smalltrangle"></span>*/}
|
|
|
|
|
{/*<span className="publicword publicwords"> 待发布 </span>*/}
|
|
|
|
|
{/*</div>*/}
|
|
|
|
|
</div>:data&&data.status==="applying"?<div>
|
|
|
|
|
<div className="publicpart orangeGreen"></div>
|
|
|
|
|
<span className="smalltrangle"></span>
|
|
|
|
|
<span className="publicword publicwords"> 待发布 </span>
|
|
|
|
|
</div>:""}
|
|
|
|
|
|
|
|
|
|
<div className="project-package-item project-package-items height185">
|
|
|
|
|
|
|
|
|
|
<div className="item-image">
|
|
|
|
|
<div className="fl edu-back-white ">
|
|
|
|
|
<img alt="头像" className="radius mt10 ml5" height="70" id="nh_user_logo" name="avatar_image"
|
|
|
|
|
src={"https://www.educoder.net/images/avatars/User/1"}
|
|
|
|
|
src={data&&data.creator.avatar_url}
|
|
|
|
|
width="70"/>
|
|
|
|
|
<div className=" edu-back-white ml28 mt10 ">
|
|
|
|
|
张三
|
|
|
|
|
{data&&data.creator.name}
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className=" edu-back-white ml5 mt10 "
|
|
|
|
|
{this.props.current_user.login!=data&&data.creator.login?<div className=" edu-back-white ml5 mt10 "
|
|
|
|
|
onMouseOver={this.setover}
|
|
|
|
|
onMouseOut={this.setout}
|
|
|
|
|
>
|
|
|
|
|
{overtype===false?<a className="ContacttheTA fl"> <img alt="头像" class="mr5" src={require('./newsone.png')} />联系TA</a>:
|
|
|
|
|
<a className="ContacttheTAs fl"> <img alt="头像" className="mr5"
|
|
|
|
|
{overtype===false?<a className="ContacttheTA fl" href={`/users/${this.props.current_user.login}/private_messages`}> <img alt="头像" class="mr5" src={require('./newsone.png')} />联系TA</a>:
|
|
|
|
|
<a className="ContacttheTAs fl" href={`/users/${this.props.current_user.login}/private_messages`}> <img alt="头像" className="mr5"
|
|
|
|
|
src={require('./newstwo.png')}/>联系TA</a>}
|
|
|
|
|
</div>
|
|
|
|
|
</div>:""}
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -224,29 +293,28 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
<div className=" item-head mbf10">
|
|
|
|
|
|
|
|
|
|
<div className=" item-head-title ">
|
|
|
|
|
<a className={"fl mt3 font-18 font-bd color-dark maxwidth700 "}
|
|
|
|
|
title={"做电视购物产品流程做电视购物产品流程做电视购物产品流程做电视购物产品流程做电视购物产品流程产品流程产品流程产品流程做电"}
|
|
|
|
|
>做电视购物产品流程做电视购物产品流程做电视购物产品流程做电视购物产品流程做电视购
|
|
|
|
|
物产品流程产品流程产品流程产品流程做电
|
|
|
|
|
</a>
|
|
|
|
|
<span className={"fl mt3 font-18 font-bd color-dark maxwidth700 "}
|
|
|
|
|
title={data&&data.title}
|
|
|
|
|
>{data&&data.title}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className=" item-head-price mtf7">
|
|
|
|
|
<span>¥<span className={"font-24"}>8000.00</span></span>~<span>¥<span className={"font-24"}>8000.00</span></span>
|
|
|
|
|
<span>¥<span className={"font-24"}>{data&&data.min_price}</span></span>~<span>¥<span className={"font-24"}>{data&&data.max_price}</span></span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className=" item-category">
|
|
|
|
|
<div className=" item-category-item">人工智能</div>
|
|
|
|
|
<div className="item-category">
|
|
|
|
|
<div className="item-category-item">{setcategorylist(data&&data.category)}</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className=" item-other">
|
|
|
|
|
<div>
|
|
|
|
|
<span className=" item-group-text">发布时间:2019-03-05 12:23</span>
|
|
|
|
|
<span className="item-group-text">发布时间:{moment(data&&data.published_at).format("YYYY-MM-DD HH:mm")}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div className=" item-group item-other-deadline ml40">
|
|
|
|
|
<span className=" item-group-text">竞标截止时间:2019-09-12 24:00</span>
|
|
|
|
|
<span className="item-group-text">竞标截止时间:{moment(data&&data.deadline_at).format("YYYY-MM-DD HH:mm")}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
@ -263,40 +331,37 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
<div>
|
|
|
|
|
<div className={"longboxs"}>
|
|
|
|
|
需求详情:
|
|
|
|
|
<a className="task-btn-nebules fr">编辑</a>
|
|
|
|
|
<a className="task-btn-nebules fr">删除</a>
|
|
|
|
|
|
|
|
|
|
{data&&data.status==="pending"&&data&&data.operation.can_select_bidding_user===true?<div className="fr">
|
|
|
|
|
<a className="task-btn-nebules fr" href={`/project_packages/${this.props.match.params.id}/edit`}>编辑</a>
|
|
|
|
|
<a className="task-btn-nebules fr" onClick={this.deletePackages}>删除</a>
|
|
|
|
|
</div>:""}
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
<div className={"padding020"}>
|
|
|
|
|
每天电视上都有好多产品在电视上卖,有美白,减肥,健身腰带,面膜,还有让头发变黑的产品,**产品,这些都是怎样在电视上打广告的,是和电视台分成还是直接付广告
|
|
|
|
|
费,要是想做电视购物应该做哪些准备 应该找哪些负责任人 一个产品想做电视购物在电视上卖,大概需要投资多少钱,请知道的朋友说详细些越详细越好。
|
|
|
|
|
<div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(data&&data.content).replace(/▁/g,"▁▁▁")}}></div>
|
|
|
|
|
</div>
|
|
|
|
|
{/*<div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(item.ques_title).replace(/▁/g,"▁▁▁")}}></div>*/}
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
{data&&data.attachments.length>0?<div>
|
|
|
|
|
<div className={"longboxs"}>
|
|
|
|
|
需求文件:
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className={"newForm newFormbox mt10 "}>
|
|
|
|
|
<i className="color-green iconfont icon-fujian mr5 fl"></i>
|
|
|
|
|
<a className="upload_filename color-grey readonly hidden fl mtf3 mr10 ml5"> 每天电视上都有好多产品在电视上卖,有美白,减肥 12.62KB </a>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className={"newForm newFormbox mt10 "}>
|
|
|
|
|
<i className="color-green iconfont icon-fujian mr5 fl"></i>
|
|
|
|
|
<a className="upload_filename color-grey readonly hidden fl mtf3 mr10 ml5"> 每天电视上都有好多产品在电视上卖,有美白,减肥 12.62KB </a>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
{data&&data.attachments.map((item,key)=>{
|
|
|
|
|
return(
|
|
|
|
|
<div className={"newForm newFormbox mt10 "}>
|
|
|
|
|
<i className="color-green iconfont icon-fujian mr5 fl font-14 mt4"></i>
|
|
|
|
|
<a className="upload_filename color-grey readonly hidden fl mtf3 mr10 ml5" href={item.url}>{item.title} {bytesToSize(item.filesize)}</a>
|
|
|
|
|
</div>
|
|
|
|
|
)})}
|
|
|
|
|
</div>:""}
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/*发布者和竞选者状态show*/}
|
|
|
|
|
<div className={"stud-class-set coursenavbox edu-back-white mt20"}>
|
|
|
|
|
{this.state.setbiddingmantype===false?<div className={"stud-class-set coursenavbox edu-back-white mt20"}>
|
|
|
|
|
{/*下面是头像*/}
|
|
|
|
|
<div className={"stud-class-set pd30a0 coursenavbox edu-back-white"}>
|
|
|
|
|
<div className={"relativef"}>
|
|
|
|
@ -304,8 +369,10 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
报名列表(12)
|
|
|
|
|
</div>
|
|
|
|
|
<div className="packageabsolute">
|
|
|
|
|
<Button type="primary" className="defalutSubmitbtn fl ml20 defalutSubmitbtns" onClick={this.setPublication}>竞标报名</Button>
|
|
|
|
|
<Button type="primary" className="defalutSubmitbtn fl ml20 defalutSubmitbtns" onClick={this.setPublication}>选择中标者</Button>
|
|
|
|
|
{data&&data.operation.can_bidding===true?<Button type="primary" className="defalutSubmitbtn fl ml20 defalutSubmitbtns" onClick={this.setBiddingApply}>竞标报名</Button>:""}
|
|
|
|
|
{data&&data.operation.can_select_bidding_user===true?<Button type="primary" className="defalutSubmitbtn fl ml20 defalutSubmitbtns" onClick={this.setbiddingman}>选择中标者</Button>:""}
|
|
|
|
|
<Button type="primary" className="defalutSubmitbtn fl ml20 defalutSubmitbtns" onClick={this.setbiddingman}>选择中标者</Button>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
@ -314,26 +381,23 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
<div className="ysllogin_section">
|
|
|
|
|
<div className="ysldivhome2">
|
|
|
|
|
<div style={{height: "20px"}}> </div>
|
|
|
|
|
{gouxuans2&&gouxuans2.map((item,key)=>{
|
|
|
|
|
|
|
|
|
|
{data&&data.bidding_users.map((item,key)=>{
|
|
|
|
|
return(
|
|
|
|
|
<div className="ysldivhomediv1 homehove">
|
|
|
|
|
<img className="div1img" src={item.url}/>
|
|
|
|
|
<img className="div1img" src={item.avatar_url}/>
|
|
|
|
|
<div className="textall mt10" title={item.name}> <p className="ptext">{item.name}</p></div>
|
|
|
|
|
<a className="ContacttheTAs fl none">
|
|
|
|
|
{this.props.current_user.login!=item.login?<a className="ContacttheTAs fl none" href={`/users/${item.login}/private_messages`}>
|
|
|
|
|
<img alt="头像" className="mr5" src={require('./newstwo.png')}/>联系TA
|
|
|
|
|
</a>
|
|
|
|
|
</a>:""}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
})}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/*发布人选择状态*/}
|
|
|
|
|
<div className={"stud-class-set coursenavbox edu-back-white mt20"}>
|
|
|
|
|
</div>:<div className={"stud-class-set coursenavbox edu-back-white mt20"}>
|
|
|
|
|
{/*发布人选择状态*/}
|
|
|
|
|
{/*下面是头像*/}
|
|
|
|
|
<div className={"stud-class-set pd30a0 coursenavbox edu-back-white"}>
|
|
|
|
|
<div className={"relativef"}>
|
|
|
|
@ -343,10 +407,10 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
|
|
|
|
|
<div className="packageabsolute">
|
|
|
|
|
<div className=" fl mt10 mr20">
|
|
|
|
|
已选 <span className={"color-orange06"}>(5)</span>
|
|
|
|
|
已选 <span className={"color-orange06"}>({this.state.datalist.length})</span>
|
|
|
|
|
</div>
|
|
|
|
|
<a className="defalutCancelbtns fl">取消</ a>
|
|
|
|
|
<Button type="primary" className="defalutSubmitbtn fl ml20 defalutSubmitbtns" onClick={this.setPublication}>确定</Button>
|
|
|
|
|
<a className="defalutCancelbtns fl" onClick={this.notsetbiddingman}>取消</ a>
|
|
|
|
|
<Button type="primary" className="defalutSubmitbtn fl ml20 defalutSubmitbtns" onClick={this.setbiddingusers}>确定</Button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
@ -354,11 +418,11 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
<div className="ysllogin_section">
|
|
|
|
|
<div className="ysldivhome2">
|
|
|
|
|
<div style={{height: "20px"}}> </div>
|
|
|
|
|
{gouxuans2&&gouxuans2.map((item,key)=>{
|
|
|
|
|
{data&&data.bidding_users.map((item,key)=>{
|
|
|
|
|
return(
|
|
|
|
|
<div className="ysldivhomediv1" onClick={()=>this.Clickteacher2(item.id)}>
|
|
|
|
|
{item.bool===true?<img src={gouxuan} className="yslgouxuanimg"/>:<img src={weigouxuan} className="yslgouxuanimg"/>}
|
|
|
|
|
<img className="div1img" src={item.url}/>
|
|
|
|
|
<img className="div1img" src={item.avatar_url}/>
|
|
|
|
|
<span className={item.bool===true?"textall mt10 color-blue":"textall mt10"} title={item.name}> <p className="ptext">{item.name}</p></span>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
@ -366,7 +430,7 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>}
|
|
|
|
|
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
@ -381,3 +445,53 @@ class PackageIndexNEITaskDetails extends Component {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default PackageIndexNEITaskDetails;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let data ={
|
|
|
|
|
// id:1,
|
|
|
|
|
// title:"卡巴的审批服务",
|
|
|
|
|
// content:"年品牌将案件的步伐我就能发就爱看你的是否",
|
|
|
|
|
// category:"ai",
|
|
|
|
|
// status:"published",
|
|
|
|
|
// published_at:"2019-07-09T01:49:19Z",
|
|
|
|
|
// deadline_at:"2019-07-09T01:49:19Z",
|
|
|
|
|
// min_price:"1000.00",
|
|
|
|
|
// max_price:"2000.00",
|
|
|
|
|
// contact_name:"张三", //自己或者管理员才返回
|
|
|
|
|
// contact_phone:"13111111111", //自己或者管理员才返回
|
|
|
|
|
// creator:{
|
|
|
|
|
// id:1,
|
|
|
|
|
// login:"xxx",
|
|
|
|
|
// name:"xxx",
|
|
|
|
|
// avatar_url:"/axxx"
|
|
|
|
|
// },
|
|
|
|
|
// attachments:[
|
|
|
|
|
// {
|
|
|
|
|
// id: 206525,
|
|
|
|
|
// title: "412420b57ed8c141963d4c548bde551f",
|
|
|
|
|
// filesize: 18523,
|
|
|
|
|
// description: null,
|
|
|
|
|
// url: "/api/attachments/206525"
|
|
|
|
|
// }
|
|
|
|
|
// ],
|
|
|
|
|
// bidding_users: [
|
|
|
|
|
// {
|
|
|
|
|
// id: 1,
|
|
|
|
|
// login: "xxx",
|
|
|
|
|
// name: "xxx",
|
|
|
|
|
// avatar_url: "/axxx",
|
|
|
|
|
// status: "pendding"
|
|
|
|
|
// }
|
|
|
|
|
// ],
|
|
|
|
|
// operation:{
|
|
|
|
|
// can_bidding: false,
|
|
|
|
|
// can_select_bidding_user: false,
|
|
|
|
|
// can_edit: false,
|
|
|
|
|
// can_delete: false,
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// this.setState({
|
|
|
|
|
// data:data
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|