Merge branch 'dev' of http://60.209.125.238:20010/lijingjia/ds-wms-client-web into szh
commit
6a2fe5987b
@ -1,6 +1,9 @@
|
||||
.icon-locksuo {
|
||||
.icon-locksuo, .icon-duihao1 {
|
||||
color: #17a6a3;
|
||||
}
|
||||
.icon-lock-openkaisuo {
|
||||
color: #7a8798;
|
||||
.icon-lock-openkaisuo, .icon-chahao {
|
||||
color: @msg-color;
|
||||
}
|
||||
.icon-bingtu3 {
|
||||
color: #257afa;
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Author: lijj
|
||||
* @Date: 2024-04-25 15:48:33
|
||||
*/
|
||||
|
||||
import { request } from '/@/utils/request'
|
||||
import { DataResult, PageRequest } from '/@/api/model/baseModel'
|
||||
enum Api {
|
||||
list = '/mainApi/Print/GetOpenPrintTemplateList',
|
||||
modalList = '/mainApi/Print/GetOpenPrintModuleList',
|
||||
edit = '/mainApi/PrintTemplate//EditSysPrintModule',
|
||||
temEidt = '/mainApi/PrintTemplate/EditSysPrintTemplate',
|
||||
temInfo = '/mainApi/PrintTemplate/GetSysPrintTemplateInfo',
|
||||
info = '/mainApi/PrintTemplate/GetSysPrintModuleInfo',
|
||||
delete = '/mainApi/ClientParam/BatchDelClientParam',
|
||||
GetTenantParamDataSelectList = '/mainApi/ClientParam/GetTenantParamDataSelectList'
|
||||
}
|
||||
// 列表 (Auth)
|
||||
export function GetSysPrintTemplateList() {
|
||||
return request<DataResult>({
|
||||
url: Api.list,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
// 模块列表
|
||||
export function GetPrintModuleList(params) {
|
||||
return request<DataResult>({
|
||||
url: Api.modalList,
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
// 模块编辑 (Auth)
|
||||
export function EditSysPrintModule(data: PageRequest) {
|
||||
return request<DataResult>({
|
||||
url: Api.edit,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
// 模块详情 (Auth)
|
||||
export function GetSysPrintModuleInfo(query) {
|
||||
return request<DataResult>({
|
||||
url: Api.info,
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 模版编辑
|
||||
export function EditSysPrintTemplate(data: PageRequest) {
|
||||
return request<DataResult>({
|
||||
url: Api.temEidt,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 模版详情
|
||||
export function GetSysPrintTemplateInfo(data: PageRequest) {
|
||||
return request<DataResult>({
|
||||
url: Api.temInfo,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除 (Auth)
|
||||
export function BatchDelClientParam(data: PageRequest) {
|
||||
return request<DataResult>({
|
||||
url: Api.delete,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function GetTenantParamDataSelectList(query) {
|
||||
return request<DataResult>({
|
||||
url: Api.GetTenantParamDataSelectList,
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
@ -0,0 +1,200 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Author: lijj
|
||||
* @Date: 2024-04-25 15:48:33
|
||||
*/
|
||||
import { ref } from 'vue'
|
||||
import { BasicColumn, FormSchema } from '/@/components/Table'
|
||||
import { useOptionsStore } from '/@/store/modules/options'
|
||||
import { GetPrintModuleList } from './api'
|
||||
const optionsStore = useOptionsStore()
|
||||
const itemNameOption = ref([])
|
||||
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
title: '模版名称',
|
||||
dataIndex: 'templateName',
|
||||
width: 200
|
||||
},
|
||||
{
|
||||
title: '打印类型',
|
||||
dataIndex: 'printType',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: '入口参数',
|
||||
dataIndex: 'inParamColumn',
|
||||
width: 200
|
||||
},
|
||||
{
|
||||
title: '创建时间',
|
||||
dataIndex: 'paramName',
|
||||
width: 200
|
||||
},
|
||||
{
|
||||
title: '备注',
|
||||
dataIndex: 'note',
|
||||
width: 200
|
||||
}
|
||||
]
|
||||
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
{
|
||||
field: 'templateName',
|
||||
label: '模版名称',
|
||||
colProps: { span: 6 },
|
||||
component: 'Input'
|
||||
},
|
||||
]
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
label: '',
|
||||
field: 'id',
|
||||
component: 'Input',
|
||||
defaultValue: '',
|
||||
show: false
|
||||
},
|
||||
{
|
||||
field: 'moduleName',
|
||||
label: '模块名称',
|
||||
required: true,
|
||||
component: 'Input',
|
||||
colProps: { span: 12 }
|
||||
},
|
||||
{
|
||||
field: 'moduleCode',
|
||||
label: '模块编码',
|
||||
required: true,
|
||||
component: 'Input',
|
||||
colProps: { span: 12 }
|
||||
},
|
||||
{
|
||||
field: 'sortNo',
|
||||
label: '排序',
|
||||
component: 'Input',
|
||||
colProps: { span: 12 }
|
||||
},
|
||||
{
|
||||
field: 'disable',
|
||||
label: '是否可用',
|
||||
defaultValue: 0,
|
||||
component: 'RadioButtonGroup',
|
||||
colProps: { span: 12 },
|
||||
componentProps: {
|
||||
options: [
|
||||
{ label: '禁用', value: 1 },
|
||||
{ label: '启用', value: 0 }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'note',
|
||||
label: '备注',
|
||||
component: 'InputTextArea',
|
||||
colProps: { span: 24 }
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
export const temFormSchema: FormSchema[] = [
|
||||
{
|
||||
label: '',
|
||||
field: 'id',
|
||||
component: 'Input',
|
||||
defaultValue: '',
|
||||
show: false
|
||||
},
|
||||
{
|
||||
field: 'moduleName',
|
||||
label: '模版名称',
|
||||
required: true,
|
||||
component: 'Input',
|
||||
colProps: { span: 12 }
|
||||
},
|
||||
{
|
||||
field: 'printType',
|
||||
label: '打印类型',
|
||||
required: true,
|
||||
component: 'Select',
|
||||
colProps: { span: 12 },
|
||||
componentProps: () => {
|
||||
return {
|
||||
options: [
|
||||
{ label: 'PDF', value: 'PDF' },
|
||||
{ label: 'EXCEL', value: 'EXCEL' },
|
||||
{ label: 'WORD', value: 'WORD' },
|
||||
],
|
||||
allowClear: true,
|
||||
showSearch: true,
|
||||
filterOption: (input: string, option: any) => {
|
||||
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '所属模块',
|
||||
field: 'templateCode',
|
||||
component: 'ApiSelect',
|
||||
required: false,
|
||||
dynamicDisabled: false,
|
||||
// defaultValue: '',
|
||||
colProps: { span: 12 },
|
||||
componentProps: ({ formModel }) => {
|
||||
return {
|
||||
api: GetPrintModuleList,
|
||||
allowClear: true,
|
||||
showSearch: true,
|
||||
labelField: 'moduleName',
|
||||
valueField: 'moduleCode',
|
||||
resultField: 'data',
|
||||
filterOption: (input: string, option: any) => {
|
||||
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||
},
|
||||
onChange: (e, obj) => {
|
||||
if (obj) {
|
||||
formModel.templateName = obj.label
|
||||
formModel.moduleId = obj.id
|
||||
} else {
|
||||
formModel.templateName = ''
|
||||
formModel.moduleId = ''
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'templateName',
|
||||
label: '',
|
||||
component: 'Input',
|
||||
show: false
|
||||
},
|
||||
{
|
||||
field: 'moduleId',
|
||||
label: '',
|
||||
component: 'Input',
|
||||
show: false
|
||||
},
|
||||
{
|
||||
field: 'isUseDataSource',
|
||||
label: '是否使用数据源',
|
||||
defaultValue: 0,
|
||||
component: 'RadioButtonGroup',
|
||||
colProps: { span: 12 },
|
||||
componentProps: {
|
||||
options: [
|
||||
{ label: '是', value: 1 },
|
||||
{ label: '否', value: 0 }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'printJsonContent',
|
||||
label: '打印设计内容',
|
||||
component: 'InputTextArea',
|
||||
colProps: { span: 24 },
|
||||
componentProps: {
|
||||
autoSize: { minRows: 3, maxRows: 20 }
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1,110 @@
|
||||
<template>
|
||||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
:use-wrapper="true"
|
||||
:title="getTitle"
|
||||
:form-schema="formSchema"
|
||||
width="50%"
|
||||
@register="registerModal"
|
||||
@ok="handleSave"
|
||||
>
|
||||
<!-- 包装表单 -->
|
||||
<BasicForm @register="registerForm" />
|
||||
<!--右下角按钮-->
|
||||
<template #footer>
|
||||
<a-button
|
||||
pre-icon="ant-design:close-outlined"
|
||||
type="warning"
|
||||
:loading="loading"
|
||||
ghost
|
||||
style="margin-right: 0.8rem"
|
||||
@click="closeModal"
|
||||
>
|
||||
取消
|
||||
</a-button>
|
||||
<a-button
|
||||
type="success"
|
||||
:loading="loading"
|
||||
pre-icon="ant-design:check-outlined"
|
||||
style="margin-right: 0.8rem"
|
||||
@click="handleSave(false)"
|
||||
>
|
||||
仅保存
|
||||
</a-button>
|
||||
<a-button
|
||||
pre-icon="ant-design:check-circle-outlined"
|
||||
type="primary"
|
||||
:loading="loading"
|
||||
@click="handleSave(true)"
|
||||
>
|
||||
保存并关闭
|
||||
</a-button>
|
||||
</template>
|
||||
</BasicModal>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, computed, unref } from 'vue'
|
||||
// 弹窗组件
|
||||
import { BasicModal, useModalInner } from '/@/components/Modal'
|
||||
import { BasicForm, useForm } from '/@/components/Form/index'
|
||||
// 表单字段数据
|
||||
import { formSchema } from '../columns'
|
||||
// 相关接口
|
||||
import { EditSysPrintModule, GetSysPrintModuleInfo } from '../api'
|
||||
// 提示消息混入
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
// 声明Emits
|
||||
const emit = defineEmits(['success', 'register'])
|
||||
const isUpdate = ref(true)
|
||||
// 按钮loading
|
||||
const loading = ref(false)
|
||||
const rowId = ref('')
|
||||
const { createMessage } = useMessage()
|
||||
const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] =
|
||||
useForm({
|
||||
labelWidth: 100,
|
||||
schemas: formSchema,
|
||||
showActionButtonGroup: false,
|
||||
})
|
||||
|
||||
const [registerModal, { setModalProps, closeModal, updateFormField }] = useModalInner(async (data) => {
|
||||
resetFields()
|
||||
setModalProps({ confirmLoading: false, loading: true })
|
||||
isUpdate.value = !!data?.isUpdate
|
||||
if (unref(isUpdate)) {
|
||||
setModalProps({ confirmLoading: true });
|
||||
updateFormField(updateSchema)
|
||||
rowId.value = data.record.id
|
||||
const res: API.DataResult = await GetSysPrintModuleInfo({ id: unref(rowId) })
|
||||
if (res.succeeded) {
|
||||
setFieldsValue({
|
||||
...res.data,
|
||||
})
|
||||
}
|
||||
} else {
|
||||
setFieldsValue({ permissionIdentity: unref(2) })
|
||||
}
|
||||
setModalProps({ loading: false })
|
||||
})
|
||||
|
||||
const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'))
|
||||
|
||||
async function handleSave(exit) {
|
||||
try {
|
||||
const values = await validate()
|
||||
loading.value = true
|
||||
setModalProps({ confirmLoading: true, loading: true })
|
||||
const res: API.DataResult = await EditSysPrintModule(values)
|
||||
loading.value = false
|
||||
if (res.succeeded) {
|
||||
createMessage.success(res.message)
|
||||
emit('success')
|
||||
} else {
|
||||
createMessage.error(res.message)
|
||||
}
|
||||
exit && closeModal()
|
||||
} finally {
|
||||
setModalProps({ confirmLoading: false, loading: false })
|
||||
}
|
||||
}
|
||||
</script>
|
@ -0,0 +1,110 @@
|
||||
<template>
|
||||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
:use-wrapper="true"
|
||||
:title="getTitle"
|
||||
:form-schema="formSchema"
|
||||
width="50%"
|
||||
@register="registerModal"
|
||||
@ok="handleSave"
|
||||
>
|
||||
<!-- 包装表单 -->
|
||||
<BasicForm @register="registerForm" />
|
||||
<!--右下角按钮-->
|
||||
<template #footer>
|
||||
<a-button
|
||||
pre-icon="ant-design:close-outlined"
|
||||
type="warning"
|
||||
:loading="loading"
|
||||
ghost
|
||||
style="margin-right: 0.8rem"
|
||||
@click="closeModal"
|
||||
>
|
||||
取消
|
||||
</a-button>
|
||||
<a-button
|
||||
type="success"
|
||||
:loading="loading"
|
||||
pre-icon="ant-design:check-outlined"
|
||||
style="margin-right: 0.8rem"
|
||||
@click="handleSave(false)"
|
||||
>
|
||||
仅保存
|
||||
</a-button>
|
||||
<a-button
|
||||
pre-icon="ant-design:check-circle-outlined"
|
||||
type="primary"
|
||||
:loading="loading"
|
||||
@click="handleSave(true)"
|
||||
>
|
||||
保存并关闭
|
||||
</a-button>
|
||||
</template>
|
||||
</BasicModal>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, computed, unref } from 'vue'
|
||||
// 弹窗组件
|
||||
import { BasicModal, useModalInner } from '/@/components/Modal'
|
||||
import { BasicForm, useForm } from '/@/components/Form/index'
|
||||
// 表单字段数据
|
||||
import { temFormSchema } from '../columns'
|
||||
// 相关接口
|
||||
import { EditSysPrintTemplate, GetSysPrintTemplateInfo } from '../api'
|
||||
// 提示消息混入
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
// 声明Emits
|
||||
const emit = defineEmits(['success', 'register'])
|
||||
const isUpdate = ref(true)
|
||||
// 按钮loading
|
||||
const loading = ref(false)
|
||||
const rowId = ref('')
|
||||
const { createMessage } = useMessage()
|
||||
const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] =
|
||||
useForm({
|
||||
labelWidth: 100,
|
||||
schemas: temFormSchema,
|
||||
showActionButtonGroup: false,
|
||||
})
|
||||
|
||||
const [registerModal, { setModalProps, closeModal, updateFormField }] = useModalInner(async (data) => {
|
||||
resetFields()
|
||||
setModalProps({ confirmLoading: false, loading: true })
|
||||
isUpdate.value = !!data?.isUpdate
|
||||
if (unref(isUpdate)) {
|
||||
setModalProps({ confirmLoading: true });
|
||||
updateFormField(updateSchema)
|
||||
rowId.value = data.record.id
|
||||
const res: API.DataResult = await GetSysPrintTemplateInfo({ id: unref(rowId) })
|
||||
if (res.succeeded) {
|
||||
setFieldsValue({
|
||||
...res.data,
|
||||
})
|
||||
}
|
||||
} else {
|
||||
setFieldsValue({ permissionIdentity: unref(2) })
|
||||
}
|
||||
setModalProps({ loading: false })
|
||||
})
|
||||
|
||||
const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'))
|
||||
|
||||
async function handleSave(exit) {
|
||||
try {
|
||||
const values = await validate()
|
||||
loading.value = true
|
||||
setModalProps({ confirmLoading: true, loading: true })
|
||||
const res: API.DataResult = await EditSysPrintTemplate(values)
|
||||
loading.value = false
|
||||
if (res.succeeded) {
|
||||
createMessage.success(res.message)
|
||||
emit('success')
|
||||
} else {
|
||||
createMessage.error(res.message)
|
||||
}
|
||||
exit && closeModal()
|
||||
} finally {
|
||||
setModalProps({ confirmLoading: false, loading: false })
|
||||
}
|
||||
}
|
||||
</script>
|
@ -0,0 +1,219 @@
|
||||
<template>
|
||||
<div class="ds-print-tem">
|
||||
<div class="flex">
|
||||
<div class="opt">
|
||||
<a-button
|
||||
type="link"
|
||||
@click="handleCreate"
|
||||
>
|
||||
<span class="iconfont icon-new_document"></span>
|
||||
添加模块
|
||||
</a-button>
|
||||
<a-spin :spinning="mloading">
|
||||
<div class="list-box">
|
||||
<div v-for="item in modelList" :key="item.id" class="item" @click="toggleTable(item)">
|
||||
<span class="count">{{ item.templateCount }}</span><span>{{ item.moduleName }}</span>
|
||||
<span style="float: right" class="iconfont icon-bianji1" @click="handleEdit(item)"></span>
|
||||
</div>
|
||||
<img v-if="modelList.length == 0" src="../../../assets/images/nodata1.png" alt="">
|
||||
</div>
|
||||
</a-spin>
|
||||
</div>
|
||||
<BasicTable
|
||||
class="ds-table"
|
||||
@register="registerTable"
|
||||
>
|
||||
<template #toolbar>
|
||||
<a-button type="link" @click="createTem">
|
||||
<span class="iconfont icon-tianjia"></span>
|
||||
新建
|
||||
</a-button>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'action'">
|
||||
<TableAction
|
||||
:actions="[
|
||||
{
|
||||
icon: 'clarity:note-edit-line',
|
||||
tooltip: '编辑',
|
||||
onClick: handleEdit.bind(null, record),
|
||||
},
|
||||
{
|
||||
icon: 'ant-design:delete-outlined',
|
||||
tooltip: '删除',
|
||||
color: 'error',
|
||||
popConfirm: {
|
||||
title: '是否要删除此条数据?',
|
||||
okText: '是',
|
||||
cancelText: '否',
|
||||
confirm: handleDelete.bind(null, record)
|
||||
}
|
||||
}
|
||||
]"
|
||||
/>
|
||||
</template>
|
||||
</template>
|
||||
</BasicTable>
|
||||
</div>
|
||||
<!-- 新增模块弹窗 -->
|
||||
<Modal @register="registerModal" @success="handleSuccess" />
|
||||
<!-- 模版弹窗 -->
|
||||
<temModal @register="registerTemModal" @success="temSuccess" />
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { BasicTable, useTable, TableAction } from '/@/components/Table'
|
||||
import { formatParams } from '/@/hooks/web/common'
|
||||
import { GetSysPrintTemplateList, GetPrintModuleList, BatchDelClientParam } from './api'
|
||||
import { useModal } from '/@/components/Modal'
|
||||
// 模块弹窗
|
||||
import Modal from './components/Modal.vue'
|
||||
// 模版弹窗
|
||||
import temModal from './components/temModal.vue'
|
||||
import { columns, searchFormSchema } from './columns'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
const { notification } = useMessage()
|
||||
// 模块弹窗
|
||||
const [registerModal, { openModal: openModal1 }] = useModal()
|
||||
// 模版弹窗
|
||||
const [registerTemModal, { openModal: openModal2 }] = useModal()
|
||||
// 模块列表
|
||||
const modelList = ref([])
|
||||
const mloading = ref(false)
|
||||
const [registerTable, { reload, getForm, getPaginationRef }] = useTable({
|
||||
api: async (p) => {
|
||||
const res: API.DataResult = await GetSysPrintTemplateList(p)
|
||||
return new Promise((resolve) => {
|
||||
resolve({ data: [...res.data], total: res.count })
|
||||
})
|
||||
},
|
||||
beforeFetch: (p) => {
|
||||
if (modalId) {
|
||||
p['id'] = modalId
|
||||
}
|
||||
initModel()
|
||||
return formatParams(p)
|
||||
},
|
||||
columns,
|
||||
formConfig: {
|
||||
labelWidth: 120,
|
||||
schemas: searchFormSchema,
|
||||
},
|
||||
isTreeTable: false,
|
||||
pagination: true,
|
||||
striped: true,
|
||||
useSearchForm: true,
|
||||
showTableSetting: true,
|
||||
bordered: true,
|
||||
showIndexColumn: true,
|
||||
canResize: false,
|
||||
actionColumn: {
|
||||
width: 80,
|
||||
title: '操作',
|
||||
dataIndex: 'action',
|
||||
fixed: 'right',
|
||||
},
|
||||
})
|
||||
// 初始化模块数据
|
||||
const initModel = () => {
|
||||
mloading.value = true
|
||||
GetPrintModuleList().then(res => {
|
||||
modelList.value = res.data
|
||||
mloading.value = false
|
||||
}).catch(() => {
|
||||
mloading.value = false
|
||||
})
|
||||
}
|
||||
// 添加模块
|
||||
function handleCreate() {
|
||||
openModal1(true, {
|
||||
isUpdate: false,
|
||||
})
|
||||
}
|
||||
// 创建模版
|
||||
const createTem = () => {
|
||||
openModal2(true, {
|
||||
isUpdate: false,
|
||||
})
|
||||
}
|
||||
// 编辑模块
|
||||
function handleEdit(record) {
|
||||
openModal1(true, {
|
||||
record,
|
||||
isUpdate: true,
|
||||
})
|
||||
}
|
||||
// 存选中的模块id
|
||||
let modalId = ''
|
||||
// 切换表格
|
||||
const toggleTable = (item) => {
|
||||
modalId = item.id
|
||||
reload()
|
||||
}
|
||||
// 删除
|
||||
async function handleDelete(record: Recordable) {
|
||||
const res: API.DataResult = await BatchDelClientParam({
|
||||
id: '',
|
||||
ids: [record.id],
|
||||
})
|
||||
if (res.succeeded) {
|
||||
notification.success({ message: res.message, duration: 3 })
|
||||
reload()
|
||||
} else {
|
||||
notification.error({ message: res.message, duration: 3 })
|
||||
}
|
||||
}
|
||||
onMounted(() => {
|
||||
//初始化字典选项
|
||||
})
|
||||
function handleSuccess() {
|
||||
initModel()
|
||||
}
|
||||
const temSuccess = () => {
|
||||
reload()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.ds-print-tem {
|
||||
.opt {
|
||||
padding: 10px;
|
||||
}
|
||||
.list-box {
|
||||
border: 1px solid #E8EBED;
|
||||
border-radius: 2px;
|
||||
margin: 0 10px;
|
||||
width: 210px;
|
||||
padding: 16px 20px;
|
||||
img {
|
||||
margin: 20px 0 40px;
|
||||
}
|
||||
.item {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.count {
|
||||
width: 32px;
|
||||
height: 20px;
|
||||
border-radius: 2px;
|
||||
background: #F5F9FC;
|
||||
display: inline-block;
|
||||
color: #257AFA;
|
||||
text-align: center;
|
||||
line-height: 19px;
|
||||
margin-right: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.icon-bianji1 {
|
||||
margin-top: 3px;
|
||||
color: #257AFA;
|
||||
display: none;
|
||||
}
|
||||
.item:hover {
|
||||
.icon-bianji1 {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue