-
-
+
+
+
+
+
+
智能制造公共服务平台
+
@@ -164,4 +198,24 @@ onBeforeUnmount(() => {
:deep(.el-input-group__append, .el-input-group__prepend) {
padding: 0;
}
+
+.login-btn {
+ font-weight: 600;
+ // font-family: "PingFang SC";
+ color: #fff;
+}
+
+.btn-color {
+ color: #1c0d82;
+}
+
+.btn-color:hover {
+ color: #1c0d82;
+ opacity: 0.5;
+}
+
+// :deep(.el-button) {
+// font-weight: bold;
+// color: #fff;
+// }
diff --git a/src/views/login/utils/static.ts b/src/views/login/utils/static.ts
index 18268d8..12373f9 100644
--- a/src/views/login/utils/static.ts
+++ b/src/views/login/utils/static.ts
@@ -1,5 +1,7 @@
import bg from "@/assets/login/bg.png";
+import leftLogo from "@/assets/login/leftLogo.png";
+import sst from "@/assets/login/sst.png";
import avatar from "@/assets/login/avatar.svg?component";
import illustration from "@/assets/login/illustration.svg?component";
-export { bg, avatar, illustration };
+export { bg, avatar, illustration, leftLogo, sst };
diff --git a/src/views/myAlgorithm/components/Card.vue b/src/views/myAlgorithm/components/Card.vue
new file mode 100644
index 0000000..a895d0e
--- /dev/null
+++ b/src/views/myAlgorithm/components/Card.vue
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ product.name }}
+
+
+
+
项目负责:
+
联系方式:
+
模型应用数:
+
算力消耗:
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/myAlgorithm/components/DialogForm.vue b/src/views/myAlgorithm/components/DialogForm.vue
new file mode 100644
index 0000000..1f10718
--- /dev/null
+++ b/src/views/myAlgorithm/components/DialogForm.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+ 确定
+
+
+
+
diff --git a/src/views/myAlgorithm/index.vue b/src/views/myAlgorithm/index.vue
new file mode 100644
index 0000000..30944ad
--- /dev/null
+++ b/src/views/myAlgorithm/index.vue
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/project/details/components/Bar.vue b/src/views/project/details/components/Bar.vue
index 4fbe841..902f4f3 100644
--- a/src/views/project/details/components/Bar.vue
+++ b/src/views/project/details/components/Bar.vue
@@ -22,6 +22,14 @@ const { setOptions, resize } = useECharts(barChartRef as Ref
, {
setOptions(
{
+ title: {
+ text: "缺陷监测数据",
+ left: "left",
+ textStyle: {
+ fontSize: 14,
+ color: "#333"
+ }
+ },
tooltip: {
trigger: "axis",
axisPointer: {
@@ -33,11 +41,12 @@ setOptions(
right: "30px",
left: "40px"
},
- legend: {
- //@ts-expect-error
- right: true,
- data: ["watchers", "fork", "star"]
- },
+ // legend: {
+ // //@ts-expect-error
+ // right: true,
+ // // data: ["star"]
+ // // data: ["watchers", "fork", "star"]
+ // },
xAxis: [
{
type: "category",
@@ -49,7 +58,7 @@ setOptions(
// width: "70",
// overflow: "truncate"
},
- data: ["2021", "2022", "2023"],
+ data: ["10.15", "10.16", "10.17", "10.18", "10.19"],
triggerEvent: true
}
],
@@ -108,30 +117,30 @@ setOptions(
{
name: "star",
type: "bar",
- barWidth: "15%",
+ barWidth: "20%",
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
- color: "#409EFF"
+ color: "#0F00B3"
},
{
offset: 1,
- color: "#53a7ff"
+ color: "#0F00B3"
}
])
},
- data: [1450, 3620, 7500]
+ data: [3620, 7500, 1450, 3620, 7500]
},
{
//折线(右边数据)
name: "总量",
type: "line",
yAxisIndex: 1,
- data: [160, 246, 450],
+ data: [160, 246, 450, 160, 246],
itemStyle: {
//折线颜色
- color: "#2A47F8"
+ color: "#FF7B01"
}
}
],
diff --git a/src/views/project/details/components/BarDetail.vue b/src/views/project/details/components/BarDetail.vue
new file mode 100644
index 0000000..b74fa9f
--- /dev/null
+++ b/src/views/project/details/components/BarDetail.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
diff --git a/src/views/project/details/components/DialogForm.vue b/src/views/project/details/components/DialogForm.vue
index 4623ed2..de3c7a8 100644
--- a/src/views/project/details/components/DialogForm.vue
+++ b/src/views/project/details/components/DialogForm.vue
@@ -3,6 +3,7 @@ import { ref, watch } from "vue";
import { message } from "@/utils/message";
import { FormInstance } from "element-plus";
import ReCol from "@/components/ReCol";
+import logon from "@/assets/static/logo_icon.png";
// const SELECT_OPTIONS = [
// { label: "网关", value: 1 },
@@ -33,64 +34,64 @@ const title = ref("添加检查项模型");
const activeStep = ref(0);
// const textareaValue = ref("");
-const tableData = [
- {
- date: "2016-05-03",
- name: "Tom",
- state: "California",
- city: "Los Angeles",
- address: "No. 189, Grove St, Los Angeles",
- zip: "CA 90036"
- },
- {
- date: "2016-05-02",
- name: "Tom",
- state: "California",
- city: "Los Angeles",
- address: "No. 189, Grove St, Los Angeles",
- zip: "CA 90036"
- },
- {
- date: "2016-05-04",
- name: "Tom",
- state: "California",
- city: "Los Angeles",
- address: "No. 189, Grove St, Los Angeles",
- zip: "CA 90036"
- },
- {
- date: "2016-05-01",
- name: "Tom",
- state: "California",
- city: "Los Angeles",
- address: "No. 189, Grove St, Los Angeles",
- zip: "CA 90036"
- },
- {
- date: "2016-05-08",
- name: "Tom",
- state: "California",
- city: "Los Angeles",
- address: "No. 189, Grove St, Los Angeles",
- zip: "CA 90036"
- },
- {
- date: "2016-05-06",
- name: "Tom",
- state: "California",
- city: "Los Angeles",
- address: "No. 189, Grove St, Los Angeles",
- zip: "CA 90036"
- },
- {
- date: "2016-05-07",
- name: "Tom",
- state: "California",
- city: "Los Angeles",
- address: "No. 189, Grove St, Los Angeles",
- zip: "CA 90036"
- }
-];
+// const tableData = [
+// {
+// date: "2016-05-03",
+// name: "Tom",
+// state: "California",
+// city: "Los Angeles",
+// address: "No. 189, Grove St, Los Angeles",
+// zip: "CA 90036"
+// },
+// {
+// date: "2016-05-02",
+// name: "Tom",
+// state: "California",
+// city: "Los Angeles",
+// address: "No. 189, Grove St, Los Angeles",
+// zip: "CA 90036"
+// },
+// {
+// date: "2016-05-04",
+// name: "Tom",
+// state: "California",
+// city: "Los Angeles",
+// address: "No. 189, Grove St, Los Angeles",
+// zip: "CA 90036"
+// },
+// {
+// date: "2016-05-01",
+// name: "Tom",
+// state: "California",
+// city: "Los Angeles",
+// address: "No. 189, Grove St, Los Angeles",
+// zip: "CA 90036"
+// },
+// {
+// date: "2016-05-08",
+// name: "Tom",
+// state: "California",
+// city: "Los Angeles",
+// address: "No. 189, Grove St, Los Angeles",
+// zip: "CA 90036"
+// },
+// {
+// date: "2016-05-06",
+// name: "Tom",
+// state: "California",
+// city: "Los Angeles",
+// address: "No. 189, Grove St, Los Angeles",
+// zip: "CA 90036"
+// },
+// {
+// date: "2016-05-07",
+// name: "Tom",
+// state: "California",
+// city: "Los Angeles",
+// address: "No. 189, Grove St, Los Angeles",
+// zip: "CA 90036"
+// }
+// ];
const submitForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
@@ -118,6 +119,8 @@ const nextStep = () => {
if (activeStep.value++ > 2) activeStep.value = 0;
};
+const checked = ref(false);
+
const emit = defineEmits(["update:visible"]);
watch(
() => formVisible.value,
@@ -149,11 +152,12 @@ const rules = {
-
+
-
-
-
+
+
@@ -172,40 +175,63 @@ const rules = {
ref="ruleFormRef"
:model="formData"
:rules="rules"
- label-width="100px"
+ label-position="top"
+ label-width="160px"
v-if="activeStep == 0"
>
-
-
-
+
+
+ placeholder="请选择输入源"
+ :style="{ width: '100%' }"
+ >
+
+
+
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ {{
+ "苏胜天文字OCR识别模型"
+ }}
+ {{
+ "经典算法"
+ }}
+
+
+ {{ "v1.6.25" }}
+
+
+ 更新时间:{{ "2023.09.10" }}
+
+
+ 提供方:{{ "v1.6.25" }}
+
+
+
+
@@ -213,82 +239,173 @@ const rules = {
ref="ruleFormRef"
:model="formData"
:rules="rules"
- label-width="160px"
+ label-position="top"
v-if="activeStep == 1"
>
-
-
-
+
+
+
-
-
+
+
+
-
-
+
+
+
-
-
-
-
+
+
-
-
-
+
+
-
-
-
-
+
+
+
-
diff --git a/src/views/project/details/components/ModelCard.vue b/src/views/project/details/components/ModelCard.vue
index 65d438b..5fb083b 100644
--- a/src/views/project/details/components/ModelCard.vue
+++ b/src/views/project/details/components/ModelCard.vue
@@ -1,6 +1,8 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
@@ -213,10 +260,10 @@ console.log(props);
.list-item {
display: flex;
flex-direction: column;
- height: 300px;
+ // height: 300px;
padding: 10px;
margin-bottom: 10px;
- background: #fafafa;
+ // background: #fafafa;
}
// .list-item + .list-item {
// margin-top: 10px;
@@ -234,8 +281,18 @@ console.log(props);
.list-item .list-item-content .list-item-content-left {
display: flex;
- flex-wrap: wrap;
- width: 500px;
+ flex-direction: column;
+ width: 60%;
+}
+
+.list-item
+ .list-item-content
+ .list-item-content-left
+ .list-item-content-left-top {
+ display: flex;
+ justify-content: center;
+ // flex-wrap: wrap;
+ width: 100%;
margin-right: 50px;
}
@@ -246,6 +303,17 @@ console.log(props);
flex: 50%;
}
+.list-item
+ .list-item-content
+ .list-item-content-left
+ .list-item-content-left-bottom {
+ display: flex;
+ justify-content: space-around;
+ // flex-wrap: wrap;
+ width: 100%;
+ margin-right: 50px;
+}
+
.list-item .list-item-content .list-item-content-right {
display: flex;
flex: 1;
@@ -302,4 +370,27 @@ console.log(props);
align-items: center;
justify-content: space-around;
}
+
+.list-item .list-item-content .list-item-content-box,
+.list-item .list-item-content .list-item-content-box-pic {
+ box-sizing: border-box;
+ flex: 1;
+ height: 260px;
+ padding: 16px;
+ background: #f2f6ff;
+}
+
+.list-item .list-item-content .list-item-content-box:nth-of-type(2) {
+ margin: 0 16px;
+}
+
+.list-item
+ .list-item-content
+ .list-item-content-box
+ .list-item-content-box-pic
+ .list-item-content-box-top {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
diff --git a/src/views/project/details/components/Pie.vue b/src/views/project/details/components/Pie.vue
new file mode 100644
index 0000000..45b8e95
--- /dev/null
+++ b/src/views/project/details/components/Pie.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
diff --git a/src/views/project/details/components/Radar.vue b/src/views/project/details/components/Radar.vue
new file mode 100644
index 0000000..be4b6ed
--- /dev/null
+++ b/src/views/project/details/components/Radar.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
diff --git a/src/views/project/details/index.vue b/src/views/project/details/index.vue
index b04dd4a..8c80b35 100644
--- a/src/views/project/details/index.vue
+++ b/src/views/project/details/index.vue
@@ -4,10 +4,13 @@ import { isEmpty } from "@pureadmin/utils";
import { ref, onMounted, computed } from "vue";
import { useWindowSize } from "@vueuse/core";
import { useRoute } from "vue-router";
-import { useRenderIcon } from "@/components/ReIcon/src/hooks";
+// import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import ModelCard from "./components/ModelCard.vue";
import Bar from "./components/Bar.vue";
-import AddFill from "@iconify-icons/ri/add-circle-line";
+import Pie from "./components/Pie.vue";
+// import AddFill from "@iconify-icons/ri/add-circle-line";
+import { Back } from "@element-plus/icons-vue";
+import emptyPic from "@/assets/static/project_empty.png";
defineOptions({
name: "ProjectDetails"
});
@@ -26,10 +29,10 @@ const INITIAL_DATA = {
const formDialogVisible = ref(false);
const formData = ref({ ...INITIAL_DATA });
const { height } = useWindowSize();
-const count = ref(5);
+const count = ref(2);
const echartsLoading = ref(true);
const loading = ref(false);
-const noMore = computed(() => count.value >= 10);
+const noMore = computed(() => count.value >= 5);
const disabled = computed(() => loading.value || noMore.value);
const load = () => {
loading.value = true;
@@ -49,57 +52,74 @@ onMounted(() => {
+
+ 项目详情
+
-
+
项目信息
-
-
-
项目名称:{{ "文字识别" }}
-
负责人:{{ "识别线主管" }}
-
联系方式:{{ "13811111111" }}
+
+ 项目名称:{{ "文字识别" }}
+ 负责人:{{ "识别线主管" }}
+ 联系方式:{{ "13811111111" }}
+
+
+
-
-
-
{{ "GPU占用(核)" }}
+
+
+
+
+
+
-
-
-
-
-
- 模型列表
+ 算法应用
新建模型新建算法应用
+
+
+ 新建算法应用
+
+
{
// height: 720px;
text-align: center;
}
+
+.btn-style {
+ // font-family: "PingFang SC";
+ font-size: 20px;
+ font-weight: 400;
+ color: #333;
+
+ &:hover {
+ color: #333;
+ opacity: 0.5;
+ }
+}
+
+.row-bg {
+ margin-right: 0 !important;
+ margin-left: 0 !important;
+}
+
+.col-bg {
+ background: #f2f6ff;
+}
+
+.project-info {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+
+ .project-info-box {
+ display: flex;
+ flex: 1;
+ align-items: center;
+ justify-content: center;
+ padding: 20px;
+ margin-right: 16px;
+ background: #f2f6ff;
+ border-radius: 4px;
+
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+}
diff --git a/src/views/project/list/components/Card.vue b/src/views/project/list/components/Card.vue
index a895d0e..52d5d1c 100644
--- a/src/views/project/list/components/Card.vue
+++ b/src/views/project/list/components/Card.vue
@@ -1,11 +1,8 @@
@@ -60,66 +54,45 @@ const cardInfoClass = computed(() => [
class="list-card-item_detail bg-bg_color"
@click="handleClickDetail(product)"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ product.name }}
-
-
-
-
项目负责:
-
联系方式:
-
模型应用数:
-
算力消耗:
-
+
+
![]()
+
+
+
+
+ {{ product.name }}
+
+
+
+
+
+
+
+
+ 编辑项目
+
+
+ 删除项目
+
+
+
+
-
-
-
-
-
-
-
-
-
- 修改
-
-
- 删除
-
-
-
-
-
-
-
+
+
+ 项目负责人:{{ product.leader }}
+
+
+ 联系方式:{{ product.phone }}
+
+
+ 模型应用数:{{ product.modelNum }}
+
+
@@ -131,38 +104,28 @@ const cardInfoClass = computed(() => [
margin-bottom: 12px;
overflow: hidden;
cursor: pointer;
+ border: 1px solid #e0e0e0;
border-radius: 3px;
+ &_content {
+ padding: 16px 16px 8px;
+ }
+
&_detail {
flex: 1;
min-height: 140px;
- padding: 24px 32px;
&--logo {
display: flex;
align-items: center;
justify-content: center;
- width: 250px;
- height: 150px;
- font-size: 32px;
- color: #0052d9;
- background: #e0ebff;
- // border-radius: 50%;
+ width: 100%;
&__disabled {
color: #a1c4ff;
}
}
- &--info {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- justify-content: space-evenly;
- width: 200px;
- height: 100%;
- }
-
&--operation {
display: flex;
height: 100%;
@@ -173,46 +136,33 @@ const cardInfoClass = computed(() => [
}
&--name {
- margin: 24px 0 8px;
- font-size: 16px;
- font-weight: 400;
- }
-
- &--title {
- font-size: 24px;
- font-weight: 400;
- color: #a1c4ff;
- }
-
- &--content {
+ margin-bottom: 8px;
font-size: 16px;
font-weight: 400;
- color: #000;
+ // font-family: "PingFang SC";
+ color: #333;
}
&--desc {
display: -webkit-box;
- height: 40px;
- margin-bottom: 24px;
- overflow: hidden;
- font-size: 12px;
- line-height: 20px;
- text-overflow: ellipsis;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
+ margin-bottom: 8px;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 22px;
+ // font-family: "Roboto";
+ color: #666;
}
}
- &__disabled {
- .list-card-item_detail--name,
- .list-card-item_detail--title,
- .list-card-item_detail--desc {
- color: var(--el-text-color-disabled);
- }
+ // &__disabled {
+ // .list-card-item_detail--name,
+ // .list-card-item_detail--desc {
+ // // color: var(--el-text-color-disabled);
+ // }
- .list-card-item_detail--operation--tag {
- color: #bababa;
- }
- }
+ // .list-card-item_detail--operation--tag {
+ // // color: #bababa;
+ // }
+ // }
}
diff --git a/src/views/project/list/components/DialogForm.vue b/src/views/project/list/components/DialogForm.vue
index 1f10718..d437d17 100644
--- a/src/views/project/list/components/DialogForm.vue
+++ b/src/views/project/list/components/DialogForm.vue
@@ -34,9 +34,13 @@ const submitForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
await formEl.validate(valid => {
if (valid) {
+ const data = formData;
+ console.log(data);
+
message("提交成功", { type: "success" });
+ emit("submit-form", data);
formVisible.value = false;
- resetForm(formEl);
+ formData.value = {};
}
});
};
@@ -51,7 +55,7 @@ const closeDialog = () => {
resetForm(ruleFormRef.value);
};
-const emit = defineEmits(["update:visible"]);
+const emit = defineEmits(["update:visible", "submit-form"]);
watch(
() => formVisible.value,
val => {
@@ -74,7 +78,7 @@ watch(
);
const rules = {
- name: [{ required: true, message: "请输入产品名称", trigger: "blur" }]
+ name: [{ required: true, message: "请输入项目名称", trigger: "blur" }]
};
@@ -82,37 +86,28 @@ const rules = {
-
+
-
+
-
+
-
+
- 取消
-
+ 取消
+
确定
+
diff --git a/src/views/project/list/index.vue b/src/views/project/list/index.vue
index c1905cf..520003b 100644
--- a/src/views/project/list/index.vue
+++ b/src/views/project/list/index.vue
@@ -3,14 +3,16 @@ import Card from "./components/Card.vue";
import { getCardList } from "@/api/list";
import { message } from "@/utils/message";
import { ElMessageBox } from "element-plus";
-import { ref, onMounted, nextTick } from "vue";
+import { ref, onMounted, nextTick, markRaw } from "vue";
import dialogForm from "./components/DialogForm.vue";
import { useRouter } from "vue-router";
import { isString } from "@pureadmin/utils";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
-import { useRenderIcon } from "@/components/ReIcon/src/hooks";
+// import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import Search from "@iconify-icons/ep/search";
-import AddFill from "@iconify-icons/ri/add-circle-line";
+// import AddFill from "@iconify-icons/ri/add-circle-line";
+import emptyPic from "@/assets/static/project_empty.png";
+import { QuestionFilled } from "@element-plus/icons-vue";
defineOptions({
name: "ProjectList"
@@ -76,15 +78,25 @@ const onCurrentChange = (current: number) => {
};
const handleDeleteItem = product => {
ElMessageBox.confirm(
- product
- ? `确认删除后${product.name}的所有产品信息将被清空, 且无法恢复`
- : "",
- "提示",
+ product ? `确定删除这个项目吗,删除后将无法找回,请谨慎操作` : "",
+ "确定删除这个项目吗?",
{
- type: "warning"
+ showClose: false,
+ type: "warning",
+ icon: markRaw(QuestionFilled),
+ customClass: "msg-box-style",
+ confirmButtonClass: "btn-custom-confirm",
+ cancelButtonClass: "btn-custom-cancel"
}
)
.then(() => {
+ productList.value.forEach((item, index) => {
+ console.log(item.type);
+ if (item.type == product.type) {
+ productList.value.splice(index, 1);
+ }
+ });
+ pagination.value.total = productList.value.length;
message("删除成功", { type: "success" });
})
.catch(() => {});
@@ -113,19 +125,35 @@ const handleProductDetail = product => {
}
});
router.push({ name: "ProjectDetails", query: product });
- // formDialogVisible.value = true;
- // nextTick(() => {
- // formData.value = { ...product, status: product?.isSetup ? "1" : "0" };
- // });
+};
+const addProject = product => {
+ console.log(product.value);
+
+ if (!product.value.type) {
+ const data = product.value;
+ data.type = 1;
+ productList.value.unshift(data);
+ } else {
+ productList.value.forEach((item, index) => {
+ if (item.type == product.value.type) {
+ Object.assign(productList.value[index], product.value);
+ }
+ });
+ // Object.assign(productList.value, product.value);
+ }
+ pagination.value.total = productList.value.length;
};
+
项目列表
新建项目
@@ -151,8 +179,14 @@ const handleProductDetail = product => {
:element-loading-svg="svg"
element-loading-svg-view-box="-10, -10, 50, 50"
>
-
-
-
-
+
+
-
-
-
-
+ 新建项目
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+