提交 854df7f8 编写于 作者: 张磊's avatar 张磊

Merge branch 'feature/zl' into 'test'

Feature/zl

See merge request com.pica.cloud.education.frontend/pica.cloud.web-education-admin!365
因为 它太大了无法显示 源差异 。您可以改为 查看blob
......@@ -19,6 +19,7 @@
"@babel/polyfill": "^7.2.5",
"axios": "0.16.2",
"better-scroll": "^0.1.15",
"dayjs": "^1.10.7",
"echarts": "^4.2.0-rc.2",
"element-ui": "^2.11.1",
"fastclick": "^1.0.6",
......@@ -26,7 +27,7 @@
"iscroll": "^5.2.0",
"js-cookie": "^2.2.0",
"js-md5": "^0.7.3",
"jsencrypt": "^3.0.0-rc.1",
"jsencrypt": "^3.2.1",
"jspdf": "^1.5.3",
"node-sass": "^4.9.2",
"pdfh5": "^1.3.9",
......@@ -34,6 +35,7 @@
"qrcodejs2": "^0.0.2",
"showdown": "^1.6.4",
"sortablejs": "^1.13.0",
"storejs": "^2.0.1",
"video.js": "^7.8.2",
"vue": "^2.1.0",
"vue-infinite-scroll": "^2.0.2",
......
......@@ -322,7 +322,7 @@
<div v-show="step == 2" class="course-content-step2">
<img class="success-img" src="../../../assets/image/phrase3/icon-audit-success.png" />
<span class="tips-1">您上传的课程已成功提交,预计在3-5个工作日内完成审核</span>
<span class="tips-2">审核通过后,您才可以选择课程完成项目配置。如有任何疑问可联系云鹊医400-920-8877</span>
<span class="tips-2">审核通过后,您才可以选择课程完成项目配置。如有任何疑问可联系云鹊医400-006-5252</span>
<el-button class="back-btn" type="primary" icon="el-icon-back" @click="backToOrgCourse">返回机构课程</el-button>
</div>
<div v-show="step == 1" slot="footer" class="dialog-footer">
......
......@@ -43,7 +43,7 @@
<div slot="footer" class="dialog-footer bottom-msg">
<div class="disblock">
<h1>客服电话:400-920-8877 工作日:9:00~18:00</h1>
<h1>客服电话:400-006-5252 工作日:9:00~18:00</h1>
</div>
<div class="disblock">
<img src="https://file.yunqueyi.com/File/static/qrcode_for_yunqueyi.jpg" alt="">
......
......@@ -82,6 +82,8 @@ const plazaList = r => require.ensure([], () => r(require('../views/plaza/plaza-
const activityMember = r => require.ensure([], () => r(require('../views/activitymanagement/activity-member.vue')), 'activity-member')
const videoManage = r => require.ensure([], () => r(require('../views/shortvideo/video-manage.vue')), 'video-manage')
const qualificationList = r => require.ensure([], () => r(require('../views/qualification/list.vue')), 'qualification')
const qualificationDetail = r => require.ensure([], () => r(require('../views/qualification/detail.vue')), 'qualification')
export default [{
path: '/',
......@@ -347,7 +349,14 @@ export default [{
path: 'video-manage',
component: videoManage,
},
{
path: 'qualification-list',
component:qualificationList
},
{
path: 'qualification-detail',
component:qualificationDetail
},
// {
// path: '/followup',
// name: 'followUp',
......
@import './common.scss';
// color
.c0D9078{
color:#0D9078;
}
//定位
.relative{
position: relative;
......@@ -18,9 +22,19 @@
display: flex;
justify-content: flex-end;
}
.flex1{
flex: 1;
}
.textLeft{
float: left;
}
.cp{
cursor: pointer;
}
.flex-c{
display: flex;
align-items: center;
}
.center{
text-align: center;
}
......@@ -125,11 +139,11 @@
padding-left: 5px !important;
font-size: 14px !important;
color: #333;
}
}
.el-checkbox__input.is-checked+.el-checkbox__label {
color: #449284;
}
.el-checkbox__input.is-checked .el-checkbox__inner,
.el-checkbox__input.is-checked .el-checkbox__inner,
.el-checkbox__input.is-indeterminate .el-checkbox__inner {
color: #449284;
}
......@@ -204,7 +218,7 @@
margin: 0;
padding: 25px 5px 30px;
border-top: 0px solid #E4E7ED;
}
}
}
.el-dialog__footer {
padding-top: 20px;
......@@ -227,7 +241,7 @@
margin: 0;
padding: 25px 5px 30px;
border-top: 1px solid #E4E7ED;
}
}
}
}
.el-cascader .el-input .el-input__inner:focus, .el-cascader .el-input.is-focus .el-input__inner {
......
......@@ -641,4 +641,4 @@ export function setSelectedKeys(checkedKeys, halfCheckedKeys) {
selected.push(obj);
}
return selected;
}
\ No newline at end of file
}
import fetch from "../fetch";
import { getBaseUrl } from "@/utils/index";
let headers = {
"Content-Type": "application/json;charset=UTF-8",
token: localStorage.getItem("storageToken"),
};
/*获取省份*/
export const getProvinces = () => {
return fetch({
headers,
url: getBaseUrl(`/basic-data/position/provinces`),
method: "get",
});
};
// /*获取市*/
export const getCities = (params) => {
return fetch({
headers,
url: getBaseUrl(`/basic-data/position/cities`),
method: "get",
params: params,
});
};
// /*获取区*/
export const getCounties = (params) => {
return fetch({
url: getBaseUrl(`/basic-data/position/counties`),
method: "get",
params: params,
});
};
// /*获取乡镇*/
export const getTowns = (params) => {
return fetch({
url: getBaseUrl(`/basic-data/position/towns`),
method: "get",
params: params,
});
};
......@@ -133,3 +133,14 @@ export const getTypeCodeList = () => {
});
};
export const getBusinessCategory = () => {
return fetch({
headers,
url: getBaseUrl(`store/category/businessCategory/0`),
method: "get",
description: "查询业务类型",
});
};
import fetch from '@/utils/fetch'
import { getBaseUrl, getReportUrl, getWorkApi, getCmsUrl } from '@/utils/index'
import { CryptoJS } from '@/plugins/aes'
import 'jsencrypt'
import JSEncrypt from 'jsencrypt'
import { getPubKey } from '@/utils/account/accountApi';
......@@ -19,7 +19,7 @@ module.exports = {
// this.token = this.getUrlKey('token') || (query && query.token) || null
},
mounted: function() {
},
methods: {
......@@ -56,7 +56,7 @@ module.exports = {
cb && cb(params);
}
}else{
this.$message({
this.$message({
message: (res && res.message) || '接口出错',
type: 'warning'
});
......@@ -85,7 +85,7 @@ module.exports = {
return encrypted.toString();
},
// RSA encrypt
RsaEncrypt(aesKey, pubKey){
RsaEncrypt(aesKey, pubKey){
let _encrypt = new JSEncrypt();
let boss_public_key = pubKey;
_encrypt.setPublicKey(boss_public_key);
......@@ -159,7 +159,7 @@ module.exports = {
setEntry: 'headers',
}
let url = 'contents/searchKeyword/searchContent'
let csourceData = await this.GET(url, para).then(res => {
// _this.searchText = ''
if (res.code == '000000') {
......@@ -182,7 +182,7 @@ module.exports = {
})
return csourceData
},
setEventByModuleCode(itemData){
let modeCode = itemData.appModuleInfo.code || '';
let paramList = itemData.appModuleInfo.paramList ? itemData.appModuleInfo.paramList : ''
......@@ -253,7 +253,7 @@ module.exports = {
params: para
})
},
// 通用DELETE请求
DELETE(api, para, callback,str) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
......
......@@ -51,10 +51,12 @@ let errorCode = new Map([
[701,'在断点续上传过程中,后续上传接收地址不正确或ctx信息已过期。']
]);
let qiniuErrorCheck = function (code) {
let qiniuErrorCheck = function (code,self) {
errorCode.forEach(function (value, key, map) {
if (code === key){
self.$message.error(value);
console.error(key+':'+value)
}
})
}
......@@ -243,7 +245,7 @@ export const qiniuUpload = (self, file, filePath, previewId, progressId) => {
console.log("七牛上传失败,详细信息请参考:https://developer.qiniu.com/kodo/api/3928/error-responses");
//输出简略错误信息
if (err.isRequestError){
qiniuErrorCheck(err.code)
qiniuErrorCheck(err.code,self)
}else {
console.error(err);
}
......@@ -428,7 +430,7 @@ export const doUpload = (self, file, filePath, previewId, progressId, fileType)
console.log("七牛上传失败,详细信息请参考:https://developer.qiniu.com/kodo/api/3928/error-responses");
//输出简略错误信息
if (err.isRequestError){
qiniuErrorCheck(err.code)
qiniuErrorCheck(err.code,self)
}else {
console.error(err);
}
......
import fetch from '../fetch';
import { getBaseUrl, getSaasDomain, getSaasApiDomain } from '@/utils/index'
let headers = {
'Content-Type': 'application/json;charset=UTF-8',
token: localStorage.getItem('storageToken'),
};
export const getCertifyList = (params) => {
return fetch({
headers,
url: getBaseUrl(`store/certify/list`),
method: 'post',
data:params,
description: '审核记录列表(批发和供应商)',
})
};
export const getCertifyHistory = (params) => {
return fetch({
headers,
url: getBaseUrl(`certify/certifyHistory`),
method: 'get',
data:params,
description: '查看审核历史',
})
};
export const getCertifyDetail = () => {
return fetch({
headers,
url: getBaseUrl(`store/certify/certifyDetail`),
method: 'get',
description: '获取认证申请的审核详情',
})
};
export const getRefuseTemplate = (type) => {
return fetch({
headers,
url: getBaseUrl(`store/cert/constant/refuse/template?type=${type}`),
method: 'get',
description: '获取错误模板',
})
};
export const postCertifyAudit = (params) => {
return fetch({
headers,
url: getBaseUrl(`store/certify/audit`),
method: 'post',
data:params,
description: '审核',
})
};
......@@ -137,3 +137,59 @@ export const getRefundDesc = (aid) => {
description: '退款说明',
})
};
export const getLgCompanyList = () => {
return fetch({
headers,
url: getBaseUrl(`/basic-data/constants/app/no-chars/P307`),
method: "get",
description: "获取物流公司",
});
};
export const getStoreAdressRepot = (storeId) => {
return fetch({
headers,
url: getBaseUrl(`store/query/${storeId}/repot`),
method: "get",
description: "获取店铺退货地址信息",
});
};
export const OCRStore = (params) => {
return fetch({
headers,
url: getBaseUrl(`store/ocr/license`),
method: 'post',
data: params,
description: 'ocr店铺',
})
};
export const idCardOcr = (params) => {
return fetch({
headers,
url: getBaseUrl(`store/ocr/idCard`),
method: 'post',
data: params,
description: '身份证ocr',
})
};
export const orgOptionList = () => {
return fetch({
headers,
url: getBaseUrl(`store/cert/constant/org/type`),
method: 'get',
description: '企业类型列表',
})
};
export const orgScopeOptionList = () => {
return fetch({
headers,
url: getBaseUrl(`store/cert/constant/biz/scope`),
method: 'get',
description: '经营范围',
})
};
......@@ -66,7 +66,7 @@ export default {
if(res.data == 1) {
vm.$message.success('下载成功,请移至“下载报告”页面的“导出列表”中查看');
} else {
vm.$message.error('下载失败,请联系管理员或拨打咨询电话:400-920-8877');
vm.$message.error('下载失败,请联系管理员或拨打咨询电话:400-006-5252');
}
}
});
......
......@@ -103,7 +103,7 @@
</el-form-item>
<div class="tips-contnt" v-if="itemTimeForm.hasSelected">
<p class="yellow-font">当前计划中共{{totalNumber}}位居民(微信:{{wechatPatientNum}}位,短信:{{messagePatientNum}}位),本次定时推送任务在发送当日预计需要{{messagePatientNum}}条短信额度(微信推送不消耗额度,建议您让居民关注云鹊健康微信公众号),务必提前确保短信额度的充足。</p>
<p>需要更多额度,请前往「云鹊医App-个人中心-啾啾币中心」兑换短信额度后再进行预约,您也可以联系云鹊医客服购买短信额度,客服电话:400-920-8877</p>
<p>需要更多额度,请前往「云鹊医App-个人中心-啾啾币中心」兑换短信额度后再进行预约,您也可以联系云鹊医客服购买短信额度,客服电话:400-006-5252</p>
</div>
<el-form-item label="履约登记表">
<el-select
......
......@@ -9,7 +9,7 @@
:before-close="closeTipsDialog">
<div class="no-enough-content">
<h3>余额不足提醒</h3>
<p class="section">您的短信额度已欠费,请前往「云鹊医App-个人中心-啾啾币中心」兑换短信额度后再进行预约<br/>您也可以联系云鹊医客服购买短信额度,客服电话:400-920-8877</p>
<p class="section">您的短信额度已欠费,请前往「云鹊医App-个人中心-啾啾币中心」兑换短信额度后再进行预约<br/>您也可以联系云鹊医客服购买短信额度,客服电话:400-006-5252</p>
<p class="tip">提示:微信推送不消耗额度,建议您与居民绑定微信,关注云鹊健康微信公众号</p>
</div>
<div slot="footer" class="dialog-footer">
......
......@@ -11,9 +11,9 @@
</el-col>
</el-row>
<el-form
ref="formData"
:model="formData"
:rules="rules"
ref="formData3"
:model="formData3"
:rules="rules3"
label-width="150px"
label-suffix=":"
class="basic-form"
......@@ -25,7 +25,7 @@
<el-col :span="13">
<el-input
size="small"
v-model="formData.goodsName"
v-model="formData3.goodsName"
placeholder="请输入商品名称"
show-word-limit
maxlength="60"
......@@ -40,12 +40,12 @@
type="textarea"
rows="4"
size="small"
v-model="formData.goodsDescription"
v-model="formData3.goodsDescription"
placeholder="请输入商品介绍"
maxlength="1000"
maxlength="40"
show-word-limit
></el-input>
<!-- <span class="word-num">{{(formData.goodsDescription).replace(/\s+/g,"").length}}/1000</span> -->
<span class="word-tip">此文案可摘取药品说明书【功能主治】or【适应症】</span>
</el-col>
</el-form-item>
......@@ -56,6 +56,9 @@
:show-file-list="isShowFileList"
action="#"
:before-upload="beforeUploadPic"
multiple
:on-exceed="imgExceed"
:limit="6"
>
<div class="file-pics" v-if="fileGoodsList.length > 0" :key="index" v-for="(item,index) in fileGoodsList">
<img :src="item.url" @mouseover.stop="headIndex=index" class="bg-img"/>
......@@ -68,22 +71,67 @@
<i class="el-icon-delete"></i>
</div>
</div>
<img class="bg-img" src="../../assets/image/small.png" v-if="fileGoodsList.length <10"/>
<div class="limit-text">
<img class="bg-img" src="../../assets/image/small.png" v-if="fileGoodsList.length < 6"/>
<div class="limit-text" v-if="fileGoodsList.length < 6">
<!-- <p>限制大小: 200kb</p> -->
<p>建议尺寸:750*420</p>
<p>建议尺寸:750*750</p>
<p>支持jpeg, png格式</p>
</div>
</el-upload>
<p class="upload-message" v-if="!isgoodsImages">请上传商品头图</p>
<!-- <p class="upload-message" v-if="uploadImgMessage1">请上传商品头图</p> -->
</el-form-item>
<el-form-item label="商品介绍视频" class="label-video">
<el-upload
accept=".mp4"
:on-remove="handleRemoveVideo"
:file-list="videoList"
:before-upload="beforeVideoUpload"
:show-file-list="false"
:disabled="videoList.length == 1"
:limit="1"
action="#"
class="bg-uploader"
>
<video id="introVideoLecture" :src="videoModel.videoFullPath" controls preload style="width: 100%;" v-if="videoList.length == 1">
视频
</video>
<img class="bg-img" src="../../assets/image/video.png" v-if="videoList.length <1"/>
<div class="limit-text" v-if="videoList.length <1">
<p>建议大小:20M以内</p>
<p>仅支持MP4格式</p>
<P>视频名称必须包含3个下划线:举例(YQ_01_02_03.mp4)</P>
</div>
</el-upload>
<el-progress :text-inside="true" :stroke-width="16" :percentage="uploadProgress" status="success" class="video-progress"
v-show="uploadProgress>0&&uploadProgress<100">
</el-progress>
<el-button class="dl-video" icon="el-icon-delete" circle @click="deleteVideo" v-if="videoList.length == 1"></el-button>
</el-form-item>
<el-form-item label="业务类型" prop="businessCategoryId">
<el-select
v-model="formData3.businessCategoryId"
placeholder="请选择业务类型"
size="small"
>
<el-option
v-for="item in businessCategoryList"
:key="item.id"
:label="item.categoryName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="商品类型" prop="goodsType">
<el-select
v-model="formData.goodsType"
v-model="formData3.goodsType"
placeholder="请选择商品类型"
size="small"
:disabled="isEdit"
@change="getGoodsTypes(formData.goodsType,2)">
@change="getGoodsTypes(formData3.goodsType,2)">
<el-option
v-for="(item,index) in oneLever"
:key="item.categoryName+'-'+index"
......@@ -92,7 +140,17 @@
></el-option>
</el-select>
</el-form-item>
<!-- <p class="upload-message" v-if="uploadImgMessage1">请上传商品头图</p> -->
<el-form-item label="是否支持售后" prop="expressLimitFlag" v-if="storeType < 3">
<el-radio-group v-model="formData3.expressLimitFlag" :disabled="!hasRepoFlag">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
<p class="backTip" v-if="!hasRepoFlag" @click="goShopDeatil">若需设置商品支持售后,需先至店铺页<span class="ad-back">设置售后地址</span></p>
</el-form-item>
</div>
</el-form>
......@@ -109,7 +167,7 @@
<el-form-item label="条形码" prop="barCode">
<el-col :span="18">
<el-input
:disabled="barAndGoodsFlag"
:disabled="barAndGoodsFlag || idMedicEdit"
size="small"
v-model="formData1.barCode"
placeholder="请输入条形码"
......@@ -124,6 +182,7 @@
<el-input
size="small"
v-model="formData1.approvalNumber"
:disabled="idMedicEdit"
placeholder="请输入批准文号"
style="width:50%;"
></el-input>
......@@ -133,7 +192,7 @@
<el-form-item label="通用名称" prop="medicCommonName">
<el-col :span="13">
<el-input
:disabled="goodDisabled || barAndGoodsFlag"
:disabled="goodDisabled || barAndGoodsFlag || idMedicEdit"
size="small"
v-model="formData1.medicCommonName"
placeholder="请输入通用名称"
......@@ -151,7 +210,7 @@
size="small"
v-model="formData1.medicGoodsName"
placeholder="请输入商品名称"
:disabled="idMedicEdit"
maxlength="60"
show-word-limit
></el-input>
......@@ -165,6 +224,7 @@
size="small"
v-model="formData1.size"
placeholder="请输入规格"
:disabled="idMedicEdit"
style="width:70%;"
></el-input>
......@@ -174,8 +234,8 @@
<div class="inline">
<el-form-item label="是否是处方药" prop="otc1">
<el-col :span="24">
<el-radio size="mini" v-model="formData1.otc1" label="1">处方药</el-radio>
<el-radio v-model="formData1.otc1" label="0">非处方药</el-radio>
<el-radio size="mini" v-model="formData1.otc1" label="1" :disabled="idMedicEdit">处方药</el-radio>
<el-radio v-model="formData1.otc1" label="0" :disabled="idMedicEdit">非处方药</el-radio>
</el-col>
</el-form-item>
<el-form-item label="剂型" prop="dosageId">
......@@ -183,6 +243,7 @@
v-model="formData1.dosageId"
placeholder="请选择药品剂型"
size="small"
:disabled="idMedicEdit"
clearable>
<el-option
v-for="(item,index) in doseAll"
......@@ -200,6 +261,7 @@
v-model="formData1.usage"
placeholder="请输入用法用量"
style="width:70%;"
:disabled="idMedicEdit"
></el-input>
<span class="word-num">例如:每次一袋 每天1-2次</span>
......@@ -275,6 +337,7 @@
v-model="formData1.manufacturer"
placeholder="请输入生产厂家"
style="width:70%;"
:disabled="idMedicEdit"
></el-input>
<span class="word-num"></span>
......@@ -286,6 +349,7 @@
size="small"
v-model="formData1.department"
placeholder="请输入适用科室"
:disabled="idMedicEdit"
></el-input>
<!-- <el-select
......@@ -308,6 +372,7 @@
size="small"
v-model="formData1.treatDisease"
placeholder="请输入治疗疾病"
:disabled="idMedicEdit"
></el-input>
......@@ -323,6 +388,7 @@
v-model="formData1.expiredTime"
placeholder="请输入有效期"
style="width:70%;"
:disabled="idMedicEdit"
></el-input>
<!-- <el-date-picker
v-model="formData.expiredTime"
......@@ -343,6 +409,7 @@
v-model="formData1.modelNo"
placeholder="请输入型号"
style="width:70%;"
:disabled="idMedicEdit"
></el-input>
<span class="word-num"></span>
</el-col>
......@@ -354,6 +421,7 @@
v-model="formData1.standardNo"
placeholder="请输入执行标准号"
style="width:70%;"
:disabled="idMedicEdit"
></el-input>
<span class="word-num"></span>
</el-col>
......@@ -574,18 +642,6 @@
format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item>
<!-- <el-form-item label="商品使用日期" prop="endTime">
<el-col :span="13">
<el-input
size="small"
v-model="formData2.endTime"
placeholder="请输入商品使用日期"
style="width:70%;"
></el-input>
<span class="word-num"></span>
</el-col>
</el-form-item> -->
<el-form-item label="检测说明" >
<el-upload
:file-list="goodsCheckList"
......@@ -653,44 +709,19 @@
<el-radio :label="1">零售</el-radio>
<el-radio :label="2" :disabled="commissionFlag == 1">批发</el-radio>
</el-radio-group>
<!-- <el-select-->
<!-- v-model="formData.saleType"-->
<!-- placeholder="请选择销售方式"-->
<!-- size="small"-->
<!-- @change="getSaleType(formData.saleType,2)">-->
<!-- <el-option-->
<!-- v-for="item in saleTypeList"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- ></el-option>-->
<!-- </el-select>-->
</el-form-item>
</div>
<div class="inline" v-if="formData.saleType == 1">
<el-form-item label="零售价" prop="optPrice">
<el-col :span="20">
<!-- <el-input-->
<!-- @input="$forceUpdate();"-->
<!-- size="small"-->
<!-- v-model="formData.optPrice"-->
<!-- placeholder="请输入零售价"-->
<!-- ></el-input>-->
<el-input-number class="stock-com" @input="$forceUpdate();" v-model="formData.optPrice" size="small" :precision="2" :min="0.00" :max="99999.99"></el-input-number>
<!-- <span class="word-num">{{(formData.name).replace(/\s+/g,"").length}}/60</span> -->
</el-col>
</el-form-item>
</div>
<div class="inline" v-if="formData.saleType == 2">
<el-form-item label="批发价" prop="optPrice">
<el-col :span="20">
<!-- <el-input-->
<!-- @input="$forceUpdate();"-->
<!-- size="small"-->
<!-- v-model="formData.optPrice"-->
<!-- placeholder="请输入批发价"></el-input>-->
<el-input-number class="stock-com" @input="$forceUpdate();" v-model="formData.optPrice" size="small" :precision="2" :min="0" :max="99999.99"></el-input-number>
</el-col>
</el-form-item>
......@@ -704,14 +735,6 @@
<span class="sp sp-r" @click="changeStock(2)"><i class="el-icon-plus"></i></span>
</div>
<p class="error-message" v-if="!isgoodStock">库存不能为0</p>
<!-- <el-input
size="small"
v-model="formData.name"
placeholder="请输入库存"
></el-input> -->
<!-- <el-input-number readonly size="small" v-model="formData.stock"></el-input-number> -->
<!-- <span class="word-num">{{(formData.name).replace(/\s+/g,"").length}}/60</span> -->
</el-col>
</el-form-item>
</div>
......@@ -720,10 +743,7 @@
<el-form-item label="最小起购件数" prop="leastCount" class="required-label">
<el-col :span="20">
<div class="stock-com" style="width: 500px;display:flex">
<el-input-number class="stock-com" @input="$forceUpdate();" v-model="formData.leastCount" size="small" :precision="0" :min="0" :max="9999"></el-input-number>
<!-- <span class="sp sp-l" @click="minusCount(1)"><i class="el-icon-minus"></i></span>
<span class="sp sp-c">{{formData.leastCount}}</span>
<span class="sp sp-r" @click="plusCount(1)"><i class="el-icon-plus"></i></span> -->
<el-input-number class="stock-com" @input="$forceUpdate();" v-model="formData.leastCount" size="small" :precision="0" :min="0" :max="9999"></el-input-number>
<span class="word-num" style="margin-left: 10px;">最高9999件哦</span>
</div>
<p class="error-message" v-if="formData.leastCount <= 0">最小起购件数不能为0</p>
......@@ -745,18 +765,12 @@
<el-col :span="20" style="width: 300%;">
<div class="stock-com" style="width: 500px;display:flex">
<el-input-number class="stock-com" @input="$forceUpdate();" v-model="formData.mostCount" size="small" :precision="0" :min="-1" :max="9999"></el-input-number>
<!-- <span class="sp sp-l" @click="minusCount(2)"><i class="el-icon-minus"></i></span>
<span class="sp sp-c">{{formData.mostCount}}</span>
<span class="sp sp-r" @click="plusCount(2)"><i class="el-icon-plus"></i></span> -->
<span class="word-num" style="margin-left: 10px;">数值为-1时,代表单次购买上限已无限制(最高9999件哦)</span>
</div>
<p class="error-message" v-if="formData.mostCount === 0">单次购买上限不能为0</p>
<!-- <p class="error-message" v-if="formData.mostCount <= -1">单次购买上限已无限制</p>-->
</el-col>
</el-form-item>
</div>
<div class="inline" v-if="formData.saleType == 1">
<el-form-item label="第三方商品编码">
<el-col :span="20">
......@@ -782,16 +796,6 @@
</div>
</div>
<!-- </el-form>-->
<!-- <el-form-->
<!-- ref="formData"-->
<!-- :model="formData"-->
<!-- :rules="rules"-->
<!-- label-width="150px"-->
<!-- label-suffix=":"-->
<!-- class="basic-form"-->
<!-- >-->
<div class="basic-item-icon" v-if="formData.saleType == 1">
<div class="part-tit">限购条件</div>
<div v-for="(item, index) in buyLimitDtoList" :key="index" >
......@@ -847,7 +851,6 @@
</div>
<span slot="footer" class="dialog-footer" style="text-align: right;">
<!-- <el-button @click="centerDialogVisible = false">取 消</el-button> -->
<el-button type="primary" @click="updateStock">完成</el-button>
</span>
</el-dialog>
......@@ -858,12 +861,13 @@
import BreadCrumb from "@/components/breadcrumb.vue";
let vm = null;
import { openLoading, closeLoading } from "../../utils/utils";
import { doUpload, getFilePath } from "../../utils/qiniu-util";
import { updateGoods ,updateStock,dosageAll,getDeparts,getGoodsList, getGoodDetails, updateGoodsV2, getHospitalInfoByStoreId, getCheckPackageIdList, getTypeCodeList } from '@/utils/goods';
import { isEmptyUtils } from "@/utils/index";
import { doUpload, getFilePath, createFilePath } from "../../utils/qiniu-util";
import { updateGoods ,updateStock,dosageAll,getDeparts,getGoodsList, getGoodDetails, updateGoodsV2, getHospitalInfoByStoreId, getCheckPackageIdList, getTypeCodeList,getBusinessCategory } from '@/utils/goods';
import { getStoreAdressRepot } from "@/utils/shop";
import Cropper from '@/components/common/cropper.vue'
import { originRules1, originRules2, originRules } from './rules';
import { originForm1, originForm2, originForm } from './forms';
import { originRules1, originRules2, originRules, originRules3 } from './rules';
import { originForm1, originForm2, originForm, originForm3 } from './forms';
export default {
components: {
......@@ -955,6 +959,7 @@
formData: JSON.parse(JSON.stringify(originForm)), // 通用信息
formData1: JSON.parse(JSON.stringify(originForm1)), // 基本信息
formData2: JSON.parse(JSON.stringify(originForm2)),
formData3: JSON.parse(JSON.stringify(originForm3)),
buyLimitDtoList:[],
rules: {},
rules1: {},
......@@ -992,32 +997,48 @@
limitVisibleFlag:false,
limit:{
title:"限购条件"
}
},
storeType: 1, //1: "供货商",2: "小药房",3: "医生小店"
hasRepoFlag: 0, //店铺是否有退货地址
videoList: [],//视频上传文件列表
videoModel:{
videoFullPath: ''
},
businessCategoryList:[],
sumFile: 0,
uploadProgress:0, // 上传视频进度条
}
},
computed: {
idMedicEdit() {
return this.isEdit && !this.isCheckServe;;
}
},
created() {
vm = this;
const { id, storeId, goodsType, inputType, commissionFlag} = this.$route.query;
const { id, storeId, goodsType, inputType, commissionFlag, storeType} = this.$route.query;
this.goodsType = goodsType;
this.storeId = storeId;
this.inputType = inputType || '';
this.commissionFlag = commissionFlag;
this.storeType = storeType;
// this.formData = originForm;
// this.formData1 = originForm1;
// this.formData2 = originForm2;
this.rules = originRules;
this.rules1 = originRules1;
this.rules2 = originRules2;
this.rules3 = originRules3
// this.rules2.barCode = originRules.barCode;
this.jumPathThird = '/goods-manage?storeId=' + storeId +'&commissionFlag=' + this.commissionFlag;
this.jumPathThird = '/goods-manage?storeId=' + storeId +'&commissionFlag=' + this.commissionFlag +'&storeType=' + this.storeType;
//this.jumPathThird = '/create-good?id=add&storeId=46'
this.title = id == 'add' ? '新增商品' : '编辑商品';
this.isEdit = id != 'add';
this.curmbThird = this.title;
this.formData.storeId = Number(storeId) || '';
this.getTypeCodeList();
this.getBusinessCategory();
this.getLever(0,1)
dosageAll().then((res)=>{
this.doseAll = res.data
......@@ -1034,6 +1055,8 @@
console.log(`getCheckPackageIdList`, res);
this.checkPackageIdList = res.data;
})
} else {
this.getStoreAdress();
}
// debugger;
// 判空
......@@ -1048,6 +1071,27 @@
}
},
methods: {
// 获取业务类型
getBusinessCategory(){
getBusinessCategory().then((res) => {
if (res.code == '000000') {
this.businessCategoryList=res.data
}
}).catch((err)=>{})
},
// 判断imgurl是否有效
checkImgExists(imgurl) {
return new Promise(function(resolve, reject) {
var ImgObj = new Image()
ImgObj.src = imgurl
ImgObj.onload = function(res) {
resolve(res)
}
ImgObj.onerror = function(err) {
reject(err)
}
})
},
// 获取适用人群
getTypeCodeList() {
return getTypeCodeList().then((res) => {
......@@ -1083,18 +1127,34 @@
});
};
const { goodsInfo, medicalService, buyLimitDtoList} = res.data;
const { goodsInfo, medicalService, buyLimitDtoList, hasRepoFlag} = res.data;
const { goodsName, goodsDescription, goodsType,businessCategoryId, expressLimitFlag,goodsHeaderImages=[], goodsVideoList=[] } = goodsInfo;
this.formData = {...this.formData, ...goodsInfo};
this.formData2 = medicalService;
this.formData = { ...this.formData, ...this.formData2 };
this.formData3 = { goodsName, goodsDescription, goodsHeaderImages, goodsVideoList, goodsType,businessCategoryId, expressLimitFlag };
this.buyLimitDtoList = buyLimitDtoList;
this.hasRepoFlag = hasRepoFlag;
this.$set(this.formData2, 'suitableArr', this.formData.suitable.split(','));
this.$set(this.formData, 'suitableArr', this.formData.suitable.split(','));
this.formData.optPrice = this.formData.costPrice/100;
this.formData.stock = this.formData.goodsStock;
this.fileGoodsList = this.getImges(goodsInfo.goodsHeaderImages,1);
this.goodsCheckList = this.getImges(medicalService.goodsCheckImages, goodsType);
if (goodsInfo.goodsVideoList.length > 0) {
this.videoList.push(goodsInfo.goodsVideoList[0]);
this.videoModel.videoFullPath = this.videoList[0].goodsImgUrl;
}
let newImgList = [];
this.fileGoodsList.map((item,index) => {
this.checkImgExists(item.imageUrl).then(()=> {
newImgList.push(item)
}).catch(()=> {
newImgList = this.fileGoodsList.splice(index,1);
})
})
this.fileGoodsList = newImgList;
this.rules = {
...this.rules,
......@@ -1109,6 +1169,7 @@
goodsType :'',
pageNo:1,
pageSize: 10,
storeId: this.storeId
});
if(res.code != '000000'){
return this.$message({
......@@ -1122,15 +1183,31 @@
type: 'error'
});
}
const {goodsList} = res.data;
const {goodsList, hasRepoFlag } = res.data;
const { goodsName, goodsDescription, goodsType, businessCategoryId,expressLimitFlag, goodsHeaderImages=[], goodsVideoList=[] } = goodsList[0];
this.formData1 = goodsList[0];
this.formData = goodsList[0];
this.formData3 = { goodsName, goodsDescription, goodsHeaderImages, goodsVideoList, goodsType,businessCategoryId, expressLimitFlag };
this.hasRepoFlag = hasRepoFlag;
this.buyLimitDtoList = this.formData.buyLimitDtoList;
this.formData.optPrice = this.formData.costPrice/100;
this.fileGoodsList = this.getImges(goodsList[0].goodsImgList,1);
this.fileIntrList = this.getImges(goodsList[0].medicImgList,2);
this.formData.stock = this.formData.goodsStock;
this.formData.otc1 = this.formData.otc ? '1' : '0';
if (goodsList[0].goodsVideoList.length > 0) {
this.videoList.push(goodsList[0].goodsVideoList[0]);
this.videoModel.videoFullPath = this.videoList[0].goodsImgUrl;
}
let newImgList = [];
this.fileGoodsList.map((item,index) => {
this.checkImgExists(item.imageUrl).then(()=> {
newImgList.push(item)
}).catch(()=> {
newImgList = this.fileGoodsList.splice(index,1);
})
})
this.fileGoodsList = newImgList;
if(this.isMedic){
this.getLever(5,2,1)
}else{
......@@ -1252,31 +1329,9 @@
});
},
// 销售方式
getSaleType(saleType, type){
},
getGoodsTypes(goodsType,type){
this.goodsType = goodsType;
// if(goodsType == 5){
// this.isMedic = true;
// this.isCheckServe = false;
// this.getLever(goodsType,type);
// } else if(goodsType == 337){
// this.isMedic = false;
// this.isCheckServe = true;
// getHospitalInfoByStoreId(this.storeId).then(({code,message,data})=>{
// this.formData2.hospitalName = data.hospital;
// })
// getCheckPackageIdList().then(res=>{
// console.log(`getCheckPackageIdList`, res);
// this.checkPackageIdList = res.data;
// })
// }else{
// this.isMedic = false;
// this.isCheckServe = false;
// };
if(goodsType == 337){
this.isMedic = false;
this.isCheckServe = true;
......@@ -1400,15 +1455,16 @@
complete() {
this.formData1.leastCount = this.formData.leastCount;
this.formData1.mostCount = this.formData.mostCount;
let formNameList = ['formData', 'formData1', 'formData2'];
let formNameList = ['formData', 'formData1', 'formData2', 'formData3'];
// let formName = "formData";
if(this.goodsType == 337 ){
formNameList = ['formData', 'formData2'];
this.formData = { ...this.formData, ...this.formData2 };
formNameList = ['formData', 'formData2', 'formData3'];
this.formData = { ...this.formData, ...this.formData3,...this.formData2 };
}else{
formNameList = ['formData', 'formData1'];
this.formData = { ...this.formData, ...this.formData1 };
formNameList = ['formData', 'formData1', 'formData3'];
this.formData = { ...this.formData,...this.formData1,...this.formData3};
}
for(let i=0;i<this.fileGoodsList.length;i++){
this.fileGoodsList[i].imageSort = i+1
......@@ -1416,7 +1472,6 @@
for(let j=0;j<this.fileIntrList.length;j++){
this.fileIntrList[j].imageSort = j+1
}
this.formData.categoryId = this.formData.goodsType
this.formData.otc = this.formData.otc1 == 1 ? true : false
this.isgoodStock = this.formData.stock > 0 ? true : false
......@@ -1424,15 +1479,17 @@
// console.log(this.isgoodStock);
this.formData.goodsImages = this.fileGoodsList;
this.formData.goodsHeaderImages = this.fileGoodsList;
this.formData.goodsVideoList = this.videoList;
this.formData.specificationImages = this.fileIntrList;
this.formData.buyLimitDtoList = this.buyLimitDtoList;
this.isgoodsImages = this.formData.goodsImages.length == 0 ? false :true;
// 如果是【药品】类型的商品
if(this.isMedic){
// if(this.isMedic){
if(!this.isgoodsImages){
return;
}
}
// }
// 如果是【检测服务】类型的商品
if(this.isCheckServe){
this.formData.goodsCheckImages = this.goodsCheckList;
......@@ -1506,16 +1563,23 @@
path: '/goods-manage',
query: {
storeId: this.formData.storeId,
commissionFlag: this.commissionFlag
commissionFlag: this.commissionFlag,
storeType: this.storeType
}
})
})
},
imgExceed(file) {
if (file.length > 6) {
this.$message.error("最多只能上传6张图片");
};
},
//上传商品头图
beforeUploadPic(file) {
if(this.fileGoodsList.length > 10){
return ;
}
// if(this.fileGoodsList.length > 6){
// this.$message.error("最多只能上传6张图片");
// return ;
// }
let vm = this;
let picTypes = ['image/jpeg','image/png']
......@@ -1532,7 +1596,10 @@
vm.slide2.oriUrl = theFile.target.result;
image.onload = function () {
let _this = this;
console.log(_this.width,_this.height)
if (_this.width !== 750 || _this.height !== 750) {
vm.$message.error("图片长宽尺寸必须为750*750");
return;
};
openLoading(vm);
doUpload(vm, file, getFilePath(file, null), "preview4", "progress1", 1).then(function (path) {
closeLoading(vm);
......@@ -1763,7 +1830,6 @@
}
}
},
checkCount(){
let flag = true;
if(this.formData.saleType == 1 && this.formData.mostCount == 0){
......@@ -1785,8 +1851,134 @@
}
return flag;
}
},
goShopDeatil() {
this.$router.push({
path: `/create-shop`,
query:{
storeId: this.storeId,
// storeData: JSON.stringify(row),
}
})
},
//店铺是否配置售后地址
getStoreAdress() {
getStoreAdressRepot(this.storeId).then(res => {
if (res.code == "000000") {
// repotList 地址数组
if(res.data && res.data.repotList && res.data.repotList.length) {
this.hasRepoFlag = true;
} else {
this.hasRepoFlag = false;
}
} else {
this.$message.error(res.message);
}
})
},
// 视频
deleteVideo(videoList) {
console.log(videoList,'item,fileGoodsListitem,fileGoodsListv')
this.videoList = [];
this.videoModel.videoFullPath='';
},
beforeVideoUpload(file) {
const video2M = file.size / 1024 /1024 < 20;
console.log(file.size, 'video2Mvideo2Mvideo2M')
if (!video2M) {
this.$message.error('上传视频大小不能超过20M!');
}
else {
this.doVideoUpload(file, 1);
}
},
handleRemoveVideo(file, videoList) {
//console.log(this.videoList);
for (let i = 0; i < this.videoList.length; i++) {
if (this.videoList[i].name == file.name) {
this.videoList.splice(i, 1);
console.log("删除" + i);
}
}
},
checkUpdate(name) {
let flag = true;
for(let i=0;i<this.videoList.length;i++) {
if(this.videoList[i].name == name) {
flag = false;
this.$message.warning('上传文件重发');
}
}
console.log('name',name,'',this.videoList)
return flag;
},
doVideoUpload(file, index) {
console.log('file',file);
//console.log('videoList项目列表:',this.videoList);
this.videoModel.videoFullPath = '';
if(file.name.indexOf(' ') != -1){
this.$message.warning('文件名不能包含空格');
return;
}
let updateFlag = this.checkUpdate(file.name);
if(updateFlag == false) {
return;
}
var ext = file.type
var arr = ext.split('/');
var filety = "." + arr[1];
/*if (filety.indexOf(".pdf") < 0 && filety.indexOf(".jpeg") < 0 && filety.indexOf(".jpg") < 0
&& filety.indexOf(".png") < 0 && filety.indexOf(".mp4") < 0) {
this.$message.warning('文件格式错误');
return
}*/
let self = this;
//如果没有选择文件,返回
if (isEmptyUtils(file)) {
return;
}
console.log('file.type', file.type)
if(filety != ".mp4"){
// if (file.type !== 'video/mp4') {
self.$message.error('仅支持上传mp4格式视频');
return;
}
var arr = file.name.split('_');
if(arr.length != 4){
self.$message.error('上传视频文件名格式不正确:举例(GXY_001_02_03.mp4)');
return;
}
self.$message.info('开始上传');
self.videoModel.videoPath = createFilePath(file,file.name)
// let videoPath = createFilePath(file,file.name)
doUpload(self,file,self.videoModel.videoPath,"preview4",
"uploadProgress1",
"").then(function (result) {
console.log('成功result',result);
self.videoModel.videoFullPath = result.fullPath;
// self.model.size = result.size;
// self.model.ext = result.ext;
// self.model.name = self.model.videoPath;
let fileItem = {
goodsImgUrl: result.fullPath,
uid: '',
imageUrl: result.fullPath,
imageType: 9,
goodsId: self.formData.goodsId,
id: null,
deleteFlag: 0
}
self.videoList.push(fileItem);
self.$message.success('上传成功');
console.log('sumFile',self.sumFile,'videoList',self.videoList);
return false;
});
},
},
}
</script>
......@@ -1805,6 +1997,9 @@
color: #449284;
}
}
.word-tip {
color: #e6af7a;
}
}
.suitableList-select {
width: 445px;
......@@ -1856,7 +2051,14 @@
font-size: 12px;
color: #f56c6c;
}
.backTip {
font-size: 12px;
color: red;
cursor: pointer;
}
.ad-back {
color: #449284;
}
.img-delete {
position: absolute;
left: 0px;
......@@ -2019,4 +2221,29 @@
.el-icon-minus {
color:#ffffff;
}
#introVideoLecture {
height: 140px;
}
.video-progress {
width: 20%;
}
.el-upload-list {
width: 30%;
}
.label-video {
position: relative;
.el-button:focus, .el-button:hover {
color: #449284;
border-color: #449284;
background-color: #ecf5ff;
}
.dl-video {
position: absolute;
top: 50%;
left: 35%;
transform: translate(-50%,-50%);
}
}
</style>
const form1 = {
categoryIdLevel2: '',
categoryIdLevel3: '',
categoryIdLevel4: '',
categoryIdLevel5: '',
medicCommonName:'',
medicGoodsName:'',
size:'',
dosageId:null,
usage:'',
otc1:'1',
approvalNumber:'',
manufacturer:'',
department:'',
expiredTime:'',
specification_url:'',
treatDisease:'',
barCode: '',
modelNo: '', // 型号
standardNo: '', // 执行标准号
}
categoryIdLevel2: "",
categoryIdLevel3: "",
categoryIdLevel4: "",
categoryIdLevel5: "",
medicCommonName: "",
medicGoodsName: "",
size: "",
dosageId: null,
usage: "",
otc1: "1",
approvalNumber: "",
manufacturer: "",
department: "",
expiredTime: "",
specification_url: "",
treatDisease: "",
barCode: "",
modelNo: "", // 型号
standardNo: "", // 执行标准号
};
const form2 = {
checkPackageId: '', // 检测登记表,暂无,先隐藏!!!!!!!!!!!
......@@ -48,27 +48,39 @@ const form = {
// specificationImages:[],
// goodsId: 0, // 新增时传0,更新时必需>0
id: 0,
goodsName:'',
goodsDescription:'',
goodsHeaderImages:[],
goodsType:'',
barCode: '',
costPrice:0,
decrStock:0,//减少库存
incrStock:'',//增加库存
storeId: '',
optPrice:'',
goodsStock:0,
goodsName: "",
goodsDescription: "",
goodsHeaderImages: [],
goodsType: "",
barCode: "",
costPrice: 0,
decrStock: 0, //减少库存
incrStock: "", //增加库存
storeId: "",
optPrice: "",
goodsStock: 0,
stock: 0,
externalGoodsCode: '',
leastCount:1,
externalGoodsCode: "",
leastCount: 1,
mostCount: -1,
incrType:1,
saleType:1,
minWhole:0
incrType: 1,
saleType: 1,
minWhole: 0,
expressLimitFlag: 0, //是否支持退货退款
};
const form3 = {
goodsName: "",
goodsDescription: "",
goodsHeaderImages: [],
goodsVideoList: [],
goodsType: "",
businessCategoryId:"",
expressLimitFlag: 0, //是否支持退货退款
};
export const originForm1 = form1;
export const originForm2 = form2;
export const originForm3 = form3;
export const originForm = form;
......@@ -94,8 +94,8 @@
</el-col>
<el-col :span="12" style="text-align: right">
<el-button v-if="commissionFlag == 2" type="primary" size="small" @click="batchSetPrice()">批量设置分佣</el-button>
<el-button type="primary" size="small" @click="exportOpt">批量导出商品</el-button>
<el-button v-if="commissionFlag == 2" type="primary" size="small" @click="batchSetPrice()" :disabled="tableData.length == 0">批量设置分佣</el-button>
<el-button type="primary" size="small" @click="exportOpt" :disabled="tableData.length == 0">批量导出商品</el-button>
<el-button v-if="isSSO" type="primary" size="small" @click="batchOpt(3)">批量导入商品</el-button>
<el-button type="primary" size="small" @click="edit('add')">新建单个商品</el-button>
</el-col>
......@@ -121,7 +121,11 @@
<span>{{ scope.row.goodsStatus | rangeStatus }}</span>
</template>
</el-table-column>
<el-table-column prop="quantityOfSale" label="销量" width="120" align="center">
<el-table-column prop="goodsHisStock" label="商品总库存" width="100" align="center"></el-table-column>
<el-table-column prop="quantityOfSale" label="有效销量" width="120" align="center">
</el-table-column>
<el-table-column prop="quantityOfUnPaidSale" label="待付款销量" width="120" align="center">
</el-table-column>
<el-table-column prop="size" label="规格" width="120" align="center">
......@@ -158,6 +162,16 @@
</el-table-column>
<el-table-column prop="saleTime" label="发布时间" width="170" align="center">
</el-table-column>
<el-table-column prop="modifiedIdStr" label="最近操作人" width="170" align="center">
<template slot-scope="scope">
<span>{{ scope.row.modifiedIdStr || '--' }}</span>
</template>
</el-table-column>
<el-table-column prop="modifiedTime" label="最近操作时间" width="170" align="center">
<template slot-scope="scope">
<span>{{ scope.row.modifiedTime || '--' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200" align="center" fixed="right">
<template slot-scope="scope">
<div v-if="scope.row.commissionFlag == 2">
......@@ -345,16 +359,14 @@
</span>
</el-dialog>
</div>
</template>
<script>
let vm = null;
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import { getRangeList,updateRangeStatus, getGoodsExportUrl, getOrdersExportUrl } from "../../utils/yqrange/yqrangeApi";
import { getGoodsExportUrl } from "../../utils/yqrange/yqrangeApi";
import { getGoodsList,batchOnOff,uploadExcel} from '@/utils/goods';
import { getBaseUrl } from '@/utils/index'
var typeList = [{
categoryName: "短信额度",
id: 1,
......@@ -486,9 +498,10 @@
vm = this;
this.getLists()
this.getLever()
const {storeId,commissionFlag} = this.$route.query;
const {storeId,commissionFlag,storeType} = this.$route.query;
this.searchForm.storeId = Number(storeId) || 0;
this.commissionFlag = commissionFlag;
this.storeType = storeType;
// if(storeId){
// this.searchForm.storeId = storeId
// }
......@@ -550,7 +563,6 @@
handleRemove(){},
beforeRemove(){},
handleSelectionChange(val){
console.log(val)
this.selectList = val
},
......@@ -620,8 +632,10 @@
reader.readAsDataURL(file);
},
uploadTemp(){
// let url = "https://file.yunqueyi.com/trade/store/goods_import_template.xlsx"
const url = 'https://file.yunqueyi.com/trade/store/20210129/goods_import_template.xlsx';
// let url = "https://file.yunqueyi.com/trade/store/goods_import_template.xlsx 'https://file.yunqueyi.com/trade/store/20210129/goods_import_template.xlsx'"
// const url = 'https://files.yunqueyi.com/template/goods_import_template_1.xlsx';
const url = 'https://files.yunqueyi.com/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet/common/20211105150219553.xlsx';
window.location.href = url
},
getLever(id=0){
......@@ -691,12 +705,13 @@
}
},
edit(row){
const { goodsType } = row;
const { goodsType, storeType } = row;
// storeType 1: "供货商",2: "小药房",3: "医生小店"
let url = ''
if(row == 'add'){
url = `/create-good?id=add&storeId=${this.searchForm.storeId}&inputType=1&commissionFlag=${this.commissionFlag}`
url = `/create-good?id=add&storeId=${this.searchForm.storeId}&inputType=1&commissionFlag=${this.commissionFlag}&storeType=${this.storeType}`
}else{
url = `/create-good?id=${row.goodsId}&storeId=${this.searchForm.storeId}&goodsType=${goodsType}&commissionFlag=${this.commissionFlag}`
url = `/create-good?id=${row.goodsId}&storeId=${this.searchForm.storeId}&goodsType=${goodsType}&commissionFlag=${this.commissionFlag}&storeType=${storeType}`
}
// this.$store.dispatch('goodsManage/changeGoodsInfo', {...row});
this.$router.push({
......@@ -818,7 +833,6 @@
},
exportOpt() {
const { goodsIdList, goodsType, goodsName, storeId, saleType } = this.searchForm;
getGoodsExportUrl({ goodsIdList, goodsType, goodsName, storeId, saleType }).then(res => {
if (res.code != '000000') {
this.$message({ message: res.message, type: 'error' });
......
......@@ -27,18 +27,18 @@ const rules1 = {
{ required: true, message: "请输入条形码", trigger: "submit" },
{ validator: checkBarcode, trigger: "submit" }
],
medicCommonName:[
{ required: true, message: "请输入商品通用名称", trigger: "blur" }
],
// medicCommonName:[
// { required: true, message: "请输入商品通用名称", trigger: "blur" }
// ],
// size:[
// { required: true, message: "请输入商品规格", trigger: "blur" }
// ],
// manufacturer:[
// { required: true, message: "请输入生产厂家", trigger: "blur" }
// ],
approvalNumber:[
{ required: true, message: "请输入批准文号", trigger: "blur" }
],
// approvalNumber:[
// { required: true, message: "请输入批准文号", trigger: "blur" }
// ],
// dosageId:[
// { required: true, message: "请选择剂型", trigger: "change" }
// ],
......@@ -89,16 +89,6 @@ const rules = {
{ required: true, message: "请输入条形码", trigger: "submit" },
{ validator: checkBarcode, trigger: "submit" }
],
goodsName: [
{ required: true, message: "请输入商品名称", trigger: "submit" },
{ validator: checkProjectStr, trigger: "submit" }
],
goodsHeaderImages: [
{ required: true, message: "请上传商品头图", trigger: "blur" }
],
goodsType:[
{ required: true, message: "请选择商品类型", trigger: "change" }
],
optPrice: [
{ required: true, message: "请输入价格", trigger: "blur" },
],
......@@ -123,8 +113,24 @@ const rules = {
// ],
}
const rules3 = {
goodsName: [
{ required: true, message: "请输入商品名称", trigger: "submit" },
{ validator: checkProjectStr, trigger: "submit" },
],
goodsDescription: [
{ required: true, message: "请输入商品介绍", trigger: "submit" },
],
goodsHeaderImages: [
{ required: true, message: "请上传商品头图", trigger: "blur" },
],
businessCategoryId: [{ required: true, message: "请选择业务类型", trigger: "change" }],
goodsType: [{ required: true, message: "请选择商品类型", trigger: "change" }],
};
export const originRules1 = rules1;
export const originRules2 = rules2;
export const originRules3 = rules3;
export const originRules = rules;
......@@ -29,7 +29,7 @@
<el-col :span="15" class="msg-phone">
<div class="grid-content bg-purple-light" style="cursor: default;">
<i class="el-icon-phone" style="cursor: default;"></i>
<h1 style="cursor: default;">400-920-8877</h1>
<h1 style="cursor: default;">400-006-5252</h1>
</div>
</el-col>
</el-row>
......
......@@ -3,7 +3,7 @@
<div v-if="dataType == 0" class="data-chart">
<div class="box-list">
<div class="box-min">
<div v-for="(item , index) in cardData" :key="index" class="box-card" v-bind:class="{ 'box-last': index == 2 }">
<div v-for="(item , index) in cardData" :key="index" class="box-card" v-bind:class="{ 'box-last': index == 3 }">
<el-tooltip v-if="index == 2" class="item-tool" placement="bottom-end" effect="light">
<div slot="content">
<p v-for="text in item.content">{{ text }}</p>
......@@ -166,7 +166,7 @@
<div v-if="dataType == 1" class="data-table">
<div class="box-list">
<div class="box-min-2">
<div v-for="(item , index) in cardData" :key="index" class="box-card box-card2" v-bind:class="{ 'box-last': index == 1 }">
<div v-for="(item , index) in cardData" :key="index" class="box-card box-card2" v-bind:class="{ 'box-last': index == 2 }">
<el-tooltip v-if="index == 1" class="item-tool" placement="bottom-end" effect="light">
<div slot="content">
<p v-for="text in item.content">{{ text }}</p>
......@@ -791,6 +791,17 @@ export default {
content: [
"获证率:已获证人数/应参与人数*100%",
]
},
{
value: "0%",
title: " 参与完成率",
hasKey: "已完成人数 ",
hasNum: "0",
shouldKey: "已参与人数",
shouldNum: "0",
content: [
"参与完成率:已完成人数/已参与人数*100%",
]
}
];
if(data == null) {
......@@ -802,11 +813,11 @@ export default {
}
return;
}
cardData[2].title = vm.certFlag == 0 ? '完成率' : '获证率';
cardData[2].title = vm.certFlag == 0 ? '项目完成率' : '获证率';
cardData[2].hasKey = vm.certFlag == 0 ? '已完成人数' : '已获证人数';
if(vm.certFlag == 0) {
cardData[2].content = [
"完成率:已完成人数/应参与人数*100%",
"项目完成率:已完成人数/应参与人数*100%",
]
} else {
cardData[2].content = [
......@@ -821,15 +832,23 @@ export default {
cardData[2].value = parseFloat((data.certificateRate*100).toFixed(1)) + '%';
cardData[2].hasNum = data.finishCount;
cardData[2].shouldNum = data.doctorCount;
const p = data.joinCount ? data.finishCount/data.joinCount : 0;
cardData[3].value = parseFloat((p*100).toFixed(1)) + '%';
cardData[3].hasNum = data.finishCount;
cardData[3].shouldNum = data.joinCount;
if(vm.dataType == 0) {
cardData[0].value = parseFloat((data.hospitalRate*100).toFixed(1)) + '%';
cardData[0].hasNum = data.hospitalJoinCount;
cardData[0].shouldNum = data.hospitalCount;
cardData[0].hasNum = data.hospitalJoinCount; //hospitalCount
cardData[0].shouldNum = data.hospitalCount; //hospitalJoinCount
vm.cardData = cardData;
} else if(vm.dataType == 1) {
vm.cardData = cardData.slice(1);
}
console.log('---cardData', vm.dataType, vm.cardData)
},
updateResize() {
// setTimeout(function() {
......@@ -1081,8 +1100,7 @@ export default {
},
//机构人员分页
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
vm.formTable.pageSize = val;
vm.formTable.pageSize = val;
vm.formTable.pageNo = 1;
if(vm.downloadId == null) {
vm.searchPerson(1);
......@@ -1156,6 +1174,7 @@ export default {
.box-min {
height: 106px;
min-width: 1050px;
overflow-x: scroll;
}
.box-min-2 {
height: 106px;
......@@ -1165,7 +1184,7 @@ export default {
position: relative;
background-color: #F1F7F6;
color: #449284;
width: 32%;
width: 23%;
margin-right: 2%;
height: 106px;
float: left;
......@@ -1231,7 +1250,7 @@ export default {
}
}
.box-card2 {
width: 49%;
width: 32%;
margin-right: 2%;
}
.box-last {
......@@ -1420,7 +1439,7 @@ export default {
.el-radio-button {
.el-radio-button__inner {
border:0 solid #666666 !important;
box-shadow: 0;
box-shadow: none;
}
}
.is-active {
......@@ -1430,7 +1449,7 @@ export default {
border-radius:10px 10px 0px 0px;
background:#DFDFDF !important;
border:0 solid #666666 !important;
box-shadow: 0;
box-shadow: none;
}
}
}
......
<template>
<el-dialog
title="提示"
:visible.sync="hidden"
width="80%"
:before-close="handleClose"
>
<el-table :data="gridData">
<el-table-column property="date" label="审核时间"></el-table-column>
<el-table-column property="name" label="审核人"></el-table-column>
<el-table-column property="address" label="审核结果"></el-table-column>
<el-table-column property="address" label="失败原因" width="200">
<template class=""> </template>
</el-table-column>
<el-table-column property="address" label="操作">
<template>
<el-button
@click="goDetail(scope.row)"
class="c0D9078"
type="text"
size="small"
>查看详情</el-button
>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleNumChange"
:current-page="pageNo"
:page-sizes="[10, 30, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</el-dialog>
</template>
<script>
import { getCertifyHistory } from "@/utils/qualification";
export default {
props: {
hidden: {
type: Boolean,
default: () => {
return false;
},
},
id: {
type: Number,
default: () => {
return 0;
},
},
},
data() {
return {
pageNo: 0,
pageSize: 10,
total: 100,
gridData: [],
};
},
created() {},
methods: {
init() {
const params = {
certificateInfoId: this.id,
pageNo: this.pageNo,
pageSize: this.pageSize,
};
getCertifyHistory(params).then((res) => {
this.gridData = res.data.contentList;
});
},
handleSizeChange(value) {
this.pageSize = value;
this.init();
},
handleNumChange(value) {
this.pageNo = value;
},
goDetail() {
},
show() {},
handleClose() {
this.pageSize = 10;
this.pageNo = 1;
this.gridData = [];
this.$emit("close");
},
},
};
</script>
<style lang='less' scoped>
</style>
<template>
<el-dialog
title="拒绝原因"
:visible.sync="dialogVisible"
width="40%"
:before-close="handleClose"
>
<div class="refuse-dialog">
<el-radio
class="radio"
v-model="checkId"
v-for="item in list"
:key="item.id"
:label="item.id"
>{{ item.name }}</el-radio
>
<el-radio class="radio" v-model="checkId" :label="-1">手动输入</el-radio>
<el-input
v-if="checkId === -1"
type="textarea"
placeholder="请输入拒绝原因"
v-model="refuse"
maxlength="30"
show-word-limit
/>
</div>
<div class="btn">
<el-button type="default" size="small" @click="handleClose"
>取消</el-button
>
<el-button type="primary" size="small" @click="confirm">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { getRefuseTemplate } from "@/utils/qualification";
export default {
props: {},
data() {
return {
dialogVisible: false,
checkId: -1,
refuse: "",
list: [],
type: "",
typeData: {
1: "公司信息",
2: "营业执照",
3: "上一年年度报告",
4: "委托人身份证照片",
5: "委托书",
6: "法人身份证照片",
7: "药品经营许可证",
8: "药品经营质量管理规范认证证书",
9: "食品经营许可证",
10: "医疗器械经营许可证",
11: "二级医疗器械经营备案凭证",
12: "事业单位法人证",
},
};
},
created() {},
methods: {
init() {
getRefuseTemplate(this.type).then((res) => {
console.log(res);
this.list = res.data || [];
});
},
show(type) {
console.log(type);
this.type = type;
this.init(type);
this.dialogVisible = true;
},
handleClose() {
this.list = [];
this.refuse = "";
this.checkId = -1;
this.dialogVisible = false;
},
confirm() {
const params = {
refuseTemplateNo: this.checkId,
infoType: this.type,
infoTypeName:this.typeData[this.type]
};
if (this.checkId === -1) {
params.refuseContent = this.refuse;
} else {
params.refuseContent = this.list.filter((v) => {
return v.id === this.checkId;
})[0].name;
}
this.handleClose();
this.$emit("confirm", params);
},
},
};
</script>
<style lang='less' scoped>
.refuse-dialog {
display: flex;
flex-direction: column;
margin-bottom: 20px;
}
.radio {
margin-bottom: 10px;
}
.btn {
text-align: right;
}
</style>
<template>
<div class="qualification-detail" ref="qualificationDetail">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="qualification-content screenSet" id="screenSet">
<div class="head">
<div class="top space-between">
<div class="flex-c">
<div class="name">审核状态</div>
<div class="type" :class="typeState">{{ typeStateText }}</div>
<div class="history cp" @click="showHistoryDialog">
<i class="el-icon-document"></i>
查看审核历史
</div>
</div>
<div class="flex-c fs14">
<div class="mLR10">审核人:{{ detail.auditName }}</div>
<div>审核时间:{{ detail.auditTime }}</div>
</div>
</div>
<div class="hr"></div>
<div class="bottom" v-if="$route.query.source === 'ghs'">
<div>店铺名称:{{ detail.storeName }}</div>
<div>
管理员姓名:{{ detail.adminName }}
<span class="c0D9078 cp" @click="copyTxt">复制</span>
</div>
<div>管理员手机号:{{ detail.adminMobile }}</div>
</div>
<div class="bottom" v-if="$route.query.source === 'pf'">
<div>医生姓名:{{ detail.doctorName }}</div>
<div>
医生ID:{{ detail.doctorId }}
<span class="c0D9078 cp" @click="copyTxt">复制</span>
</div>
<div>申请时间:{{ detail.applyTime }}</div>
</div>
</div>
</div>
<div class="company" ref="company">
<div class="tit">
<div class="mr5">公司信息</div>
<div class="c0D9078 cp" @click="refuse(1)">
<i class="el-icon-edit-outline"></i>
拒绝原因
</div>
</div>
<div class="refuse-info">拒绝原因:{{ reasonRejection(1) }}</div>
<div class="info">
<div>
<div>企业类型:{{ detail.orgType }}</div>
<div>联系人:{{ detail.contactName }}</div>
</div>
<div>
<div>企业地区:{{ detail.areaStr }}</div>
<div>联系电话:{{ detail.contactPhone }}</div>
</div>
<div>详情地址:{{ detail.orgAddress }}</div>
</div>
</div>
<div class="business">
<div class="tit">
<div>工商信息</div>
</div>
<div class="refuse-info">拒绝原因:{{ reasonRejection(2) }}</div>
<div class="">
<div class="flex-c fs12">
<div class="mr5">营业执照</div>
<div class="c0D9078 cp" @click="refuse(2)">
<i class="el-icon-edit-outline"></i>拒绝原因
</div>
</div>
<div class="img">
<el-image
:src="detail.businessLicenseUrl"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
<div class="space-between flex-c">
<div>企业名称:{{ detail.orgName }}</div>
<div>信用代码:{{ detail.creditCode }}</div>
<div>
有效日期:{{ detail.licenseValidDateBegin }}
{{ detail.licenseValidDateEnd }}
</div>
</div>
</div>
<el-divider></el-divider>
<div>
<div class="flex-c fs12">
<div class="mr5">上一年度报告</div>
<div class="c0D9078 cp" @click="refuse(3)">
<i class="el-icon-edit-outline"></i>拒绝原因
</div>
</div>
<div class="refuse-info">拒绝原因:{{ reasonRejection(3) }}</div>
<div class="img">
<el-image
src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
<div>有效日期:</div>
</div>
<el-divider></el-divider>
<div>
<div class="flex-c fs12">
<div class="mr5">委托人身份证照片</div>
<div class="c0D9078 cp" @click="refuse(4)">
<i class="el-icon-edit-outline"></i>拒绝原因
</div>
</div>
<div class="refuse-info">拒绝原因:{{ reasonRejection(4) }}</div>
<div class="img">
<el-image
:src="detail.assignorCertBackUrl"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
<div class="img">
<el-image
:src="detail.assignorCertFrontUrl"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
<div class="space-between flex-c">
<div>委托人姓名:{{ detail.assignorName }}</div>
<div>委托人身份证号:{{ detail.assignorCertNo }}</div>
<div>
委托人身份证有效日期:{{ detail.assignorValidDateBegin }}{{
detail.assignorValidDateEnd
}}
</div>
</div>
</div>
<el-divider></el-divider>
<div>
<div class="flex-c fs12">
<div class="mr5">委托书</div>
<div class="c0D9078 cp" @click="refuse(5)">
<i class="el-icon-edit-outline"></i>拒绝原因
</div>
</div>
<div class="refuse-info">拒绝原因:{{ reasonRejection(5) }}</div>
<div class="img">
<el-image
:src="detail.assignorCertBackUrl"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
</div>
<el-divider></el-divider>
<div>
<div class="flex-c fs12">
<div class="mr5">法人身份证照片</div>
<div class="c0D9078 cp" @click="refuse(6)">
<i class="el-icon-edit-outline"></i>拒绝原因
</div>
</div>
<div class="refuse-info">拒绝原因:{{ reasonRejection(6) }}</div>
<div class="img">
<el-image
:src="detail.legalCertBackUrl"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
<div class="img">
<el-image
:src="detail.legalCertFrontUrl"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
<div class="space-between flex-c">
<div>法人人姓名:{{ detail.legalName }}</div>
<div>法人身份证号:{{ detail.legalCertNo }}</div>
<div>
法人身份证有效日期:{{ detail.legalValidDateBegin }}
{{ detail.legalValidDateEnd }}
</div>
</div>
</div>
<div>
<div class="tit">
<div>资质信息</div>
</div>
<div class="flex-start">
<div class="">经营范围:</div>
<div class="flex1">{{ detail.bizScope }}</div>
</div>
<div v-for="item in 4" :key="item" class="item">
<div class="flex-c fs12">
<div class="mr5">药品经营许可证</div>
<div class="c0D9078 cp" @click="refuse(7)">
<i class="el-icon-edit-outline"></i>拒绝原因
</div>
</div>
<div class="refuse-info">拒绝原因:{{ reasonRejection(7) }}</div>
<div class="img">
<el-image
src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
:preview-src-list="[
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
]"
/>
</div>
<div>有效日期:沙发沙发沙发沙发</div>
</div>
</div>
</div>
<history-dialog :hidden="historyDialogHidden" @close="historyDialogClose" />
<refuse-dialog ref="refuseDialog" @confirm="refuseConfirm" />
<footer>
<el-button type="primary" size="small" @click="confirm"
>审核通过</el-button
>
<el-button type="default" size="small" @click="handleClose"
>审核不通过</el-button
>
</footer>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import historyDialog from "./components/historyDialog.vue";
import refuseDialog from "./components/refuseDialog.vue";
import { getCertifyDetail, postCertifyAudit } from "@/utils/qualification";
import Footer from "../layout/footer.vue";
export default {
components: {
BreadCrumb,
historyDialog,
refuseDialog,
Footer,
},
filters: {},
computed: {
typeState() {
const reviewType = ["tobe-reviewed", "success-reviewed", "no-reviewed"];
return reviewType[this.$route.query.status];
},
typeStateText() {
const reviewType = ["待审核", "审核成功", "审核不通过"];
return reviewType[this.$route.query.status];
},
},
filters: {
},
data() {
return {
curmbFirst: "批发资质详情",
historyDialogHidden: false,
detail: {},
certifyValidDtoList: [], //认证审核校验描述
certifyLicenseImgList: [], //认证图片list:资质信息类
certifyReportImgList: [], //认证图片list 年度报告类
};
},
created() {
this.init();
},
methods: {
init() {
getCertifyDetail(this.id).then((res) => {
const {
certifyValidDtoList = [],
certifyLicenseImgList = [],
certifyReportImgList = [],
} = res.data;
console.log(this.certifyValidDtoList);
this.certifyValidDtoList = certifyValidDtoList;
this.certifyLicenseImgList = certifyLicenseImgList;
this.certifyReportImgList = certifyReportImgList;
this.detail = res.data;
});
},
showHistoryDialog() {
this.historyDialogHidden = true;
},
historyDialogClose() {
this.historyDialogHidden = false;
},
reasonRejection(type) {
const value = this.certifyValidDtoList.filter(v => {
return v.infoType === type
})[0] || {};
return value.refuseContent || '' ;
},
// copy
copyTxt(text) {
var type = "text/plain";
var blob = new Blob([text], { type });
var data = [new ClipboardItem({ [type]: blob })];
navigator.clipboard.write(data).then(
() => {
/* success */
this.$message.success("复制成功");
},
() => {
/* failure */
this.$message.error("复制失败");
}
);
},
confirm() {
const params = {
certificateInfoId:1,
certifyStatus:3,
certifyValidDtoList:this.certifyValidDtoList
}
if(this.certifyValidDtoList.length) {
this.$confirm("部分内容你已经标记拒绝,不可通过审核,请返回查看", "确认通过审核吗?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
console.log(document.querySelector('#body-content').scrollTop);
console.log(this.$refs.company.scrollHeight,document.scrollTop);
document.querySelector('#body-content').scrollTop = this.$refs.company.scrollHeight
})
.catch(() => {});
return;
}
this.$confirm('', "确认通过审核吗?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
postCertifyAudit(params).then(res => {
console.log(res);
document.querySelector('#body-content').scrollTop = 0;
this.init();
})
})
.catch(() => {});
},
handleClose() {
const params = {
certificateInfoId:1,
certifyStatus:4,
certifyValidDtoList:this.certifyValidDtoList
}
if(this.certifyValidDtoList.length) {
this.$confirm('', "确认通过审核不通过吗?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
document.body.scrollTop = 0;
})
.catch(() => {});
return;
}
this.$confirm('未检测到有标记拒绝原因的项目,请返回查看', "确认通过审核不通过吗?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
})
.catch(() => {});
},
refuseConfirm(params) {
console.log(params);
this.certifyValidDtoList.push(params)
},
refuse(type) {
console.log(type);
this.$refs.refuseDialog.show(type);
switch (type) {
case 1:
break;
}
},
},
};
</script>
<style lang="scss" scope>
.hr {
background-color: #dcdfe6;
position: relative;
display: block;
height: 1px;
width: 100%;
margin: 10px 0;
}
.mr5 {
margin-right: 5px;
}
.qualification-detail {
.qualification-content {
background: #fff;
padding: 10px;
.head {
.top {
display: flex;
align-items: center;
.name {
font-weight: bold;
font-size: 16px;
}
.type {
border: 1px solid #ccc;
padding: 2px 5px;
font-size: 14px;
border-radius: 5px;
margin: 0 5px;
&.tobe-reviewed {
color: #fac94d;
border: 1px solid #fac94d;
}
&.success-reviewed {
color: #71d60a;
border: 1px solid #71d60a;
}
&.no-reviewed {
color: #e2292a;
border: 1px solid #e2292a;
}
}
.history {
color: #0d9078;
font-size: 12px;
}
}
.bottom {
display: flex;
justify-content: space-between;
}
}
}
.company {
background-color: #fff;
margin: 10px 30px;
padding: 20px;
.c0D9078 {
margin-left: 5px;
font-size: 12px;
}
.info {
display: flex;
justify-content: space-between;
flex-wrap: nowrap;
line-height: 40px;
div {
}
}
}
.business {
background-color: #fff;
margin: 10px 30px;
padding: 20px;
font-size: 12px;
.img {
width: 80px;
height: 150px;
}
.item {
margin-bottom: 10px;
}
.flex-c {
margin-bottom: 10px;
}
.flex-start {
margin-bottom: 20px;
}
}
.tit {
display: flex;
align-items: center;
position: relative;
font-size: 16px;
margin-bottom: 20px;
> :first-child {
font-weight: bold;
}
&::before {
content: "";
width: 2px;
height: 70%;
position: absolute;
left: -5px;
background-color: #0d9078;
}
}
footer {
position: fixed;
bottom: 0;
right: 0;
background-color: #fff;
width: calc(100% - 255px);
text-align: right;
padding: 10px 20px;
}
.refuse-info {
font-size: 12px;
color: #e54543;
}
}
</style>
<template>
<div class="qualification-list">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="qualification-content screenSet" id="screenSet">
<el-form
ref="searchForm"
:model="searchForm"
label-width="100px"
label-suffix=":"
:inline="true"
>
<template v-if="$route.query.source === 'ghs'">
<el-form-item label="店铺名称">
<el-input
v-model="searchForm.storeNameStr"
size="small"
style="width: 200px"
placeholder="请输入店铺名称,用‘、’隔开"
></el-input>
</el-form-item>
<el-form-item label="管理员姓名">
<el-input
v-model="searchForm.adminNameStr"
size="small"
style="width: 220px"
placeholder="请输入管理员姓名,用‘、’隔开"
></el-input>
</el-form-item>
<el-form-item label="管理员手机号">
<el-input
v-model="searchForm.adminMobileStr"
size="small"
style="width: 220px"
placeholder="亲输入管理员手机号,用‘、’隔开"
></el-input>
</el-form-item>
<el-form-item label="企业类型">
<el-select
v-model="searchForm.orgType"
placeholder="请选择"
size="small"
clearable
>
<el-option
v-for="(item, index) in orgList"
:key="index"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</template>
<template v-if="$route.query.source === 'pf'">
<el-form-item label="医生ID">
<el-input
v-model="searchForm.doctorIdStr"
size="small"
style="width: 200px"
placeholder="请输入医生ID,用‘、’隔开"
></el-input>
</el-form-item>
<el-form-item label="医生姓名">
<el-input
v-model="searchForm.doctorNameStr"
size="small"
style="width: 200px"
placeholder="请输入医生姓名,用‘、’隔开"
></el-input>
</el-form-item>
<el-form-item label="企业名称">
<el-input
v-model="searchForm.orgNameStr"
size="small"
style="width: 200px"
placeholder="亲输入企业名称,用‘、’隔开"
></el-input>
</el-form-item>
</template>
<!-- <el-form-item label="审核状态">
<el-select
v-model="searchForm.status"
placeholder="请选择"
size="small"
>
<el-option
v-for="(item, index) in statusList"
:key="index"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item> -->
</el-form>
<div class="form-btn">
<el-button type="primary" size="small" @click="submitForm"
>查询</el-button
>
<el-button type="default" size="small" @click="resetForm"
>重制</el-button
>
</div>
</div>
<div class="table">
<div class="tab">
<span
:class="{ checked: item.id === searchForm.status }"
v-for="item in tabList"
:key="item.id"
@click="checkTab(item)"
>{{ item.name }}</span
>
</div>
<el-table
:data="tableData"
align="left"
class="item-table"
style="width: 100%; margin-top: 10px"
>
<el-table-column
prop="id"
label="申请ID"
min-width="100"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.id }}</span>
</template>
</el-table-column>
<template v-if="$route.query.source === 'ghs'">
<el-table-column
prop="storeName"
label="店铺名称"
min-width="100"
align="center"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.storeName }}</span>
</template>
</el-table-column>
<el-table-column
prop="adminName"
label="管理员姓名"
min-width="100"
align="center"
>
</el-table-column>
<el-table-column
prop="adminMobile"
label="管理员手机号"
min-width="100"
align="center"
>
</el-table-column>
</template>
<template v-if="$route.query.source === 'pf'">
<el-table-column
prop="storeName"
label="医生ID"
min-width="100"
align="center"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.storeName }}</span>
</template>
</el-table-column>
<el-table-column
prop="applyName"
label="医生姓名"
min-width="100"
align="center"
>
</el-table-column>
</template>
<el-table-column
prop="orgName"
label="企业姓名"
min-width="100"
align="center"
>
</el-table-column>
<el-table-column
prop="orgType"
label="企业类型"
min-width="120"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.orgType }}</span>
</template>
</el-table-column>
<el-table-column
prop="status"
label="审核状态"
min-width="120"
align="center"
>
<template slot-scope="scope">
<span :class="scope.row.status | typeState">{{
scope.row.status | examineType
}}</span>
<el-tooltip
class="item"
effect="dark"
content="Top Left 提示文字"
placement="top-start"
>
<i class="el-icon-warning-outline no-reviewed"></i>
</el-tooltip>
</template>
</el-table-column>
<el-table-column
prop="applyTime"
label="申请时间"
width="120"
align="center"
>
</el-table-column>
<el-table-column
prop="auditName"
label="审核人"
width="120"
align="center"
>
</el-table-column>
<el-table-column
prop="auditTime"
label="审核时间"
width="120"
align="center"
>
</el-table-column>
<el-table-column
label="操作"
min-width="230"
align="center"
fixed="right"
>
<template slot-scope="scope">
<div class="operation">
<el-button @click="editDetail(scope.row)" type="text" size="small"
>审核</el-button
>
<el-button @click="lookDetail(scope.row)" type="text" size="small"
>查看详情</el-button
>
</div>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleNumChange"
:current-page="searchForm.pageNo"
:page-sizes="[10, 30, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import { getCertifyList } from "@/utils/qualification";
export default {
components: {
BreadCrumb,
},
filters: {
examineType(type) {
const obj = {
0: "待审核",
1: "审核通过",
2: "审核不通过",
};
return obj[type];
},
typeState(type) {
const reviewType = ["tobe-reviewed", "success-reviewed", "no-reviewed"];
return reviewType[type];
},
},
data() {
return {
curmbFirst: "首营资质审核",
tabList: [
{ id: 0, name: "全部" },
{ id: 2, name: "待审核" },
{ id: 3, name: "审核成功" },
{ id: 4, name: "审核失败" },
{ id: 5, name: "作废" },
],
searchForm: {
adminMobileStr: "",
adminNameStr: "",
doctorIdStr: "",
doctorNameStr: "",
orgNameStr: "",
orgType: "",
pageNo: 1,
pageSize: 10,
status: 0,
storeNameStr: "",
},
orgList: [
{ id: 1, name: "医疗机构(非营利性)" },
{ id: 2, name: "医疗机构(营利性)" },
{ id: 3, name: "零售-单体药店" },
{ id: 4, name: "零售-连锁药店" },
],
tableData: [
{
id: 1,
storeName: "11",
storeType: 2,
storeStatus: 2,
count: 2,
createdTime: 2,
commissionType: 2,
},
],
pageNo: 1,
pageSize: 10,
totalRows: 0,
};
},
created() {
this.init();
},
methods: {
init() {
const params = {
pageSize: this.pageSize,
pageNo: this.pageNo,
type: Number(this.$route.query.type || 1),
...this.searchForm,
};
getCertifyList(params).then((res) => {
console.log(res);
const { contentList, total } = res.data;
this.tableData = contentList;
this.totalRows = total;
});
},
submitForm() {
this.init();
},
editDetail() {
this.$router.push({path:'/qualification-detail',query:{source:this.$route.query.source}})
},
lookDetail() {},
resetForm() {
(this.searchForm = {
adminMobileStr: "",
adminNameStr: "",
doctorIdStr: "",
doctorNameStr: "",
orgNameStr: "",
orgType: "",
pageNo: this.pageNo,
pageSize: this.pageSize,
status: this.searchForm.status,
storeNameStr: "",
}),
this.init();
},
handleSizeChange(value) {
this.pageSize = value;
this.pageNo = 1;
this.init();
},
handleNumChange(value) {
this.pageNo = value;
this.init();
},
checkTab(item) {
this.searchForm.status = item.id;
this.init();
},
},
};
</script>
<style lang="scss" scope>
.qualification-list {
.qualification-content {
background: #fff;
padding: 10px;
}
.form-btn {
text-align: right;
}
.table {
background-color: #fff;
margin: 10px 30px;
padding: 20px;
.tobe-reviewed {
color: #fac94d;
}
.success-reviewed {
color: #71d60a;
}
.no-reviewed {
color: #e2292a;
}
.tab {
span {
font-weight: bold;
font-size: 18px;
margin-right: 30px;
cursor: pointer;
&.checked {
color: #0d9078;
}
}
}
.operation {
span {
color: #0d9078;
}
}
}
}
</style>
因为 它太大了无法显示 源差异 。您可以改为 查看blob
......@@ -65,6 +65,22 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="店铺状态">
<el-select
v-model="searchForm.certifyStatus"
placeholder="请选择"
size="small"
clearable>
<el-option
v-for="item in storeTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6" style="text-align: right">
<el-button type="primary" size="small" @click="searchList">查询</el-button>
<el-button type="default" size="small" @click="resetForm" style="margin-left:0;">重置</el-button>
......@@ -93,6 +109,22 @@
<span>{{ scope.row.tradeStore.storeType | storeTypeFormat}}</span>
</template>
</el-table-column>
<el-table-column prop="storeType" label="审核状态" min-width="100" align="center">
<template slot-scope="scope">
<span :class="scope.row.tradeStore.certifyStatus == 3 ? 'red' : 'green'">
{{ scope.row.tradeStore.certifyStatus | storeStatusFormat}}
</span>
<el-popover
placement="top-start"
title="标题"
width="200"
trigger="hover"
:content="certificateInfoRespContent(scope.row.certificateInfoResp)">
<i v-if="scope.row.tradeStore.certifyStatus == 3" slot="reference" class="el-icon-warning-outline red"></i>
</el-popover>
</template>
</el-table-column>
<el-table-column prop="storeStatus" label="店铺状态" min-width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.tradeStore.storeStatus | statusFormat }}</span>
......@@ -135,7 +167,8 @@
<template slot-scope="scope">
<div>
<el-button v-if="scope.row.tradeStore.commissionFlag == 2" @click="setPrice(scope.row, false)" type="text" size="small">设置分佣</el-button>
<el-button @click="editShop(scope.row)" type="text" size="small">{{scope.row.tradeStore.storeType == 3 ? '查看' : '编辑'}}</el-button>
<el-button v-if="scope.row.tradeStore.storeStatus <= 2" @click="editShop(scope.row, 'true')" type="text" size="small">{{scope.row.tradeStore.storeStatus <= 2 ? '查看' : ''}}</el-button>
<el-button v-if="scope.row.tradeStore.storeType != 3" @click="editShop(scope.row, 'false')" type="text" size="small">编辑</el-button>
<el-button @click="shopManage(scope.row)" type="text" size="small">商品管理</el-button>
<el-button @click="orderManage(scope.row)" type="text" size="small">订单管理</el-button>
<el-button v-if="scope.row.tradeStore.commissionFlag == 2" @click="setFreight(scope.row)" type="text" size="small">运费配置</el-button>
......@@ -209,8 +242,6 @@
<el-button type="primary" @click="confirmSetPrice">确 定</el-button>
</span>
</el-dialog>
</div>
</div>
</template>
......@@ -237,21 +268,12 @@
id: null,
type: null,
commissionType: 0,
proxyCommissionType:0
proxyCommissionType:0,
certifyStatus:null
},
canAdd: false,
totalRows: 0,
tableData: [
// {
// tradeStore: {
// id: 12,
// storeName: '康爱多',
// storeType: 1,
// storeStatus: 0,
// count: 2,
// createdTime: ''
// }
// }
],
typeList: [
{
......@@ -279,15 +301,23 @@
value: 2,
label: "固定分佣"
}],
storeTypeList: [
{
value: 2,
label: "认证提交中"
},
{
value: 3,
label: "认证通过"
},
{
value: 4,
label: "审核失败"
},
],
setPriceVisible: false,
setPriceForm:{
// commissionType: 1,
// commissionPrice: '',
// commissionPrice1: '',
// commissionPrice2: '',
// storeId: '',
// goodsId: '',
// maxPrice: ''
adminCommissionGoodsRespList:[],
commission:{
commissionKind: "",
......@@ -311,9 +341,6 @@
},
},
setPriceRules: {
// commissionType: [
// {required: true, message: "请选择分佣方式", trigger: 'blur'}
// ]
},
}
},
......@@ -376,9 +403,8 @@
},
//新建店铺
createShop() {
this.$router.push({
path: `/create-shop`
})
let l = `${location.origin}#/create-shop?disabled=false`;
window.open(l);
},
//店铺管理
shopManage(row) {
......@@ -386,18 +412,11 @@
path: '/goods-manage',
query: {
storeId: row.tradeStore.id,
commissionFlag:row.tradeStore.commissionFlag
commissionFlag:row.tradeStore.commissionFlag,
storeType:row.tradeStore.storeType // 1: "供货商",2: "小药房",3: "医生小店"
}
});
window.open(routeData.href, '_blank');
// this.$router.push({
// path: '/goods-manage',
// query: {
// storeId: row.tradeStore.id,
// commissionFlag:row.tradeStore.commissionFlag
// }
// })
},
orderManage(row) {
let routeData = this.$router.resolve({
......@@ -407,22 +426,11 @@
}
});
window.open(routeData.href, '_blank');
// this.$router.push({
// path: '/order-manage',
// query: {
// storeId: row.tradeStore.id,
// }
// })
},
//编辑
editShop(row) {
this.$router.push({
path: `/create-shop`,
query:{
storeId: row.tradeStore.id,
storeData: JSON.stringify(row),
}
})
editShop(row, disabled) {
let l = `${location.origin}#/create-shop?storeId=${row.tradeStore.id}&disabled=${disabled}&certifyStatus=${row.tradeStore.certifyStatus}`;
window.open(l);
},
handleSizeChange(val) {
this.searchForm.pageSize = val;
......@@ -494,52 +502,6 @@
});
return;
}
// for(let i = 0; i < this.setPriceForm.adminCommissionGoodsRespList.length; i++){
// if(this.setPriceForm.adminCommissionGoodsRespList[i].commissionKind == 1
// && (this.setPriceForm.adminCommissionGoodsRespList[i].commissionType == null || this.setPriceForm.adminCommissionGoodsRespList[i].commissionType == "")){
//
// this.$message({
// message: '请选择分佣方式',
// type: "warning"
// });
// return;
// }
//
// if(this.setPriceForm.adminCommissionGoodsRespList[i].commissionKind == 1
// && this.setPriceForm.adminCommissionGoodsRespList[i].commissionType == 1 && this.setPriceForm.adminCommissionGoodsRespList[i].commissionPrice1 == undefined ){
// this.$message({
// message: '请输入按比例分佣',
// type: "warning"
// });
// return;
// }
// else if(this.setPriceForm.adminCommissionGoodsRespList[i].commissionKind == 1
// && this.setPriceForm.adminCommissionGoodsRespList[i].commissionType == 1 && this.setPriceForm.adminCommissionGoodsRespList[i].commissionPrice1 > 100){
// this.$message({
// message: '请输入按比例分佣0-100',
// type: "warning"
// });
// return;
// }
// if(this.setPriceForm.adminCommissionGoodsRespList[i].commissionKind == 1
// && this.setPriceForm.adminCommissionGoodsRespList[i].commissionType == 2 && this.setPriceForm.adminCommissionGoodsRespList[i].commissionPrice2 == undefined ){
// this.$message({
// message: '请输入固定分佣金额',
// type: "warning"
// });
// return;
// }
//
// if(this.setPriceForm.adminCommissionGoodsRespList[i].commissionType == 1){
// this.setPriceForm.adminCommissionGoodsRespList[i].commissionPrice = this.setPriceForm.adminCommissionGoodsRespList[i].commissionPrice1 * 100;
// }
// else if(this.setPriceForm.adminCommissionGoodsRespList[i].commissionType == 2){
// this.setPriceForm.adminCommissionGoodsRespList[i].commissionPrice = this.setPriceForm.adminCommissionGoodsRespList[i].commissionPrice2 * 100;
// }
//
// }
let timeoutId = null
timeoutId && clearTimeout(timeoutId)
timeoutId = setTimeout(() => {
......@@ -566,13 +528,6 @@
}
vm.setPriceForm.adminCommissionGoodsRespList[0] = vm.setPriceForm.commission;
vm.setPriceForm.adminCommissionGoodsRespList[1] = vm.setPriceForm.proxyCommission;
// if(vm.setPriceForm.commissionType == 1){
// vm.setPriceForm.commissionPriceStr = vm.setPriceForm.commissionPrice1;
// }
// else if(vm.setPriceForm.commissionType == 2){
// vm.setPriceForm.commissionPriceStr = vm.setPriceForm.commissionPrice2;
// }
// vm.setPriceForm.commissionPrice = vm.setPriceForm.commissionPriceStr * 100;
vm.POST('/store/commission/admin/store/save', vm.setPriceForm.adminCommissionGoodsRespList).then(res => {
vm.loading = false
// closeLoading(this);
......@@ -688,26 +643,7 @@
storeId: row.tradeStore.id,
};
}
// this.batchUpdatePriceFlag = batchUpdatePriceFlag;
// this.setPriceForm.storeId = row.tradeStore.id;
// this.setPriceForm.goodsId = row.tradeStore.goodsId;
// this.setPriceForm.commissionType = "";
// this.setPriceForm.commissionPrice1 = undefined;
// this.setPriceForm.commissionPrice2 = undefined;
// this.setPriceForm.commissionType = row.tradeStore.commissionType;
// if(this.setPriceForm.commissionType == 1){
// this.setPriceForm.commissionPrice1 = row.tradeStore.commissionPrice/100;
// }
// else if(this.setPriceForm.commissionType == 2){
// this.setPriceForm.commissionPrice2 = row.tradeStore.commissionPrice/100;
// }
this.setPriceVisible = true;
// if(this.$refs.setPriceForm) {
// this.$refs.setPriceForm.resetFields()
// }
// this.getProfit(row);
},
// 运费配置
setFreight(row) {
......@@ -720,6 +656,17 @@
});
window.open(routeData.href, '_blank');
},
certificateInfoRespContent (c) {
let v ='';
if( c && c.length > 0) {
c.map( (i, j)=> {
if(j <= 3){
v = v + i.refuseContent;
}
});
}
return v;
}
},
filters: {
......@@ -768,6 +715,24 @@
return value;
}
},
storeStatusFormat(v) {
let s = '';
switch (v) {
case 2:
s = '待审核'
break;
case 3:
s = '审核成功'
break;
case 4:
s = '审核失败'
break;
default:
s ='审核成功'
break;
}
return s;
}
},
}
</script>
......@@ -804,5 +769,11 @@
}
}
}
.red{
color: #FF4B33;
}
.green{
color: #449284;
}
}
</style>
因为 它太大了无法显示 源差异 。您可以改为 查看blob
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册