dev_review
yujialong 2 years ago
parent 996658ba20
commit e8672494e4
  1. 2
      src/components/Header.vue
  2. 2
      src/setting.js
  3. 1
      src/utils/api.js
  4. 618
      src/views/customer/customer.vue
  5. 8
      src/views/match/add/set.vue
  6. 563
      src/views/match/manage/matchReport.vue
  7. 962
      src/views/parner/rate.vue
  8. 1548
      src/views/serve/projectAdd.vue
  9. 6
      src/views/serve/projectList.vue
  10. 3
      src/views/shop/addProduct/index.vue

@ -87,13 +87,13 @@ export default {
getUserInfo () { getUserInfo () {
this.$get(this.api.queryUserInfoDetails).then(({ result }) => { this.$get(this.api.queryUserInfoDetails).then(({ result }) => {
this.initSocket(result.userAccount)
let userInfo = result.hrUserInfo let userInfo = result.hrUserInfo
if (userInfo.userAvatars) this.$store.commit('userAvatar', { avatar: userInfo.userAvatars }) if (userInfo.userAvatars) this.$store.commit('userAvatar', { avatar: userInfo.userAvatars })
this.userName = userInfo.userName this.userName = userInfo.userName
const { id } = result.userAccount const { id } = result.userAccount
id && this.$store.commit('SET_ACCOUNTID', id) id && this.$store.commit('SET_ACCOUNTID', id)
this.$store.commit('SET_USERNAME', this.userName) this.$store.commit('SET_USERNAME', this.userName)
this.initSocket(result.userAccount)
}).catch(err => { }) }).catch(err => { })
}, },
}, },

@ -11,7 +11,7 @@ if (isDev) {
jumpPath = 'http://192.168.31.125:8087/' // 本地调试-需要启动本地判分点系统 jumpPath = 'http://192.168.31.125:8087/' // 本地调试-需要启动本地判分点系统
host = 'http://121.37.12.51/' host = 'http://121.37.12.51/'
// host = 'https://huorantech.cn/' // host = 'https://huorantech.cn/'
host = 'http://192.168.31.152:9000/'// 榕 host = 'http://192.168.31.217:9000/'// 榕
// host = 'http://192.168.31.51:9000/'// 赓 // host = 'http://192.168.31.51:9000/'// 赓
} else if (isPro) { } else if (isPro) {
jumpPath = 'https://www.huorantech.cn/judgmentPoint/' jumpPath = 'https://www.huorantech.cn/judgmentPoint/'

@ -45,6 +45,7 @@ export default {
orderBulkDisableEnable: `nakadai/nakadai/orderOther/orderBulkDisableEnable`, orderBulkDisableEnable: `nakadai/nakadai/orderOther/orderBulkDisableEnable`,
exportSubscribedRecords: `nakadai/nakadai/order/exportSubscribedRecords`, exportSubscribedRecords: `nakadai/nakadai/order/exportSubscribedRecords`,
addNewCustomersByOneself: `nakadai/nakadai/school/addNewCustomersByOneself`, addNewCustomersByOneself: `nakadai/nakadai/school/addNewCustomersByOneself`,
exportClient: `${host}nakadai/nakadai/customer/exportClient`,
resetPwdCustomer: `nakadai/nakadai/customer/resetPwd`, resetPwdCustomer: `nakadai/nakadai/customer/resetPwd`,
queryCustomerIsExists: `nakadai/nakadai/customer/queryCustomerIsExists`, queryCustomerIsExists: `nakadai/nakadai/customer/queryCustomerIsExists`,

@ -1,263 +1,389 @@
<template> <template>
<div> <div>
<el-card shadow="hover" class="mgb20"> <el-card shadow="hover"
<div> class="mgb20">
<div class="flex-center mgb20"> <div>
<p class="hr_tag"></p> <div class="flex-center mgb20">
<span>筛选</span> <p class="hr_tag"></p>
</div> <span>筛选</span>
<div> </div>
<el-form label-width="80px"> <div>
<el-col :span="4"> <el-form label-width="80px">
<el-form-item label="国家"> <el-col :span="4">
<el-select v-model="form.countries" placeholder="请选择国家"> <el-form-item label="省份">
<el-option v-for="(item,index) in countryList" :key="index" :label="item.name" :value="item.name"></el-option> <el-select v-model="form.provinces"
</el-select> clearable
</el-form-item> placeholder="请选择省份"
</el-col> @change="getCity"
<el-col :span="4"> @clear="clearprovince">
<el-form-item label="省份"> <el-option v-for="(item,index) in provinceList"
<el-select v-model="form.provinces" clearable placeholder="请选择省份" @change="getCity" @clear="clearprovince"> :key="index"
<el-option v-for="(item,index) in provinceList" :key="index" :label="item.provinceName" :value="item.provinceId"></el-option> :label="item.provinceName"
</el-select> :value="item.provinceId"></el-option>
</el-form-item> </el-select>
</el-col> </el-form-item>
<el-col :span="4"> </el-col>
<el-form-item label="城市"> <el-col :span="4">
<el-select v-model="form.city" clearable placeholder="请选择城市" :disabled="form.provinces ? false : true" @change="initData"> <el-form-item label="城市">
<el-option v-for="(item,index) in cityList" :key="index" :label="item.cityName" :value="item.cityId"></el-option> <el-select v-model="form.city"
</el-select> clearable
</el-form-item> placeholder="请选择城市"
</el-col> :disabled="form.provinces ? false : true"
<el-col :span="6"> @change="initData">
<el-form-item> <el-option v-for="(item,index) in cityList"
<el-input placeholder="支持客户,联系人,账号搜索" prefix-icon="el-icon-search" v-model="form.keyword" clearable></el-input> :key="index"
</el-form-item> :label="item.cityName"
</el-col> :value="item.cityId"></el-option>
</el-form> </el-select>
</div> </el-form-item>
</div> </el-col>
</el-card> <el-col :span="4">
<el-form-item label="客户类型">
<el-select v-model="form.customerType"
placeholder="请选择客户类型"
@change="initData">
<el-option v-for="(item,index) in customerTypeList"
:key="index"
:label="item.name"
:value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-input placeholder="支持客户,联系人,账号搜索"
prefix-icon="el-icon-search"
v-model="form.keyword"
clearable></el-input>
</el-form-item>
</el-col>
</el-form>
</div>
</div>
</el-card>
<el-card shadow="hover" class="card"> <el-card shadow="hover"
<div class="flex-between mgb20"> class="card">
<div class="flex-center"> <div class="flex-between mgb20">
<p class="hr_tag"></p> <div class="flex-center">
<span>客户列表</span> <p class="hr_tag"></p>
</div> <span>客户列表</span>
<div> </div>
<el-button type="primary" round class="mag" @click="addcustomer" v-auth>新增</el-button> <div>
<el-button type="primary" round @click="delAllSelection" v-auth>批量删除</el-button> <el-button type="primary"
</div> round
</div> class="mag"
<el-table v-loading="loading" :data="listData" class="table" ref="table" stripe header-align="center" @selection-change="handleSelectionChange" row-key="customerId"> @click="exportData">导出客户列表</el-button>
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column> <el-button type="primary"
<el-table-column type="index" width="100" label="序号" align="center"> round
<template slot-scope="scope"> class="mag"
{{scope.$index + (page - 1) * pageSize + 1}} @click="addcustomer"
</template> v-auth>新增</el-button>
</el-table-column> <el-button type="primary"
<el-table-column prop="customerName" label="客户名称" align="center"> round
</el-table-column> @click="delAllSelection"
<el-table-column label="行业" align="center"> v-auth>批量删除</el-button>
<template slot-scope="scope"> </div>
<span class="ellipsis">{{scope.row.industryName}}</span> </div>
</template> <el-table v-loading="loading"
</el-table-column> :data="listData"
<el-table-column prop="countries" label="国家" align="center"> class="table"
</el-table-column> ref="table"
<el-table-column prop="provinceName" label="省份" align="center"> stripe
</el-table-column> header-align="center"
<el-table-column prop="cityName" label="城市" align="center"> @selection-change="handleSelectionChange"
</el-table-column> row-key="customerId">
<el-table-column prop="name" label="联系人" align="center"> <el-table-column type="selection"
</el-table-column> width="55"
<el-table-column prop="account" label="账号" align="center"> align="center"
</el-table-column> :reserve-selection="true"></el-table-column>
<el-table-column prop="loginNumber" label="登录次数" align="center"> <el-table-column type="index"
</el-table-column> width="100"
<el-table-column label="操作" width="270" align="center"> label="序号"
<template slot-scope="scope"> align="center">
<el-button type="text" @click="resetPassword(scope.row)" v-auth>重置密码</el-button> <template slot-scope="scope">
<el-button type="text" @click="show(scope.row)" v-auth>查看</el-button> {{scope.$index + (page - 1) * pageSize + 1}}
<el-button type="text" @click="edit(scope.row)" v-auth>编辑</el-button> </template>
<el-button type="text" @click="handleDelete(scope.row)" v-auth>删除</el-button> </el-table-column>
</template> <el-table-column prop="customerName"
</el-table-column> label="客户名称"
</el-table> align="center">
<div class="pagination"> </el-table-column>
<el-pagination background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange" :current-page="page"> <el-table-column label="行业"
</el-pagination> align="center">
</div> <template slot-scope="scope">
</el-card> <span class="ellipsis">{{scope.row.industryName}}</span>
</div> </template>
</el-table-column>
<el-table-column prop="countries"
label="客户类型"
align="center">
<template slot-scope="scope">
<span v-if="scope.row.customerType">{{ customerTypeList.find(e => e.value == scope.row.customerType).name }}</span>
</template>
</el-table-column>
<el-table-column prop="provinceName"
label="省份"
align="center">
</el-table-column>
<el-table-column prop="cityName"
label="城市"
align="center">
</el-table-column>
<el-table-column prop="name"
label="联系人"
align="center">
</el-table-column>
<el-table-column prop="account"
label="账号"
align="center">
</el-table-column>
<el-table-column prop="loginNumber"
label="登录次数"
align="center">
</el-table-column>
<el-table-column label="操作"
width="270"
align="center">
<template slot-scope="scope">
<el-button type="text"
@click="resetPassword(scope.row)"
v-auth>重置密码</el-button>
<el-button type="text"
@click="show(scope.row)"
v-auth>查看</el-button>
<el-button type="text"
@click="edit(scope.row)"
v-auth>编辑</el-button>
<el-button type="text"
@click="handleDelete(scope.row)"
v-auth>删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
</el-pagination>
</div>
</el-card>
</div>
</template> </template>
<script> <script>
import Setting from '@/setting' import Setting from '@/setting'
import axios from 'axios';
import util from "@/libs/util";
export default { export default {
name: 'customer', name: 'customer',
data() { data () {
return { return {
loading:false, loading: false,
searchTimer: null, searchTimer: null,
countryList: [{ countryList: [{
name:'中国' name: '中国'
}], }],
listData: [], customerTypeList: [
form: { {
countries:'中国', value: '',
provinces: '', name: '不限'
city: '',
keyword: ''
},
multipleSelection: [],
provinceList: [],
cityList: [],
page: +this.$route.query.page || 1,
pageSize: 10,
total: 0,
ruleIds: []
};
},
watch: {
'form.keyword': function(val) {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initData()
},500)
},
},
mounted() {
this.getData()
this.getProvince()
},
methods: {
getData() {
const sid = this.$store.state.dataPer.find(e => e.permissionName === '客户管理')
this.loading = true
this.$post(this.api.queryCustomer,{
countries: this.form.countries,
provinceId: this.form.provinces,
cityId: this.form.city,
searchContent: this.form.keyword,
page: this.page,
size: this.pageSize,
supplierId: (sid && !sid.all) ? sid.supplierId : ''
}).then(res => {
this.listData = res.message.list
this.total = res.message.totalCount
this.loading = false
}).catch(res => {
this.loading = false
})
},
initData(){
this.page = 1
this.getData()
},
getProvince(){
this.$get(this.api.queryProvince).then(res => {
this.provinceList = res.list
this.$store.commit("provinceData", { provinceList : this.provinceList})
}).catch(res => {})
},
clearprovince(){
this.form.city = ''
},
getCity(){
this.clearprovince()
this.getCityData()
this.page = 1
this.initData()
}, },
getCityData(){ {
let data = { name: '正式',
provinceId: this.form.provinces value: 1
}
this.$get(this.api.queryCity,data).then(res => {
this.cityList = res.list
}).catch(res => {})
},
permission(row){
this.$router.push(`/permission?name=${row.customerName}`)
},
addcustomer(){
this.$router.push('addcustomer')
}, },
edit(row){ {
this.$router.push(`addcustomer?id=${row.customerId}`) name: '试用',
value: 2
}, },
show(row){ {
this.$router.push(`addcustomer?id=${row.customerId}&show=true`) name: '到期',
value: 3
}],
listData: [],
form: {
customerType: '',
provinces: '',
city: '',
keyword: ''
},
multipleSelection: [],
provinceList: [],
cityList: [],
page: +this.$route.query.page || 1,
pageSize: 10,
total: 0,
ruleIds: []
};
},
watch: {
'form.keyword': function (val) {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initData()
}, 500)
},
},
mounted () {
this.getData()
this.getProvince()
},
methods: {
getData () {
const sid = this.$store.state.dataPer.find(e => e.permissionName === '客户管理')
this.loading = true
this.$post(this.api.queryCustomer, {
provinceId: this.form.provinces,
cityId: this.form.city,
customerType: this.form.customerType,
searchContent: this.form.keyword,
page: this.page,
size: this.pageSize,
supplierId: (sid && !sid.all) ? sid.supplierId : ''
}).then(res => {
this.listData = res.message.list
this.total = res.message.totalCount
this.loading = false
}).catch(res => {
this.loading = false
})
},
initData () {
this.page = 1
this.getData()
},
getProvince () {
this.$get(this.api.queryProvince).then(res => {
this.provinceList = res.list
this.$store.commit("provinceData", { provinceList: this.provinceList })
}).catch(res => { })
},
clearprovince () {
this.form.city = ''
},
getCity () {
this.clearprovince()
this.getCityData()
this.page = 1
this.initData()
},
getCityData () {
let data = {
provinceId: this.form.provinces
}
this.$get(this.api.queryCity, data).then(res => {
this.cityList = res.list
}).catch(res => { })
},
permission (row) {
this.$router.push(`/permission?name=${row.customerName}`)
},
//
async exportData () {
let sid = this.$store.state.dataPer.find(e => e.permissionName === '客户管理')
sid = (sid && !sid.all) ? sid.supplierId : ''
let list = this.multipleSelection
//
if (!list.length) {
const res = await this.$post(this.api.queryCustomer, {
page: 1,
size: 1000,
supplierId: sid
})
list = res.message.list
}
const ids = list.map(e => e.customerId)
axios.post(this.api.exportClient, {
exportCustomerIds: ids,
supplierId: sid
}, {
headers: {
token: this.token
}, },
handleDelete(row) { responseType: 'blob'
this.$confirm('确定要删除吗?', '提示', { }).then((res) => {
type: 'warning' util.downloadFileDirect(`客户列表.xlsx`, new Blob([res.data]))
}).then(() => { }).catch(res => { })
this.$post(this.api.delCustomers,[row.customerId]).then(res => { },
this.$message.success('删除成功') addcustomer () {
if(this.listData.length == 2){ this.$router.push('addcustomer')
},
edit (row) {
this.$router.push(`addcustomer?id=${row.customerId}`)
},
show (row) {
this.$router.push(`addcustomer?id=${row.customerId}&show=true`)
},
handleDelete (row) {
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
}).then(() => {
this.$post(this.api.delCustomers, [row.customerId]).then(res => {
this.$message.success('删除成功')
if (this.listData.length == 2) {
}else{ } else {
if(this.page > 1){ if (this.page > 1) {
this.page = this.page-1 this.page = this.page - 1
}
}
this.getData()
}).catch(res => {})
}).catch(() => {})
},
handleSelectionChange(val) {
this.multipleSelection = val
},
delAllSelection() {
if(this.multipleSelection.length != ''){
let arr = this.multipleSelection
let delList = arr.map(item => {
return item.customerId
})
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
}).then(() => {
this.$post(this.api.delCustomers,delList).then(res => {
this.multipleSelection = [];
if(delList.length == this.listData.length){
if(this.page > 1){
this.page = this.page-1
}
}
this.$refs.table.clearSelection()
this.$message.success('删除成功')
this.getData()
}).catch(res => {})
}).catch(() => {})
}else{
this.$message.error('请先选择数据')
} }
}, }
handleCurrentChange(val) { this.getData()
this.page = val }).catch(res => { })
this.$store.commit('SET_C_PAGE', val) }).catch(() => { })
this.$router.push(`customer?page=${val}`) },
handleSelectionChange (val) {
this.multipleSelection = val
},
delAllSelection () {
if (this.multipleSelection.length != '') {
let arr = this.multipleSelection
let delList = arr.map(item => {
return item.customerId
})
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
}).then(() => {
this.$post(this.api.delCustomers, delList).then(res => {
this.multipleSelection = [];
if (delList.length == this.listData.length) {
if (this.page > 1) {
this.page = this.page - 1
}
}
this.$refs.table.clearSelection()
this.$message.success('删除成功')
this.getData() this.getData()
}, }).catch(res => { })
resetPassword(row){ }).catch(() => { })
this.$confirm(`重置后的密码为:${Setting.initialPassword},确定重置?`, '提示', { } else {
}).then(() => { this.$message.error('请先选择数据')
this.$get(this.api.resetPwdCustomer,{ }
customerId: row.customerId, },
}).then(res => { handleCurrentChange (val) {
if(res.message == 'success'){ this.page = val
this.$message.success('重置成功') this.$store.commit('SET_C_PAGE', val)
}else{ this.$router.push(`customer?page=${val}`)
this.$message.error('重置失败') this.getData()
} },
}).catch(res => {}); resetPassword (row) {
}).catch(() => { this.$confirm(`重置后的密码为:${Setting.initialPassword},确定重置?`, '提示', {
}); }).then(() => {
}, this.$get(this.api.resetPwdCustomer, {
} customerId: row.customerId,
}).then(res => {
if (res.message == 'success') {
this.$message.success('重置成功')
} else {
this.$message.error('重置失败')
}
}).catch(res => { });
}).catch(() => {
});
},
}
}; };
</script> </script>

