This commit is contained in:
quantulr
2022-10-19 00:22:03 +08:00
parent 656b6ef510
commit fd5e278fa7
12 changed files with 477 additions and 139 deletions

Binary file not shown.

View File

@ -74,6 +74,6 @@ export function serviceCaseEdit(data) {
export function serviceCaseDelete(ids) {
return request({
url: `/business/solutionCase/${ids}`,
method: "post",
method: "delete",
});
}

View File

@ -28,7 +28,8 @@ import {
watch,
} from "vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import request from "@/utils/request";
import { getToken } from "@/utils/auth";
export default {
components: { Editor, Toolbar },
props: {
@ -76,26 +77,45 @@ export default {
);
const { height } = toRefs(props);
const toolbarConfig = {
toolbarKeys: [
"bold",
"underline",
"italic",
"through",
"color",
"bgColor",
"fontSize",
"fontFamily",
"lineHeight",
// "emotion",
// "redo",
// "undo",
],
// toolbarKeys: [
// "bold",
// "underline",
// "italic",
// "through",
// "color",
// "bgColor",
// "fontSize",
// "fontFamily",
// "lineHeight",
// "uploadImage",
// // "emotion",
// // "redo",
// // "undo",
// ],
};
const editorConfig = {
placeholder: "请输入内容...",
autoFocus: props.focus,
maxLength: 140,
readOnly: props.readOnly,
MENU_CONF: {
uploadImage: {
async customUpload(file, insertFn) {
const fd = new FormData();
fd.append("file", file);
const resp = await request({
url: "/common/upload",
method: "post",
data: fd,
headers: {
Authorization: "Bearer " + getToken(),
},
});
insertFn(resp.url, "", resp.url);
},
},
},
};
onMounted(() => {
// console.log(editorRef.value.getConfig());
@ -110,6 +130,7 @@ export default {
const handleCreated = (editor) => {
editorRef.value = editor; // 记录 editor 实例,重要!
console.log(editorRef.value.getAllMenuKeys());
};
const handleChange = (editor) => {

View File

@ -35,19 +35,19 @@ export const enterpriseOptions = [
];
// 成果成熟度 技术
export const maturityOptions = [
{ key: 1, value: "正在研发" },
{ key: 2, value: "小试阶段" },
{ key: 3, value: "通过小试" },
{ key: 4, value: "中试阶段" },
{ key: 5, value: "通过中试" },
{ key: 6, value: "可规模生产" },
{ key: "1", value: "正在研发" },
{ key: "2", value: "小试阶段" },
{ key: "3", value: "通过小试" },
{ key: "4", value: "中试阶段" },
{ key: "5", value: "通过中试" },
{ key: "6", value: "可规模生产" },
];
// 成果领先型 领先标准
export const leadOptions = [
{ key: 1, value: "国内先进" },
{ key: 2, value: "国内领先" },
{ key: 3, value: "国际先进" },
{ key: 4, value: "国际领先" },
{ key: "1", value: "国内先进" },
{ key: "2", value: "国内领先" },
{ key: "3", value: "国际先进" },
{ key: "4", value: "国际领先" },
];
// 专利类型
export const patentOptions = [
@ -57,13 +57,13 @@ export const patentOptions = [
];
// 合作模式
export const cooperationOptions = [
{ key: 101, value: "技术转让" },
{ key: 102, value: "技术许可" },
{ key: 103, value: "技术入股" },
{ key: 104, value: "合作开发" },
{ key: 105, value: "融资" },
{ key: 106, value: "公司" },
{ key: 107, value: "代理加盟" },
{ key: 108, value: "市场推广" },
{ key: 109, value: "其他" },
{ key: "101", value: "技术转让" },
{ key: "102", value: "技术许可" },
{ key: "103", value: "技术入股" },
{ key: "104", value: "合作开发" },
{ key: "105", value: "融资" },
{ key: "106", value: "公司" },
{ key: "107", value: "代理加盟" },
{ key: "108", value: "市场推广" },
{ key: "109", value: "其他" },
];

View File

@ -154,5 +154,30 @@ export function download(url, params, filename) {
downloadLoadingInstance.close();
})
}
export function customDownload(url, params, filename) {
downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
return service.get(url, params, {
baseURL:"",
transformRequest: [(params) => { return tansParams(params) }],
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob'
}).then(async (data) => {
const isLogin = await blobValidate(data);
if (isLogin) {
const blob = new Blob([data])
saveAs(blob, filename)
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
ElMessage.error(errMsg);
}
downloadLoadingInstance.close();
}).catch((r) => {
console.error(r)
ElMessage.error('下载文件出现错误,请联系管理员!')
downloadLoadingInstance.close();
})
}
export default service

View File

@ -11,9 +11,9 @@
<el-row>
<el-col :span="24">
<el-form-item label="企业名称:" prop="title">
<el-form-item label="企业名称:" prop="enterpriseName">
<el-input
v-model="form.title"
v-model="form.enterpriseName"
placeholder="请输入企业名称"
></el-input>
</el-form-item>
@ -51,7 +51,7 @@
v-model="form"
title="应用客户"
placeholder="请输入应用客户"
fieldKey="customer"
fieldKey="customers"
ref="customerForm"
:disabled="true"
/>
@ -77,9 +77,9 @@
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="成果领先性:" prop="lead_standard">
<el-form-item label="成果领先性:" prop="leadStandard">
<el-select
v-model="form.lead_standard"
v-model="form.leadStandard"
clearable
placeholder="请选择成果领先性"
>
@ -98,7 +98,7 @@
<el-col :span="24">
<el-form-item label="合作模式:">
<el-select
v-model="form.cooperation_mode"
v-model="form.cooperationMode"
clearable
placeholder="请选择合作模式"
>
@ -149,7 +149,13 @@
<el-row>
<el-col :span="12">
<el-form-item label="产品图片:" prop="image">
<ImageUpload v-model="form.image" :limit="1" :disabled="true" />
<!-- <ImageUpload v-model="form.image" :limit="1" :disabled="true" /> -->
<el-link
:disabled="!form.image"
type="primary"
@click="downloadProductImage"
>下载产品图片</el-link
>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
@ -163,17 +169,23 @@
</el-form-item>
</el-col> -->
</el-row>
<p>
<!-- <p>
<b>图片材料上传</b>
</p>
</p> -->
<el-row>
<el-col :span="24">
<el-form-item label="成熟度证明材料:">
<FileUpload
<!-- <FileUpload
v-model="form.file"
:limit="1"
:fileType="['doc', 'xls', 'ppt', 'txt', 'pdf', 'jpg']"
/>
/> -->
<el-link
:disabled="!form.material"
type="primary"
@click="downloadProductMaterial"
>下载成熟度证明材料</el-link
>
</el-form-item>
</el-col>
</el-row>
@ -201,6 +213,7 @@ import {
} from "@/utils/parameter";
import { useRoute, useRouter } from "vue-router";
import { ElMessage } from "element-plus";
import { customDownload } from "@/utils/request";
// import WangEditor from "@/components/WangEditor/index.vue";
// const isAdd = ref(false);
const route = useRoute();
@ -231,6 +244,18 @@ const getDetail = async (id) => {
if (route.query.id) {
getDetail(route.query.id);
}
const downloadProductImage = () => {
const filename =
form.value.image.split("/")[form.value.image.split("/").length - 1];
customDownload(form.value.image, {}, filename);
};
const downloadProductMaterial = () => {
const filename =
form.value.material.split("/")[form.value.material.split("/").length - 1];
const baseUrl = import.meta.env.VITE_APP_BASE_API;
customDownload(`/file${form.value.material}`, {}, filename);
};
const submitForm = async (status) => {
await updateEnterpriseApprovalProduct({ ...form.value, status });
let successMessage;

View File

@ -51,7 +51,7 @@
<el-table-column
label="所属企业"
align="center"
prop="enterprise"
prop="enterpriseName"
></el-table-column>
<el-table-column label="站点" align="center">
<template #default="{ row }">

View File

@ -0,0 +1,132 @@
<!-- 企业需求弹框 -->
<template>
<el-dialog title="基本信息" v-model="isShow">
<el-form label-width="150px">
<el-form-item label="所属企业">
<el-input placeholder="请输入所属企业"></el-input>
</el-form-item>
<el-form-item label="所属需求名称">
<el-input
placeholder="请输入所属需求名称"
v-model="modelValue.title"
></el-input>
</el-form-item>
<el-form-item label="需求描述">
<Editor v-model="modelValue.introduce"></Editor>
</el-form-item>
<el-form-item label="行业分类">
<el-select placeholder="请输入" style="width: 100px">
<el-option></el-option>
</el-select>
<el-select placeholder="请输入" style="width: 100px">
<el-option></el-option>
</el-select>
<el-select placeholder="请输入" style="width: 100px">
<el-option></el-option>
</el-select>
<el-select placeholder="请输入" style="width: 100px">
<el-option></el-option>
</el-select>
</el-form-item>
<el-form-item label="需求类别">
<el-checkbox-group v-model="modelValue.kinds">
<el-checkbox
v-for="item in checkList"
:key="item.id"
:label="item.name"
>{{ item.name }}</el-checkbox
>
</el-checkbox-group>
<!-- <el-checkbox-group v-model="checkList">
<el-checkbox label="成果难题解决" />
<el-checkbox label="成果储备/项目投资" />
<el-checkbox label="新成果开发" />
<el-checkbox label="校验检测" />
<el-checkbox label="其他" />
</el-checkbox-group> -->
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item
label="成果需求预算:"
:prop="modelValue.budgetMode == 1 ? 'budget' : ''"
>
<el-input
v-model="modelValue.budget"
oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')"
placeholder="请输入技术需求预算"
>
<template #append>万元</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="50px">
<el-checkbox
false-label="1"
true-label="2"
v-model="modelValue.budgetMode"
>面议</el-checkbox
>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="截至时间">
<el-input placeholder="请输入"></el-input>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="需求联系人">
<el-input placeholder="请输入"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人手机号码">
<el-input placeholder="请输入"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="想合作的企业及模式">
<el-input placeholder="请输入"></el-input>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button type="primary">驳回</el-button>
<el-button type="primary">通过需求</el-button>
</el-row>
</el-dialog>
</template>
<script setup>
import Editor from "@/components/WangEditor";
import { ref, toRefs } from "vue";
const props = defineProps({
isShow: {
type: Boolean,
required: true,
},
modelValue: {
type: Object,
required: true,
},
});
const { isShow, modelValue } = toRefs(props);
const checkList = reactive([
{
id: 1,
name: "成果推广",
},
{
id: 2,
name: "关键成果解决",
},
{
id: 3,
name: "对接专家院士",
},
{
id: 4,
name: "上市辅导",
},
]);
</script>
<style></style>

View File

@ -1,76 +1,200 @@
<!-- 企业需求弹框 -->
<template>
<el-dialog title="基本信息" v-model="isShow">
<el-form label-width="150px">
<el-form-item label="所属企业">
<el-input placeholder=""></el-input>
<el-dialog title="基本信息" v-model="isShow">
<el-form ref="formRef" :model="modelValue" :label-width="labelWidth + 'px'">
<p><b>基本信息</b></p>
<el-row>
<el-col :span="24">
<el-form-item label="成果需求名称:" prop="title">
<el-input v-model="modelValue.title"></el-input>
</el-form-item>
<el-form-item label="所属需求名称">
<el-input placeholder=""></el-input>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<!-- <el-checkbox label="0" @change="handleCheck">其他</el-checkbox> -->
<el-form-item label="需求类别:">
<el-checkbox-group v-model="modelValue.kinds">
<el-checkbox
v-for="item in checkList"
:key="item.id"
:label="item.name"
>{{ item.name }}</el-checkbox
>
</el-checkbox-group>
<!-- <el-row :gutter="20">
<el-col :span="20">
<el-input
v-model="checkInput"
placeholder="请输入需求类别"
></el-input>
</el-col>
<el-col :span="4">
<el-button type="primary" @click="addCheck">添加</el-button>
</el-col>
</el-row> -->
</el-form-item>
<el-form-item label="需求描述">
<Editor></Editor>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="需求描述:" prop="introduce">
<!-- <Editor v-model="modelValue.add" :minHeight="150" /> -->
<wangEditor
v-model="modelValue.introduce"
width="100%"
min-height="150px"
></wangEditor>
</el-form-item>
<el-form-item label="行业分类">
<el-select placeholder="" style="width: 100px;">
<el-option></el-option>
</el-select>
<el-select placeholder="" style="width: 100px;">
<el-option></el-option>
</el-select>
<el-select placeholder="" style="width: 100px;">
<el-option></el-option>
</el-select>
<el-select placeholder="" style="width: 100px;">
<el-option></el-option>
</el-select>
</el-col>
</el-row>
<!-- <CityOptions
v-model="form"
:labelWidth="labelWidth"
ref="cityForm"
/> -->
<FieldOptions
v-model="modelValue"
:labelWidth="labelWidth"
ref="fieldFormRef"
/>
<el-row>
<el-col :span="12">
<el-form-item
label="成果需求预算:"
:prop="modelValue.budgetMode == 1 ? 'budget' : ''"
>
<el-input
v-model="modelValue.budget"
oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')"
placeholder="请输入技术需求预算"
>
<template #append>万元</template>
</el-input>
</el-form-item>
<el-form-item label="需求类别">
<el-checkbox-group v-model="checkList">
<el-checkbox label="成果难题解决" />
<el-checkbox label="成果储备/项目投资" />
<el-checkbox label="新成果开发" />
<el-checkbox label="校验检测" />
<el-checkbox label="其他" />
</el-checkbox-group>
</el-col>
<el-col :span="12">
<el-form-item label-width="50px">
<el-checkbox
false-label="1"
true-label="2"
v-model="modelValue.budgetMode"
>面议</el-checkbox
>
</el-form-item>
<el-form-item label="成果需求预算">
<el-input style="width: 200px;" placeholder=""></el-input>万元&nbsp;<input type="checkbox">面议
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="截止时间:" prop="deadline">
<el-date-picker
style="width: 100%"
v-model="modelValue.deadline"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择截止时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="截至时间">
<el-input placeholder=""></el-input>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="需求联系人:" prop="name">
<el-input
v-model="modelValue.name"
placeholder="请输入需求联系人"
></el-input>
</el-form-item>
<el-row >
<el-col :span="12">
<el-form-item label="需求联系人">
<el-input placeholder=""></el-input>
</el-col>
<el-col :span="12">
<el-form-item label="联系人手机号:" prop="mobile">
<el-input
v-model="modelValue.mobile"
placeholder="请输入联系人手机号"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人手机号码">
<el-input placeholder=""></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="想合作的企业及模式">
<el-input placeholder=""></el-input>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button type="primary">驳回</el-button>
<el-button type="primary">通过需求</el-button>
</el-row>
</el-dialog>
</el-col>
</el-row>
<!-- <el-row>
<el-col :span="12">
<el-form-item label="需求提交人:" prop="commitUserName">
<el-input
v-model="modelValue.commitUserName"
placeholder="请输入需求提交人"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="需求提交人手机号:" prop="commitUserPhone">
<el-input
v-model="modelValue.commitUserPhone"
placeholder="请输入需求提交人手机号"
></el-input>
</el-form-item>
</el-col>
</el-row> -->
<el-row>
<el-col :span="24">
<InputBoxAdd
:labelWidth="labelWidth"
v-model="modelValue"
title="想合作的单位及模式"
placeholder=""
fieldKey="wants"
ref="directionsFormRef"
/>
</el-col>
</el-row>
</el-form>
<el-row type="flex" justify="end">
<el-button type="primary">驳回</el-button>
<el-button type="primary">通过需求</el-button>
</el-row>
</el-dialog>
</template>
<script setup>
import Editor from '@/components/WangEditor'
import { ref } from 'vue';
const props=defineProps({
isShow:{
type:Boolean,
required:true
}
})
const checkList=ref([])
import WangEditor from "@/components/WangEditor";
import FieldOptions from "@/views/components/FieldOptions";
import InputBoxAdd from "@/views/components/InputBoxAdd";
import { ref, toRefs } from "vue";
const props = defineProps({
isShow: {
type: Boolean,
required: true,
},
modelValue: {
type: Object,
required: true,
},
});
const { isShow, modelValue } = toRefs(props);
const labelWidth = 160;
const checkList = reactive([
{
id: 1,
name: "成果推广",
},
{
id: 2,
name: "关键成果解决",
},
{
id: 3,
name: "对接专家院士",
},
{
id: 4,
name: "上市辅导",
},
]);
</script>
<style></style>

View File

@ -82,7 +82,7 @@
></el-table-column>
<el-table-column label="操作" align="center">
<template #default="{ row }">
<el-button type="text" @click="shenpi(row.id)">审批</el-button>
<el-button type="text" @click="approval(row)">审批</el-button>
</template>
</el-table-column>
</el-table>
@ -96,7 +96,7 @@
/>
<!-- 审批详情 -->
<Edialog :is-show="isShow"></Edialog>
<Edialog :is-show="isShow" v-model="demandForm"></Edialog>
</div>
</template>
<script setup>
@ -105,24 +105,35 @@ import Edialog from "../../views/components/Businessneeds/Approvaldetails.vue";
import SiteOptions from "@/views/components/SiteOptions";
import { tenantSelect } from "@/api/subPlatform/tenant";
import { ref, toRefs, defineComponent } from "vue";
import { cloneDeep } from "lodash";
const data = reactive({
queryParams: {
pageNum: 1,
pageSize: 10,
status: 0,
},
demandForm: {},
});
const siteList = ref([]);
const dataList = ref([]);
const total = ref(0);
const isShow = ref(false);
const { queryParams } = toRefs(data);
const { queryParams, demandForm } = toRefs(data);
const queryFormRef = ref();
const getList = async () => {
const resp = await businessList(queryParams.value);
dataList.value = resp.rows;
total.value = resp.total;
};
const shenpi = () => {
const approval = (row) => {
demandForm.value = cloneDeep(row);
if (!row.kinds) {
demandForm.value.kinds = row.kind?.split(",") ?? [];
}
// if (!row.industrys) {
// demandForm.value.industrys = row.;
// }
isShow.value = true;
};

View File

@ -1,27 +1,27 @@
import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import createVitePlugins from './vite/plugins'
import { defineConfig, loadEnv } from "vite";
import path from "path";
import createVitePlugins from "./vite/plugins";
// https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => {
const env = loadEnv(mode, process.cwd())
const { VITE_APP_ENV } = env
const env = loadEnv(mode, process.cwd());
const { VITE_APP_ENV } = env;
return {
// 部署生产环境和开发环境下的URL。
// 默认情况下vite 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
base: VITE_APP_ENV === 'production' ? '/' : '/',
plugins: createVitePlugins(env, command === 'build'),
base: VITE_APP_ENV === "production" ? "/" : "/",
plugins: createVitePlugins(env, command === "build"),
resolve: {
// https://cn.vitejs.dev/config/#resolve-alias
alias: {
// 设置路径
'~': path.resolve(__dirname, './'),
"~": path.resolve(__dirname, "./"),
// 设置别名
'@': path.resolve(__dirname, './src')
"@": path.resolve(__dirname, "./src"),
},
// https://cn.vitejs.dev/config/#resolve-extensions
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
},
// vite 相关配置
server: {
@ -30,30 +30,30 @@ export default defineConfig(({ mode, command }) => {
// open: true,
proxy: {
// https://cn.vitejs.dev/config/#server-proxy
'/dev-api': {
"/dev-api": {
// target: 'http://120.26.107.74:1618',
target: 'http://172.18.3.127:1618',
target: "http://101.34.131.16:1618",
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
}
}
rewrite: (p) => p.replace(/^\/dev-api/, ""),
},
},
},
//fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file
css: {
postcss: {
plugins: [
{
postcssPlugin: 'internal:charset-removal',
postcssPlugin: "internal:charset-removal",
AtRule: {
charset: (atRule) => {
if (atRule.name === 'charset') {
if (atRule.name === "charset") {
atRule.remove();
}
}
}
}
]
}
}
}
})
},
},
},
],
},
},
};
});

Binary file not shown.