提交 98299d6d 编写于 作者: guangjun.yang's avatar guangjun.yang

oss上传文件等

上级 c99903c8
<template>
<div class="rc-cropper" v-if="originImg">
<el-row>
<el-col :span="12">
<div class="rc-cropper__canvasCrop2">
<img :src="originImg" v-if="!cropper">
<canvas :id="originImg" ref="canvas"/>
<div class="rc-cropper__iconCrop">
<el-tooltip content="确认裁剪" placement="right" v-if="cropper">
<el-button type="success" size="mini" @click="sureCropper()"><i class="el-icon-check"></i></el-button>
</el-tooltip>
</div>
</div>
</el-col>
<el-col :span="10">
<div class="rc-cropper__previewImg">
<img :src="previewImg" id="previewImg"/>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
import Cropper from 'cropperjs'
import 'cropperjs/dist/cropper.min.css'
export default {
name: 'rc-cropper2',
props: {
cropOption: {
type: Object,
required: true,
default: () => {}
},
originImg: {
required: true
},
previewImg: {
type: String
}
},
data () {
return {
cropper: null,
croppShow: false
}
},
mounted () {
this.drawImg()
},
methods: {
// 在canvas上绘制图片
drawImg () {
const _this = this
this.$nextTick(() => {
let canvas = document.getElementById(this.originImg)
if (canvas) {
canvas.width = 720
canvas.height = 480
let ctx = canvas.getContext('2d')
ctx.clearRect(0, 0, canvas.width, canvas.height)
let img = new Image()
img.crossOrigin = 'Anonymous'
img.src = this.originImg
img.onload = function () {
ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
_this.initCropper()
}
}
})
},
// 显示裁剪框
initCropper () {
this.croppShow = true
this.cropper = new Cropper(this.$refs.canvas, {
checkCrossOrigin: true,
viewMode: 3,
zoomOnWheel: false, // 是否可以通过移动鼠标来放大图像
aspectRatio: 3 / 2,
ready: () => {
this.cropper.setData({
x: this.cropOption.offset_x,
y: this.cropOption.offset_y,
width: this.cropOption.width,
height: this.cropOption.height
})
}
})
// this.cropper = cropper
},
// 确认裁剪
sureCropper () {
let _this = this
const cropParam = this.cropper.getData()
this.cropper.getCroppedCanvas().toBlob(function (blob) {
let oFileReader = new FileReader()
oFileReader.onloadend = function (e) {
let base64 = e.target.result
_this.$emit('getCropImg', base64, cropParam)
}
oFileReader.readAsDataURL(blob)
}, 'image/jpeg')
}
}
}
</script>
<style >
.rc-cropper {
position: relative;
margin-top: 20px;
}
/* img {
width: 100%;
height: 100%;
} */
.rc-cropper__canvasCrop2 {
width: 720px;
height: 480px;
}
.rc-cropper__iconCrop {
position: absolute;
left: 45%;
top: 0%;
}
.el-tooltip {
margin: 20px 4px;
display: block;
z-index: 10000;
}
.rc-cropper__previewImg {
width: 600px;
height: 400px;
}
</style>
此差异已折叠。
......@@ -33,9 +33,13 @@
</ul>
<div v-if="courseList && courseList.list && courseList.list.length" class="list-wrapper">
<ul class="list">
<li class="course create-btn" @click="showOrgCourse(0)">
<img src="../../../assets/image/phrase3/plus-icon.png">
<span>创建机构课程</span>
</li>
<li
class="course"
:class="{ 'course-checked': item.checked }"
:class="{ 'course-checked': item.checked, 'cursor': kind == 0 }"
v-for="(item, index) in courseList.list"
:key="index"
@click="toggleChecked(item)"
......@@ -51,10 +55,17 @@
<span class="section-num">{{item.chapterSum}}{{item.lectureNum}}{{item.totalTime}}</span>
<span v-if="item.testCount" class="exam-num">{{item.testCount}}场考试</span>
</div>
<div class="cost">
<div v-if="item.checkStatus == 2 || kind == 0" class="cost">
<span class="no">免费</span>
<span class="num">{{item.joinNum}}人已学</span>
</div>
<div v-else class="cost audit">
<span class="no">{{item.checkStatus == 0 ? '审核中' : '审核失败'}}</span>
<div v-show="item.checkStatus == 1" class="edit" @click="showOrgCourse(item.courseId)">
<span>查看详情</span>
<img src="../../../assets/image/phrase3/arrow-right.png">
</div>
</div>
</div>
<img
v-show="item.checked"
......@@ -67,11 +78,8 @@
<div v-else class="no-list">
<img src="../../../assets/custom/icon/img-no-content.png" alt />
<span class="tips">没有找到相关结果,请重新查询</span>
<el-button v-show="kind == 1" type="primary" icon="el-icon-plus" @click="showOrgCourse">创建机构课程</el-button>
<el-button v-show="kind == 1" type="primary" icon="el-icon-plus" @click="showOrgCourse(0)">创建机构课程</el-button>
</div>
<el-button type="primary" icon="el-icon-plus" @click="showOrgCourse">创建机构课程</el-button>
<div class="page-wrapper">
<div class="page">
<el-pagination
......@@ -150,6 +158,7 @@ export default {
// 选择课程(并要处理过滤,删除等)
toggleChecked(item) {
if(item.checkStatus != 2 && this.kind == 1) return;
item.checked = !item.checked;
if (item.checked) {
if (this.courseLimitCount != -1 && this.cartList.length >= this.courseLimitCount) {
......@@ -170,8 +179,8 @@ export default {
},
// 通知父组件,打开创建资源(课程)弹框
showOrgCourse() {
this.$emit('showOrgCourse', 'add');
showOrgCourse(courseId) {
this.$emit('showOrgCourse', courseId ? courseId : 0);
},
}
};
......@@ -267,8 +276,6 @@ export default {
flex-wrap: wrap;
overflow-y: auto;
.course {
user-select: none;
cursor: pointer;
position: relative;
top: 0;
left: 0;
......@@ -282,6 +289,11 @@ export default {
margin-right: 10px;
border-radius: 4px;
border: 1px solid rgba(228, 231, 237, 1);
user-select: none;
// cursor: pointer;
&.cursor {
cursor: pointer;
}
&.course-checked {
&::before {
content: "";
......@@ -367,6 +379,24 @@ export default {
font-weight: 400;
color: #999999;
}
&.audit {
width: 100%;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
.edit {
cursor: pointer;
span {
font-size: 14px;
color: #449284;
}
img {
width: 10px;
height: 10px;
}
}
}
}
}
.course-selected {
......@@ -376,6 +406,24 @@ export default {
width: 44px;
height: 44px;
}
&.create-btn {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background:rgba(248,249,250,1);
border-radius:4px;
border:1px solid rgba(228,231,237,1);
img {
width: 16px;
height: 16px;
}
span {
margin-top: 10px;
font-size: 12px;
color: #979899;
}
}
}
}
}
......
......@@ -21,7 +21,7 @@ import { mapActions, mapGetters } from 'vuex';
export default {
data() {
return {
activeName: '1'
activeName: '0'
}
},
computed: {
......@@ -37,8 +37,8 @@ export default {
handleClick() {
this.setKind(this.activeName);
},
showOrgCourse(type) {
this.$emit('showOrgCourse', type);
showOrgCourse(courseId) {
this.$emit('showOrgCourse', courseId);
},
},
}
......
......@@ -181,5 +181,12 @@
padding: 25px 5px 30px;
border-top: 1px solid #E4E7ED;
}
.dialog {
.el-dialog__body {
margin: 0;
padding: 25px 5px 30px;
border-top: 0px solid #E4E7ED;
}
}
}
......@@ -37,6 +37,7 @@ export const envConfig = {
excelUrl: 'https://dev-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' https://dev-cms.yunqueyi.com/',
ossImgUrl: 'https://test-file.yunqueyi.com/',
},
dev: {
baseUrl: 'https://dev-sc.yunqueyi.com/',
......@@ -55,6 +56,7 @@ export const envConfig = {
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' https://dev-cms.yunqueyi.com/',
ossImgUrl: 'https://test-file.yunqueyi.com/',
},
test: {
baseUrl: 'https://test1-sc.yunqueyi.com/',
......@@ -73,6 +75,7 @@ export const envConfig = {
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' https://test1-cms.yunqueyi.com/',
ossImgUrl: 'https://test-file.yunqueyi.com/',
},
test2: {
baseUrl: 'https://test2-work.yunqueyi.com/sc/',
......@@ -90,6 +93,7 @@ export const envConfig = {
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' https://test2-cms.yunqueyi.com/',
ossImgUrl: 'https://test-file.yunqueyi.com/',
},
uat: {
baseUrl: 'https://uat-sc.yunqueyi.com/',
......@@ -108,6 +112,7 @@ export const envConfig = {
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' https://uat-cms.yunqueyi.com/',
ossImgUrl: 'https://test-file.yunqueyi.com/',
},
pro: {
baseUrl: 'https://sc.yunqueyi.com/',
......@@ -126,5 +131,6 @@ export const envConfig = {
excelUrl: 'https://file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' https://cms.yunqueyi.com/',
ossImgUrl: 'https://file.yunqueyi.com/',
}
}
......@@ -54,7 +54,7 @@ service.interceptors.request.use(config => {
}
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境
// console.log('环境变量>>>> ', process.env.BUILD_ENV);
config.headers['token'] = '17042AF4193B4398B3351AD1C92AC4DD';
config.headers['token'] = '4C431D1F183E43EBA7AD7EC094753882';
// config.headers['token'] = localStorage.getItem('storageToken')
}else{
config.headers['token'] = localStorage.getItem('storageToken')
......
......@@ -250,4 +250,36 @@ export function convertTime(time, isToSlash = true) {
}
}
}
}
\ No newline at end of file
}
//截位
export function subString(obj, int) {
if (isEmptyUtils(obj) || isEmptyUtils(int)) {
return "";
}
if (obj.length <= int) {
return obj;
} else {
obj = obj.substring(0, int);
}
return obj;
};
/**
* 校验对象是否为空
* */
export function isNotEmptyUtils(obj) {
if ("" == obj || null == obj || undefined == obj || "null" == obj) {
return false;
}
return true;
};
/**
* 校验对象是否为空
* */
export function isEmptyUtils (obj) {
return !isNotEmptyUtils(obj);
};
//api路径
import { isNotEmptyUtils } from "@/utils/index";
export default async(url = '', data = {}, type = 'POST', method = 'fetch',server='CONTENT') => {
type = type.toUpperCase();
// url = (server==='WECHAT'?wechatUrl:baseUrl) + url;
if (url.match("^http") == null){
url = localStorage.getItem("Url") + url;
}
// url =
console.log('@@@@@@@@@@@@@in oss fetch' , url);
// @@@@@@@@@@@@@in oss fetch null/5DF4291EDDA34BA08AD234C6BB7BE65D
// https://dev-api.yunqueyi.com/middle/oss/token/B1A7745D85D74EB4966125A4E0979ACE
console.log("完整url:",url)
if (type == 'GET' && data) {
let dataStr = ''; //数据拼接字符串
Object.keys(data).forEach(key => {
dataStr += key + '=' + data[key] + '&';
})
if (dataStr !== '') {
dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
url = url + '?' + dataStr;
// url = encodeURI(url + '?' + dataStr, true);
}
}
if (window.fetch && method == 'fetch') {
let requestConfig = {
credentials: 'include',
method: type,
// mode: "cors",
headers: {
// 'Access-Control-Allow-Origin': '*',
'Accept': '*',
'Content-Type': 'application/json',
// 'token': localStorage.getItem('token') || null, //固定传header:
// 'system_code': 'todo' //固定传header:系统编号
},
}
if (type == 'POST' || type === 'PUT' || type === 'PATCH' || type === 'DELETE' && data) {
Object.defineProperty(requestConfig, 'body', {
value: JSON.stringify(data)
})
}
try {
const response = await fetch(url, requestConfig);
const responseJson = await response.json();
return responseJson
} catch (error) {
throw new Error(error)
}
} else {
return new Promise((resolve, reject) => {
let requestObj;
if (window.XMLHttpRequest) {
requestObj = new XMLHttpRequest();
} else {
requestObj = new ActiveXObject;
}
let sendData = '';
if (type == 'POST' || type == 'DELETE' || type == 'PUT') {
sendData = JSON.stringify(data);
}
requestObj.open(type, url, true);
requestObj.setRequestHeader("Content-Type", "application/json");
requestObj.send(sendData);
requestObj.onreadystatechange = () => {
if (requestObj.readyState == 4) {
if (requestObj.status == 200) {
let obj = requestObj.response
if (typeof obj !== 'object' && isNotEmptyUtils(obj)) {
obj = JSON.parse(obj);
}
resolve(obj)
} else {
reject(requestObj)
}
}
}
})
}
}
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
......@@ -34,7 +34,7 @@
<!-- 选择课程 -->
<div v-if="active == 0" class="tpl-main">
<SelectCourseComp @showOrgCourse="showOrgCourse"></SelectCourseComp>
<SelectCourseComp @showOrgCourse="showOrgCourse" :activeName="kind"></SelectCourseComp>
</div>
<!-- 填写项目信息-->
......@@ -72,7 +72,7 @@
<dialog-componet :dialogObj="sendObj" @hide="hidefn" @confirm="confirmFn"></dialog-componet>
<PreviewEditCourse
:dialogVisible="isPreviewEditCourse"
:addOrUpdate="addOrUpdate"
:courseId="courseId"
@close="closeEditCourse"
/>
<PreviewProtocol
......@@ -172,11 +172,12 @@ export default {
allSubList: [],
isPreviewEditCourse: false,
addOrUpdate: 'add',
courseId: '0',
isPreviewProtocol: false,
protocolId: 5,
protocolContent: '',
isFirst: true, // 是否是第一次(不做更新)
};
},
computed: {
......@@ -185,8 +186,12 @@ export default {
watch: {
kind(newKind) {
let searchParam = newKind == 0 ? this.searchParam : this.searchParamOrg;
this.setKind(newKind);
this.getCourseList(searchParam);
if(newKind <= 1) {
this.getCourseList(searchParam);
} else {
newKind = newKind == 0 ? 0 : 1; // 将大于1的情况也置为1
this.setKind(newKind);
}
},
searchParam: {
handler(val) {
......@@ -196,7 +201,10 @@ export default {
},
searchParamOrg: {
handler(val) {
this.getCourseList(val);
if(!this.isFirst) {
this.isFirst = false
this.getCourseList(val);
}
},
deep: true
},
......@@ -592,9 +600,9 @@ export default {
如果已经加入机构,1:没有同意过协议,则打开协议弹框;2:已经加入,时直接打开添加弹框
如果没有加入机构,则直接弹出提示(我知道了)
*/
showOrgCourse(addOrUpdate) {
showOrgCourse(courseId) {
this.checkHospital();
this.addOrUpdate = addOrUpdate
this.courseId = courseId
},
// 创建机构课程前校验机构
......
此差异已折叠。
......@@ -49,7 +49,11 @@
<el-table-column align="center" prop="createdDoctorName" label="创建人" ></el-table-column>
<el-table-column align="center" prop="createdHospitalName" label="所属机构" ></el-table-column>
<el-table-column align="center" prop="createdTime" label="创建日期" ></el-table-column>
<el-table-column align="center" prop="checkStatus" label="审核状态" ></el-table-column>
<el-table-column align="center" prop="checkStatus" label="审核状态" >
<template slot-scope="scope">
<span v-html="getHtmlCheckStatus(scope.row.checkStatus)"></span>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button @click="viewOrAudit(scope.row)" type="text" size="small"><span style="color: #449284;">查看</span></el-button>
......@@ -174,6 +178,18 @@
},
methods: {
getHtmlCheckStatus(checkStatus) {
if(checkStatus == 0) {
return `<span style="color:#666666;">待审核</span>`;
} else if(checkStatus == 1) {
return `<span style="color:#D0021B;">拒绝</span>`;
} else if(checkStatus == 2) {
return `<span style="color:#417505;">通过</span>`;
} else {
return ''
}
},
// 查询列表
search() {
let searchForm = Object.assign({}, this.searchForm);
......
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册