This commit is contained in:
zmj 2024-01-20 16:11:37 +08:00
parent 2f27d2fcec
commit 5306746a8d
8 changed files with 259 additions and 99 deletions

View File

@ -2,7 +2,7 @@
<div>
<el-card shadow="never" class="!border-none">
<template #header>
<span class="font-extrabold text-lg">充值设置</span>
<span class="text-lg font-extrabold">充值设置</span>
</template>
<el-form :model="formData" label-width="120px">
<el-form-item label="状态">
@ -16,11 +16,7 @@
</el-form-item>
<el-form-item label="最低充值金额">
<div>
<el-input
v-model="formData.min_amount"
placeholder="请输入最低充值金额"
clearable
/>
<el-input v-model="formData.min_amount" placeholder="请输入最低充值金额" clearable />
<div class="form-tips">
最低充值金额要求不填或填0表示不限制最低充值金额
</div>

View File

@ -123,10 +123,10 @@ const setFormData = async (data: Record<any, any>) => {
}
}
//@ts-ignore
formData.date = timeFormat(formData.date, 'yyyy-mm-dd')
//@ts-ignore
formData.next_follow_date = timeFormat(formData.next_follow_date, 'yyyy-mm-dd')
// //@ts-ignore
// formData.date = timeFormat(formData.date, 'yyyy-mm-dd')
// //@ts-ignore
// formData.next_follow_date = timeFormat(formData.next_follow_date, 'yyyy-mm-dd')
}
const getDetail = async (row: Record<string, any>) => {

View File

@ -54,22 +54,8 @@
<el-input v-model="formData.demand_content" clearable placeholder="请输入需求内容" />
</el-form-item>
<el-form-item label="附件" prop="field127">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }"
:action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
</el-form-item>
</el-form>
</popup>
@ -88,6 +74,15 @@ import projectTable from "@/components/project/index.vue"
import { apiCustomerDemandAdd, apiCustomerDemandEdit, apiCustomerDemandDetail } from '@/api/customer_demand'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
//
import annexUpload from "@/components/annexUpload/index.vue"
const handleAvatarSuccess_four = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -107,29 +102,7 @@ const project_code
const custom_name
= ref('')
const formDataannex = reactive([])
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
// dialog
const showDialog = ref(false)
const customEvent = (e: any) => {

View File

@ -44,22 +44,8 @@
<el-input v-model="formData.customer_feedback" clearable placeholder="请输入客户反馈" />
</el-form-item>
<el-form-item label="附件" prop="field127">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }"
:action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
</el-form-item>
</el-form>
</popup>
@ -84,6 +70,18 @@ import customerdemand from "@/components/customerdemand/index.vue"
import { apiCustomerDemandSolutionAdd, apiCustomerDemandSolutionEdit, apiCustomerDemandSolutionDetail } from '@/api/customer_demand_solution'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
//
import annexUpload from "@/components/annexUpload/index.vue"
const handleAvatarSuccess_four = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -104,30 +102,7 @@ const custom_name
= ref('')
const customer_demand_name = ref('')
const formDataannex = reactive([])
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
// dialog
const showDialog = ref(false)
const showDialog1 = ref(false)
const customEvent = (e: any) => {

View File

@ -2,11 +2,11 @@
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-steps :active="active" align-center style="margin-bottom: 20px;">
<!-- <el-steps :active="active" align-center style="margin-bottom: 20px;">
<el-step title="项目经理提交" />
<el-step title="事业部总工审核" />
</el-steps>
</el-steps> -->
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
@ -20,7 +20,6 @@
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog2 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">

View File

@ -2,12 +2,12 @@
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-steps :active="active" align-center style="margin-bottom: 20px;">
<!-- <el-steps :active="active" align-center style="margin-bottom: 20px;">
<el-step title="项目经理" />
<el-step title="项目总监" />
<el-step title="财务总监" />
<el-step title="总经理" />
</el-steps>
</el-steps> -->
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
@ -36,8 +36,7 @@
<el-col :span="8">
<el-form-item label="合同金额(元)" prop="contract_amount"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.contract_amount" type="number" @input="contractamount" clearable
placeholder="请输入合同金额(元)" />
<el-input v-model="formData.contract_amount" type="number" clearable placeholder="请输入合同金额(元)" />
</el-form-item>
</el-col>
@ -52,7 +51,6 @@
<el-form-item label="项目利润率(%)" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_rate" clearable disabled placeholder="请输入项目利润率(%)" />
</el-form-item>
</el-col>

View File

@ -35,10 +35,10 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')
const project_code = ref('')
// const showDialog = ref(false)
// const showDialog1 = ref(false)
// const project_name = ref('')
// const project_code = ref('')
//
const popupTitle = computed(() => {

View File

@ -0,0 +1,219 @@
<template>
<el-card style="display: flex;">
<div id="main"></div>
<div id="main2"></div>
</el-card>
</template>
<script setup>
import * as echarts from 'echarts';
import { onMounted } from "vue"
var app = {};
var option;
const posList = [
'left',
'right',
'top',
'bottom',
'inside',
'insideTop',
'insideLeft',
'insideRight',
'insideBottom',
'insideTopLeft',
'insideTopRight',
'insideBottomLeft',
'insideBottomRight'
];
app.configParameters = {
rotate: {
min: -90,
max: 90
},
align: {
options: {
left: 'left',
center: 'center',
right: 'right'
}
},
verticalAlign: {
options: {
top: 'top',
middle: 'middle',
bottom: 'bottom'
}
},
position: {
options: posList.reduce(function (map, pos) {
map[pos] = pos;
return map;
}, {})
},
distance: {
min: 0,
max: 100
}
};
app.config = {
rotate: 90,
align: 'left',
verticalAlign: 'middle',
position: 'insideBottom',
distance: 15,
onChange: function () {
const labelOption = {
rotate: app.config.rotate,
align: app.config.align,
verticalAlign: app.config.verticalAlign,
position: app.config.position,
distance: app.config.distance
};
myChart.setOption({
series: [
{
label: labelOption
},
{
label: labelOption
},
{
label: labelOption
},
{
label: labelOption
}
]
});
}
};
const labelOption = {
show: true,
rich: {
name: {}
}
};
option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {
data: ['Forest', 'Steppe', 'Desert', 'Wetland']
},
toolbox: {
show: true,
orient: 'vertical',
left: 'right',
top: 'center',
},
xAxis: [
{
type: 'category',
axisTick: { show: false },
data: ['2012', '2013', '2014', '2015', '2016']
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '名称',
type: 'bar',
barGap: 0,
label: labelOption,
emphasis: {
focus: 'series'
},
data: [320, 332, 301, 334, 390]
},
// {
// name: 'Steppe',
// type: 'bar',
// label: labelOption,
// emphasis: {
// focus: 'series'
// },
// data: [220, 182, 191, 234, 290]
// },
// {
// name: 'Desert',
// type: 'bar',
// label: labelOption,
// emphasis: {
// focus: 'series'
// },
// data: [150, 232, 201, 154, 190]
// },
// {
// name: 'Wetland',
// type: 'bar',
// label: labelOption,
// emphasis: {
// focus: 'series'
// },
// data: [98, 77, 101, 99, 40]
// }
]
};
let option2 = {
title: {
text: '标题',
subtext: '副标题',
left: 'center'
},
tooltip: {
trigger: 'item'
},
series: [
{
name: 'Access From',
type: 'pie',
radius: '50%',
data: [
{ value: 1048, name: 'Search Engine' },
{ value: 735, name: 'Direct' },
{ value: 580, name: 'Email' },
{ value: 484, name: 'Union Ads' },
{ value: 300, name: 'Video Ads' }
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
onMounted(() => {
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
option && myChart.setOption(option);
var chartDom2 = document.getElementById('main2');
var myChart2 = echarts.init(chartDom2);
option2 && myChart2.setOption(option2);
})
</script>
<style lang="scss" scoped>
#main,
#main2 {
width: 300px;
height: 300px;
}
</style>