@ -172,7 +172,13 @@ export default {
}).then(({ page }) => { }).then(({ page }) => {
const list = page.records const list = page.records
this.curriculumList = page.records this.curriculumList = page.records
if (!this.form.mallId && list.length) this.form.mallId = list[0].mallId if (list.length) {
const { mallId, cid, systemId } = this.form
const first = list[0]
this.form.mallId = mallId || first.mallId
this.form.cid = cid || +first.associatedProduct
this.sysId = systemId || +first.systemId
}
this.courseChange() this.courseChange()
}).catch(err => { }).catch(err => {

@ -1,244 +1,308 @@
<template> <template>
<div class="wrap"> <div class="wrap">
<el-card shadow="hover" class="m-b-20"> <el-card shadow="hover"
<el-page-header @back="$router.back()" content="查看报告"></el-page-header> class="m-b-20">
</el-card> <el-page-header @back="$router.back()"
content="查看报告"></el-page-header>
</el-card>
<div class="content"> <div class="content">
<div class="text-right"> <div class="text-right">
<el-button type="primary" @click="exportPage">导出报告</el-button> <el-button type="primary"
@click="exportPage">导出报告</el-button>
</div>
<h6 class="r-title">标准实验报告</h6>
<div class="info">
<h6 class="l-title">
<img src="@/assets/img/info1.png"
alt="">
基本信息
</h6>
<ul :class="['info-list', {edit: editing}]">
<li>
<label>学生姓名</label>
<el-input v-if="editing"
v-model="infoData.userName"
disabled></el-input>
<span v-else>{{ infoData.userName }}</span>
</li>
<li>
<label>学生学号</label>
<el-input v-if="editing"
v-model="infoData.workNumber"
disabled></el-input>
<span v-else>{{ infoData.workNumber }}</span>
</li>
<li>
<label>实验时间</label>
<el-input v-if="editing"
v-model="infoData.submitTime"
disabled></el-input>
<span v-else>{{ infoData.submitTime }}</span>
</li>
<li>
<label>实验成绩</label>
<el-input v-if="editing"
v-model="infoData.score"
disabled></el-input>
<div v-else
class="score-wrap">
<em>{{ infoData.score }}</em>
<img src="@/assets/img/point.png"
alt="">
</div> </div>
<h6 class="r-title">标准实验报告</h6> </li>
<div class="info"> <li>
<h6 class="l-title"> <label>学生班级</label>
<img src="@/assets/img/info1.png" alt=""> <el-input v-if="editing"
基本信息 v-model="infoData.className"></el-input>
</h6> <span v-else>{{ infoData.className }}</span>
<ul :class="['info-list', {edit: editing}]"> </li>
<li> <li>
<label>学生姓名</label> <label>指导老师</label>
<el-input v-if="editing" v-model="infoData.userName" disabled></el-input> <el-input v-if="editing"
<span v-else>{{ infoData.userName }}</span> v-model="infoData.instructor"></el-input>
</li> <span v-else>{{ infoData.instructor }}</span>
<li> </li>
<label>学生学号</label> <li>
<el-input v-if="editing" v-model="infoData.workNumber" disabled></el-input> <label>实验学时</label>
<span v-else>{{ infoData.workNumber }}</span> <el-input v-if="editing"
</li> v-model="infoData.period"></el-input>
<li> <span v-else>{{ infoData.period }}</span>
<label>实验时间</label> </li>
<el-input v-if="editing" v-model="infoData.submitTime" disabled></el-input> </ul>
<span v-else>{{ infoData.submitTime }}</span> <div class="m-b-20">
</li> <h6 class="l-title">
<li> <img src="@/assets/img/report2.png"
<label>实验成绩</label> alt="">
<el-input v-if="editing" v-model="infoData.score" disabled></el-input> 实验项目名称
<div v-else class="score-wrap"> </h6>
<em>{{ infoData.score }}</em> <el-input v-if="editing"
<img src="@/assets/img/point.png" alt=""> v-model="form.projectName"
</div> type="textarea"></el-input>
</li> <div v-else
<li> class="pre-wrap"
<label>学生班级</label> v-html="form.projectName"></div>
<el-input v-if="editing" v-model="infoData.className"></el-input> </div>
<span v-else>{{ infoData.className }}</span> <div class="m-b-20">
</li> <h6 class="l-title">
<li> <img src="@/assets/img/report3.png"
<label>指导老师</label> alt="">
<el-input v-if="editing" v-model="infoData.instructor"></el-input> 实验目的
<span v-else>{{ infoData.instructor }}</span> </h6>
</li> <div :class="['pre-wrap', {edit: editing}]"
<li> v-html="form.purpose"></div>
<label>实验学时</label> </div>
<el-input v-if="editing" v-model="infoData.period"></el-input> <div class="m-b-20">
<span v-else>{{ infoData.period }}</span> <h6 class="l-title">
</li> <img src="@/assets/img/report4.png"
</ul> alt="">
<div class="m-b-20"> 实验数据
<h6 class="l-title"> </h6>
<img src="@/assets/img/report2.png" alt=""> <el-table :data="expData"
实验项目名称 class="table"
</h6> border
<el-input v-if="editing" v-model="form.projectName" type="textarea"></el-input> stripe
<div v-else class="pre-wrap" v-html="form.projectName"></div> header-align="center">
</div> <el-table-column type="index"
<div class="m-b-20"> label="序号"
<h6 class="l-title"> align="center"
<img src="@/assets/img/report3.png" alt=""> width="60">
实验目的 <template slot-scope="scope">
</h6> {{ scope.$index + 1 }}
<div :class="['pre-wrap', {edit: editing}]" v-html="form.purpose"></div> </template>
</el-table-column>
<el-table-column prop="judgmentName"
label="判分点"
width="270"
align="center"></el-table-column>
<el-table-column v-if='project'
prop="judgmentName"
label="考核点"
align="center"
width="150">
<template slot-scope="scope">
<div v-for="(item, index) in scope.row.lcRuleRecords"
:key="index">
<span>
<span>{{index+1}}. </span>{{item.name}}
</span>
</div> </div>
<div class="m-b-20"> </template>
<h6 class="l-title"> </el-table-column>
<img src="@/assets/img/report4.png" alt=""> <el-table-column prop="ruleAnswer"
实验数据 label="参考答案"
</h6> style='word-wrap: break-word'>
<el-table :data="expData" class="table" border stripe header-align="center"> <template slot-scope="scope">
<el-table-column type="index" label="序号" align="center" width="60"> <div v-if='scope.row.lcRuleRecords'>
<template slot-scope="scope"> <div v-for="(item, index) in scope.row.lcRuleRecords"
{{ scope.$index + 1 }} :key="index">
</template> <span>
</el-table-column> <span>{{index+1}}. </span>{{item.ruleAnswer}}
<el-table-column prop="judgmentName" label="判分点" width="270" align="center"></el-table-column> </span>
<el-table-column v-if='project' prop="judgmentName" label="考核点" align="center" width="150"> </div>
<template slot-scope="scope">
<div v-for="(item, index) in scope.row.lcRuleRecords" :key="index">
<span>
<span>{{index+1}}. </span>{{item.name}}
</span>
</div>
</template>
</el-table-column>
<el-table-column prop="ruleAnswer" label="参考答案" style='word-wrap: break-word'>
<template slot-scope="scope">
<div v-if='scope.row.lcRuleRecords'>
<div v-for="(item, index) in scope.row.lcRuleRecords" :key="index">
<span>
<span>{{index+1}}. </span>{{item.ruleAnswer}}
</span>
</div>
</div>
<div v-else v-html="scope.row.referenceAnswer"></div>
</template>
</el-table-column>
<el-table-column prop="userAnswer" label="学生答案">
<template slot-scope="scope">
<div v-if='scope.row.lcRuleRecords'>
<div v-for="(item, index) in scope.row.lcRuleRecords" :key="index">
<span v-if='item.userAnswer'>
<span>{{index+1}}. </span>{{item.userAnswer}}
</span>
<span v-else>
<span>{{index+1}}. </span>未填写
</span>
</div>
</div>
<div v-else v-html='scope.row.answer' style='white-space: pre-wrap'></div>
<template v-if="scope.row.runThePictureList">
<img v-for="(img, i) in scope.row.runThePictureList" :key="i" width="200" class="result-pic" :src="img" alt="">
</template>
</template>
</el-table-column>
<el-table-column prop="score" label="得分" width="80" align="center"></el-table-column>
</el-table>
</div> </div>
<div class="m-b-20"> <div v-else
<h6 class="l-title"> v-html="scope.row.referenceAnswer"></div>
<img src="@/assets/img/report5.png" alt=""> </template>
实验总结与体会 </el-table-column>
</h6> <el-table-column prop="userAnswer"
<quill v-if="editing" :border="true" v-model="form.summarize" :minHeight="150" :height="150" /> label="学生答案">
<div v-else class="pre-wrap" v-html="form.summarize"></div> <template slot-scope="scope">
<div v-if='scope.row.lcRuleRecords'>
<div v-for="(item, index) in scope.row.lcRuleRecords"
:key="index">
<span v-if='item.userAnswer'>
<span>{{index+1}}. </span>{{item.userAnswer}}
</span>
<span v-else>
<span>{{index+1}}. </span>未填写
</span>
</div>
</div> </div>
</div> <div v-else
v-html='scope.row.answer'
style='white-space: pre-wrap'></div>
<template v-if="scope.row.runThePictureList">
<img v-for="(img, i) in scope.row.runThePictureList"
:key="i"
width="200"
class="result-pic"
:src="img"
alt="">
</template>
</template>
</el-table-column>
<el-table-column prop="score"
label="得分"
width="80"
align="center"></el-table-column>
</el-table>
</div>
<div class="m-b-20">
<h6 class="l-title">
<img src="@/assets/img/report5.png"
alt="">
实验总结与体会
</h6>
<quill v-if="editing"
:border="true"
v-model="form.summarize"
:minHeight="150"
:height="150" />
<div v-else
class="pre-wrap"
v-html="form.summarize"></div>
</div> </div>
</div>
</div> </div>
</div>
</template> </template>
<script> <script>
import util from "@/libs/util"; import util from "@/libs/util";
export default { export default {
data() { data () {
return { return {
reportId: this.$route.query.reportId, reportId: this.$route.query.reportId,
title: "实验报告", title: "实验报告",
form: { form: {
className: "", className: "",
instructor: "", instructor: "",
period: "", period: "",
projectName: "", projectName: "",
summarize: "", summarize: "",
}, },
infoData: {}, infoData: {},
expData: [], expData: [],
editing: false, editing: false,
loadIns: null, loadIns: null,
loading: false, loading: false,
project:false, project: false,
userScores: [] userScores: []
}; };
}, },
mounted() { mounted () {
this.getData() this.getData()
},
methods: {
getData () { //
this.$get(`${this.api.reportDetail}?reportId=${this.reportId}`).then(({ report, userScores }) => {
this.form = report
this.expData = userScores
this.project = this.expData.find(e => e.lcRuleRecords) // lcRuleRecords
let form = this.form;
this.infoData = {
workNumber: form.workNumber,
experimentalClassName: form.experimentalClassName,
instructor: form.instructor,
period: form.period,
laboratory: form.laboratory,
submitTime: form.submitTime,
score: form.score,
className: form.className,
userName: form.userName
}
const data = report.data
this.userScores = userScores
// data使
if (!data) {
this.handleList(userScores)
this.$post(this.api.editExperimentalData, {
reportId,
data: JSON.stringify(userScores)
}).then(res => { }).catch(err => { })
} else {
this.handleList(userScores.find(e => e.lcRuleRecords) ? userScores : JSON.parse(data))
}
}).catch(res => { })
}, },
methods: { //
getData() { // handleList (list) {
this.$get(`${this.api.reportDetail}?reportId=${this.reportId}`).then(({ report, userScores }) => { this.project = list.find(e => e.lcRuleRecords) // lcRuleRecords
this.form = report if (this.project) {
this.expData = userScores list.map(e => {
this.project = this.expData.find(e => e.lcRuleRecords) // lcRuleRecords e.assessmentPoint = ''
let form = this.form; e.referenceAnswer = ''
this.infoData = { e.answer = ''
workNumber: form.workNumber, e.lcRuleRecords.map((n, i) => {
experimentalClassName: form.experimentalClassName, e.assessmentPoint += `${i + 1}.${n.name}`
instructor: form.instructor, e.referenceAnswer += `${i + 1}.${n.ruleAnswer}`
period: form.period, e.answer += `${i + 1}.${n.userAnswer}`
laboratory: form.laboratory,
submitTime: form.submitTime,
score: form.score,
userName: form.userName
}
const data = report.data
this.userScores = userScores
// data使
if (!data) {
this.handleList(userScores)
this.$post(this.api.editExperimentalData, {
reportId,
data: JSON.stringify(userScores)
}).then(res => {}).catch(err => {})
} else {
this.handleList(userScores.find(e => e.lcRuleRecords) ? userScores : JSON.parse(data))
}
}).catch(res => {})
},
//
handleList(list) {
this.project = list.find(e => e.lcRuleRecords) // lcRuleRecords
if (this.project) {
list.map(e => {
e.assessmentPoint = ''
e.referenceAnswer = ''
e.answer = ''
e.lcRuleRecords.map((n, i) => {
e.assessmentPoint += `${i + 1}.${n.name}`
e.referenceAnswer += `${i + 1}.${n.ruleAnswer}`
e.answer += `${i + 1}.${n.userAnswer}`
})
})
} else { // pythonuserScores
list.forEach(e => {
const item = this.userScores.find(n => n.judgmentId == e.judgmentId)
if (item && item.runThePictureList) e.runThePictureList = item.runThePictureList
})
}
this.expData = list
},
exportPage() {
const form = Object.assign(this.form, this.infoData)
const list = JSON.parse(JSON.stringify(this.expData))
list.map((e, i) => {
const item = this.userScores.find(n => n.judgmentId == e.judgmentId)
if (item && item.runThePicture) e.runThePicture = item.runThePicture
if (item && item.runThePictureList) e.runThePictureList = item.runThePictureList
e.id = i + 1
// if (e.referenceAnswer && typeof e.referenceAnswer === 'string') e.referenceAnswer = e.referenceAnswer.replace(/<[^>]+>/g, '').replace(/(&nbsp;|&amp;|%s)/g, '').replace(/>/g, '&gt;').replace(/</g, '&lt;')
if (e.answer && typeof e.answer === 'string') e.answer = e.answer.replace(/<[^>]+>/g, '').replace(/(&nbsp;|&amp;|%s)/g, '').replace(/>/g, '&gt;').replace(/</g, '&lt;')
}) })
for (const i in form) { })
if (form[i] && typeof form[i] === 'string') form[i] = form[i].replace(/<[^>]+>/g, '') } else { // pythonuserScores
} list.forEach(e => {
form.purpose = form.purpose.replace(/<[^>]+>/g, '') const item = this.userScores.find(n => n.judgmentId == e.judgmentId)
this.$post(this.project ? this.api.exportBankExperimentReport : this.api.exportLabReport, { if (item && item.runThePictureList) e.runThePictureList = item.runThePictureList
...form, })
experimentalData: list }
}).then(res => { this.expData = list
console.log(res) },
util.downloadFileDirect(`实验报告.docx`,new Blob([res])) exportPage () {
}).catch(res => {}) const form = Object.assign(this.form, this.infoData)
}, const list = JSON.parse(JSON.stringify(this.expData))
} list.map((e, i) => {
const item = this.userScores.find(n => n.judgmentId == e.judgmentId)
if (item && item.runThePicture) e.runThePicture = item.runThePicture
if (item && item.runThePictureList) e.runThePictureList = item.runThePictureList
e.id = i + 1
// if (e.referenceAnswer && typeof e.referenceAnswer === 'string') e.referenceAnswer = e.referenceAnswer.replace(/<[^>]+>/g, '').replace(/(&nbsp;|&amp;|%s)/g, '').replace(/>/g, '&gt;').replace(/</g, '&lt;')
if (e.answer && typeof e.answer === 'string') e.answer = e.answer.replace(/<[^>]+>/g, '').replace(/(&nbsp;|&amp;|%s)/g, '').replace(/>/g, '&gt;').replace(/</g, '&lt;')
})
for (const i in form) {
if (form[i] && typeof form[i] === 'string') form[i] = form[i].replace(/<[^>]+>/g, '')
}
form.purpose = form.purpose.replace(/<[^>]+>/g, '')
this.$post(this.project ? this.api.exportBankExperimentReport : this.api.exportLabReport, {
...form,
experimentalData: list
}).then(res => {
console.log(res)
util.downloadFileDirect(`实验报告.docx`, new Blob([res]))
}).catch(res => { })
},
}
}; };
</script> </script>
@ -247,24 +311,26 @@ export default {
padding: 12px 300px 20px; padding: 12px 300px 20px;
} }
.text-right { .text-right {
text-align: right; text-align: right;
} }
code, kbd, samp{ code,
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; kbd,
samp {
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif;
word-wrap: break-word; word-wrap: break-word;
white-space: pre-wrap; white-space: pre-wrap;
} }
/deep/ pre{ /deep/ pre {
white-space: pre-wrap; /* css-3 */ white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: pre-wrap; /* Opera 4-6 */ white-space: pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */ white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */ word-wrap: break-word; /* Internet Explorer 5.5+ */
word-break:break-all; word-break: break-all;
overflow:hidden; overflow: hidden;
font-size: 12px; font-size: 12px;
font-weight:400; font-weight: 400;
font-family:'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif;
} }
.content { .content {
padding: 16px 40px; padding: 16px 40px;
@ -280,7 +346,7 @@ code, kbd, samp{
} }
.info { .info {
padding: 20px 16px; padding: 20px 16px;
border: 1px solid #E1E6F2; border: 1px solid #e1e6f2;
} }
.l-title { .l-title {
display: flex; display: flex;
@ -314,7 +380,7 @@ code, kbd, samp{
span { span {
min-width: 150px; min-width: 150px;
padding: 0 10px 3px; padding: 0 10px 3px;
border-bottom: 1px solid #E1E6F2; border-bottom: 1px solid #e1e6f2;
} }
/deep/.el-input { /deep/.el-input {
width: 174px; width: 174px;
@ -323,7 +389,7 @@ code, kbd, samp{
.score-wrap { .score-wrap {
position: relative; position: relative;
min-width: 150px; min-width: 150px;
border-bottom: 1px solid #E1E6F2; border-bottom: 1px solid #e1e6f2;
em { em {
position: absolute; position: absolute;
top: -12px; top: -12px;
@ -331,7 +397,7 @@ code, kbd, samp{
font-family: din; font-family: din;
font-size: 30px; font-size: 30px;
font-weight: 600; font-weight: 600;
color: #0B1D30; color: #0b1d30;
} }
img { img {
position: absolute; position: absolute;
@ -339,16 +405,17 @@ code, kbd, samp{
left: 0; left: 0;
} }
} }
/deep/.el-textarea .el-textarea__inner, .pre-wrap { /deep/.el-textarea .el-textarea__inner,
.pre-wrap {
min-height: 72px; min-height: 72px;
padding: 10px 16px; padding: 10px 16px;
font-size: 14px; font-size: 14px;
color: #333; color: #333;
&.edit { &.edit {
color: #ABB3C6; color: #abb3c6;
border: 1px solid #CACFDB; border: 1px solid #cacfdb;
border-radius: 4px; border-radius: 4px;
background-color: #F6F7F9; background-color: #f6f7f9;
} }
} }
/deep/ .table th { /deep/ .table th {
@ -360,7 +427,7 @@ code, kbd, samp{
} }
} }
.result-pic { .result-pic {
margin: 10px 0; margin: 10px 0;
} }
@media (max-width: 1650px) { @media (max-width: 1650px) {
.wrap { .wrap {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -44,7 +44,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item label="权限"> <el-form-item label="用途">
<el-select v-model="queryData.permissions" <el-select v-model="queryData.permissions"
placeholder="请选择" placeholder="请选择"
@change="initData"> @change="initData">
@ -120,7 +120,7 @@
{{ queryData.founder == 1 ? scope.row.schoolName : scope.row.creator }} {{ queryData.founder == 1 ? scope.row.schoolName : scope.row.creator }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="权限" <el-table-column label="用途"
min-width="120" min-width="120"
align="center"> align="center">
<template slot-scope="scope"> <template slot-scope="scope">
@ -208,7 +208,7 @@ export default {
platformId: 3, // :1 :3 platformId: 3, // :1 :3
founder: 0, // (0: 1:) founder: 0, // (0: 1:)
state: "", // (0:稿 1:) state: "", // (0:稿 1:)
permissions: "", // (0: 1: 2:) permissions: "", // (0: 1: 2:)
}, },
keyword: '', keyword: '',
status: '', status: '',

@ -306,7 +306,8 @@
:offset="5"> :offset="5">
<el-form-item class="req" <el-form-item class="req"
label="市场建议单价" label="市场建议单价"
prop="briefIntroduction"> prop="briefIntroduction"
label-width="120px">
<el-input type="number" <el-input type="number"
style="width: 250px" style="width: 250px"
placeholder="请输入市场建议单价" placeholder="请输入市场建议单价"

Loading…
Cancel
Save