feat: input、textare组件替换
This commit is contained in:
@ -1,8 +1,9 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import { Button, Checkbox } from 'ant-design-vue';
|
import { Button, Checkbox, Input } from 'ant-design-vue';
|
||||||
import { Input, Table, TableColumn, Pagination, Tooltip, Notification } from '@arco-design/web-vue';
|
import { Table, TableColumn, Pagination, Tooltip, Notification } from '@arco-design/web-vue';
|
||||||
import { IconSearch, IconClose, IconQuestionCircle } from '@arco-design/web-vue/es/icon';
|
import { IconSearch, IconClose, IconQuestionCircle } from '@arco-design/web-vue/es/icon';
|
||||||
|
|
||||||
import NoData from '@/components/no-data';
|
import NoData from '@/components/no-data';
|
||||||
import { getTask, postRedoTask, postBatchDownload, batchQueryTaskStatus } from '@/api/all/common';
|
import { getTask, postRedoTask, postBatchDownload, batchQueryTaskStatus } from '@/api/all/common';
|
||||||
import { INITIAL_FORM, TABLE_COLUMNS } from './constants';
|
import { INITIAL_FORM, TABLE_COLUMNS } from './constants';
|
||||||
@ -209,11 +210,11 @@ export default {
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">操作人员</span>
|
<span class="label">操作人员</span>
|
||||||
<Input
|
<Input
|
||||||
v-model={query.value.operator_name}
|
v-model:value={query.value.operator_name}
|
||||||
class="w-240px"
|
class="w-240px"
|
||||||
placeholder="请输入操作人员"
|
placeholder="请输入操作人员"
|
||||||
size="medium"
|
size="middle"
|
||||||
allow-clear
|
allowClear
|
||||||
onChange={handleSearch}
|
onChange={handleSearch}
|
||||||
v-slots={{
|
v-slots={{
|
||||||
prefix: () => <IconSearch />,
|
prefix: () => <IconSearch />,
|
||||||
@ -223,11 +224,11 @@ export default {
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">所属模块</span>
|
<span class="label">所属模块</span>
|
||||||
<Input
|
<Input
|
||||||
v-model={query.value.module}
|
v-model:value={query.value.module}
|
||||||
class="w-240px"
|
class="w-240px"
|
||||||
placeholder="请输入所属模块"
|
placeholder="请输入所属模块"
|
||||||
size="medium"
|
size="middle"
|
||||||
allow-clear
|
allowClear
|
||||||
onChange={handleSearch}
|
onChange={handleSearch}
|
||||||
v-slots={{
|
v-slots={{
|
||||||
prefix: () => <IconSearch />,
|
prefix: () => <IconSearch />,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button } from 'ant-design-vue';
|
||||||
import { Input, Table, TableColumn, Pagination, Tooltip, Notification } from '@arco-design/web-vue';
|
import { Table, TableColumn, Pagination, Tooltip, Notification } from '@arco-design/web-vue';
|
||||||
import { IconSearch, IconClose, IconQuestionCircle } from '@arco-design/web-vue/es/icon';
|
import { IconSearch, IconClose, IconQuestionCircle } from '@arco-design/web-vue/es/icon';
|
||||||
import NoData from '@/components/no-data';
|
import NoData from '@/components/no-data';
|
||||||
import { getTask } from '@/api/all/common';
|
import { getTask } from '@/api/all/common';
|
||||||
|
|||||||
@ -6,9 +6,9 @@
|
|||||||
padding: 0 12px;
|
padding: 0 12px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
color: var(--Text-4, #211F24);
|
color: var(--Text-4, #211f24);
|
||||||
font-family: $font-family-regular;
|
font-family: $font-family-regular;
|
||||||
font-size: 14px;
|
font-size: 14px !important;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
&::placeholder {
|
&::placeholder {
|
||||||
@ -24,8 +24,8 @@
|
|||||||
background-color: #fff !important;
|
background-color: #fff !important;
|
||||||
}
|
}
|
||||||
&:focus-within,
|
&:focus-within,
|
||||||
&.arco-input-focus,
|
&.ant-input-focus,
|
||||||
&.arco-textarea-focus {
|
&.ant-textarea-focus {
|
||||||
background-color: var(--color-bg-2) !important;
|
background-color: var(--color-bg-2) !important;
|
||||||
border-color: rgb(var(--primary-6)) !important;
|
border-color: rgb(var(--primary-6)) !important;
|
||||||
box-shadow: 0 0 0 0 var(--color-primary-light-2) !important;
|
box-shadow: 0 0 0 0 var(--color-primary-light-2) !important;
|
||||||
@ -38,3 +38,20 @@
|
|||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.ant-input-affix-wrapper {
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
&:focus,
|
||||||
|
&-focused {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
.ant-input {
|
||||||
|
height: 30px;
|
||||||
|
&.ant-input-lg {
|
||||||
|
height: 34px;
|
||||||
|
}
|
||||||
|
&.ant-input-sm {
|
||||||
|
height: 26px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
5
src/styles/components/ant-textarea.scss
Normal file
5
src/styles/components/ant-textarea.scss
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.ant-input-textarea {
|
||||||
|
.ant-input {
|
||||||
|
padding: 8px 12px 4px 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -19,5 +19,6 @@
|
|||||||
@import "./ant-table.scss";
|
@import "./ant-table.scss";
|
||||||
@import "./ant-checkbox.scss";
|
@import "./ant-checkbox.scss";
|
||||||
@import "./ant-input.scss";
|
@import "./ant-input.scss";
|
||||||
|
@import "./ant-textarea.scss";
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,41 +1,42 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="agent-wrap relative h-full pl-16px">
|
<div class="agent-wrap relative h-full pl-16px">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.name"
|
v-model:value="query.name"
|
||||||
@press-enter="getData()"
|
@press-enter="getData()"
|
||||||
placeholder="搜索智能体"
|
placeholder="搜索智能体"
|
||||||
size="large"
|
size="large"
|
||||||
allow-clear
|
allow-clear
|
||||||
class="absolute right-0 top-4px !w-400px"
|
class="absolute right-0 top-4px !w-400px"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search @click="getData()" />
|
<icon-search @click="getData()" />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
<div v-for="(item, index) in list" :key="index">
|
<div v-for="(item, index) in list" :key="index">
|
||||||
<p class="span-title w-fit mb-16px">{{ item.name }}</p>
|
<p class="span-title w-fit mb-16px">{{ item.name }}</p>
|
||||||
<a-row class="grid-demo" :gutter="[20, 16]" v-if="item.agent_products.length > 0">
|
<a-row class="grid-demo" :gutter="[20, 16]" v-if="item.agent_products.length > 0">
|
||||||
<a-col :xs="24"
|
<a-col :xs="24" :sm="12" :md="8" :lg="5" :xl="6" :xxl="4" v-for="(product, k) in item.agent_products" :key="k">
|
||||||
:sm="12"
|
|
||||||
:md="8"
|
|
||||||
:lg="5"
|
|
||||||
:xl="6"
|
|
||||||
:xxl="4"
|
|
||||||
v-for="(product, k) in item.agent_products" :key="k">
|
|
||||||
<div class="card-container cursor-pointer !h-252px" @click="goDetail(product?.type, product?.id)">
|
<div class="card-container cursor-pointer !h-252px" @click="goDetail(product?.type, product?.id)">
|
||||||
<div class="card-image h-120px w-100% bg-cover bg-center mb-8px" v-image-main-color="product.image_url">
|
<div class="card-image h-120px w-100% bg-cover bg-center mb-8px" v-image-main-color="product.image_url">
|
||||||
<img class="object-contain h-full w-100% " :src="product?.image_url"/>
|
<img class="object-contain h-full w-100%" :src="product?.image_url" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-content w-full">
|
<div class="card-content w-full">
|
||||||
<TextoverTips :context="product.name" class="card-title mb-4px !text-16px"/>
|
<TextOverTips :context="product.name" class="card-title mb-4px !text-16px" />
|
||||||
<TextoverTips :context="product.description" class="card-description mb-8px color-#737478 text-14px lh-22px font-400" :line="2" />
|
<TextOverTips
|
||||||
|
:context="product.description"
|
||||||
|
class="card-description mb-8px color-#737478 text-14px lh-22px font-400"
|
||||||
|
:line="2"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<div
|
<div
|
||||||
:class="['status-tag', product.type === 1 ? 'blue-tag' : 'red-tag']"
|
:class="['status-tag', product.type === 1 ? 'blue-tag' : 'red-tag']"
|
||||||
:style="{ background: product.type === 1 ? 'var(--Functional-Blue-1, #F0EDFF)' : 'var(--Functional-Red-1, #FFE9E7)' }"
|
:style="{
|
||||||
|
background:
|
||||||
|
product.type === 1 ? 'var(--Functional-Blue-1, #F0EDFF)' : 'var(--Functional-Red-1, #FFE9E7)',
|
||||||
|
}"
|
||||||
data-size="mini-20px"
|
data-size="mini-20px"
|
||||||
>
|
>
|
||||||
<SvgIcon
|
<SvgIcon
|
||||||
@ -48,7 +49,9 @@
|
|||||||
<div class="status-text">{{ product.type === 1 ? '对话式' : '工作流' }}</div>
|
<div class="status-text">{{ product.type === 1 ? '对话式' : '工作流' }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="usage-info">
|
<div class="usage-info">
|
||||||
<div class="usage-count mr-2px">{{ formatNumberShow({ value: product?.views, showExactValue: true }) }}</div>
|
<div class="usage-count mr-2px">
|
||||||
|
{{ formatNumberShow({ value: product?.views, showExactValue: true }) }}
|
||||||
|
</div>
|
||||||
<div class="usage-label">次使用</div>
|
<div class="usage-label">次使用</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -62,10 +65,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { Input } from 'ant-design-vue';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { getAgentList } from '@/api/all/agent';
|
import { getAgentList } from '@/api/all/agent';
|
||||||
import { formatNumberShow } from "@/utils/tools";
|
import { formatNumberShow } from '@/utils/tools';
|
||||||
import TextoverTips from "@/components/text-over-tips";
|
import TextOverTips from '@/components/text-over-tips';
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
|
|||||||
@ -9,16 +9,16 @@
|
|||||||
:rules="field.props.rules"
|
:rules="field.props.rules"
|
||||||
:tooltip="field.props.tip"
|
:tooltip="field.props.tip"
|
||||||
>
|
>
|
||||||
<a-input
|
<Input
|
||||||
allowClear
|
allowClear
|
||||||
v-if="field.type === 'input'"
|
v-if="field.type === 'input'"
|
||||||
v-model="formData[field.props.name]"
|
v-model:value="formData[field.props.name]"
|
||||||
:placeholder="field?.props?.placeholder"
|
:placeholder="field?.props?.placeholder"
|
||||||
/>
|
/>
|
||||||
<a-textarea
|
<TextArea
|
||||||
v-if="field.type === 'textarea'"
|
v-if="field.type === 'textarea'"
|
||||||
style="width: 500px; height: 200px"
|
style="width: 500px; height: 200px"
|
||||||
v-model="formData[field.props.name]"
|
v-model:value="formData[field.props.name]"
|
||||||
:placeholder="field?.props?.placeholder"
|
:placeholder="field?.props?.placeholder"
|
||||||
/>
|
/>
|
||||||
<!-- <a-color-picker v-if="field.type === 'color_picker'"
|
<!-- <a-color-picker v-if="field.type === 'color_picker'"
|
||||||
@ -52,7 +52,8 @@
|
|||||||
import { defineProps, defineEmits } from 'vue';
|
import { defineProps, defineEmits } from 'vue';
|
||||||
import ImageUpload from '@/components/upload/ImageUpload.vue';
|
import ImageUpload from '@/components/upload/ImageUpload.vue';
|
||||||
import FileUpload from '@/components/upload/FileUpload.vue';
|
import FileUpload from '@/components/upload/FileUpload.vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
|
const { TextArea } = Input;
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
formFields: {
|
formFields: {
|
||||||
@ -80,24 +81,25 @@ const handleSubmit = async () => {
|
|||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.form-container {
|
.form-container {
|
||||||
:deep(.arco-input-wrapper),
|
:deep(.ant-input),
|
||||||
:deep(.arco-textarea-wrapper) {
|
:deep(.ant-input:focus),
|
||||||
|
:deep(.ant-input-focused) {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
border-color: #d7d7d9;
|
border-color: #d7d7d9;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
height: 35px;
|
height: 35px;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
|
|
||||||
&:focus-within,
|
&:focus,
|
||||||
&.arco-input-focus {
|
&:focus-within {
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
border-color: rgb(var(--primary-6));
|
border-color: rgb(var(--primary-6));
|
||||||
box-shadow: 0 0 0 0 var(--color-primary-light-2);
|
box-shadow: 0 0 0 0 var(--color-primary-light-2);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&.arco-textarea-wrapper {
|
&.ant-textarea-wrapper {
|
||||||
height: 60px;
|
height: 60px;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-btn {
|
.submit-btn {
|
||||||
|
|||||||
@ -19,28 +19,25 @@
|
|||||||
<span class="text-4 color-#737478">AI营销工具</span>
|
<span class="text-4 color-#737478">AI营销工具</span>
|
||||||
<Form ref="formRef" :model="loginForm" :rules="formRules" auto-label-width class="w-320 mt-48px form-wrap">
|
<Form ref="formRef" :model="loginForm" :rules="formRules" auto-label-width class="w-320 mt-48px form-wrap">
|
||||||
<FormItem name="mobile">
|
<FormItem name="mobile">
|
||||||
<a-input
|
<Input
|
||||||
v-model="loginForm.mobile"
|
v-model:value="loginForm.mobile"
|
||||||
placeholder="输入手机号"
|
placeholder="输入手机号"
|
||||||
class="form-input border border-solid border-#d7d7d9 x w-100% h-48px text-14 rounded-4px color-#333 bg-#fff"
|
class="form-input border border-solid !border-#d7d7d9 w-100% h-48px !text-14px rounded-4px color-#333 bg-#fff"
|
||||||
clearable
|
clearable
|
||||||
allow-clear
|
allowClear
|
||||||
@blur="validateField('mobile')"
|
|
||||||
@input="clearError('mobile')"
|
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem name="captcha">
|
<FormItem name="captcha">
|
||||||
<div
|
<div
|
||||||
class="form-input border border-solid border-#d7d7d9 w-100% h-48px text-14 rounded-4px color-#333 bg-#fff flex justify-between items-center"
|
class="form-input border border-solid !border-#d7d7d9 w-100% h-48px !text-14px rounded-4px color-#333 bg-#fff flex justify-between items-center"
|
||||||
>
|
>
|
||||||
<a-input
|
<Input
|
||||||
v-model="loginForm.captcha"
|
v-model:value="loginForm.captcha"
|
||||||
placeholder="验证码"
|
placeholder="验证码"
|
||||||
style="background-color: #fff; border: none"
|
style="background-color: #fff; border: none !important;"
|
||||||
allow-clear
|
allowClear
|
||||||
|
class="form-input"
|
||||||
maxlength="6"
|
maxlength="6"
|
||||||
@blur="validateField('captcha')"
|
|
||||||
@input="clearError('captcha')"
|
|
||||||
/>
|
/>
|
||||||
<span
|
<span
|
||||||
class="w-120 font-400 text-right mr-4 text-16px"
|
class="w-120 font-400 text-right mr-4 text-16px"
|
||||||
@ -128,7 +125,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Checkbox, Modal, Button, Form, FormItem } from 'ant-design-vue';
|
import { Checkbox, Modal, Button, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import PuzzleVerification from './components/PuzzleVerification.vue';
|
import PuzzleVerification from './components/PuzzleVerification.vue';
|
||||||
import { fetchLoginCaptCha, fetchAuthorizationsCaptcha, fetchProfileInfo } from '@/api/all/login';
|
import { fetchLoginCaptCha, fetchAuthorizationsCaptcha, fetchProfileInfo } from '@/api/all/login';
|
||||||
import { joinEnterpriseByInviteCode } from '@/api/all';
|
import { joinEnterpriseByInviteCode } from '@/api/all';
|
||||||
|
|||||||
@ -1,17 +1,22 @@
|
|||||||
.login-wrap {
|
.login-wrap {
|
||||||
.arco-input-wrapper,
|
// :deep(.ant-input),
|
||||||
.arco-select-view-single,
|
// .arco-select-view-single,
|
||||||
.arco-textarea-wrapper,
|
// .arco-textarea-wrapper,
|
||||||
.arco-picker,
|
// .arco-picker,
|
||||||
.arco-select-view-multiple {
|
// .arco-select-view-multiple {
|
||||||
border-radius: 4px;
|
// border-color: #d7d7d9 !important;
|
||||||
border-color: #d7d7d9 !important;
|
// background-color: #fff !important;
|
||||||
background-color: #fff !important;
|
// &:focus-within,
|
||||||
&:focus-within,
|
// &.arco-input-focus {
|
||||||
&.arco-input-focus {
|
// background-color: var(--color-bg-2);
|
||||||
background-color: var(--color-bg-2);
|
// // border-color: rgb(var(--primary-6));
|
||||||
// border-color: rgb(var(--primary-6));
|
// box-shadow: 0 0 0 0 var(--color-primary-light-2);
|
||||||
box-shadow: 0 0 0 0 var(--color-primary-light-2);
|
// }
|
||||||
|
// }
|
||||||
|
:deep(.ant-form) {
|
||||||
|
color: red !important;
|
||||||
|
.ant-input {
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.login-bg {
|
.login-bg {
|
||||||
|
|||||||
@ -30,13 +30,14 @@
|
|||||||
</p>
|
</p>
|
||||||
<Form
|
<Form
|
||||||
:model="form"
|
:model="form"
|
||||||
|
:rules="rules"
|
||||||
class="form"
|
class="form"
|
||||||
:label-col-props="{ span: 6, offset: 0 }"
|
:label-col-props="{ span: 6, offset: 0 }"
|
||||||
:wrapper-col-props="{ span: 18, offset: 0 }"
|
:wrapper-col-props="{ span: 18, offset: 0 }"
|
||||||
label-align="left"
|
label-align="left"
|
||||||
>
|
>
|
||||||
<FormItem required name="name" label="新企业名称">
|
<FormItem required name="name" label="新企业名称">
|
||||||
<a-input v-model.trim="form.name" size="small" :disabled="!canUpdate" placeholder="请输入新企业名称" />
|
<Input v-model:value.trim="form.name" size="small" :disabled="!canUpdate" placeholder="请输入新企业名称" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
</Modal>
|
</Modal>
|
||||||
@ -44,7 +45,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Button, Form, FormItem } from 'ant-design-vue';
|
import { Button, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import Container from '@/components/container.vue';
|
import Container from '@/components/container.vue';
|
||||||
import Modal from '@/components/modal.vue';
|
import Modal from '@/components/modal.vue';
|
||||||
import { ref, reactive, computed } from 'vue';
|
import { ref, reactive, computed } from 'vue';
|
||||||
@ -57,6 +58,16 @@ const form = reactive({
|
|||||||
name: '',
|
name: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const rules = {
|
||||||
|
name: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入新企业名称',
|
||||||
|
trigger: ['blur'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
const enterpriseInfo = computed(() => {
|
const enterpriseInfo = computed(() => {
|
||||||
return store.enterpriseInfo ?? {};
|
return store.enterpriseInfo ?? {};
|
||||||
});
|
});
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
<Modal v-model:open="infoVisible" centered title="修改用户信息" @ok="handleSubmitUserInfo">
|
<Modal v-model:open="infoVisible" centered title="修改用户信息" @ok="handleSubmitUserInfo">
|
||||||
<Form
|
<Form
|
||||||
class="form"
|
class="form"
|
||||||
|
:rules="rules"
|
||||||
:model="userInfoForm"
|
:model="userInfoForm"
|
||||||
:label-col-props="{ span: 3, offset: 0 }"
|
:label-col-props="{ span: 3, offset: 0 }"
|
||||||
:wrapper-col-props="{ span: 21, offset: 0 }"
|
:wrapper-col-props="{ span: 21, offset: 0 }"
|
||||||
@ -42,7 +43,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem name="name" label="昵称">
|
<FormItem name="name" label="昵称">
|
||||||
<a-input v-model.trim="userInfoForm.name" placeholder="请输入昵称" />
|
<Input v-model:value="userInfoForm.name" placeholder="请输入昵称" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
</Modal>
|
</Modal>
|
||||||
@ -55,20 +56,20 @@
|
|||||||
:model="form"
|
:model="form"
|
||||||
class="form"
|
class="form"
|
||||||
:rules="formRules"
|
:rules="formRules"
|
||||||
:label-col-props="{ span: 5, offset: 0 }"
|
labelAlign="right"
|
||||||
:wrapper-col-props="{ span: 19, offset: 0 }"
|
:labelCol="{ span: 4 }"
|
||||||
label-align="left"
|
:wrapperCol="{ span: 20 }"
|
||||||
>
|
>
|
||||||
<FormItem required name="mobile" label="新手机号">
|
<FormItem required name="mobile" label="新手机号">
|
||||||
<a-input v-model.trim="form.mobile" size="small" placeholder="请输入新的手机号" />
|
<Input v-model:value="form.mobile" size="small" placeholder="请输入新的手机号" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem required name="captcha" label="获取验证码">
|
<FormItem required name="captcha" label="获取验证码">
|
||||||
<a-input v-model.trim="form.captcha" size="small" placeholder="请输入验证码">
|
<Input v-model:value="form.captcha" size="small" placeholder="请输入验证码">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<span v-if="countdown <= 0" @click="sendCaptcha">发送验证码</span>
|
<span v-if="countdown <= 0" @click="sendCaptcha">发送验证码</span>
|
||||||
<span v-else>{{ countdown }}s</span>
|
<span v-else>{{ countdown }}s</span>
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
<PuzzleVerification
|
<PuzzleVerification
|
||||||
@ -80,7 +81,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Button, Form, FormItem } from 'ant-design-vue';
|
import { Button, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import Container from '@/components/container.vue';
|
import Container from '@/components/container.vue';
|
||||||
import Modal from '@/components/modal.vue';
|
import Modal from '@/components/modal.vue';
|
||||||
import PuzzleVerification from '@/views/components/login/components/PuzzleVerification.vue';
|
import PuzzleVerification from '@/views/components/login/components/PuzzleVerification.vue';
|
||||||
@ -125,35 +126,32 @@ const dataSource = computed(() => {
|
|||||||
const formRules = {
|
const formRules = {
|
||||||
mobile: [
|
mobile: [
|
||||||
{
|
{
|
||||||
required: true,
|
validator: (_rule: any, value: string) => {
|
||||||
message: '请填写手机号',
|
if (!value) {
|
||||||
trigger: ['blur', 'change'],
|
return Promise.reject('请填写手机号');
|
||||||
},
|
|
||||||
{
|
|
||||||
validator: (value: string, callback: (error?: string) => void) => {
|
|
||||||
if (!/^1[3-9]\d{9}$/.test(value)) {
|
|
||||||
callback('手机号格式不正确');
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
}
|
||||||
|
if (!/^1[3-9]\d{9}$/.test(value)) {
|
||||||
|
return Promise.reject('手机号格式不正确');
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
},
|
},
|
||||||
|
required: true,
|
||||||
trigger: ['blur', 'change'],
|
trigger: ['blur', 'change'],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
captcha: [
|
captcha: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请填写验证码',
|
validator: (rule, value) => {
|
||||||
trigger: ['blur', 'change'],
|
if (!value) {
|
||||||
},
|
return Promise.reject('请填写验证码');
|
||||||
{
|
|
||||||
validator: (value: string, callback: (error?: string) => void) => {
|
|
||||||
if (!/^\d{6}$/.test(value)) {
|
|
||||||
callback('验证码必须是6位数字');
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
}
|
||||||
|
if (!/^\d{6}$/.test(value)) {
|
||||||
|
return Promise.reject('验证码必须是6位数字');
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
},
|
},
|
||||||
|
|
||||||
trigger: ['blur', 'change'],
|
trigger: ['blur', 'change'],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Textarea } from 'ant-design-vue';
|
||||||
import { Image, Spin, Input, Textarea, Affix } from '@arco-design/web-vue';
|
import { Image, Spin, Affix } from '@arco-design/web-vue';
|
||||||
import TextOverTips from '@/components/text-over-tips';
|
import TextOverTips from '@/components/text-over-tips';
|
||||||
import SvgIcon from '@/components/svg-icon/index.vue';
|
import SvgIcon from '@/components/svg-icon/index.vue';
|
||||||
import DeleteCommentModal from './delete-comment-modal.vue';
|
import DeleteCommentModal from './delete-comment-modal.vue';
|
||||||
@ -125,24 +125,24 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Textarea
|
<Textarea
|
||||||
ref={textAreaRef}
|
ref={textAreaRef}
|
||||||
auto-size
|
autoSize
|
||||||
class={`max-h-220px overflow-y-auto ${isReplay.value ? 'pt-38px' : ''}`}
|
class={`max-h-220px overflow-y-auto textarea-box ${isReplay.value ? 'pt-38px' : ''}`}
|
||||||
size="large"
|
size="large"
|
||||||
placeholder="输入评论"
|
placeholder="输入评论"
|
||||||
v-model={comment.value}
|
v-model:value={comment.value}
|
||||||
onPressEnter={onComment}
|
onPressEnter={onComment}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{comment.value && (
|
{comment.value && (
|
||||||
<div class="flex justify-end mt-12px">
|
<div class="flex justify-end mt-12px">
|
||||||
<Button type="primary" ghost class="mr-12px rounded-8px" onClick={onClearComment}>
|
<Button type="primary" ghost class="cancel-btn mr-12px !rounded-8px" onClick={onClearComment}>
|
||||||
取消
|
取消
|
||||||
</Button>
|
</Button>
|
||||||
<Button type="primary" class="rounded-8px" onClick={onComment}>
|
<Button type="primary" class="!rounded-8px" onClick={onComment}>
|
||||||
发送
|
发送
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -19,6 +19,9 @@
|
|||||||
font-family: $font-family-medium;
|
font-family: $font-family-medium;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.cancel-btn {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
.ai-text {
|
.ai-text {
|
||||||
font-family: $font-family-medium;
|
font-family: $font-family-medium;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@ -30,7 +33,7 @@
|
|||||||
-webkit-background-clip: text;
|
-webkit-background-clip: text;
|
||||||
-webkit-text-fill-color: transparent;
|
-webkit-text-fill-color: transparent;
|
||||||
}
|
}
|
||||||
:deep(.arco-textarea-wrapper) {
|
.textarea-box {
|
||||||
min-height: 38px;
|
min-height: 38px;
|
||||||
display: flex;
|
display: flex;
|
||||||
border-color: transparent !important;
|
border-color: transparent !important;
|
||||||
@ -39,14 +42,11 @@
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
color: #211f24 !important;
|
color: #211f24 !important;
|
||||||
transition: all 0.3s;
|
transition: all 0.3s;
|
||||||
.arco-textarea-mirror,
|
padding: 8px 16px !important;
|
||||||
.arco-textarea {
|
|
||||||
padding: 8px 16px !important;
|
|
||||||
}
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: #6d4cfe !important;
|
border-color: #6d4cfe !important;
|
||||||
}
|
}
|
||||||
&.arco-textarea-focus {
|
&:focus-within {
|
||||||
border-color: #6d4cfe !important;
|
border-color: #6d4cfe !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,35 +9,35 @@
|
|||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">内容稿件标题</span>
|
<span class="label">内容稿件标题</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.title"
|
v-model:value="query.title"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
placeholder="请输入内容稿件标题"
|
placeholder="请输入内容稿件标题"
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">序号</span>
|
<span class="label">序号</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.uid"
|
v-model:value="query.uid"
|
||||||
class="!w-160px"
|
class="!w-160px"
|
||||||
placeholder="请输入序号"
|
placeholder="请输入序号"
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending">
|
<div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending">
|
||||||
@ -99,10 +99,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { defineEmits, defineProps } from 'vue';
|
import { defineEmits, defineProps } from 'vue';
|
||||||
import { PLATFORMS } from '@/views/material-center/components/finished-products/manuscript/check-list/constants';
|
import { PLATFORMS } from '@/views/material-center/components/finished-products/manuscript/check-list/constants';
|
||||||
import { AuditStatus } from '@/views/material-center/components/finished-products/constants';
|
import { AuditStatus } from '@/views/material-center/components/finished-products/constants';
|
||||||
|
import { ref, nextTick } from 'vue';
|
||||||
|
import dayjs from 'dayjs';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
query: {
|
query: {
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Swiper, SwiperSlide } from 'swiper/vue';
|
import { Swiper, SwiperSlide } from 'swiper/vue';
|
||||||
import { Button, Form, FormItem } from 'ant-design-vue';
|
import { Button, Form, Input, FormItem } from 'ant-design-vue';
|
||||||
import { IconLoading } from '@arco-design/web-vue/es/icon';
|
import { IconLoading } from '@arco-design/web-vue/es/icon';
|
||||||
import { Image, Input, Textarea, Tabs, Upload, TabPane, Spin, Message as AMessage } from '@arco-design/web-vue';
|
import { Image, Textarea, Tabs, Upload, TabPane, Spin, Message as AMessage } from '@arco-design/web-vue';
|
||||||
import TextOverTips from '@/components/text-over-tips';
|
import TextOverTips from '@/components/text-over-tips';
|
||||||
import HighlightTextarea from './highlight-textarea';
|
import HighlightTextarea from './highlight-textarea';
|
||||||
|
|
||||||
@ -206,11 +206,11 @@ export default {
|
|||||||
<Form ref={formRef} model={props.modelValue} rules={FORM_RULES} layout="vertical" auto-label-width>
|
<Form ref={formRef} model={props.modelValue} rules={FORM_RULES} layout="vertical" auto-label-width>
|
||||||
<FormItem label="标题" name="title" required>
|
<FormItem label="标题" name="title" required>
|
||||||
<Input
|
<Input
|
||||||
v-model={props.modelValue.title}
|
v-model:value={props.modelValue.title}
|
||||||
placeholder="请输入标题"
|
placeholder="请输入标题"
|
||||||
size="large"
|
size="large"
|
||||||
maxLength={30}
|
maxlength={30}
|
||||||
show-word-limit
|
showCount
|
||||||
disabled={isDisabled.value}
|
disabled={isDisabled.value}
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Button, Form, FormItem } from 'ant-design-vue';
|
import { Button, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import { Input, Textarea, Upload, Message as AMessage } from '@arco-design/web-vue';
|
import { Textarea, Upload, Message as AMessage } from '@arco-design/web-vue';
|
||||||
// import CommonSelect from '@/components/common-select';
|
// import CommonSelect from '@/components/common-select';
|
||||||
// import { VueDraggable } from 'vue-draggable-plus';
|
// import { VueDraggable } from 'vue-draggable-plus';
|
||||||
import TextOverTips from '@/components/text-over-tips';
|
import TextOverTips from '@/components/text-over-tips';
|
||||||
@ -310,17 +310,17 @@ export default {
|
|||||||
<Form ref={formRef} model={formData.value} rules={props.rules} layout="vertical" auto-label-width>
|
<Form ref={formRef} model={formData.value} rules={props.rules} layout="vertical" auto-label-width>
|
||||||
<FormItem label="标题" name="title" required>
|
<FormItem label="标题" name="title" required>
|
||||||
<Input
|
<Input
|
||||||
v-model={formData.value.title}
|
v-model:value={formData.value.title}
|
||||||
onInput={() => {
|
onInput={() => {
|
||||||
console.log('onInput')
|
console.log('onInput');
|
||||||
onChange();
|
onChange();
|
||||||
emit('reValidate');
|
emit('reValidate');
|
||||||
}}
|
}}
|
||||||
placeholder="请输入标题"
|
placeholder="请输入标题"
|
||||||
size="large"
|
size="large"
|
||||||
class="!w-500px"
|
class="!w-500px"
|
||||||
maxLength={30}
|
maxlength={30}
|
||||||
show-word-limit
|
showCount
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import { Button, Modal, Form, FormItem } from 'ant-design-vue';
|
import { Button, Modal, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import { Input, Message as AMessage } from '@arco-design/web-vue';
|
import { Message as AMessage } from '@arco-design/web-vue';
|
||||||
import CommonSelect from '@/components/common-select';
|
import CommonSelect from '@/components/common-select';
|
||||||
|
|
||||||
import { useClipboard } from '@vueuse/core';
|
import { useClipboard } from '@vueuse/core';
|
||||||
@ -147,7 +147,7 @@ export default {
|
|||||||
),
|
),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Input v-model={formData.value.receiver} class="!w-240px" size="large" placeholder="请输入分享对象" />
|
<Input v-model:value={formData.value.receiver} class="!w-240px" size="large" placeholder="请输入分享对象" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import { Modal, Button, Form, FormItem, RadioGroup, Radio } from 'ant-design-vue';
|
import { Modal, Button, Form, FormItem, RadioGroup, Radio, Input } from 'ant-design-vue';
|
||||||
import { Input, Upload, Message as AMessage, Textarea } from '@arco-design/web-vue';
|
import { Upload, Message as AMessage, Textarea } from '@arco-design/web-vue';
|
||||||
import { useClipboard } from '@vueuse/core';
|
import { useClipboard } from '@vueuse/core';
|
||||||
import { getWriterLinksGenerate, getTemplateUrl, postWorksByLink, postWorksByFile } from '@/api/all/generationWorkshop';
|
import { getWriterLinksGenerate, getTemplateUrl, postWorksByLink, postWorksByFile } from '@/api/all/generationWorkshop';
|
||||||
import { generateFullUrl } from '@/utils/tools';
|
import { generateFullUrl } from '@/utils/tools';
|
||||||
@ -223,7 +223,7 @@ export default {
|
|||||||
// 渲染手写上传表单
|
// 渲染手写上传表单
|
||||||
const renderHandwriteForm = () => (
|
const renderHandwriteForm = () => (
|
||||||
<FormItem label="上传链接" name="writerLink">
|
<FormItem label="上传链接" name="writerLink">
|
||||||
<Input v-model={form.value.writerLink} placeholder="请输入上传链接" disabled size="large" />
|
<Input v-model:value={form.value.writerLink} placeholder="请输入上传链接" disabled size="large" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -3,18 +3,17 @@
|
|||||||
<div class="filter-row">
|
<div class="filter-row">
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">内容稿件标题</span>
|
<span class="label">内容稿件标题</span>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.title"
|
v-model:value="query.title"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
placeholder="请输入内容稿件标题"
|
placeholder="请输入内容稿件标题"
|
||||||
size="medium"
|
allowClear
|
||||||
allow-clear
|
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="filter-row-item">
|
<!-- <div class="filter-row-item">
|
||||||
<span class="label">所属项目</span>
|
<span class="label">所属项目</span>
|
||||||
@ -28,20 +27,17 @@
|
|||||||
</div> -->
|
</div> -->
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">序号</span>
|
<span class="label">序号</span>
|
||||||
<a-space size="medium">
|
<Input
|
||||||
<a-input
|
v-model:value="query.uid"
|
||||||
v-model="query.uid"
|
class="!w-160px"
|
||||||
class="!w-160px"
|
placeholder="请输入序号"
|
||||||
placeholder="请输入序号"
|
allowClear
|
||||||
size="medium"
|
@change="handleSearch"
|
||||||
allow-clear
|
>
|
||||||
@change="handleSearch"
|
<template #prefix>
|
||||||
>
|
<icon-search />
|
||||||
<template #prefix>
|
</template>
|
||||||
<icon-search />
|
</Input>
|
||||||
</template>
|
|
||||||
</a-input>
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">审核状态</span>
|
<span class="label">审核状态</span>
|
||||||
@ -68,13 +64,13 @@
|
|||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<Button type="primary" ghost class="mr-12px" size="medium" @click="handleSearch">
|
<Button type="primary" ghost class="mr-12px" size="medium" @click="handleSearch">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-search class="mr-8px"/>
|
<icon-search class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>搜索</template>
|
<template #default>搜索</template>
|
||||||
</Button>
|
</Button>
|
||||||
<Button size="medium" @click="handleReset">
|
<Button size="medium" @click="handleReset">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-refresh class="mr-8px"/>
|
<icon-refresh class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>重置</template>
|
<template #default>重置</template>
|
||||||
</Button>
|
</Button>
|
||||||
@ -84,7 +80,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { defineEmits, defineProps } from 'vue';
|
import { defineEmits, defineProps } from 'vue';
|
||||||
import { CHECK_STATUS } from '@/views/material-center/components/finished-products/manuscript/list/constants';
|
import { CHECK_STATUS } from '@/views/material-center/components/finished-products/manuscript/list/constants';
|
||||||
import CommonSelect from '@/components/common-select';
|
import CommonSelect from '@/components/common-select';
|
||||||
|
|||||||
@ -3,47 +3,26 @@
|
|||||||
<div class="filter-row">
|
<div class="filter-row">
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">文件名称</span>
|
<span class="label">文件名称</span>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.name"
|
v-model:value="query.name"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
placeholder="请输入文件名称"
|
placeholder="请输入文件名称"
|
||||||
size="medium"
|
allowClear
|
||||||
allow-clear
|
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">序号</span>
|
<span class="label">序号</span>
|
||||||
<a-space size="medium">
|
<Input v-model:value="query.uid" class="!w-160px" placeholder="请输入序号" allowClear @change="handleSearch">
|
||||||
<a-input
|
<template #prefix>
|
||||||
v-model="query.uid"
|
<icon-search />
|
||||||
class="!w-160px"
|
</template>
|
||||||
placeholder="请输入序号"
|
</Input>
|
||||||
size="medium"
|
|
||||||
allow-clear
|
|
||||||
@change="handleSearch"
|
|
||||||
>
|
|
||||||
<template #prefix>
|
|
||||||
<icon-search />
|
|
||||||
</template>
|
|
||||||
</a-input>
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="filter-row-item">
|
|
||||||
<span class="label">来源</span>
|
|
||||||
<CommonSelect
|
|
||||||
placeholder="请选择所属项目"
|
|
||||||
:options="CHECK_STATUS"
|
|
||||||
v-model="query.audit_status"
|
|
||||||
class="!w-160px"
|
|
||||||
:multiple="false"
|
|
||||||
@change="handleSearch"
|
|
||||||
/>
|
|
||||||
</div> -->
|
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">上传时间</span>
|
<span class="label">上传时间</span>
|
||||||
<a-range-picker
|
<a-range-picker
|
||||||
@ -58,13 +37,13 @@
|
|||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<Button type="primary" ghost class="mr-12px" size="medium" @click="handleSearch">
|
<Button type="primary" ghost class="mr-12px" size="medium" @click="handleSearch">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-search class="mr-8px"/>
|
<icon-search class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>搜索</template>
|
<template #default>搜索</template>
|
||||||
</Button>
|
</Button>
|
||||||
<Button size="medium" @click="handleReset">
|
<Button size="medium" @click="handleReset">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-refresh class="mr-8px"/>
|
<icon-refresh class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>重置</template>
|
<template #default>重置</template>
|
||||||
</Button>
|
</Button>
|
||||||
@ -74,9 +53,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { defineEmits, defineProps } from 'vue';
|
import { defineEmits, defineProps, ref, nextTick } from 'vue';
|
||||||
// import CommonSelect from '@/components/common-select';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import dayjs from 'dayjs';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
query: {
|
query: {
|
||||||
@ -113,10 +92,8 @@ const onDateChange = (value) => {
|
|||||||
handleSearch();
|
handleSearch();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
created_at.value = [];
|
created_at.value = [];
|
||||||
emits('reset');
|
emits('reset');
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -13,11 +13,11 @@
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">品牌名称</span>
|
<span class="label">品牌名称</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input v-model="query.name" class="w-240px" placeholder="请搜索..." size="medium" allow-clear>
|
<Input v-model:value="query.name" class="w-240px" placeholder="请搜索..." size="medium" allowClear>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row flex">
|
<div class="filter-row flex">
|
||||||
@ -46,9 +46,9 @@
|
|||||||
<template #title>
|
<template #title>
|
||||||
<span class="modal-title">{{ form.id > 0 ? '编辑品牌' : '添加品牌' }}</span>
|
<span class="modal-title">{{ form.id > 0 ? '编辑品牌' : '添加品牌' }}</span>
|
||||||
</template>
|
</template>
|
||||||
<Form :model="form" :rules="formRule" ref="formRef" layout="horizontal" auto-label-width labelAlign="right" :labelCol="{ span: 4 }" :wrapperCol="{ span: 20 }">
|
<Form :model="form" :rules="formRule" ref="formRef" layout="horizontal" labelAlign="right" :labelCol="{ span: 3 }" :wrapperCol="{ span: 21 }">
|
||||||
<FormItem name="name" label="品牌名称">
|
<FormItem name="name" label="品牌名称">
|
||||||
<a-input v-model="form.name" class="h-36px" placeholder="请输入..." />
|
<Input v-model:value="form.name" class="h-36px" placeholder="请输入..." />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem name="logo" class="form-item-logo" label="标准版Logo">
|
<FormItem name="logo" class="form-item-logo" label="标准版Logo">
|
||||||
<div class="inline-flex">
|
<div class="inline-flex">
|
||||||
@ -62,7 +62,7 @@
|
|||||||
<ImageUpload v-model="form.other_logos" :limit="3"></ImageUpload>
|
<ImageUpload v-model="form.other_logos" :limit="3"></ImageUpload>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem name="slogan" label="Slogan">
|
<FormItem name="slogan" label="Slogan">
|
||||||
<a-textarea v-model="form.slogan" placeholder="请输入..." :max-length="50" show-word-limit />
|
<TextArea v-model:value="form.slogan" placeholder="请输入..." :maxlength="50" showCount />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -128,7 +128,8 @@
|
|||||||
import { ref, computed, reactive, onMounted } from 'vue';
|
import { ref, computed, reactive, onMounted } from 'vue';
|
||||||
import { Message } from '@arco-design/web-vue';
|
import { Message } from '@arco-design/web-vue';
|
||||||
import { IconDelete } from '@arco-design/web-vue/es/icon';
|
import { IconDelete } from '@arco-design/web-vue/es/icon';
|
||||||
import { Button, Modal, Form, FormItem } from 'ant-design-vue';
|
import { Button, Modal, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
|
const { TextArea } = Input;
|
||||||
|
|
||||||
import {
|
import {
|
||||||
addMaterials,
|
addMaterials,
|
||||||
|
|||||||
@ -9,13 +9,11 @@
|
|||||||
<div class="filter-row flex mb-20px">
|
<div class="filter-row flex mb-20px">
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">服务/产品</span>
|
<span class="label">服务/产品</span>
|
||||||
<a-space size="medium">
|
<Input v-model:value="query.name" class="w-240px" placeholder="请搜索..." size="middle" allowClear>
|
||||||
<a-input v-model="query.name" class="w-240px" placeholder="请搜索..." size="medium" allow-clear>
|
<template #prefix>
|
||||||
<template #prefix>
|
<icon-search />
|
||||||
<icon-search />
|
</template>
|
||||||
</template>
|
</Input>
|
||||||
</a-input>
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">时间筛选</span>
|
<span class="label">时间筛选</span>
|
||||||
@ -44,8 +42,7 @@
|
|||||||
<div
|
<div
|
||||||
class="table-wrap bg-#fff rounded-8px border-1px border-#D7D7D9 border-solid px-24px py-24px flex-1 flex flex-col"
|
class="table-wrap bg-#fff rounded-8px border-1px border-#D7D7D9 border-solid px-24px py-24px flex-1 flex flex-col"
|
||||||
>
|
>
|
||||||
<a-table :columns="columns" :data="tableData" @change="handleChange" :pagination="false">
|
<a-table :columns="columns" :data="tableData" @change="handleChange" :pagination="false"> </a-table>
|
||||||
</a-table>
|
|
||||||
<div class="pagination-row">
|
<div class="pagination-row">
|
||||||
<a-pagination
|
<a-pagination
|
||||||
:total="pageInfo.total"
|
:total="pageInfo.total"
|
||||||
@ -65,7 +62,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive, ref } from 'vue';
|
import { reactive, ref } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
|
|
||||||
const pageInfo = reactive({
|
const pageInfo = reactive({
|
||||||
page: 1,
|
page: 1,
|
||||||
@ -160,9 +157,9 @@ const columns = [
|
|||||||
background: var(--BG-white, #fff);
|
background: var(--BG-white, #fff);
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.arco-input-wrapper),
|
:deep(.arcoInput-wrapper),
|
||||||
:deep(.arco-select-view-single),
|
:deep(.arco-select-view-single),
|
||||||
:deep(.arco-textarea-wrapper),
|
:deep(.ant-input),
|
||||||
:deep(.arco-picker),
|
:deep(.arco-picker),
|
||||||
:deep(.arco-select-view-multiple) {
|
:deep(.arco-select-view-multiple) {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
@ -170,7 +167,7 @@ const columns = [
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
|
||||||
&:focus-within,
|
&:focus-within,
|
||||||
&.arco-input-focus {
|
&.arcoInput-focus {
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
border-color: rgb(var(--primary-6));
|
border-color: rgb(var(--primary-6));
|
||||||
box-shadow: 0 0 0 0 var(--color-primary-light-2);
|
box-shadow: 0 0 0 0 var(--color-primary-light-2);
|
||||||
|
|||||||
@ -10,11 +10,11 @@
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">服务/产品</span>
|
<span class="label">服务/产品</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input v-model="query.name" class="w-240px" placeholder="请搜索..." size="medium" allow-clear>
|
<Input v-model:value="query.name" class="w-240px" placeholder="请搜索..." size="medium" allowClear>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
@ -63,7 +63,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { reactive, ref } from 'vue';
|
import { reactive, ref } from 'vue';
|
||||||
|
|
||||||
const pageInfo = reactive({
|
const pageInfo = reactive({
|
||||||
@ -151,7 +151,7 @@ const columns = [
|
|||||||
|
|
||||||
:deep(.arco-input-wrapper),
|
:deep(.arco-input-wrapper),
|
||||||
:deep(.arco-select-view-single),
|
:deep(.arco-select-view-single),
|
||||||
:deep(.arco-textarea-wrapper),
|
:deep(.ant-input),
|
||||||
:deep(.arco-picker),
|
:deep(.arco-picker),
|
||||||
:deep(.arco-select-view-multiple) {
|
:deep(.arco-select-view-multiple) {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|||||||
@ -8,18 +8,17 @@
|
|||||||
<div class="filter-row flex">
|
<div class="filter-row flex">
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">账号名称</span>
|
<span class="label">账号名称</span>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.name"
|
v-model:value="query.name"
|
||||||
placeholder="请搜索..."
|
placeholder="请搜索..."
|
||||||
size="medium"
|
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">分组</span>
|
<span class="label">分组</span>
|
||||||
@ -69,8 +68,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { reactive, defineEmits, defineProps } from 'vue';
|
import { reactive, defineEmits, defineProps, onMounted, nextTick, ref } from 'vue';
|
||||||
import { fetchAccountGroups, fetchAccountOperators } from '@/api/all/propertyMarketing';
|
import { fetchAccountGroups, fetchAccountOperators } from '@/api/all/propertyMarketing';
|
||||||
import StatusSelect from '@/views/property-marketing/media-account/components/status-select';
|
import StatusSelect from '@/views/property-marketing/media-account/components/status-select';
|
||||||
import CommonSelect from '@/components/common-select';
|
import CommonSelect from '@/components/common-select';
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* @Date: 2025-06-28 12:58:09
|
* @Date: 2025-06-28 12:58:09
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div class="note-table-wrap bg-#fff rounded-8px px-24px flex-1 flex flex-col">
|
<div class="note-table-wrap bg-#fff rounded-8px px-24px flex-1 flex flex-col">
|
||||||
<div class="title-row">
|
<div class="title-row">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<span class="cts !text-18px !lh-26px mr-4px title">笔记详情</span>
|
<span class="cts !text-18px !lh-26px mr-4px title">笔记详情</span>
|
||||||
@ -15,30 +15,26 @@
|
|||||||
<div class="filter-row flex my-16px">
|
<div class="filter-row flex my-16px">
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">笔记标题</span>
|
<span class="label">笔记标题</span>
|
||||||
<a-space size="medium" class="w-240px">
|
<Input v-model:value="query.title" class="!w-240px" placeholder="请搜索..." allowClear @change="handleSearch">
|
||||||
<a-input v-model="query.title" placeholder="请搜索..." size="medium" allow-clear @change="handleSearch">
|
<template #prefix>
|
||||||
<template #prefix>
|
<icon-search />
|
||||||
<icon-search />
|
</template>
|
||||||
</template>
|
</Input>
|
||||||
</a-input>
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">发布日期</span>
|
<span class="label">发布日期</span>
|
||||||
<a-space size="medium" class="w-260px">
|
<a-range-picker
|
||||||
<a-range-picker
|
v-model="published_at"
|
||||||
v-model="published_at"
|
size="medium"
|
||||||
size="medium"
|
class="!w-260px"
|
||||||
allow-clear
|
allow-clear
|
||||||
format="YYYY-MM-DD"
|
format="YYYY-MM-DD"
|
||||||
class="w-100%"
|
@change="onDateChange"
|
||||||
@change="onDateChange"
|
/>
|
||||||
/>
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<Button type="primary" ghost class="w-84px mr-12px" @click="handleSearch">
|
<Button type="primary" ghost class="w-84px mr-12px" @click="handleSearch">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-search class="mr-8px"/>
|
<icon-search class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>搜索</template>
|
<template #default>搜索</template>
|
||||||
</Button>
|
</Button>
|
||||||
@ -114,7 +110,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { TABLE_COLUMNS, INITIAL_QUERY, INITIAL_PAGE_INFO } from './constants';
|
import { TABLE_COLUMNS, INITIAL_QUERY, INITIAL_PAGE_INFO } from './constants';
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import { formatTableField, exactFormatTime, formatNumberShow } from '@/utils/tools';
|
import { formatTableField, exactFormatTime, formatNumberShow } from '@/utils/tools';
|
||||||
|
|||||||
@ -4,8 +4,8 @@
|
|||||||
-->
|
-->
|
||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import { Button, Modal, Form, FormItem, RadioGroup, Radio } from 'ant-design-vue';
|
import { Button, Modal, Form, FormItem, RadioGroup, Radio, Input } from 'ant-design-vue';
|
||||||
import { Input, Upload, Switch, Tooltip, Message as AMessage, Textarea } from '@arco-design/web-vue';
|
import { Upload, Switch, Tooltip, Message as AMessage, Textarea } from '@arco-design/web-vue';
|
||||||
import AuthorizedAccountModal from '../authorized-account-modal';
|
import AuthorizedAccountModal from '../authorized-account-modal';
|
||||||
// import ImportPromptModal from '../import-prompt-modal';
|
// import ImportPromptModal from '../import-prompt-modal';
|
||||||
import StatusBox from '@/views/property-marketing/media-account/components/status-select/status-box.tsx';
|
import StatusBox from '@/views/property-marketing/media-account/components/status-select/status-box.tsx';
|
||||||
@ -340,10 +340,10 @@ export default {
|
|||||||
{isEdit.value && (
|
{isEdit.value && (
|
||||||
<>
|
<>
|
||||||
<FormItem label="账号名称" name="name">
|
<FormItem label="账号名称" name="name">
|
||||||
<Input v-model={form.value.name} placeholder="请输入..." size="large" disabled />
|
<Input v-model:value={form.value.name} placeholder="请输入..." size="large" disabled />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="账号ID" name="account_id">
|
<FormItem label="账号ID" name="account_id">
|
||||||
<Input v-model={form.value.account_id} placeholder="请输入..." size="large" disabled />
|
<Input v-model:value={form.value.account_id} placeholder="请输入..." size="large" disabled />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="状态" name="status">
|
<FormItem label="状态" name="status">
|
||||||
<StatusBox item={form.value} />
|
<StatusBox item={form.value} />
|
||||||
@ -351,10 +351,10 @@ export default {
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<FormItem label="手机号码" name="mobile" required>
|
<FormItem label="手机号码" name="mobile" required>
|
||||||
<Input v-model={form.value.mobile} placeholder="请输入..." size="large" />
|
<Input v-model:value={form.value.mobile} placeholder="请输入..." size="large" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="运营人员" name="operator_name" required>
|
<FormItem label="运营人员" name="operator_name" required>
|
||||||
<Input v-model={form.value.operator_name} placeholder="请输入..." class="w-240px" size="large" />
|
<Input v-model:value={form.value.operator_name} placeholder="请输入..." class="w-240px" size="large" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="运营平台" required={!isEdit.value}>
|
<FormItem label="运营平台" required={!isEdit.value}>
|
||||||
{isEdit.value ? (
|
{isEdit.value ? (
|
||||||
@ -367,7 +367,7 @@ export default {
|
|||||||
)}
|
)}
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="号码持有人" name="holder_name">
|
<FormItem label="号码持有人" name="holder_name">
|
||||||
<Input v-model={form.value.holder_name} placeholder="请输入..." class="w-240px" size="large" />
|
<Input v-model:value={form.value.holder_name} placeholder="请输入..." class="w-240px" size="large" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="所属项目">
|
<FormItem label="所属项目">
|
||||||
<CommonSelect
|
<CommonSelect
|
||||||
|
|||||||
@ -8,83 +8,70 @@
|
|||||||
<div class="filter-row flex">
|
<div class="filter-row flex">
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">账号名称/ID/手机号</span>
|
<span class="label">账号名称/ID/手机号</span>
|
||||||
<a-space size="medium">
|
<Input v-model:value="query.search" class="w-240px" placeholder="请搜索..." allowClear @change="handleSearch">
|
||||||
<a-input
|
<template #prefix>
|
||||||
v-model="query.search"
|
<icon-search />
|
||||||
class="w-240px"
|
</template>
|
||||||
placeholder="请搜索..."
|
</Input>
|
||||||
size="medium"
|
|
||||||
allow-clear
|
|
||||||
@change="handleSearch"
|
|
||||||
>
|
|
||||||
<template #prefix>
|
|
||||||
<icon-search />
|
|
||||||
</template>
|
|
||||||
</a-input>
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">状态</span>
|
<span class="label">状态</span>
|
||||||
<a-space class="w-180px">
|
<StatusSelect v-model="query.status" @change="handleSearch" class="w-180px" />
|
||||||
<StatusSelect v-model="query.status" @change="handleSearch" />
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">平台</span>
|
<span class="label">平台</span>
|
||||||
<a-space class="w-160px">
|
<a-select
|
||||||
<a-select v-model="query.platform" size="medium" placeholder="全部" allow-clear @change="handleSearch">
|
v-model="query.platform"
|
||||||
<a-option
|
class="w-160px"
|
||||||
v-for="(item, index) in MEDIA_ACCOUNT_PLATFORMS"
|
size="medium"
|
||||||
:key="index"
|
placeholder="全部"
|
||||||
:value="item.value"
|
allow-clear
|
||||||
:label="item.label"
|
@change="handleSearch"
|
||||||
>{{ item.label }}</a-option
|
>
|
||||||
>
|
<a-option
|
||||||
</a-select>
|
v-for="(item, index) in MEDIA_ACCOUNT_PLATFORMS"
|
||||||
</a-space>
|
:key="index"
|
||||||
|
:value="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
>{{ item.label }}</a-option
|
||||||
|
>
|
||||||
|
</a-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">运营人员</span>
|
<span class="label">运营人员</span>
|
||||||
<a-space class="w-160px">
|
<CommonSelect
|
||||||
<CommonSelect
|
class="w-160px"
|
||||||
v-model="query.operator_id"
|
v-model="query.operator_id"
|
||||||
allowSearch
|
allowSearch
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
:options="operators"
|
:options="operators"
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
/>
|
/>
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row">
|
<div class="filter-row">
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">分组</span>
|
<span class="label">分组</span>
|
||||||
<a-space class="w-200px">
|
<CommonSelect v-model="query.group_ids" multiple :options="groups" @change="handleSearch" class="!w-200px" />
|
||||||
<CommonSelect v-model="query.group_ids" multiple :options="groups" @change="handleSearch" />
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">所属项目</span>
|
<span class="label">所属项目</span>
|
||||||
<a-space class="w-200px">
|
<CommonSelect v-model="query.project_ids" :options="projects" @change="handleSearch" class="!w-200px" />
|
||||||
<CommonSelect v-model="query.project_ids" :options="projects" @change="handleSearch" />
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">标签</span>
|
<span class="label">标签</span>
|
||||||
<a-space class="w-320px">
|
<CommonSelect v-model="query.tag_ids" :options="tags" @change="handleSearch" class="!w-320px" />
|
||||||
<CommonSelect v-model="query.tag_ids" :options="tags" @change="handleSearch" />
|
|
||||||
</a-space>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<Button type="primary" ghost class="w-84px mr-12px"@click="handleSearch">
|
<Button type="primary" ghost class="w-84px mr-12px" @click="handleSearch">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-search class="mr-8px"/>
|
<icon-search class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>搜索</template>
|
<template #default>搜索</template>
|
||||||
</Button>
|
</Button>
|
||||||
<Button class="w-84px" @click="handleReset">
|
<Button class="w-84px" @click="handleReset">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-refresh class="mr-8px"/>
|
<icon-refresh class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>重置</template>
|
<template #default>重置</template>
|
||||||
</Button>
|
</Button>
|
||||||
@ -95,7 +82,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, defineEmits, defineProps } from 'vue';
|
import { reactive, defineEmits, defineProps } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import {
|
import {
|
||||||
fetchAccountTags,
|
fetchAccountTags,
|
||||||
getProjectList,
|
getProjectList,
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
>
|
>
|
||||||
<Form ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
<Form ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
||||||
<FormItem :label="isEdit ? '分组名称' : '新分组名称'" name="name" required>
|
<FormItem :label="isEdit ? '分组名称' : '新分组名称'" name="name" required>
|
||||||
<a-input v-model="form.name" placeholder="请输入…" />
|
<Input v-model:value="form.name" placeholder="请输入…" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, watch, nextTick } from 'vue';
|
import { ref, watch, nextTick } from 'vue';
|
||||||
import { Button, Modal, Form, FormItem } from 'ant-design-vue';
|
import { Button, Modal, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import { postAccountGroups, putGroup } from '@/api/all/propertyMarketing';
|
import { postAccountGroups, putGroup } from '@/api/all/propertyMarketing';
|
||||||
|
|
||||||
const emits = defineEmits(['success', 'close']);
|
const emits = defineEmits(['success', 'close']);
|
||||||
|
|||||||
@ -17,11 +17,11 @@
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="s1 !color-#211F24 mr-12px">分组名称</span>
|
<span class="s1 !color-#211F24 mr-12px">分组名称</span>
|
||||||
<a-space size="medium" class="w-240px">
|
<a-space size="medium" class="w-240px">
|
||||||
<a-input v-model="query.name" placeholder="请搜索..." size="medium" allow-clear @change="reload">
|
<Input v-model:value="query.name" placeholder="请搜索..." size="middle" allowClear @change="reload">
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<Button type="primary" size="middle" @click="openAdd"
|
<Button type="primary" size="middle" @click="openAdd"
|
||||||
@ -82,7 +82,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive, onMounted } from 'vue';
|
import { ref, reactive, onMounted } from 'vue';
|
||||||
import { Button, Modal } from 'ant-design-vue';
|
import { Button, Modal, Input } from 'ant-design-vue';
|
||||||
import { getAccountGroup } from '@/api/all/propertyMarketing';
|
import { getAccountGroup } from '@/api/all/propertyMarketing';
|
||||||
import { exactFormatTime } from '@/utils/tools';
|
import { exactFormatTime } from '@/utils/tools';
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
>
|
>
|
||||||
<Form ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
<Form ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
||||||
<FormItem :label="isEdit ? '标签名称' : '新标签名称'" name="name" required>
|
<FormItem :label="isEdit ? '标签名称' : '新标签名称'" name="name" required>
|
||||||
<a-input v-model="form.name" placeholder="请输入…" />
|
<Input v-model:value="form.name" placeholder="请输入…" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, nextTick } from 'vue';
|
import { ref, nextTick } from 'vue';
|
||||||
import { Button, Modal, Form, FormItem } from 'ant-design-vue';
|
import { Button, Modal, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import { postAccountTags, putTag } from '@/api/all/propertyMarketing';
|
import { postAccountTags, putTag } from '@/api/all/propertyMarketing';
|
||||||
|
|
||||||
const emits = defineEmits(['success', 'close']);
|
const emits = defineEmits(['success', 'close']);
|
||||||
|
|||||||
@ -16,17 +16,22 @@
|
|||||||
<div class="flex items-center justify-between mb-16px">
|
<div class="flex items-center justify-between mb-16px">
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="s1 !color-#211F24 mr-12px">分组名称</span>
|
<span class="s1 !color-#211F24 mr-12px">分组名称</span>
|
||||||
<a-space size="medium" class="w-240px">
|
<Input
|
||||||
<a-input v-model="query.name" placeholder="请搜索..." size="medium" allow-clear @change="handleSearch">
|
v-model:value="query.name"
|
||||||
<template #prefix>
|
placeholder="请搜索..."
|
||||||
<icon-search />
|
class="w-240px"
|
||||||
</template>
|
size="medium"
|
||||||
</a-input>
|
allowClear
|
||||||
</a-space>
|
@change="handleSearch"
|
||||||
|
>
|
||||||
|
<template #prefix>
|
||||||
|
<icon-search />
|
||||||
|
</template>
|
||||||
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
<Button type="primary" @click="openAdd">
|
<Button type="primary" @click="openAdd">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-plus size="16" class="mr-8px"/>
|
<icon-plus size="16" class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>添加新标签</template>
|
<template #default>添加新标签</template>
|
||||||
</Button>
|
</Button>
|
||||||
@ -46,7 +51,7 @@
|
|||||||
<span class="s1 mb-16px">暂无标签</span>
|
<span class="s1 mb-16px">暂无标签</span>
|
||||||
<Button type="primary" class="mb-16px" @click="openAdd">
|
<Button type="primary" class="mb-16px" @click="openAdd">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-plus size="16" class="mr-8px"/>
|
<icon-plus size="16" class="mr-8px" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>去添加</template>
|
<template #default>去添加</template>
|
||||||
</Button>
|
</Button>
|
||||||
@ -61,9 +66,8 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { Button, Modal } from 'ant-design-vue';
|
import { Button, Modal, Input } from 'ant-design-vue';
|
||||||
import { getTagsList } from '@/api/all/propertyMarketing';
|
import { getTagsList } from '@/api/all/propertyMarketing';
|
||||||
|
|
||||||
import AddTag from './add-tag.vue';
|
import AddTag from './add-tag.vue';
|
||||||
import DeleteTag from './delete-tag.vue';
|
import DeleteTag from './delete-tag.vue';
|
||||||
|
|
||||||
|
|||||||
@ -2,30 +2,30 @@
|
|||||||
<div class="table-wrap flex h-448px">
|
<div class="table-wrap flex h-448px">
|
||||||
<div class="left flex-1 pr-12px flex flex-col">
|
<div class="left flex-1 pr-12px flex flex-col">
|
||||||
<div class="flex items-center mb-16px">
|
<div class="flex items-center mb-16px">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.uid"
|
v-model:value="query.uid"
|
||||||
class="w-160px mr-16px"
|
class="w-160px mr-16px"
|
||||||
placeholder="搜索序号"
|
placeholder="搜索序号"
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.title"
|
v-model:value="query.title"
|
||||||
class="w-220px mr-16px"
|
class="w-220px mr-16px"
|
||||||
placeholder="搜索内容稿件标题"
|
placeholder="搜索内容稿件标题"
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
|
|
||||||
<a-select
|
<a-select
|
||||||
v-model="query.uploader_id"
|
v-model="query.uploader_id"
|
||||||
@ -113,7 +113,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { formatTableField, exactFormatTime } from '@/utils/tools';
|
import { formatTableField, exactFormatTime } from '@/utils/tools';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
|
|
||||||
import { getPlacementAccountOperators, getWorksList } from '@/api/all/propertyMarketing';
|
import { getPlacementAccountOperators, getWorksList } from '@/api/all/propertyMarketing';
|
||||||
import { getUserList } from '@/api/all/common';
|
import { getUserList } from '@/api/all/common';
|
||||||
|
|||||||
@ -1,34 +1,45 @@
|
|||||||
<template>
|
<template>
|
||||||
<Form ref="formRef" :model="formQuery" :rules="rules" layout="horizontal" auto-label-width class="h-448px">
|
<Form
|
||||||
|
ref="formRef"
|
||||||
|
:model="formQuery"
|
||||||
|
:rules="rules"
|
||||||
|
layout="horizontal"
|
||||||
|
class="h-448px"
|
||||||
|
labelAlign="right"
|
||||||
|
:labelCol="{ span: 2 }"
|
||||||
|
:wrapperCol="{ span: 21 }"
|
||||||
|
>
|
||||||
<FormItem label="项目名称" required name="name">
|
<FormItem label="项目名称" required name="name">
|
||||||
<a-input v-model="formQuery.name" placeholder="请输入项目名称" size="large" class="!w-400px" />
|
<Input v-model:value="formQuery.name" placeholder="请输入项目名称" size="large" class="!w-400px" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="项目预算" name="budget">
|
<FormItem label="项目预算" name="budget">
|
||||||
<a-input v-model="formQuery.budget" placeholder="请输入项目预算" size="large" class="!w-400px" />
|
<Input v-model:value="formQuery.budget" placeholder="请输入项目预算" size="large" class="!w-400px" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="项目目标" name="target">
|
<FormItem label="项目目标" name="target">
|
||||||
<a-textarea
|
<TextArea
|
||||||
v-model="formQuery.target"
|
v-model:value="formQuery.target"
|
||||||
placeholder="请输入项目目标"
|
placeholder="请输入项目目标"
|
||||||
:max-length="500"
|
class="!h-154px"
|
||||||
show-word-limit
|
:maxlength="500"
|
||||||
class="h-154px"
|
showCount
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="项目背景" name="background">
|
<FormItem label="项目背景" name="background">
|
||||||
<a-textarea
|
<TextArea
|
||||||
v-model="formQuery.background"
|
v-model:value="formQuery.background"
|
||||||
|
class="!h-154px"
|
||||||
placeholder="请输入项目背景"
|
placeholder="请输入项目背景"
|
||||||
:max-length="500"
|
:maxlength="500"
|
||||||
show-word-limit
|
showCount
|
||||||
class="h-154px"
|
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Form, FormItem } from 'ant-design-vue';
|
import { Form, FormItem, Input } from 'ant-design-vue';
|
||||||
|
const { TextArea } = Input;
|
||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
formQuery: {
|
formQuery: {
|
||||||
@ -44,7 +55,7 @@ const rules = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const validate = async () => {
|
const validate = async () => {
|
||||||
return formRef.value.validate()
|
return formRef.value.validate();
|
||||||
};
|
};
|
||||||
|
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
|
|||||||
@ -2,18 +2,18 @@
|
|||||||
<div class="table-wrap flex h-448px">
|
<div class="table-wrap flex h-448px">
|
||||||
<div class="left flex-1 pr-12px flex flex-col">
|
<div class="left flex-1 pr-12px flex flex-col">
|
||||||
<div class="flex items-center mb-16px">
|
<div class="flex items-center mb-16px">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.name"
|
v-model:value="query.name"
|
||||||
class="w-220px mr-16px"
|
class="w-220px mr-16px"
|
||||||
placeholder="搜索账户"
|
placeholder="搜索账户"
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
<a-select
|
<a-select
|
||||||
v-model="query.platform"
|
v-model="query.platform"
|
||||||
class="mr-16px w-160px"
|
class="mr-16px w-160px"
|
||||||
@ -117,7 +117,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { PLATFORM_LIST, getPutAccountPlatformLogo } from '@/utils/platform';
|
import { PLATFORM_LIST, getPutAccountPlatformLogo } from '@/utils/platform';
|
||||||
import { formatTableField } from '@/utils/tools';
|
import { formatTableField } from '@/utils/tools';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
|
|
||||||
import { getPlacementAccountOperators, getPlacementAccountsList } from '@/api/all/propertyMarketing';
|
import { getPlacementAccountOperators, getPlacementAccountsList } from '@/api/all/propertyMarketing';
|
||||||
import { useTableSelectionWithPagination } from '@/hooks/useTableSelectionWithPagination';
|
import { useTableSelectionWithPagination } from '@/hooks/useTableSelectionWithPagination';
|
||||||
|
|||||||
@ -2,18 +2,18 @@
|
|||||||
<div class="table-wrap flex h-448px">
|
<div class="table-wrap flex h-448px">
|
||||||
<div class="left flex-1 pr-12px flex flex-col">
|
<div class="left flex-1 pr-12px flex flex-col">
|
||||||
<div class="flex items-center mb-16px">
|
<div class="flex items-center mb-16px">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.name"
|
v-model:value="query.name"
|
||||||
class="w-220px mr-16px"
|
class="w-220px mr-16px"
|
||||||
placeholder="搜索账号"
|
placeholder="搜索账号"
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
<a-select
|
<a-select
|
||||||
v-model="query.platform"
|
v-model="query.platform"
|
||||||
class="mr-16px w-160px"
|
class="mr-16px w-160px"
|
||||||
@ -115,7 +115,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { MEDIA_ACCOUNT_PLATFORMS, getMediaAccountPlatformLogo } from '@/utils/platform';
|
import { MEDIA_ACCOUNT_PLATFORMS, getMediaAccountPlatformLogo } from '@/utils/platform';
|
||||||
import { formatTableField } from '@/utils/tools';
|
import { formatTableField } from '@/utils/tools';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
|
|
||||||
import { fetchAccountOperators, getMediaAccountList } from '@/api/all/propertyMarketing';
|
import { fetchAccountOperators, getMediaAccountList } from '@/api/all/propertyMarketing';
|
||||||
import { useTableSelectionWithPagination } from '@/hooks/useTableSelectionWithPagination';
|
import { useTableSelectionWithPagination } from '@/hooks/useTableSelectionWithPagination';
|
||||||
|
|||||||
@ -9,22 +9,22 @@
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">项目名称</span>
|
<span class="label">项目名称</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.name"
|
v-model:value="query.name"
|
||||||
class="w-240px"
|
class="w-240px"
|
||||||
placeholder="请搜索..."
|
placeholder="请搜索..."
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<Button type="primary" ghost class="mr-12px"@click="handleSearch">
|
<Button type="primary" ghost class="mr-12px" @click="handleSearch">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-search class="mr-8px"/>
|
<icon-search class="mr-8px"/>
|
||||||
</template>
|
</template>
|
||||||
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { defineEmits, defineProps } from 'vue';
|
import { defineEmits, defineProps } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
query: {
|
query: {
|
||||||
|
|||||||
@ -9,11 +9,11 @@
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">{{ isAccountTab ? '账户名称' : '计划名称' }}</span>
|
<span class="label">{{ isAccountTab ? '账户名称' : '计划名称' }}</span>
|
||||||
<a-space size="medium" class="w-240px">
|
<a-space size="medium" class="w-240px">
|
||||||
<a-input v-model="query.name" placeholder="请搜索..." size="medium" allow-clear @change="handleSearch">
|
<Input v-model:value="query.name" placeholder="请搜索..." size="middle" allowClear @change="handleSearch">
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<SearchOutlined />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!isAccountTab" class="filter-row-item flex items-center">
|
<div v-if="!isAccountTab" class="filter-row-item flex items-center">
|
||||||
@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, defineEmits, defineProps } from 'vue';
|
import { reactive, defineEmits, defineProps } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import {
|
import {
|
||||||
getPlacementAccountProjectGroupsList,
|
getPlacementAccountProjectGroupsList,
|
||||||
getPlacementAccountsList,
|
getPlacementAccountsList,
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
>
|
>
|
||||||
<Form ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
<Form ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
||||||
<FormItem :label="isEdit ? '分组名称' : '新分组名称'" name="name" required>
|
<FormItem :label="isEdit ? '分组名称' : '新分组名称'" name="name" required>
|
||||||
<a-input v-model="form.name" placeholder="请输入…" />
|
<Input v-model:value="form.name" placeholder="请输入…" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, watch, nextTick } from 'vue';
|
import { ref, watch, nextTick } from 'vue';
|
||||||
import { Button, Modal, Form, FormItem } from 'ant-design-vue';
|
import { Button, Modal, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import { postPlacementAccountProjectGroups, putPlacementAccountProjectGroups } from '@/api/all/propertyMarketing';
|
import { postPlacementAccountProjectGroups, putPlacementAccountProjectGroups } from '@/api/all/propertyMarketing';
|
||||||
|
|
||||||
const emits = defineEmits(['success', 'close']);
|
const emits = defineEmits(['success', 'close']);
|
||||||
|
|||||||
@ -17,11 +17,11 @@
|
|||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="s1 !color-#211F24 mr-12px">分组名称</span>
|
<span class="s1 !color-#211F24 mr-12px">分组名称</span>
|
||||||
<a-space size="medium" class="w-240px">
|
<a-space size="medium" class="w-240px">
|
||||||
<a-input v-model="query.name" placeholder="请搜索..." size="medium" allow-clear @change="handleSearch">
|
<Input v-model:value="query.name" placeholder="请搜索..." size="middle" allowClear @change="handleSearch">
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<Button type="primary" size="medium" @click="openAdd"
|
<Button type="primary" size="medium" @click="openAdd"
|
||||||
@ -81,7 +81,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive, onMounted } from 'vue';
|
import { ref, reactive, onMounted } from 'vue';
|
||||||
import { Button, Modal } from 'ant-design-vue';
|
import { Button, Modal, Input } from 'ant-design-vue';
|
||||||
import { getPlacementAccountProjectGroups } from '@/api/all/propertyMarketing';
|
import { getPlacementAccountProjectGroups } from '@/api/all/propertyMarketing';
|
||||||
import { exactFormatTime } from '@/utils/tools';
|
import { exactFormatTime } from '@/utils/tools';
|
||||||
|
|
||||||
|
|||||||
@ -220,7 +220,6 @@ const formRules = {
|
|||||||
if (!value) {
|
if (!value) {
|
||||||
return Promise.reject('请填写手机号');
|
return Promise.reject('请填写手机号');
|
||||||
}
|
}
|
||||||
console.log({ value });
|
|
||||||
if (!/^1[3-9]\d{9}$/.test(value)) {
|
if (!/^1[3-9]\d{9}$/.test(value)) {
|
||||||
return Promise.reject('手机号格式不正确');
|
return Promise.reject('手机号格式不正确');
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -33,10 +33,10 @@
|
|||||||
</template>
|
</template>
|
||||||
<Form v-else ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
<Form v-else ref="formRef" :model="form" :rules="rules" layout="horizontal" auto-label-width>
|
||||||
<FormItem label="账户" name="account">
|
<FormItem label="账户" name="account">
|
||||||
<a-input v-model="form.account" placeholder="请输入..." size="large" />
|
<Input v-model:value="form.account" placeholder="请输入..." size="large" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="密码" name="password">
|
<FormItem label="密码" name="password">
|
||||||
<a-input-password v-model="form.password" placeholder="请输入..." size="large" />
|
<Input.Password v-model:value="form.password" placeholder="请输入..." size="large" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
</template>
|
</template>
|
||||||
@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
// 添加Modal导入
|
// 添加Modal导入
|
||||||
import { Modal, Form, FormItem } from 'ant-design-vue';
|
import { Modal, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button } from 'ant-design-vue';
|
||||||
import { defineExpose, ref, computed, defineEmits } from 'vue';
|
import { defineExpose, ref, computed, defineEmits } from 'vue';
|
||||||
|
|||||||
@ -8,18 +8,18 @@
|
|||||||
<div class="filter-row">
|
<div class="filter-row">
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">账号名称/ID/手机号</span>
|
<span class="label">账号名称/ID/手机号</span>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.search"
|
v-model:value="query.search"
|
||||||
class="w-240px"
|
class="w-240px"
|
||||||
placeholder="请搜索..."
|
placeholder="请搜索..."
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">状态</span>
|
<span class="label">状态</span>
|
||||||
@ -76,7 +76,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { defineEmits, defineProps } from 'vue';
|
import { defineEmits, defineProps } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { getPlacementAccountOperators, getProjectList } from '@/api/all/propertyMarketing';
|
import { getPlacementAccountOperators, getProjectList } from '@/api/all/propertyMarketing';
|
||||||
import { PLATFORM_LIST } from '@/utils/platform';
|
import { PLATFORM_LIST } from '@/utils/platform';
|
||||||
import StatusSelect from '@/views/property-marketing/put-account/components/status-select';
|
import StatusSelect from '@/views/property-marketing/put-account/components/status-select';
|
||||||
|
|||||||
@ -12,33 +12,33 @@
|
|||||||
<div class="filter-row flex mb-16px">
|
<div class="filter-row flex mb-16px">
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">账户名称</span>
|
<span class="label">账户名称</span>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.account_name"
|
v-model:value="query.account_name"
|
||||||
class="w-240px"
|
class="w-240px"
|
||||||
placeholder="请搜索..."
|
placeholder="请搜索..."
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="reload"
|
@change="reload"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item flex items-center">
|
<div class="filter-row-item flex items-center">
|
||||||
<span class="label">账户ID</span>
|
<span class="label">账户ID</span>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.account_id"
|
v-model:value="query.account_id"
|
||||||
class="w-240px"
|
class="w-240px"
|
||||||
placeholder="请搜索..."
|
placeholder="请搜索..."
|
||||||
size="medium"
|
size="medium"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="reload"
|
@change="reload"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -115,7 +115,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { INITIAL_FORM, INITIAL_PAGE_INFO, TABLE_COLUMNS } from './constants';
|
import { INITIAL_FORM, INITIAL_PAGE_INFO, TABLE_COLUMNS } from './constants';
|
||||||
import { formatTableField } from '@/utils/tools';
|
import { formatTableField } from '@/utils/tools';
|
||||||
import { postSubAccount, postAddSubAccount } from '@/api/all/propertyMarketing';
|
import { postSubAccount, postAddSubAccount } from '@/api/all/propertyMarketing';
|
||||||
|
|||||||
@ -9,35 +9,35 @@
|
|||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">内容稿件标题</span>
|
<span class="label">内容稿件标题</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.title"
|
v-model:value="query.title"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
placeholder="请输入内容稿件标题"
|
placeholder="请输入内容稿件标题"
|
||||||
size="medium"
|
size="middle"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">序号</span>
|
<span class="label">序号</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.uid"
|
v-model:value="query.uid"
|
||||||
class="!w-160px"
|
class="!w-160px"
|
||||||
placeholder="请输入序号"
|
placeholder="请输入序号"
|
||||||
size="medium"
|
size="middle"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending">
|
<div class="filter-row-item" v-if="query.audit_status === AuditStatus.Pending">
|
||||||
@ -100,7 +100,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { defineEmits, defineProps } from 'vue';
|
import { defineEmits, defineProps } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { PLATFORMS } from '@/views/writer-material-center/components/finished-products/manuscript/check-list/constants';
|
import { PLATFORMS } from '@/views/writer-material-center/components/finished-products/manuscript/check-list/constants';
|
||||||
import { AuditStatus } from '@/views/writer-material-center/components/finished-products/constants';
|
import { AuditStatus } from '@/views/writer-material-center/components/finished-products/constants';
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Swiper, SwiperSlide } from 'swiper/vue';
|
import { Swiper, SwiperSlide } from 'swiper/vue';
|
||||||
import { Button, Form, FormItem } from 'ant-design-vue';
|
import { Button, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import { IconLoading } from '@arco-design/web-vue/es/icon';
|
import { IconLoading } from '@arco-design/web-vue/es/icon';
|
||||||
import { Image, Input, Textarea, Tabs, Upload, TabPane, Spin, Message as AMessage } from '@arco-design/web-vue';
|
import { Image, Textarea, Tabs, Upload, TabPane, Spin, Message as AMessage } from '@arco-design/web-vue';
|
||||||
import TextOverTips from '@/components/text-over-tips';
|
import TextOverTips from '@/components/text-over-tips';
|
||||||
|
|
||||||
import 'swiper/css';
|
import 'swiper/css';
|
||||||
@ -205,11 +205,11 @@ export default {
|
|||||||
<Form ref={formRef} model={props.modelValue} rules={FORM_RULES} layout="vertical" auto-label-width>
|
<Form ref={formRef} model={props.modelValue} rules={FORM_RULES} layout="vertical" auto-label-width>
|
||||||
<FormItem label="标题" name="title" required>
|
<FormItem label="标题" name="title" required>
|
||||||
<Input
|
<Input
|
||||||
v-model={props.modelValue.title}
|
v-model:value={props.modelValue.title}
|
||||||
placeholder="请输入标题"
|
placeholder="请输入标题"
|
||||||
size="large"
|
size="large"
|
||||||
maxLength={30}
|
maxlength={30}
|
||||||
show-word-limit
|
showCount
|
||||||
disabled={isDisabled.value}
|
disabled={isDisabled.value}
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<script lang="jsx">
|
<script lang="jsx">
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Button, Form, FormItem } from 'ant-design-vue';
|
import { Button, Form, FormItem, Input } from 'ant-design-vue';
|
||||||
import { Input, Textarea, Upload, Message as AMessage } from '@arco-design/web-vue';
|
import { Textarea, Upload, Message as AMessage } from '@arco-design/web-vue';
|
||||||
import CommonSelect from '@/components/common-select';
|
import CommonSelect from '@/components/common-select';
|
||||||
import { VueDraggable } from 'vue-draggable-plus';
|
import { VueDraggable } from 'vue-draggable-plus';
|
||||||
import TextOverTips from '@/components/text-over-tips';
|
import TextOverTips from '@/components/text-over-tips';
|
||||||
@ -312,7 +312,7 @@ export default {
|
|||||||
<Form ref={formRef} model={formData.value} rules={props.rules} layout="vertical" auto-label-width>
|
<Form ref={formRef} model={formData.value} rules={props.rules} layout="vertical" auto-label-width>
|
||||||
<FormItem label="标题" name="title" required>
|
<FormItem label="标题" name="title" required>
|
||||||
<Input
|
<Input
|
||||||
v-model={formData.value.title}
|
v-model:value={formData.value.title}
|
||||||
onInput={() => {
|
onInput={() => {
|
||||||
onChange();
|
onChange();
|
||||||
emit('reValidate');
|
emit('reValidate');
|
||||||
@ -320,14 +320,14 @@ export default {
|
|||||||
placeholder="请输入标题"
|
placeholder="请输入标题"
|
||||||
size="large"
|
size="large"
|
||||||
class="!w-500px"
|
class="!w-500px"
|
||||||
maxLength={30}
|
maxlength={30}
|
||||||
show-word-limit
|
showCount
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem label="作品描述" name="content">
|
<FormItem label="作品描述" name="content">
|
||||||
<Textarea
|
<Textarea
|
||||||
v-model={formData.value.content}
|
v-model:value={formData.value.content}
|
||||||
onInput={onChange}
|
onInput={onChange}
|
||||||
placeholder="请输入作品描述"
|
placeholder="请输入作品描述"
|
||||||
size="large"
|
size="large"
|
||||||
|
|||||||
@ -3,18 +3,18 @@
|
|||||||
<div class="filter-row">
|
<div class="filter-row">
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">内容稿件标题</span>
|
<span class="label">内容稿件标题</span>
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.title"
|
v-model:value="query.title"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
placeholder="请输入内容稿件标题"
|
placeholder="请输入内容稿件标题"
|
||||||
size="medium"
|
size="middle"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="filter-row-item">
|
<!-- <div class="filter-row-item">
|
||||||
<span class="label">所属项目</span>
|
<span class="label">所属项目</span>
|
||||||
@ -29,18 +29,18 @@
|
|||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
<span class="label">序号</span>
|
<span class="label">序号</span>
|
||||||
<a-space size="medium">
|
<a-space size="medium">
|
||||||
<a-input
|
<Input
|
||||||
v-model="query.uid"
|
v-model:value="query.uid"
|
||||||
class="!w-160px"
|
class="!w-160px"
|
||||||
placeholder="请输入序号"
|
placeholder="请输入序号"
|
||||||
size="medium"
|
size="middle"
|
||||||
allow-clear
|
allowClear
|
||||||
@change="handleSearch"
|
@change="handleSearch"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
</a-input>
|
</Input>
|
||||||
</a-space>
|
</a-space>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-row-item">
|
<div class="filter-row-item">
|
||||||
@ -85,7 +85,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { defineEmits, defineProps } from 'vue';
|
import { defineEmits, defineProps } from 'vue';
|
||||||
import { Button } from 'ant-design-vue';
|
import { Button, Input } from 'ant-design-vue';
|
||||||
import { CHECK_STATUS } from '@/views/writer-material-center/components/finished-products/manuscript/list/constants';
|
import { CHECK_STATUS } from '@/views/writer-material-center/components/finished-products/manuscript/list/constants';
|
||||||
import CommonSelect from '@/components/common-select';
|
import CommonSelect from '@/components/common-select';
|
||||||
// import { getProjectList } from '@/api/all/propertyMarketing';
|
// import { getProjectList } from '@/api/all/propertyMarketing';
|
||||||
|
|||||||
Reference in New Issue
Block a user