Commit c2b3f6d6 authored by 廖旭伟's avatar 廖旭伟

Merge remote-tracking branch 'origin/master'

parents b9b4a0d7 f5a933de
-- ----------------------------
2023-9-11
-- 2023-9-11
-- ----------------------------
ALTER TABLE mortals_xhx_user ADD COLUMN `staffId` varchar(64) COMMENT '员工Id,关联用户员工表';
ALTER TABLE mortals_xhx_user ADD COLUMN `openId` varchar(64) COMMENT '微信openId';
......@@ -108,3 +108,10 @@ CREATE TABLE mortals_xhx_news_up(
PRIMARY KEY (`id`)
,KEY `upName` (`upName`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='新闻点赞记录信息';
-- ----------------------------
-- 2024-12-5
-- ----------------------------
ALTER TABLE mortals_xhx_company ADD COLUMN `background` varchar(256) default '' COMMENT '背景图片';
#开发环境
NODE_ENV = "development"
VUE_APP_API_BASE_URL= http://192.168.0.98:11086
......@@ -2,6 +2,7 @@
height: 100% !important;
}
.layout-menu-wrapper {
padding: 0 24px;
height: 64px !important;
line-height: 64px !important;
background: linear-gradient(90deg, #1845c6, #2999ff) !important;
......@@ -9,6 +10,13 @@
.layout-menu-wrapper .layout-logo {
font-size: 20px;
font-weight: bold;
width: 200px;
}
.layout-menu-wrapper .menu-list {
margin-left: 50px;
}
.layout-menu-wrapper .menu-list li {
padding: 0 20px;
}
.layout-menu-wrapper .menu-list li a {
display: block;
......
......@@ -3,6 +3,7 @@
}
.layout-menu-wrapper {
padding: 0 24px;
height: 64px !important;
line-height: 64px !important;
background: linear-gradient(90deg, #1845c6, #2999ff) !important;
......@@ -10,16 +11,19 @@
.layout-logo {
font-size: 20px;
font-weight: bold;
width: 200px;
}
.menu-list {
margin-left: 50px;
li {
padding: 0 20px;
a {
display: block;
padding: 0 12px;
height: 100%;
font-size: 14px !important;
color: rgba(254, 254, 254, .65) !important;
color: rgba(254, 254, 254, 0.65) !important;
text-align: center !important;
i {
......@@ -33,7 +37,6 @@
&:hover {
color: #fff !important;
}
&.router-link-active,
......@@ -47,10 +50,7 @@
}
}
}
}
}
.layout-header .layout-submenu-wrapper {
......
export const timestampToTime = (timestamp, transLength) => {
// 时间戳为10位需*1000,时间戳为13位不需乘1000
let date = null;
if (timestamp) {
if (timestamp.length < 13) {
date = new Date(timestamp * 1000);
} else {
date = new Date(timestamp);
}
let Y = date.getFullYear() + "-";
let M =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
let D =
date.getDate() < 10 ? "-" + "0" + date.getDate() : "-" + date.getDate();
let h =
" " +
(date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) +
":";
let m =
(date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()) +
":";
let s =
date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
switch (transLength) {
case 2:
return Y + M;
case 3:
return Y + M + D;
case 6:
return Y + M + D + h + m + s;
}
} else {
return "";
}
};
// 小时:分钟 ==》 转分钟
export const transFormMinut = (String) => {
if (typeof String === "number") {
return;
}
if (!String) {
return 0;
}
let arr = String.split(":");
let hour =
arr[0].indexOf("0") === 0 ? arr[0].substring(1, arr[0].length) : arr[0];
let minu =
arr[1].indexOf("0") === 0 ? arr[1].substring(1, arr[1].length) : arr[1];
return hour * 60 + minu * 1;
// return JSON.stringify(hour * 60 + minu * 1);
};
// // 分钟 ==》 小时
export const transFormTime = (num) => {
if (typeof num != "string" && num !== 0) {
return Math.floor(num / 60).toString() + ":" + (num % 60).toString();
} else {
return "0:00";
}
};
//当前月第一天
export const getFirstDay = () => {
let y = new Date().getFullYear(); //获取年份
let m = new Date().getMonth() + 1; //获取月份
let d = "01";
m = m < 10 ? "0" + m : m; //月份补 0
return [y, m, d].join("-");
};
//当前月最后一天
export const getLastDay = () => {
let y = new Date().getFullYear(); //获取年份
let m = new Date().getMonth() + 1; //获取月份
let d = new Date(y, m, 0).getDate(); //获取当月最后一日
m = m < 10 ? "0" + m : m; //月份补 0
d = d < 10 ? "0" + d : d; //日数补 0
return [y, m, d].join("-");
};
//获取两日期之间日期列表函数
export const getdiffdate = (stime, etime) => {
//初始化日期列表,数组
let diffdate = new Array();
let i = 0;
//开始日期小于等于结束日期,并循环
while (stime <= etime) {
diffdate[i] = stime;
//获取开始日期时间戳
let stime_ts = new Date(stime).getTime();
//增加一天时间戳后的日期
let next_date = stime_ts + 24 * 60 * 60 * 1000;
//拼接年月日,这里的月份会返回(0-11),所以要+1
let next_dates_y = new Date(next_date).getFullYear() + "-";
let next_dates_m =
new Date(next_date).getMonth() + 1 < 10
? "0" + (new Date(next_date).getMonth() + 1) + "-"
: new Date(next_date).getMonth() + 1 + "-";
let next_dates_d =
new Date(next_date).getDate() < 10
? "0" + new Date(next_date).getDate()
: new Date(next_date).getDate();
stime = next_dates_y + next_dates_m + next_dates_d;
//增加数组key
i++;
}
return diffdate;
};
// 获取某个日期是周几
export const getMyDay = (date) => {
let week;
if (date.getDay() == 0) week = "周日";
if (date.getDay() == 1) week = "周一";
if (date.getDay() == 2) week = "周二";
if (date.getDay() == 3) week = "周三";
if (date.getDay() == 4) week = "周四";
if (date.getDay() == 5) week = "周五";
if (date.getDay() == 6) week = "周六";
return week;
};
// 求两个日期的 分钟差
export const getMinu = (s1, s2) => {
var reDate = /\d{4}-\d{1,2}-\d{1,2} /;
s1 = new Date((reDate.test(s1) ? s1 : "2023-01-01 " + s1).replace(/-/g, "/"));
s2 = new Date((reDate.test(s2) ? s2 : "2023-01-01 " + s2).replace(/-/g, "/"));
var ms = s2.getTime() - s1.getTime();
if (ms < 0) return 0;
return Math.floor(ms / 1000 / 60); //分钟
};
// 求两个日期的 秒差
export const getSec = (s1, s2) => {
var reDate = /\d{4}-\d{1,2}-\d{1,2} /;
s1 = new Date((reDate.test(s1) ? s1 : "2023-01-01 " + s1).replace(/-/g, "/"));
s2 = new Date((reDate.test(s2) ? s2 : "2023-01-01 " + s2).replace(/-/g, "/"));
var ms = s2.getTime() - s1.getTime();
if (ms < 0) return 0;
return Math.floor(ms / 1000); //秒
};
// 表单节点封装,支持 input textarea select radio checkbox 及slot方式
<template>
<el-col :span='span'>
<el-form-item :label="label" :prop="prop" class='my-form-field'>
<el-col :span="span">
<el-form-item :label="label" :prop="prop" class="my-form-field">
<slot>
<el-input :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" v-if='type === "text"' :class="inputClass" :clearable='clearable'></el-input>
<el-input :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" type='password' v-if='type === "password"'></el-input>
<el-input-number :disabled='disabled' v-model="field" size="small" :placeholder='placeholder' @change="emit" @input="emit" v-if='type === "num"'></el-input-number>
<el-input
:disabled="disabled"
:placeholder="placeholder"
v-model="field"
@change="emit"
@input="emit"
v-if="type === 'text'"
:class="inputClass"
:clearable="clearable"
></el-input>
<el-input
:disabled="disabled"
:placeholder="placeholder"
v-model="field"
@change="emit"
@input="emit"
type="password"
v-if="type === 'password'"
></el-input>
<el-input-number
:disabled="disabled"
v-model="field"
size="small"
:placeholder="placeholder"
@change="emit"
@input="emit"
v-if="type === 'num'"
></el-input-number>
<el-input :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" :rows='rows' @input="emit" v-if='type === "textarea"' type='textarea' :autosize="textareaSize" :class="inputClass"></el-input>
<el-input
:disabled="disabled"
:placeholder="placeholder"
v-model="field"
@change="emit"
:rows="rows"
@input="emit"
v-if="type === 'textarea'"
type="textarea"
:autosize="textareaSize"
:class="inputClass"
></el-input>
<el-select :disabled='disabled' v-model="field" @change="emit" :multiple='multiple' :filterable='filterable' :clearable='clearable' v-if='type === "select"'>
<el-select
:disabled="disabled"
v-model="field"
@change="emit"
:multiple="multiple"
:filterable="filterable"
:clearable="clearable"
v-if="type === 'select'"
>
<el-option
v-for="($label, $value) in enumData"
:key="$value"
......@@ -21,25 +63,54 @@
></el-option>
</el-select>
<el-radio-group :disabled='disabled' v-model="field" @change="emit" v-if='type === "radio"'>
<el-radio-group
:disabled="disabled"
v-model="field"
@change="emit"
v-if="type === 'radio'"
>
<el-radio
v-for='($label, $value) in enumData'
:key='$value'
v-for="($label, $value) in enumData"
:key="$value"
:label="$value"
>{{$label}}</el-radio>
>{{ $label }}</el-radio
>
</el-radio-group>
<el-checkbox-group :disabled='disabled' v-model="field" @change="emit" v-if='type === "checkbox"'>
<el-checkbox-group
:disabled="disabled"
v-model="field"
@change="emit"
v-if="type === 'checkbox'"
>
<el-checkbox
v-for='($label, $value) in enumData'
:key='$value'
v-for="($label, $value) in enumData"
:key="$value"
:label="$value"
>{{$label}}</el-checkbox>
>{{ $label }}</el-checkbox
>
</el-checkbox-group>
<el-date-picker :disabled='disabled' type="date" value-format="yyyy-MM-dd HH:mm:ss" v-model="field" @change="emit" @input="emit" placeholder="选择日期" v-if='type === "date"'></el-date-picker>
<el-date-picker :disabled='disabled' type="datetime" value-format="yyyy-MM-dd HH:mm:ss" v-model="field" @change="emit" @input="emit" placeholder="选择日期" v-if='type === "datetime"'></el-date-picker>
<el-date-picker
:disabled="disabled"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
v-model="field"
@change="emit"
@input="emit"
placeholder="选择日期"
v-if="type === 'date'"
></el-date-picker>
<el-date-picker
:disabled="disabled"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
v-model="field"
@change="emit"
@input="emit"
placeholder="选择日期"
v-if="type === 'datetime'"
></el-date-picker>
</slot>
</el-form-item>
</el-col>
......@@ -60,17 +131,17 @@ export default {
// 字段类型: text,password,textarea,select,radio,checkbox,date,datetime
type: {
type: String,
default: 'text',
default: "text",
},
// 字段name
prop: {
type: String,
default: '',
default: "",
},
// 字段中文标题
label: {
type: String,
default: '',
default: "",
},
// 是否禁用
disabled: {
......@@ -80,18 +151,18 @@ export default {
// 是否提示
placeholder: {
type: String,
default: '',
default: "",
},
// 字段所需的枚举类型
enumData: {
type: Object,
default: ()=>{},
default: () => {},
},
// textarea专用-自适应内容高度
textareaSize: {
type: Object,
default: ()=>{},
default: () => {},
},
// select专用-是否可搜索
filterable: {
......@@ -111,38 +182,39 @@ export default {
// 字段所需的枚举类型
options: {
type: Array,
default: ()=>[],
default: () => [],
},
children: {
type: Array,
default: ()=>[],
default: () => [],
},
inputClass: {
type: String,
default: '',
}
default: "",
},
},
methods: {
emit() {
this.$emit('input', this.newVal)
this.$emit('change', this.newVal)
}
this.$emit("input", this.newVal);
this.$emit("change", this.newVal);
console.log(this.newVal);
},
},
computed: {
field: {
get() {
return this.value
return this.value;
},
set(val) {
this.newVal = val;
}
}
},
},
},
data() {
return {
newVal: this.value,
}
}
}
};
},
};
</script>
......@@ -11,11 +11,11 @@
<router-link to="/">
<img
:src="sysLogo ? sysLogo : require('../assets/images/logo.png')"
style="margin-bottom:5px"
style="margin-bottom: 5px"
height="40"
alt=""
/>
<b style="color:white;font-size:18px;"
<b style="color: white; font-size: 18px"
>&nbsp;&nbsp;&nbsp;
{{ sysName ? sysName : "企业服务平台" }}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b
......@@ -43,7 +43,7 @@
</span> -->
<el-dropdown @command="handleCommand">
<span class="el-dropdown-link" style="color:white">
<span class="el-dropdown-link" style="color: white">
{{ userData.currUserName }}
<i class="el-icon-arrow-down el-icon--right"></i>
</span>
......@@ -249,9 +249,7 @@ export default {
}
}
}
.layout-profile {
padding-right: 30px;
}
}
.layout-submenu-wrapper {
......
......@@ -2,7 +2,7 @@
<template>
<div class="component-upload-image">
<el-upload
:action="uploadImgUrl+'?prePath=' +prePath"
:action="uploadImgUrl + '?prePath=' + prePath"
list-type="picture-card"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
......@@ -11,14 +11,22 @@
:show-file-list="false"
:headers="headers"
style="display: inline-block; vertical-align: top"
v-if="!isList"
>
<el-image
v-if="!value"
:src="value.indexOf('http') == -1 ? baseUrl + value : value"
>
<el-image v-if="!value" :src="value">
<div slot="error" class="image-slot">
<i class="el-icon-plus" />
</div>
</el-image>
<div v-else class="image">
<el-image :src="value" :style="`width:150px;height:150px;`" fit="fill"/>
<el-image
:src="value.indexOf('http') == -1 ? baseUrl + value : value"
:style="`width:150px;height:150px;`"
fit="fill"
/>
<div class="mask">
<div class="actions">
<span title="预览" @click.stop="dialogVisible = true">
......@@ -31,8 +39,36 @@
</div>
</div>
</el-upload>
<el-dialog :visible.sync="dialogVisible" title="预览" width="800" append-to-body>
<img :src="value" style="display: block; max-width: 100%; margin: 0 auto;">
<el-upload
:action="uploadImgUrl + '?prePath=' + prePath"
list-type="picture-card"
:on-remove="handleRemove"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:on-preview="handlePictureCardPreview"
:file-list="imgList"
accept=".jpeg,.png,.jpg,.bmp,.gif"
:headers="headers"
v-else
>
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog
:visible.sync="dialogVisible"
title="预览"
width="800"
append-to-body
>
<img
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
v-if="isList"
/>
<img
:src="value"
style="display: block; max-width: 100%; margin: 0 auto"
v-else
/>
</el-dialog>
</div>
</template>
......@@ -41,8 +77,11 @@
export default {
data() {
return {
baseUrl: process.env.VUE_APP_API_BASE_URL + "/",
dialogVisible: false,
uploadImgUrl: "/enterprise/file/commonupload", // 上传的图片服务器地址
imgList: [],
dialogImageUrl: "",
};
},
props: {
......@@ -53,16 +92,52 @@ export default {
//保存服务器路径前缀地址
prePath: {
type: String,
default: '',
default: "",
},
isList: {
type: Boolean,
default: false,
},
},
mounted() {
// 判断是否为多图上传
if (this.isList) {
if (this.value && this.value != "") {
this.imgList = [];
let arr = [];
arr = this.value?.split(",");
arr.forEach((v) => {
let obj = {};
obj.name = "轮播图";
obj.uid = parseInt(Math.random(0, 100));
v.indexOf("http") == -1
? (obj.url = this.baseUrl + v)
: (obj.url = v);
this.imgList.push(obj);
});
}
}
},
methods: {
handleRemove(file, fileList) {
console.log(fileList);
this.imgList = fileList;
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
removeImage() {
this.$emit("input", "");
},
handleUploadSuccess(res) {
handleUploadSuccess(res, file, fileList) {
if (this.isList) {
this.loading.close();
this.imgList = fileList;
} else {
this.$emit("input", res.url);
this.loading.close();
}
},
handleBeforeUpload() {
this.loading = this.$loading({
......
......@@ -7,10 +7,29 @@
:destroy-on-close="true"
size="80%"
>
<el-form ref="form" :model="form" :rules="rules" label-width="140px" style="padding:0 40px;">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="140px"
style="padding: 0 40px"
>
<el-row>
<Field
label="企业名称"
prop="companyName"
v-model="form.companyName"
placeholder="请输入企业名称"
/>
</el-row>
<el-row>
<Field label="企业名称" prop="companyName" v-model="form.companyName" placeholder="请输入企业名称" />
<Field label="联系电话" prop="contactPhone" v-model="form.contactPhone" placeholder="请输入联系电话" />
<Field
label="联系电话"
prop="contactPhone"
v-model="form.contactPhone"
placeholder="请输入联系电话"
/>
</el-row>
<!-- <Field label="公司编码" prop="companyCode" v-model="form.companyCode" placeholder="请输入公司编码"/>
<Field label="注册号" prop="registrationNumber" v-model="form.registrationNumber" placeholder="请输入注册号"/>
<Field label="法定代表人" prop="legalRepresentative" v-model="form.legalRepresentative" placeholder="请输入法定代表人"/>
......@@ -21,18 +40,28 @@
<p>当前选中的行政区划编码为: {{regionCodeList}}</p>
<el-cascader v-model="regionCodeList" :props="areaprops"></el-cascader>
</Field>-->
<el-row>
<Field
:span="24"
label="经营地址"
prop="businessAdress"
placeholder="请输入经营地址"
>
<area-select ref="areaselect" v-model="form.areaCode" @addressSelect="addressSelect"></area-select>
<area-select
ref="areaselect"
v-model="form.areaCode"
@addressSelect="addressSelect"
></area-select>
</Field>
</el-row>
<el-row>
<!-- <Field label="所在地" prop="location" v-model="form.location" placeholder="请输入所在地"/> -->
<Field prop="location" v-model="form.location" placeholder="请输入详细地址" />
<Field
prop="location"
v-model="form.location"
placeholder="请输入详细地址"
/>
</el-row>
<!-- <Field label="电子邮件地址" prop="email" v-model="form.email" placeholder="请输入电子邮件地址"/>
<Field label="公司网站" prop="website" v-model="form.website" placeholder="请输入公司网站"/>
<Field label="税务登记号" prop="taxRegistrationNumber" v-model="form.taxRegistrationNumber" placeholder="请输入税务登记号"/>
......@@ -48,10 +77,27 @@
<!-- <Field label="公司文化" prop="companyCulture" v-model="form.companyCulture" type="textarea" placeholder="请输入公司文化"/>
<Field label="排序" prop="sort" v-model="form.sort" type="num" placeholder="请输入排序"/>
<Field label="成立日期" prop="establishDate" v-model="form.establishDate" type="date" />-->
<el-row>
<Field :span="24" label="企业logo">
<imageUpload v-model="form.logoPath" prePath="/file/preview" />
</Field>
</el-row>
<el-row>
<Field :span="24" label="企业背景图">
<imageUpload v-model="form.background" prePath="/file/preview" />
</Field>
</el-row>
<el-row>
<!-- <Field
:span="24"
label="企业标签"
prop="companyLabelsList"
type="select"
:multiple="true"
:enumData="dict.labels"
v-model="form.companyLabelsList"
placeholder="请选择产品分类"
/> -->
<Field :span="24" label="企业标签">
<el-select
v-model="companyLabelsList"
......@@ -67,13 +113,36 @@
></el-option>
</el-select>
</Field>
<Field
</el-row>
<el-row>
<Field label="轮播图">
<imageUpload
v-model="form.companyPicPath"
prePath="/file/preview"
:isList="true"
ref="imgList"
/>
</Field>
</el-row>
<el-row>
<Field label="短视频"
><fileUpload
v-model="form.companyVideoPath"
:fileType="['mp4', 'avi']"
prePath="/file/fileupload"
/></Field>
</el-row>
<el-row>
<Field label="公司介绍">
<editor v-model="form.companyIntroduction" :min-height="150" />
</Field>
<!-- <Field
label="公司介绍"
prop="companyIntroduction"
v-model="form.companyIntroduction"
type="textarea"
placeholder="请输入公司介绍"
/>
/> -->
<!-- <Field :span="24" label="企业视频"><fileUpload v-model="form.companyVideoPath" :fileType="[ 'mp4', 'avi']" prePath="/file/fileupload"/></Field>
<Field :span="24" label="企业宣传图片"><fileUpload v-model="form.companyPicPath" :fileType="['png', 'jpg', 'jpeg']" prePath="/file/preview"/></Field>
......@@ -88,10 +157,22 @@
ref="companyPatents"
>
<!-- <el-table-column type="selection" width="50" align="center" /> -->
<el-table-column label="序号" align="center" prop="index" width="50" />
<el-table-column label="知识产权类型" align="center" prop="intellectPropertyType">
<el-table-column
label="序号"
align="center"
prop="index"
width="50"
/>
<el-table-column
label="知识产权类型"
align="center"
prop="intellectPropertyType"
>
<template slot-scope="scope">
<el-input v-model="scope.row.intellectPropertyType" placeholder="请输入知识产权类型" />
<el-input
v-model="scope.row.intellectPropertyType"
placeholder="请输入知识产权类型"
/>
</template>
</el-table-column>
......@@ -107,25 +188,40 @@
<el-table-column label="操作" width="240">
<template slot-scope="scope">
<Confirm @confirm="handleDeleteCompanyPatents(scope.row)" message="确定要删除该条知识产权吗?">
<Confirm
@confirm="handleDeleteCompanyPatents(scope.row)"
message="确定要删除该条知识产权吗?"
>
<div class="del">删除</div>
</Confirm>
</template>
</el-table-column>
</el-table>
<el-row
style="margin:10px 0;display: flex;justify-content: center;"
style="margin: 10px 0; display: flex; justify-content: center"
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" @click="handleAddCompanyPatents">新增知识产权</el-button>
<el-button
type="primary"
icon="el-icon-plus"
@click="handleAddCompanyPatents"
>新增知识产权</el-button
>
</el-col>
</el-row>
<el-form-item v-if="pageInfo.type!='view'" class="formbtns">
<el-button type="primary" @click="hanndleSubmit" icon="el-icon-circle-check-outline">保存</el-button>
<el-button @click="open=false" icon="el-icon-circle-close-outline">取消</el-button>
<el-form-item v-if="pageInfo.type != 'view'" class="formbtns">
<el-button
type="primary"
@click="hanndleSubmit"
icon="el-icon-circle-check-outline"
>保存</el-button
>
<el-button @click="open = false" icon="el-icon-circle-close-outline"
>取消</el-button
>
</el-form-item>
</Field>
</el-form>
......@@ -139,25 +235,25 @@ export default {
name: "CompanyDetail",
mixins: [form],
components: {
Confirm
Confirm,
},
created() {
this.changePath("company");
},
data() {
let that = this;
var checkPhone = (rule,value,callback) =>{
let phoneReg = /^(((\d{3,4}-)?[0-9]{7,8})|(1(3|4|5|6|7|8|9)\d{9}))$/
if(!value){
callback()
}else{
if(phoneReg.test(value)){
callback()
}else{
callback(new Error("请输入正确的联系电话"))
}
var checkPhone = (rule, value, callback) => {
let phoneReg = /^(((\d{3,4}-)?[0-9]{7,8})|(1(3|4|5|6|7|8|9)\d{9}))$/;
if (!value) {
callback();
} else {
if (phoneReg.test(value)) {
callback();
} else {
callback(new Error("请输入正确的联系电话"));
}
}
};
return {
regionCodeList: [],
areaprops: {
......@@ -168,22 +264,22 @@ export default {
lazyLoad(node, resolve) {
var param = {
pid: node.level === 0 ? 0 : node.data.id,
size: -1
size: -1,
};
that.$post("/base/area/list", param).then(res => {
that.$post("/base/area/list", param).then((res) => {
console.log(res);
let nodes = res.data.data.map(item => {
let nodes = res.data.data.map((item) => {
return {
value: item.areaCode,
label: item.name,
id: item.iid,
leaf: item.haveSonArea === "False"
leaf: item.haveSonArea === "False",
};
});
resolve(nodes);
});
}
},
},
// 子表选中数据
checkedCompanyLabels: [],
......@@ -206,61 +302,66 @@ export default {
rules: {
companyName: [
{ required: true, message: "请输入公司名称", trigger: "blur" },
{ max: 128, message: "最多只能录入128个字符", trigger: "blur" }
{ max: 128, message: "最多只能录入128个字符", trigger: "blur" },
],
areaCode: [
{ required: true, message: "请输入所属区域编码", trigger: "blur" },
{ max: 128, message: "最多只能录入128个字符", trigger: "blur" }
{ max: 128, message: "最多只能录入128个字符", trigger: "blur" },
],
areaName: [
{ required: true, message: "请输入所属区域名称", trigger: "blur" },
{ max: 128, message: "最多只能录入128个字符", trigger: "blur" }
{ max: 128, message: "最多只能录入128个字符", trigger: "blur" },
],
contactPhone: [
{ required: true, message: "请输入联系电话", trigger: "blur" },
{ validator: checkPhone,trigger: "blur" },
{ max: 32, message: "最多只能录入32个字符", trigger: "blur" }
{ validator: checkPhone, trigger: "blur" },
{ max: 32, message: "最多只能录入32个字符", trigger: "blur" },
],
lon: [
{ required: true, message: "请输入经度", trigger: "blur" },
{ max: 32, message: "最多只能录入32个字符", trigger: "blur" }
{ max: 32, message: "最多只能录入32个字符", trigger: "blur" },
],
lati: [
{ required: true, message: "请输入纬度", trigger: "blur" },
{ max: 32, message: "最多只能录入32个字符", trigger: "blur" }
{ max: 32, message: "最多只能录入32个字符", trigger: "blur" },
],
logoPath: [
{ required: true, message: "请输入企业logo", trigger: "blur" },
{ max: 128, message: "最多只能录入128个字符", trigger: "blur" }
],
establishDate: [{ required: true, message: "请选择成立日期" }],
createTime: [{ required: true, message: "请选择创建时间" }]
}
createTime: [{ required: true, message: "请选择创建时间" }],
},
};
},
methods: {
hanndleSubmit(){
this.form.businessAdress = this.$refs.areaselect.provinceName+this.$refs.areaselect.cityName+this.$refs.areaselect.areaName+this.$refs.areaselect.streetName+this.$refs.areaselect.communityName+this.form.location
hanndleSubmit() {
this.form.businessAdress =
this.$refs.areaselect.provinceName +
this.$refs.areaselect.cityName +
this.$refs.areaselect.areaName +
this.$refs.areaselect.streetName +
this.$refs.areaselect.communityName +
this.form.location;
// 检查知识产权list中类型不能为空
if(this.companyPatentsList && this.companyPatentsList.length>0){
let isNull = false
this.companyPatentsList.forEach((item)=>{
if (this.companyPatentsList && this.companyPatentsList.length > 0) {
let isNull = false;
this.companyPatentsList.forEach((item) => {
if (!item.intellectPropertyType) {
isNull = true
isNull = true;
}
})
if(isNull){
this.$confirm('知识产权类型不能为空', '提示', {
confirmButtonText: '确定',
type: 'warning',
});
if (isNull) {
this.$confirm("知识产权类型不能为空", "提示", {
confirmButtonText: "确定",
type: "warning",
showCancelButton: false, //是否显示取消按钮
showClose: false, //是否显示关闭按钮
})
});
return;
}
}
this.submitForm()
this.submitForm();
},
addressSelect(val) {
console.log("addressSelect", val);
......@@ -293,7 +394,7 @@ export default {
handleDeleteCompanyPatents(row) {
// 由于有一些知识产权还没有id,所以这里删除选用的是字段中带的index
this.companyPatentsList = this.companyPatentsList.filter(
item => item.index !== row.index
(item) => item.index !== row.index
);
this.form.companyPatentsList = this.companyPatentsList;
},
......@@ -311,7 +412,7 @@ export default {
beforeRender(data) {
if (data.entity.companyLabelsList) {
let arr = [];
data.entity.companyLabelsList.forEach(item => {
data.entity.companyLabelsList.forEach((item) => {
//如果相等做操作
item["labelId"] = item["labelId"] + "";
arr.push(item.labelId);
......@@ -354,6 +455,15 @@ export default {
cancel() {
this.open = false;
},
beforeSubmit(data) {
// data.companyLabelsList = data.companyLabelsList.join(",");
let arr = [];
arr = this.$refs.imgList.imgList.map((v) => {
return v.response ? v.response.url : v.url.substr(v.url.indexOf("f"));
});
data.companyPicPath = arr.join(",");
return data;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
......@@ -392,6 +502,7 @@ export default {
lon: "",
lati: "",
logoPath: "",
background: "",
companyVideoPath: "",
companyPicPath: "",
companyIntroduction: "",
......@@ -400,7 +511,7 @@ export default {
establishDate: null,
remark: "",
companyLabelsList: [],
companyPatentsList: []
companyPatentsList: [],
};
this.resetForm("form");
},
......@@ -408,19 +519,19 @@ export default {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
},
},
watch: {
companyLabelsList(newval) {
let arr = [];
newval.forEach(item => {
newval.forEach((item) => {
arr.push({
labelId: item
labelId: item,
});
});
this.form.companyLabelsList = arr;
}
}
},
},
};
</script>
......
......@@ -5,50 +5,115 @@
:visible.sync="open"
:direction="direction"
:destroy-on-close="true"
size="100%">
size="100%"
>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<div class="form">
<div class="formleft">
<Field label="标题" :span="24" prop="title" v-model="form.title" placeholder="请输入标题"/>
<Field :span="24" label="内容"><editor v-model="form.content" :min-height="256"/></Field>
<Field
label="标题"
:span="24"
prop="title"
v-model="form.title"
placeholder="请输入标题"
/>
<Field :span="24" label="内容"
><editor v-model="form.content" :min-height="256"
/></Field>
</div>
<div class="formright">
<el-row>
<Field label="类型" :span="20" prop="categoryId" v-model="form.categoryId" type="radio" :enum-data="dict.categoryId" placeholder="请输入分类id"/>
<Field :span="20" label="封面"><imageUpload v-model="form.titleLogoPath" prePath="/file/preview"/></Field>
<Field
label="类型"
:span="20"
prop="categoryId"
v-model="form.categoryId"
type="radio"
:enum-data="dict.categoryId"
placeholder="请输入分类id"
/>
<Field :span="20" label="封面">
<imageUpload
v-model="form.titleLogoPath"
prePath="/file/preview"
:isList="true"
ref="imgList"
/>
</Field>
<Field :span="20" label="责任编辑" prop="editor" v-model="form.editor" placeholder="请输入责任编辑"/>
<Field
:span="20"
label="责任编辑"
prop="editor"
v-model="form.editor"
placeholder="请输入责任编辑"
/>
<Field :span="20" label="发布部门" prop="deptId" v-model="form.deptId" type="select" :enum-data="dict.deptId" placeholder="请输入发布部门"/>
<Field
:span="20"
label="发布部门"
prop="deptId"
v-model="form.deptId"
type="select"
:enum-data="dict.deptId"
placeholder="请输入发布部门"
/>
<Field :span="20" label="文章来源" prop="source" v-model="form.source" placeholder="请输入文章来源"/>
<Field
:span="20"
label="文章来源"
prop="source"
v-model="form.source"
placeholder="请输入文章来源"
/>
<Field label="发布时间" prop="publishTime" v-model="form.publishTime" type="date" />
<Field :span="20" label="声明" prop="statement" v-model="form.statement" type="textarea" placeholder="请输入声明"/>
<Field
label="发布时间"
prop="publishTime"
v-model="form.publishTime"
type="date"
/>
<Field
:span="20"
label="声明"
prop="statement"
v-model="form.statement"
type="textarea"
placeholder="请输入声明"
/>
</el-row>
</div>
</div>
<el-form-item class="footerbtns">
<el-button type="primary" @click='submitForm' icon='el-icon-circle-check-outline'>发布</el-button>
<el-button @click='()=>{open = false}' icon='el-icon-circle-close-outline'>取消</el-button>
<el-button
type="primary"
@click="submitForm"
icon="el-icon-circle-check-outline"
>发布</el-button
>
<el-button
@click="
() => {
open = false;
}
"
icon="el-icon-circle-close-outline"
>取消</el-button
>
</el-form-item>
</el-form>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
export default {
import form from "@/assets/mixins/formdialog";
export default {
name: "NewsDetail",
mixins: [form],
components: {
},
components: {},
created() {
this.changePath("news")
this.changePath("news");
},
data() {
return {
......@@ -58,59 +123,51 @@
title: "新闻",
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[
"top",
"viewNums",
"categoryId"
],
toDate:[
"publishTime",
],
direction: "rtl",
toString: ["top", "viewNums", "categoryId"],
toDate: ["publishTime"],
// 表单校验
rules: {
categoryId: [
{required: true,message: "请选择频道类型", trigger: "blur" },
{ required: true, message: "请选择频道类型", trigger: "blur" },
],
title: [
{required: true,message: "请输入标题", trigger: "blur" },
{max: 512,message: "最多只能录入512个字符",trigger: "blur",},
{ required: true, message: "请输入标题", trigger: "blur" },
{ max: 512, message: "最多只能录入512个字符", trigger: "blur" },
],
titleLogoPath: [
{required: true,message: "请输入标题logo", trigger: "blur" },
{ required: true, message: "请输入标题logo", trigger: "blur" },
],
publishTime: [
{required: true,message: "请选择发布时间" },
]
}
publishTime: [{ required: true, message: "请选择发布时间" }],
},
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset()
this.reset();
this.query = { id: row.id };
this.urls.currUrl ="news/edit";
this.urls.currUrl = "news/edit";
this.getData();
this.pageInfo.type="edit"
this.pageInfo.type = "edit";
this.title = "修改新闻";
},
/** 新增 */
add(row) {
this.reset()
this.reset();
this.urls.currUrl = "news/add";
this.getData();
this.pageInfo.type="add"
this.pageInfo.type = "add";
this.title = "新增新闻";
},
/** 查看*/
view(row) {
this.reset()
this.reset();
this.query = { id: row.id };
this.urls.currUrl ="news/view";
this.urls.currUrl = "news/view";
this.getData();
this.pageInfo.type="view"
this.pageInfo.type = "view";
this.title = "新闻详细";
},
/**取消按钮 */
......@@ -121,7 +178,16 @@
afterRender(data) {
this.open = true;
},
// 提交前数据处理
beforeSubmit(data) {
console.log(data, "123");
let arr = [];
arr = this.$refs.imgList.imgList.map((v) => {
return v.response ? v.response.url : v.url.substr(v.url.indexOf("f"));
});
data.titleLogoPath = arr.join(",");
return data;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
......@@ -130,14 +196,14 @@
// 表单重置
reset() {
this.form = {
categoryId : null,
categoryName : "",
title : "",
titleLogoPath : "",
content : "",
top : 0,
viewNums : 0,
publishTime : null,
categoryId: null,
categoryName: "",
title: "",
titleLogoPath: "",
content: "",
top: 0,
viewNums: 0,
publishTime: null,
};
this.resetForm("form");
},
......@@ -147,10 +213,10 @@
}
},
},
};
};
</script>
<style lang="less" scoped>
.footerbtns{
.footerbtns {
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid gainsboro;
......@@ -158,16 +224,16 @@
justify-content: center;
align-content: center;
}
.form{
.form {
display: flex;
width: 100%;
.formleft{
flex:1;
.formleft {
flex: 1;
width: 60%;
height: calc(100vh - 200px);
overflow: auto;
}
.formright{
.formright {
width: 40%;
flex-shrink: 0;
flex-grow: 0;
......
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notDel>
</LayoutTable>
<LayoutTable :data="tableData" :config="tableConfig" notDel> </LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
<drawer-view ref="drawerview" @handletop="handleTop" @del="toDel"/>
<share-drawershow
ref="shareDrawershow"
:drawerTableData="drawerTableData"
/>
<drawer-view ref="drawerview" @handletop="handleTop" @del="toDel" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import drawerView from "./drawerview";
import table from "@/assets/mixins/table";
export default {
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import drawerView from "./drawerview";
import table from "@/assets/mixins/table";
import ShareDrawershow from "./shareDrawershow.vue";
export default {
name: "NewsList",
components: {
drawerShow,
drawerView
},
mixins: [table],
created() {
drawerView,
ShareDrawershow,
},
mixins: [table],
created() {},
methods: {
/** 重写新增方法 */
toAdd(row) {
......@@ -33,82 +36,90 @@
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row,isopen) {
toView(row, isopen) {
// this.$refs.drawerform.view(row);
// 这里查看不再和编辑共用界面,多写一个抽屉,但调用view方法接口
// this.$refs.drawerform.reset()
this.$refs.drawerform.query = { id: row.id };
this.$refs.drawerform.urls.currUrl ="news/view";
this.$refs.drawerform.urls.currUrl = "news/view";
this.$refs.drawerform.$get('news/view', this.$refs.drawerform.query)
this.$refs.drawerform
.$get("news/view", this.$refs.drawerform.query)
.then(({ data }) => {
if(!isopen){
this.$refs.drawerview.open = true
if (!isopen) {
this.$refs.drawerview.open = true;
}
this.$refs.drawerview.form = data.entity
})
.catch(error => {
this.$refs.drawerview.form = {}
this.$message.error(error.message)
throw error
this.$refs.drawerview.form = data.entity;
})
.catch((error) => {
this.$refs.drawerview.form = {};
this.$message.error(error.message);
throw error;
});
},
handleTop(row,top) {
this.$post("/news/save",{id:row.id,top:top}).then((res) => {
handleTop(row, top) {
this.$post("/news/save", { id: row.id, top: top })
.then((res) => {
if (res.code == 1) {
if(top==0){
if (top == 0) {
this.$message.success("取消置顶成功!");
}else{
} else {
this.$message.success("置顶成功!");
}
this.toView({id:row.id},true)
this.toView({ id: row.id }, true);
this.getData();
}
})
.catch((error) => {
this.$message.error(error.message);
});
},
handleViews(row) {
//查询详细
this.$post("/news/record/list",{newsId:row.id}).then((res) => {
this.$post("/news/record/list", { newsId: row.id })
.then((res) => {
if (res.code == 1) {
console.log("views-data",res)
this.getData();
console.log("views-data", res);
// this.getData();
this.drawerTableData = res.data;
this.drawerTableData.row = row;
this.drawerTableData.title = "浏览";
this.$refs.shareDrawershow.open = true;
}
}).catch((error) => {
})
.catch((error) => {
this.$message.error(error.message);
});
},
handleShares(row) {
//分享详细
this.$post("/news/share/list",{newsId:row.id}).then((res) => {
this.$post("/news/share/list", { newsId: row.id })
.then((res) => {
if (res.code == 1) {
console.log("shares-data",res)
this.getData();
this.drawerTableData = res.data;
this.drawerTableData.row = row;
this.drawerTableData.title = "分享";
this.$refs.shareDrawershow.open = true;
}
}).catch((error) => {
})
.catch((error) => {
this.$message.error(error.message);
});
},
},
data() {
return {
drawerTableData: [],
config: {
search: [
{
name: "categoryId",
type: "select",
placeholder:"请选择新闻类型",
label: "新闻类型"
placeholder: "请选择新闻类型",
label: "新闻类型",
},
{
name: "title",
......@@ -119,44 +130,67 @@
],
columns: [
// {type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{ type: "index", label: "序号", width: 50 },
{label: "新闻标题", prop: "title"},
{ label: "新闻标题", prop: "title" },
{label: "新闻类型", prop: "categoryId",formatter: this.formatter},
{ label: "新闻类型", prop: "categoryId", formatter: this.formatter },
{label: "创建时间", prop: "createDateTime", formatter: this.formatterDate},
{
label: "创建时间",
prop: "createDateTime",
formatter: this.formatterDate,
},
{label: "数据",formatter: row => {
let bool=false;
{
label: "数据",
formatter: (row) => {
let bool = false;
return (
<div>
<el-link underline={bool} onClick={() => {
<el-link
underline={bool}
onClick={() => {
this.handleViews(row);
}} type="primary">浏览({row.viewNums})</el-link><br/>
}}
type="primary"
>
浏览({row.viewNums})
</el-link>
<br />
<el-link underline={bool} onClick={() => {
<el-link
underline={bool}
onClick={() => {
this.handleShares(row);
}} type="primary">分享({row.shareNums})</el-link>
}}
type="primary"
>
分享({row.shareNums})
</el-link>
</div>
);}},
);
},
},
{label: "创建用户", prop: "createUserId", formatter: this.formatter},
{
label: "创建用户",
prop: "createUserId",
formatter: this.formatter,
},
{
label: "操作",
width: 240,
formatter: row => {
formatter: (row) => {
return (
<div>
{row.top === 0 ? (
<el-button
size="mini"
type="text"
icon="el-icon-open"
onClick={() => {
this.handleTop(row,1);
this.handleTop(row, 1);
}}
>
置顶
......@@ -167,7 +201,7 @@
type="text"
icon="el-icon-open"
onClick={() => {
this.handleTop(row,0);
this.handleTop(row, 0);
}}
>
取消置顶
......@@ -181,14 +215,13 @@
onView={this.toView}
onDel={this.toDel}
/>
</div>
);
}
}
]
}
};
}
},
},
],
},
};
},
};
</script>
<template>
<!-- 弹出框表单 -->
<el-drawer
:visible.sync="open"
:direction="direction"
:destroy-on-close="true"
size="40%"
>
<div slot="title" class="title">
<h4
:class="activeTitle == 0 ? 'title_text active' : 'title_text'"
@click="handleTitle(0)"
>
浏览({{ drawerTableData.row ? drawerTableData.row.viewNums : 0 }}
</h4>
<h4
:class="activeTitle == 1 ? 'title_text active' : 'title_text'"
@click="handleTitle(1)"
>
分享({{ drawerTableData.row ? drawerTableData.row.shareNums : 0 }}
</h4>
</div>
<div class="form">
<el-table :data="tableData.data" border style="width: 100%">
<el-table-column type="index" width="50" label="序号">
</el-table-column>
<el-table-column prop="viewName" label="浏览人员"> </el-table-column>
<el-table-column prop="sumViews" label="浏览次数"> </el-table-column>
<el-table-column prop="viewTime" label="最近浏览时间">
<template slot-scope="scope">
<span>{{ timeFix(scope.row.viewTime) }}</span>
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
@current-change="handleCurrentChange"
:current-page.sync="tableData.current_page"
:page-size="10"
layout="total, prev, pager, next"
:total="tableData.total"
>
</el-pagination>
</div>
</div>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
import { timestampToTime } from "@/assets/utils/dateFormat.js";
export default {
name: "NewsDetail",
props: {
drawerTableData: {
type: Object,
default: {},
},
},
mixins: [form],
components: {},
computed: {
timeFix(val) {
console.log(val);
return (val) => {
let time = timestampToTime(val, 6);
return time;
};
},
},
data() {
return {
// 遮罩层
loading: false,
// 弹出层标题
title: "新闻",
// 是否显示弹出层
open: false,
tableData: [],
activeTitle: 0,
};
},
methods: {
// 标题切换操作
handleTitle(i) {
this.activeTitle = i;
this.activeTitle == 0 ? this.handleView() : this.handleShare();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.activeTitle == 0 ? this.handleView(val) : this.handleShare(val);
},
//查询详细
handleView(val = 1) {
this.$post("/news/record/list", {
newsId: this.drawerTableData.row.id,
page: val,
})
.then((res) => {
if (res.code == 1) {
this.tableData = res.data;
}
})
.catch((error) => {
this.$message.error(error.message);
});
},
//分享详细
handleShare(val = 1) {
this.$post("/news/share/list", {
newsId: this.drawerTableData.row.id,
page: val,
})
.then((res) => {
if (res.code == 1) {
console.log("shares-data", res);
this.tableData = res.data;
}
})
.catch((error) => {
this.$message.error(error.message);
});
},
/** 编辑 */
edit(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "news/edit";
this.getData();
this.pageInfo.type = "edit";
this.title = "修改新闻";
},
/** 新增 */
add(row) {
this.reset();
this.urls.currUrl = "news/add";
this.getData();
this.pageInfo.type = "add";
this.title = "新增新闻";
},
/** 查看*/
view(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "news/view";
this.getData();
this.pageInfo.type = "view";
this.title = "新闻详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
},
watch: {
open: {
handler(val) {
if (val) {
this.tableData = this.drawerTableData;
console.log(this.drawerTableData);
this.drawerTableData.title == "浏览"
? (this.activeTitle = 0)
: (this.activeTitle = 1);
}
},
},
},
};
</script>
<style lang="less" scoped>
.footerbtns {
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid gainsboro;
display: flex;
justify-content: center;
align-content: center;
}
.form {
width: 100%;
padding: 20px;
}
.title {
width: 100%;
display: flex;
align-items: center;
.title_text {
width: 20%;
color: #333;
opacity: 0.5;
cursor: pointer;
}
.active {
opacity: 1;
color: #333;
}
}
.block {
width: 100%;
text-align: end;
}
</style>
\ No newline at end of file
......@@ -5,110 +5,243 @@
:visible.sync="open"
:direction="direction"
:destroy-on-close="true"
size="90%">
<el-form ref="form" :model="form" :rules="rules" label-width="120px" >
size="90%"
>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<div class="form">
<div class="formleft">
<el-row>
<Field label="产品名称" prop="productName" v-model="form.productName" placeholder="请输入产品名称,名称唯一"/>
<Field
label="产品名称"
prop="productName"
v-model="form.productName"
placeholder="请输入产品名称,名称唯一"
/>
</el-row>
<el-row>
<Field label="产品slogan" prop="productSlogan" v-model="form.productSlogan" placeholder="请输入产品slogan"/>
<Field label="产品slogan">
<el-tag
:key="tag"
v-for="tag in dynamicTags"
closable
:disable-transitions="false"
@close="handleClose(tag)"
>
{{ tag }}
</el-tag>
<el-input
class="input-new-tag"
v-if="inputVisible"
v-model="inputValue"
ref="saveTagInput"
size="small"
@keyup.enter.native="handleInputConfirm"
@blur="handleInputConfirm"
>
</el-input>
<el-button
v-else
class="button-new-tag"
size="small"
@click="showInput"
>+ 新增 slogan</el-button
>
</Field>
<!-- <Field
label="产品slogan"
prop="productSlogan"
v-model="form.productSlogan"
placeholder="请输入产品slogan"
/> -->
</el-row>
<el-row>
<Field label="产品分类" prop="categoryId" v-model="form.categoryId" :multiple="true" type="select" :enumData="dict.categoryId" placeholder="请选择产品分类"/>
<Field label="所属企业" prop="companyId" v-model="form.companyId" :multiple="true" type="select" :enumData="dict.companyId" placeholder="请选择所属企业"/>
<Field
label="产品分类"
prop="categoryId"
v-model="form.categoryId"
:multiple="false"
type="select"
:enumData="dict.categoryId"
placeholder="请选择产品分类"
/>
<Field
label="所属企业"
prop="companyId"
v-model="form.companyId"
:multiple="true"
type="select"
:enumData="dict.companyId"
placeholder="请选择所属企业"
/>
<!-- <Field label="产品图标"><imageUpload v-model="form.productLogoPath" prePath="/file/preview"/></Field> -->
</el-row>
<el-row>
<Field label="产品封面图片" prop="productFacePath" ><imageUpload v-model="form.productFacePath" prePath="/file/preview"/> </Field>
</el-row>
<el-row>
<Field label="宣传形式" type="radio" :enumData="propagandaList" v-model="nowPropaganda" :field="nowPropaganda" @emit="changeNowprop"></Field>
<Field label="产品封面图片" prop="productFacePath"
><imageUpload
v-model="form.productFacePath"
prePath="/file/preview"
/>
</Field>
</el-row>
<!-- <el-row>
<Field
label="宣传形式"
type="checkbox"
:enumData="dict.propagandaList"
v-model="form.nowPropaganda"
@change="changeNowprop"
></Field>
</el-row> -->
<el-row>
<Field label="轮播图" v-if="nowPropaganda==0"><imageUpload v-model="form.productPicPath" prePath="/file/preview"/></Field>
<Field label="轮播图">
<imageUpload
v-model="form.productPicPath"
prePath="/file/preview"
:isList="true"
ref="imgList"
/>
</Field>
</el-row>
<el-row>
<Field label="短视频" v-if="nowPropaganda==1"><fileUpload v-model="form.productVideoPath" :fileType="[ 'mp4', 'avi']" prePath="/file/fileupload"/></Field>
<Field label="短视频"
><fileUpload
v-model="form.productVideoPath"
:fileType="['mp4', 'avi']"
prePath="/file/fileupload"
/></Field>
</el-row>
<el-row>
<Field label="产品简介" prop="productIntroduction" v-model="form.productIntroduction" type="textarea" placeholder="请输入产品简介"/>
<Field
label="产品简介"
prop="productIntroduction"
v-model="form.productIntroduction"
type="textarea"
placeholder="请输入产品简介"
/>
<!-- <Field label="发布时间" prop="publishTime" v-model="form.publishTime" type="date" /> -->
</el-row>
<el-row>
<Field label="是否热门" prop="hot" v-model="form.hot" type="radio" :enumData="dict.hot" placeholder="请选择是否热门"/>
<Field
label="是否热门"
prop="hot"
v-model="form.hot"
type="radio"
:enumData="dict.hot"
placeholder="请选择是否热门"
/>
<!-- <Field label="备注" prop="productRemark" v-model="form.productRemark" type="textarea" placeholder="请输入备注"/> -->
</el-row>
</div>
<div class="formright">
<div class="tabs">
<div class="tab" :class="nowtab==1?'activetab':''" @click="changeTab(1)">产品详情</div>
<div class="tab" :class="nowtab==2?'activetab':''" @click="changeTab(2)">常见问题</div>
<div
class="tab"
:class="nowtab == 1 ? 'activetab' : ''"
@click="changeTab(1)"
>
产品详情
</div>
<div
class="tab"
:class="nowtab == 2 ? 'activetab' : ''"
@click="changeTab(2)"
>
常见问题
</div>
</div>
<div class="content" v-show="nowtab==1">
<editor v-model="form.productDetail" :min-height="100"/>
<div class="content" v-show="nowtab == 1">
<editor v-model="form.productDetail" :min-height="100" />
</div>
<div class="content" v-show="nowtab==2">
<el-table :data="productQuestionList" :row-class-name="rowProductQuestionIndex" @selection-change="handleProductQuestionSelectionChange" ref="productQuestion">
<el-table-column label="序号" align="center" prop="index" width="50"/>
<div class="content" v-show="nowtab == 2">
<el-table
:data="productQuestionList"
:row-class-name="rowProductQuestionIndex"
@selection-change="handleProductQuestionSelectionChange"
ref="productQuestion"
>
<el-table-column
label="序号"
align="center"
prop="index"
width="50"
/>
<el-table-column label="问题" prop="question">
<template slot-scope="scope">
<el-input v-model="scope.row.question" placeholder="请输入问题" />
<el-input
v-model="scope.row.question"
placeholder="请输入问题"
/>
</template>
</el-table-column>
<el-table-column label="常见问题回答" prop="answer">
<template slot-scope="scope">
<el-input v-model="scope.row.answer" placeholder="请输入常见问题回答" />
<el-input
v-model="scope.row.answer"
placeholder="请输入常见问题回答"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="240" align="center">
<template slot-scope="scope">
<Confirm @confirm="handleDeleteCompanyPatents(scope.row)" message="确定要删除该条知识产权吗?">
<Confirm
@confirm="handleDeleteCompanyPatents(scope.row)"
message="确定要删除该条知识产权吗?"
>
<div class="del">删除</div>
</Confirm>
</template>
</el-table-column>
</el-table>
<el-row style="margin:10px 0;display: flex;justify-content: center;" :gutter="10" class="mb8">
<el-row
style="margin: 10px 0; display: flex; justify-content: center"
:gutter="10"
class="mb8"
>
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" @click="handleAddProductQuestion">新增常见问题</el-button>
<el-button
type="primary"
icon="el-icon-plus"
@click="handleAddProductQuestion"
>新增常见问题</el-button
>
</el-col>
</el-row>
</div>
</div>
</div>
<!-- 保存按钮 -->
<form-buttons @submit='onSubmitForm' @cancel='cancelForm' v-if="pageInfo.type!='view'" class="formbtns" />
<form-buttons
@submit="onSubmitForm"
@cancel="cancelForm"
v-if="pageInfo.type != 'view'"
class="formbtns"
/>
</el-form>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
export default {
import form from "@/assets/mixins/formdialog";
export default {
name: "ProductDetail",
mixins: [form],
components: {
},
components: {},
created() {
this.changePath("product")
this.changePath("product");
},
data() {
return {
propagandaList:['轮播图','短视频'],
dynamicTags: [],
inputVisible: false,
inputValue: "",
propagandaList: { 1: "轮播图", 2: "短视频" },
// 当前宣传形式
nowPropaganda:0,
nowtab:1,
nowPropaganda: [],
nowtab: 1,
// 子表选中数据
checkedProductQuestion: [],
// 产品常见问题表格数据
......@@ -119,96 +252,116 @@
title: "产品",
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[
"hot",
],
toArrays:[
"companyId",
"categoryId"
],
toDate:[
"publishTime",
],
direction: "rtl",
toString: ["hot"],
toArrays: ["companyId"],
toDate: ["publishTime"],
// 表单校验
rules: {
productName: [
{required: true,message: "请输入产品名称,名称唯一", trigger: "blur" },
{max: 20,message: "最多只能录入20个字符",trigger: "blur",},
{
required: true,
message: "请输入产品名称,名称唯一",
trigger: "blur",
},
{ max: 20, message: "最多只能录入20个字符", trigger: "blur" },
],
productSlogan: [
{required: true,message: "请输入产品slogan", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
{ required: true, message: "请输入产品slogan", trigger: "blur" },
{ max: 64, message: "最多只能录入64个字符", trigger: "blur" },
],
productLogoPath: [
{required: true,message: "请输入产品图标", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
{ required: true, message: "请输入产品图标", trigger: "blur" },
{ max: 64, message: "最多只能录入64个字符", trigger: "blur" },
],
productFacePath: [
{required: true,message: "请输入产品封面图片", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
publishTime: [
{required: true,message: "请选择发布时间" },
{ required: true, message: "请输入产品封面图片", trigger: "blur" },
{ max: 64, message: "最多只能录入64个字符", trigger: "blur" },
],
createTime: [
{required: true,message: "请选择创建时间" },
],
}
publishTime: [{ required: true, message: "请选择发布时间" }],
createTime: [{ required: true, message: "请选择创建时间" }],
},
};
},
methods: {
// 重写提交表单
onSubmitForm(){
// 由于宣传形式修改,只能存在一种,所以当选中一种时另外一种清空
if(this.nowPropaganda===0){
// 选中轮播图
this.form.productVideoPath = ''
}else{
// 选中短视频
this.form.productPicPath = ''
// 删除slogan标签
handleClose(tag) {
this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
},
// 展示标签输入框
showInput() {
this.inputVisible = true;
this.$nextTick((_) => {
this.$refs.saveTagInput.$refs.input.focus();
});
},
// 确认标签输入框内容
handleInputConfirm() {
let inputValue = this.inputValue;
if (inputValue) {
this.dynamicTags.push(inputValue);
}
this.inputVisible = false;
this.inputValue = "";
},
// 重写提交表单
onSubmitForm() {
console.log(this.form);
console.log(this.$refs.imgList.imgList);
let arr = [];
arr = this.$refs.imgList.imgList.map((v) => {
return v.response ? v.response.url : v.url.substr(v.url.indexOf("f"));
});
this.form.productPicPath = arr.join(",");
// // 由于宣传形式修改,只能存在一种,所以当选中一种时另外一种清空
// if (this.nowPropaganda === 0) {
// // 选中轮播图
// this.form.productVideoPath = "";
// } else {
// // 选中短视频
// this.form.productPicPath = "";
// }
// 检查常见问题list中问题不能为空
if(this.productQuestionList && this.productQuestionList.length>0){
let isNull = false
this.productQuestionList.forEach((item)=>{
if (this.productQuestionList && this.productQuestionList.length > 0) {
let isNull = false;
this.productQuestionList.forEach((item) => {
if (!item.question) {
isNull = true
isNull = true;
}
})
if(isNull){
this.$confirm('常见问题项的问题标题不能为空', '提示', {
confirmButtonText: '确定',
type: 'warning',
});
if (isNull) {
this.$confirm("常见问题项的问题标题不能为空", "提示", {
confirmButtonText: "确定",
type: "warning",
showCancelButton: false, //是否显示取消按钮
showClose: false, //是否显示关闭按钮
})
});
return;
}
}
this.submitForm()
this.submitForm();
},
// 修改宣传形式
changeNowprop(val){
this.nowPropaganda = val
changeNowprop(val) {
this.form.nowPropaganda = val;
this.$forceUpdate(this.form);
},
// 问题删除
handleDeleteCompanyPatents(row) {
console.log(row);
// 由于有一些知识产权还没有id,所以这里删除选用的是字段中带的index
this.productQuestionList = this.productQuestionList.filter(
item => item.index !== row.index
(item) => item.index !== row.index
);
this.form.productQuestionList = this.productQuestionList;
},
cancelForm(){
this.open = false
cancelForm() {
this.open = false;
},
changeTab(nowtab){
this.nowtab = nowtab
this.$forceUpdate()
changeTab(nowtab) {
this.nowtab = nowtab;
this.$forceUpdate();
},
/** 产品常见问题序号 */
rowProductQuestionIndex({ row, rowIndex }) {
......@@ -228,9 +381,14 @@
/** 产品常见问题删除按钮操作 */
handleDeleteProductQuestion() {
if (this.checkedProductQuestion.length == 0) {
this.$alert("请先选择要删除的产品常见问题数据", "提示", { confirmButtonText: "确定", });
this.$alert("请先选择要删除的产品常见问题数据", "提示", {
confirmButtonText: "确定",
});
} else {
this.productQuestionList.splice(this.checkedProductQuestion[0].index - 1, 1);
this.productQuestionList.splice(
this.checkedProductQuestion[0].index - 1,
1
);
}
},
/** 单选框选中数据 */
......@@ -244,41 +402,47 @@
},
// 渲染前置处理
beforeRender(data) {
if(data.entity.productQuestionList) {
if (data.entity.productQuestionList) {
this.productQuestionList = data.entity.productQuestionList;
}
// 判断有无短视频,如果有短视频那么更改为短视频选项
if(data.entity.productVideoPath){
this.nowPropaganda = 1
}else{
this.nowPropaganda = 0
}
return data
// if (data.entity.productVideoPath) {
// this.nowPropaganda = 1;
// } else {
// this.nowPropaganda = 0;
// }
data.entity.categoryId
? (data.entity.categoryId = String(data.entity.categoryId))
: "";
data.entity.productSlogan && data.entity.productSlogan != ""
? (this.dynamicTags = data.entity.productSlogan.split(","))
: "";
return data;
},
/** 编辑 */
edit(row) {
this.reset()
this.reset();
this.query = { id: row.id };
this.urls.currUrl ="product/edit";
this.urls.currUrl = "product/edit";
this.getData();
this.pageInfo.type="edit"
this.pageInfo.type = "edit";
this.title = "修改产品";
},
/** 新增 */
add(row) {
this.reset()
this.reset();
this.urls.currUrl = "product/add";
this.getData();
this.pageInfo.type="add"
this.pageInfo.type = "add";
this.title = "新增产品";
},
/** 查看*/
view(row) {
this.reset()
this.reset();
this.query = { id: row.id };
this.urls.currUrl ="product/view";
this.urls.currUrl = "product/view";
this.getData();
this.pageInfo.type="view"
this.pageInfo.type = "view";
this.title = "产品详细";
},
/**取消按钮 */
......@@ -288,17 +452,21 @@
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
this.dict.propagandaList = { 1: "轮播图", 2: "短视频" };
this.form.nowPropaganda = [];
this.$forceUpdate(this.dict);
this.$forceUpdate(this.form);
},
beforeSubmit(data) {
data.categoryId=data.categoryId.join(",")
data.companyId=data.companyId.join(",")
return data
// data.categoryId = data.categoryId.join(",");
data.companyId = data.companyId.join(",");
this.dynamicTags && this.dynamicTags.length > 0
? (data.productSlogan = this.dynamicTags.join(","))
: (data.productSlogan = "");
return data;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
......@@ -307,18 +475,18 @@
// 表单重置
reset() {
this.form = {
productName : "",
productCode : "",
productSlogan : "",
productLogoPath : "",
productFacePath : "",
productVideoPath : "",
productPicPath : "",
productIntroduction : "",
productDetail : "",
publishTime : null,
hot : 0,
productRemark : "",
productName: "",
productCode: "",
productSlogan: "",
productLogoPath: "",
productFacePath: "",
productVideoPath: "",
productPicPath: "",
productIntroduction: "",
productDetail: "",
publishTime: null,
hot: 0,
productRemark: "",
};
this.resetForm("form");
},
......@@ -328,9 +496,24 @@
}
},
},
};
};
</script>
<style lang="less" scoped>
/deep/.el-tag + .el-tag {
margin-left: 10px;
}
/deep/.button-new-tag {
margin-left: 10px;
height: 32px;
line-height: 30px;
padding-top: 0;
padding-bottom: 0;
}
.input-new-tag {
width: 90px;
margin-left: 10px;
vertical-align: bottom;
}
.del {
color: red;
}
......@@ -343,12 +526,12 @@
padding-right: 30px;
border-top: 1px solid #dcdcdc;
}
.tabs{
.tabs {
background: #dcdcdc59;
height: 50px;
display: flex;
padding-left: 10px;
.tab{
.tab {
height: 100%;
line-height: 50px;
padding: 0 20px;
......@@ -358,25 +541,25 @@
// justify-content: center;
// align-content: center;
}
.activetab{
.activetab {
background: white;
}
}
.form{
.form {
display: flex;
.formleft{
.formleft {
width: 600px;
border-right: 1px solid gainsboro;
flex-shrink: 0;
flex-grow: 0;
}
.el-col-12{
.el-col-12 {
width: 96% !important;
}
.formright{
.formright {
margin-left: 10px;
width: 100%;
.content{
.content {
margin-top: 10px;
width: 100%;
}
......
<template>
<div class="page">
<LayoutTable ref="layouttable" :data="tableData" :config="tableConfig" notDel >
<LayoutTable
ref="layouttable"
:data="tableData"
:config="tableConfig"
notDel
>
<!-- 热门0为非热门1为热门 -->
<div slot="table-search-left" class="onlyhot">
<el-checkbox
......@@ -9,33 +14,30 @@
:checked="ishot"
@change="changeIshot"
>
</el-checkbox>
只看热门
</div>
</LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "ProductList",
components: {
drawerShow
drawerShow,
},
mixins: [table],
mounted() {
// 重写查询
this.$refs.layouttable.$refs.searchform.onSubmit = this.onSearch
this.$refs.layouttable.$refs.searchform.onSubmit = this.onSearch;
// 重写搜索清除
this.$refs.layouttable.$refs.searchform.cleanForm = this.cleanForm
this.$refs.layouttable.$refs.searchform.cleanForm = this.cleanForm;
},
methods: {
renderTable(tableData) {
......@@ -52,8 +54,7 @@
label={options.label}
width={options.width}
formatter={options.formatter}
>
</el-table-column>
></el-table-column>
);
},
/** 重写新增方法 */
......@@ -69,46 +70,51 @@
this.$refs.drawerform.view(row);
},
// 重写查询
onSearch(){
if(this.ishot){
this.$refs.layouttable.$refs.searchform.form = Object.assign({}, this.$refs.layouttable.$refs.searchform.form, {hot:1})
onSearch() {
if (this.ishot) {
this.$refs.layouttable.$refs.searchform.form = Object.assign(
{},
this.$refs.layouttable.$refs.searchform.form,
{ hot: 1 }
);
}
let { path, query } = this.$refs.layouttable.$refs.searchform.$route;
let data = this.$refs.layouttable.$refs.searchform.decode(this.$refs.layouttable.$refs.searchform.form);
let data = this.$refs.layouttable.$refs.searchform.decode(
this.$refs.layouttable.$refs.searchform.form
);
this.$refs.layouttable.$refs.searchform.$router.push({
path: path,
query: Object.assign({}, query, data),
});
},
// 重写搜索清除
cleanForm(){
this.ishot = false
this.$refs.layouttable.$refs.searchform.form.hot = undefined
this.$forceUpdate()
cleanForm() {
this.ishot = false;
this.$refs.layouttable.$refs.searchform.form.hot = undefined;
this.$forceUpdate();
this.$refs.layouttable.$refs.searchform.clean();
this.$refs.layouttable.$refs.searchform.onSubmit();
},
changeIshot(val){
this.ishot = val
}
changeIshot(val) {
this.ishot = val;
},
},
data() {
return {
ishot:false,
ishot: false,
config: {
search: [
{
name: "categoryId",
type: "select",
placeholder:"请选择产品分类",
label: "产品分类"
placeholder: "请选择产品分类",
label: "产品分类",
},
{
name: "companyId",
type: "select",
placeholder:"请选择所属企业",
label: "所属企业"
placeholder: "请选择所属企业",
label: "所属企业",
},
{
name: "productName",
......@@ -118,42 +124,67 @@
},
],
columns: [
{type: "index",label: "序号",width: 50},
{ type: "index", label: "序号", width: 50 },
{label: "产品名称", prop: "productName"},
{ label: "产品名称", prop: "productName" },
{label: "产品分类", prop: "categoryId",formatter: this.formatters},
{ label: "产品分类", prop: "categoryId", formatter: this.formatters },
{label: "所属企业", prop: "companyId",formatter: this.formatters},
{ label: "所属企业", prop: "companyId", formatter: this.formatters },
{label: "产品介绍", prop: "productIntroduction" , width: 500,formatter: this.formatters},
{
label: "产品介绍",
prop: "productIntroduction",
width: 500,
formatter: this.formatters,
},
{label: "发布时间", prop: "publishTime", formatter: this.formatterDate},
{
label: "发布时间",
prop: "publishTime",
formatter: this.formatterDate,
},
{label: "热门", prop: "hot",formatter: this.formatterYES, width: 50},
{
label: "热门",
prop: "hot",
formatter: this.formatterYES,
width: 50,
},
{label: "最近更新时间", prop: "updateTime", formatter: this.formatterDate},
{
label: "最近更新时间",
prop: "updateTime",
formatter: this.formatterDate,
},
{
label: "操作",
width: 240,
formatter: row => {
formatter: (row) => {
return (
<table-buttons noAdd noView row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
<table-buttons
noAdd
noView
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
);
}
}
]
}
};
}
},
},
],
},
};
},
};
</script>
<style lang="less" >
.table-form{
display: flex ;
.table-form {
display: flex;
}
.onlyhot{
.onlyhot {
margin-right: 20px;
line-height: 30px;
font-size: 14px;
......
......@@ -14,6 +14,22 @@
<version>1.0.0-SNAPSHOT</version>
</parent>
<properties>
<!-- 默认值 -->
<profiles.server.debug></profiles.server.debug>
<profiles.server.path>/enterprise</profiles.server.path>
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>info</profiles.log.level>
<profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.filepath>/mortals/app/data</profiles.filepath>
<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
<profiles.req.json.check>false</profiles.req.json.check>
<profiles.trustedReferer></profiles.trustedReferer>
<package.environment>build</package.environment>
<skipUi>true</skipUi>
</properties>
<profiles>
<profile>
<id>develop</id>
......@@ -42,6 +58,7 @@
<profiles.active>test</profiles.active>
<profiles.platform.type>standalone</profiles.platform.type>
<profiles.server.port>21086</profiles.server.port>
<profiles.server.debug>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6519</profiles.server.debug>
<profiles.server.path>/enterprise</profiles.server.path>
<profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.nacos.server-addr>192.168.0.252:8848</profiles.nacos.server-addr>
......@@ -55,36 +72,25 @@
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>INFO</profiles.log.level>
<package.environment>test</package.environment>
<skipUi>false</skipUi>
<skipUi>true</skipUi>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<profiles.active>product</profiles.active>
<profiles.platform.type>cloud</profiles.platform.type>
<profiles.server.port>11086</profiles.server.port>
<profiles.server.path>/office</profiles.server.path>
<profiles.nacos.server-addr>172.15.28.120:8848</profiles.nacos.server-addr>
<profiles.platform.type>standalone</profiles.platform.type>
<profiles.server.port>21086</profiles.server.port>
<profiles.nacos.server-addr>127.0.0.1:8848</profiles.nacos.server-addr>
<profiles.nacos.group>DEFAULT_GROUP</profiles.nacos.group>
<profiles.nacos.namespace>smart-gov</profiles.nacos.namespace>
<profiles.rabbitmq.host>172.15.28.115</profiles.rabbitmq.host>
<profiles.rabbitmq.port>5672</profiles.rabbitmq.port>
<profiles.rabbitmq.username>taxi_mq</profiles.rabbitmq.username>
<profiles.rabbitmq.password>admin@2020</profiles.rabbitmq.password>
<profiles.rabbitmq.virtualhost>/</profiles.rabbitmq.virtualhost>
<profiles.log.path>/home/mortals/app/logs</profiles.log.path>
<profiles.log.level>info</profiles.log.level>
<profiles.publish.path>/home/publish</profiles.publish.path>
<package.environment>build</package.environment>
<skipUi>false</skipUi>
<package.environment>build:prod</package.environment>
<skipDeploy>true</skipDeploy>
</properties>
</profile>
</profiles>
<properties>
</properties>
<dependencies>
......
......@@ -14,7 +14,7 @@ SHELL_LOG="${BASEDIR}/${SHELL_NAME}.log"
JAVA_HOME="/usr/local/java/jdk1.8"
SERVICE_PATH="/usr/lib/systemd/system"
PUBLISH_PATH="@profiles.publish.path@"
PUBLISH_PATH="/home/publish"
PROJECT_NAME="@project.artifactId@"
PROJECT_EXECPATH="${PUBLISH_PATH}/${PROJECT_NAME}"
......@@ -35,7 +35,7 @@ clear_deploy() {
SERVICE=$1
EXECPATH=$2
#清理后台自启服务
rm -rf ${SERVICE}
rm -f ${SERVICE}
#清理执行文件目录
rm -rf ${EXECPATH}
}
......@@ -58,6 +58,7 @@ build_service() {
echo "[Service]" >>${SERVICE}
echo "Environment=\"JAVA_HOME=$JAVA_HOME\"" >>${SERVICE}
echo "Type=forking" >>${SERVICE}
echo "ExecStartPre=-/bin/sleep 5s" >>${SERVICE}
echo "ExecStart=${EXECPATH}/bin/start.sh" >>${SERVICE}
echo "ExecStop=${EXECPATH}/bin/shutdown.sh" >>${SERVICE}
echo "PrivateTmp=true" >>${SERVICE}
......@@ -103,8 +104,11 @@ project_ui_deploy() {
main() {
echo "后台服务部署"
project_deploy
#判断是否需要部署ui
if [ "@skipUi@" == "false" ];then
echo "前端服务部署"
project_ui_deploy
fi;
exit ${RETVAL}
}
......
#! /bin/sh
#!/bin/sh
PORT="@profiles.server.port@"
BASEDIR=$(dirname $0)
BASEDIR=$( (
cd "$BASEDIR"
pwd
))
BASEDIR=`dirname $0`
BASEDIR=`(cd "$BASEDIR"; pwd)`
PROJECT_NAME="@project.artifactId@"
MAIN_CLASS="$PROJECT_NAME"
MAIN_CLASS="$PROJECT_NAME";
SUCCESS=0
FAIL=9
if [ ! -n "$PORT" ]; then
echo $"Usage: $0 {port}"
exit $FAIL
fi
pid=$(ps ax | grep -i "$MAIN_CLASS" | grep java | grep -v grep | awk '{print $1}')
if [ -z "$pid" ]; then
pid=`ps ax | grep -i "$MAIN_CLASS" | grep java | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
echo "No Server running."
exit 1
exit $FAIL;
fi
echo "stoping application $PROJECT_NAME......"
......@@ -24,3 +23,5 @@ echo "stoping application $PROJECT_NAME......"
kill -15 ${pid}
echo "Send shutdown request to Server $PROJECT_NAME OK"
#!/bin/sh
PORT="@profiles.server.port@"
DEBUG=@profiles.server.debug@
BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`
PROJECT_NAME="@project.artifactId@";
MAIN_CLASS="$PROJECT_NAME-@project.version@.jar";
LOG_PATH="@profiles.log.path@/$PROJECT_NAME"
GC_PATH=$LOG_PATH/PROJECT_NAME"-gc.log"
HS_ERR_PATH=$LOG_PATH/PROJECT_NAME"-hs_err.log"
HEAP_DUMP_PATH=$LOG_PATH/PROJECT_NAME"-heap_dump.hprof"
GC_PATH=$LOG_PATH/$PROJECT_NAME"-gc.log"
HS_ERR_PATH=$LOG_PATH/$PROJECT_NAME"-hs_err.log"
HEAP_DUMP_PATH=$LOG_PATH/$PROJECT_NAME"-heap_dump.hprof"
TEMP_PATH=$LOG_PATH/temp/
SUCCESS=0
FAIL=9
......@@ -32,8 +33,9 @@ if [ -z "$JAVACMD" ] ; then
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD=`which java`
echo "Error: JAVA_HOME is $JAVACMD"
JAVACMD=`which java > /dev/null 2>&1`
echo "Error: JAVA_HOME is not defined correctly."
exit $ERR_NO_JAVA
fi
fi
......@@ -44,7 +46,7 @@ fi
if [ -e "$BASEDIR" ]
then
JAVA_OPTS="-Xms512M -Xmx1024M -Xss256K -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:GCTimeRatio=39 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$GC_PATH -XX:+HeapDumpOnOutOfMemoryError -XX:ErrorFile=$HS_ERR_PATH -XX:HeapDumpPath=$HEAP_DUMP_PATH"
JAVA_OPTS="-Xms128M -Xmx512M -Xss256K -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:GCTimeRatio=39 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$GC_PATH -XX:+HeapDumpOnOutOfMemoryError -XX:ErrorFile=$HS_ERR_PATH -XX:HeapDumpPath=$HEAP_DUMP_PATH"
fi
CLASSPATH=$CLASSPATH_PREFIX:
......@@ -55,12 +57,12 @@ cd "$BASEDIR/boot";
echo "starting application $PROJECT_NAME......"
exec "$JAVACMD" $JAVA_OPTS \
$EXTRA_JVM_ARGUMENTS \
$DEBUG \
-Dapp.name="$PROJECT_NAME" \
-Dapp.port="$PORT" \
-Dbasedir="$BASEDIR" \
-Dfile.encoding=utf-8 \
-Djava.io.tmpdir=$TEMP_PATH \
-Dloader.path="file://$BASEDIR/conf,file://$BASEDIR/lib" \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=41086 \
-jar $MAIN_CLASS \
> /dev/null &
......
package com.mortals.xhx.busiz.controller;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.idempotent.helper.IdempotentHelper;
import com.mortals.xhx.busiz.service.TestIdempotentService;
import lombok.extern.slf4j.Slf4j;
......@@ -28,6 +29,7 @@ public class TestIdempotentController {
* url: localhost:12345/v1/idempotent/test-with-result?source=taobao&operationType=publish_product&businessKey=pd_20230105007&name=lisi
*/
@GetMapping("/test-with-result")
@UnAuth
public String testWithResult(String source,
String operationType,
String businessKey,
......@@ -44,6 +46,7 @@ public class TestIdempotentController {
* url : localhost:12345/v1/idempotent/test-with-no-result?source=taobao&operationType=publish_product&businessKey=pd_20230105008&name=zhangsan
*/
@GetMapping("/test-with-no-result")
@UnAuth
public String testWithNoResult(String source,
String operationType,
String businessKey,
......
......@@ -13,11 +13,11 @@ import com.mortals.xhx.module.company.model.vo.CompanyVo;
import com.mortals.xhx.module.company.model.CompanyLabelsEntity;
import lombok.Data;
/**
* 公司实体对象
*
* @author zxfei
* @date 2023-09-18
*/
* 公司实体对象
*
* @author zxfei
* @date 2024-12-05
*/
@Data
public class CompanyEntity extends CompanyVo {
private static final long serialVersionUID = 1L;
......@@ -151,6 +151,10 @@ public class CompanyEntity extends CompanyVo {
* 备注
*/
private String remark;
/**
* 背景图片
*/
private String background;
/**
* 公司标注信息
*/
......@@ -209,7 +213,8 @@ public class CompanyEntity extends CompanyVo {
this.companyIntroduction = "";
this.companyCulture = "";
this.sort = 0;
this.establishDate = new Date();
this.establishDate = null;
this.remark = "";
this.background = "";
}
}
\ No newline at end of file
......@@ -5,11 +5,11 @@ import java.util.Date;
import java.util.List;
import com.mortals.xhx.module.company.model.CompanyEntity;
/**
* 公司查询对象
*
* @author zxfei
* @date 2023-09-18
*/
* 公司查询对象
*
* @author zxfei
* @date 2024-12-05
*/
public class CompanyQuery extends CompanyEntity {
/** 开始 主键ID,主键,自增长 */
private Long idStart;
......@@ -269,6 +269,11 @@ public class CompanyQuery extends CompanyEntity {
/** 结束 更新时间 */
private String updateTimeEnd;
/** 背景图片 */
private List<String> backgroundList;
/** 背景图片排除列表 */
private List <String> backgroundNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<CompanyQuery> orConditionList;
......@@ -1804,6 +1809,38 @@ public class CompanyQuery extends CompanyEntity {
this.updateTimeEnd = updateTimeEnd;
}
/**
* 获取 背景图片
* @return backgroundList
*/
public List<String> getBackgroundList(){
return this.backgroundList;
}
/**
* 设置 背景图片
* @param backgroundList
*/
public void setBackgroundList(List<String> backgroundList){
this.backgroundList = backgroundList;
}
/**
* 获取 背景图片
* @return backgroundNotList
*/
public List<String> getBackgroundNotList(){
return this.backgroundNotList;
}
/**
* 设置 背景图片
* @param backgroundNotList
*/
public void setBackgroundNotList(List<String> backgroundNotList){
this.backgroundNotList = backgroundNotList;
}
/**
* 设置 主键ID,主键,自增长
* @param id
......@@ -2698,6 +2735,25 @@ public class CompanyQuery extends CompanyEntity {
}
/**
* 设置 背景图片
* @param background
*/
public CompanyQuery background(String background){
setBackground(background);
return this;
}
/**
* 设置 背景图片
* @param backgroundList
*/
public CompanyQuery backgroundList(List<String> backgroundList){
this.backgroundList = backgroundList;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
......
......@@ -86,7 +86,34 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
@Autowired
private LabelsService labelsService;
@Override
protected void findAfter(CompanyEntity params,PageInfo pageInfo, Context context, List<CompanyEntity> list) throws AppException {
fillSubData(list);
super.findAfter(params,pageInfo, context, list);
}
@Override
protected void findAfter(CompanyEntity params, Context context, List<CompanyEntity> list) throws AppException {
fillSubData(list);
super.findAfter(params, context, list);
}
private void fillSubData(List<CompanyEntity> list) {
List<Long> idList = list.stream().map(i -> i.getId()).collect(Collectors.toList());
if(ObjectUtils.isEmpty(idList))return;
Map<Long, List<CompanyLabelsEntity>> companyLabelsListMap = companyLabelsService
.find(new CompanyLabelsQuery().companyIdList(idList)).parallelStream()
.collect(Collectors.groupingBy(CompanyLabelsEntity::getCompanyId));
List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyIdList(idList));
Map<Long, List<CompanyPatentEntity>> companyPatentListMap = companyPatentEntities.parallelStream().collect((Collectors.groupingBy(CompanyPatentEntity::getCompanyId)));
list.forEach(item -> {
item.setCompanyLabelsList(companyLabelsListMap.get(item.getId()));
item.setCompanyPatentsList(companyPatentListMap.get(item.getId()));
});
}
/*
@Override
protected void findAfter(CompanyEntity params, PageInfo pageInfo, Context context, List<CompanyEntity> list) throws AppException {
......@@ -95,6 +122,7 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
item.setCompanyPatentsList(companyPatentEntities);
}).count();
}
*/
@Override
protected void saveAfter(CompanyEntity entity, Context context) throws AppException {
......
......@@ -7,8 +7,7 @@ import com.mortals.framework.exception.AppException;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.company.model.CompanyPatentEntity;
import com.mortals.xhx.module.company.model.CompanyPatentQuery;
import com.mortals.xhx.module.company.model.*;
import com.mortals.xhx.module.company.model.vo.HomeStatInfo;
import com.mortals.xhx.module.company.service.CompanyLabelsService;
import com.mortals.xhx.module.company.service.CompanyPatentService;
......@@ -26,7 +25,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.module.company.model.CompanyEntity;
import com.mortals.xhx.module.company.service.CompanyService;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
......@@ -62,6 +60,9 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company
private LabelsService labelsService;
@Autowired
private CompanyPatentService companyPatentService;
@Autowired
private CompanyLabelsService companyLabelsService;
public CompanyController() {
......@@ -84,6 +85,10 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company
protected int editAfter(Long id, Map<String, Object> model, CompanyEntity entity, Context context) throws AppException {
List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyId(entity.getId()));
List<CompanyLabelsEntity> companyLabelsEntities = companyLabelsService.find(new CompanyLabelsQuery().companyId(entity.getId()));
entity.setCompanyLabelsList(companyLabelsEntities);
entity.setCompanyPatentsList(companyPatentEntities);
......@@ -95,6 +100,8 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company
protected int viewAfter(Long id, Map<String, Object> model, CompanyEntity entity, Context context) throws AppException {
List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyId(entity.getId()));
List<CompanyLabelsEntity> companyLabelsEntities = companyLabelsService.find(new CompanyLabelsQuery().companyId(entity.getId()));
entity.setCompanyLabelsList(companyLabelsEntities);
entity.setCompanyPatentsList(companyPatentEntities);
return super.viewAfter(id, model, entity, context);
......
......@@ -58,7 +58,7 @@ public class NewsServiceImpl extends AbstractCRUDServiceImpl<NewsDao, NewsEntity
List<NewsUpEntity> upList = newsUpService.find(new NewsUpQuery().newsIdList(newsIdList).upId(context.getUser().getId()));
Map<Long,NewsUpEntity> upMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(upList)){
upMap = upList.parallelStream().collect(Collectors.toMap(x -> x.getId(), z -> z, (o, n) -> n));
upMap = upList.parallelStream().collect(Collectors.toMap(x -> x.getNewsId(), z -> z, (o, n) -> n));
}
List<NewsShareEntity> shareList = newsShareService.find(new NewsShareQuery().newsIdList(newsIdList).createUserId(context.getUser().getId()));
Map<Long,NewsShareEntity> shareMap = new HashMap<>();
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.company.dao.ibatis.CompanyDaoImpl">
<!-- 字段和属性映射 -->
......@@ -42,20 +42,8 @@
<result property="createTime" column="createTime" />
<result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" />
<collection property="companyLabelsList" column="id" ofType="CompanyLabelsEntity" javaType="ArrayList" select="getCompanyLabelsByCompanyId"></collection>
<result property="background" column="background" />
</resultMap>
<resultMap type="CompanyLabelsEntity" id="CompanyLabelsEntity-Map">
<result property="id" column="id" />
<result property="labelId" column="labelId" />
<result property="companyId" column="companyId" />
<result property="labelName" column="labelName" />
<result property="remark" column="remark" />
<result property="createUserId" column="createUserId" />
<result property="createTime" column="createTime" />
<result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
......@@ -171,29 +159,32 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))">
a.updateTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('background') or colPickMode == 1 and data.containsKey('background')))">
a.background,
</if>
</trim>
</sql>
<!-- 子表所有列 -->
<sql id="_columns_sub">
<trim suffixOverrides="," suffix="">
b.id,b.labelId,b.companyId,b.labelName,b.remark,b.createUserId,b.createTime,b.updateUserId,b.updateTime,
b.id,b.labelId,b.labelName,b.companyId,b.companyName,b.remark,b.createUserId,b.createTime,b.updateUserId,b.updateTime,
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="CompanyEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_company
(companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime)
(companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime,background)
VALUES
(#{companyName},#{companyCode},#{registrationNumber},#{legalRepresentative},#{registeredCapital},#{companyType},#{businessScope},#{businessAdress},#{location},#{areaCode},#{areaName},#{contactPhone},#{email},#{website},#{taxRegistrationNumber},#{socialCreditCode},#{trademarkInfo},#{websiteRegistrationInfo},#{totalEmployees},#{softNum},#{patentNum},#{hisDevelop},#{lon},#{lati},#{logoPath},#{companyVideoPath},#{companyPicPath},#{companyIntroduction},#{companyCulture},#{sort},#{establishDate},#{remark},#{createUserId},#{createTime},#{updateUserId},#{updateTime})
(#{companyName},#{companyCode},#{registrationNumber},#{legalRepresentative},#{registeredCapital},#{companyType},#{businessScope},#{businessAdress},#{location},#{areaCode},#{areaName},#{contactPhone},#{email},#{website},#{taxRegistrationNumber},#{socialCreditCode},#{trademarkInfo},#{websiteRegistrationInfo},#{totalEmployees},#{softNum},#{patentNum},#{hisDevelop},#{lon},#{lati},#{logoPath},#{companyVideoPath},#{companyPicPath},#{companyIntroduction},#{companyCulture},#{sort},#{establishDate},#{remark},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{background})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_company
(companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime)
(companyName,companyCode,registrationNumber,legalRepresentative,registeredCapital,companyType,businessScope,businessAdress,location,areaCode,areaName,contactPhone,email,website,taxRegistrationNumber,socialCreditCode,trademarkInfo,websiteRegistrationInfo,totalEmployees,softNum,patentNum,hisDevelop,lon,lati,logoPath,companyVideoPath,companyPicPath,companyIntroduction,companyCulture,sort,establishDate,remark,createUserId,createTime,updateUserId,updateTime,background)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.companyName},#{item.companyCode},#{item.registrationNumber},#{item.legalRepresentative},#{item.registeredCapital},#{item.companyType},#{item.businessScope},#{item.businessAdress},#{item.location},#{item.areaCode},#{item.areaName},#{item.contactPhone},#{item.email},#{item.website},#{item.taxRegistrationNumber},#{item.socialCreditCode},#{item.trademarkInfo},#{item.websiteRegistrationInfo},#{item.totalEmployees},#{item.softNum},#{item.patentNum},#{item.hisDevelop},#{item.lon},#{item.lati},#{item.logoPath},#{item.companyVideoPath},#{item.companyPicPath},#{item.companyIntroduction},#{item.companyCulture},#{item.sort},#{item.establishDate},#{item.remark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime})
(#{item.companyName},#{item.companyCode},#{item.registrationNumber},#{item.legalRepresentative},#{item.registeredCapital},#{item.companyType},#{item.businessScope},#{item.businessAdress},#{item.location},#{item.areaCode},#{item.areaName},#{item.contactPhone},#{item.email},#{item.website},#{item.taxRegistrationNumber},#{item.socialCreditCode},#{item.trademarkInfo},#{item.websiteRegistrationInfo},#{item.totalEmployees},#{item.softNum},#{item.patentNum},#{item.hisDevelop},#{item.lon},#{item.lati},#{item.logoPath},#{item.companyVideoPath},#{item.companyPicPath},#{item.companyIntroduction},#{item.companyCulture},#{item.sort},#{item.establishDate},#{item.remark},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.background})
</foreach>
</insert>
......@@ -329,6 +320,9 @@
<if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))">
a.updateTime=#{data.updateTime},
</if>
<if test="(colPickMode==0 and data.containsKey('background')) or (colPickMode==1 and !data.containsKey('background'))">
a.background=#{data.background},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
......@@ -623,6 +617,13 @@
</if>
</foreach>
</trim>
<trim prefix="background=(case" suffix="ELSE background end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('background')) or (colPickMode==1 and !item.containsKey('background'))">
when a.id=#{item.id} then #{item.background}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
......@@ -684,13 +685,6 @@
<include refid="_orderCols_"/>
</select>
<!-- 获取子列表 -->
<select id="getCompanyLabelsByCompanyId" parameterType="java.lang.Long" resultMap="CompanyLabelsEntity-Map">
select <include refid="_columns_sub"/>
from mortals_xhx_company_labels as b
<trim suffixOverrides="where" suffix="">
where b.companyId = #{id}
</trim>
</select>
......@@ -742,6 +736,10 @@
<!-- 条件映射-代参数 -->
<sql id="_condition_param_">
<bind name="conditionParamRef" value="${_conditionParam_}"/>
<if test="permissionSql != null and permissionSql != ''">
${permissionSql}
</if>
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null">
${_conditionType_} a.id=#{${_conditionParam_}.id}
......@@ -1548,18 +1546,137 @@
<if test="conditionParamRef.containsKey('updateTimeEnd') and conditionParamRef.updateTimeEnd != null and conditionParamRef.updateTimeEnd!=''">
${_conditionType_} a.updateTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('background')">
<if test="conditionParamRef.background != null and conditionParamRef.background != ''">
${_conditionType_} a.background like #{${_conditionParam_}.background}
</if>
<if test="conditionParamRef.background == null">
${_conditionType_} a.background is null
</if>
</if>
<if test="conditionParamRef.containsKey('backgroundList') and conditionParamRef.backgroundList.size() > 0">
${_conditionType_} a.background in
<foreach collection="conditionParamRef.backgroundList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('backgroundNotList') and conditionParamRef.backgroundNotList.size() > 0">
${_conditionType_} a.background not in
<foreach collection="conditionParamRef.backgroundNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
field(a.id,
<foreach collection="conditionParamRef.idList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('totalEmployeesList') and conditionParamRef.totalEmployeesList.size() > 0">
field(a.totalEmployees,
<foreach collection="conditionParamRef.totalEmployeesList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('softNumList') and conditionParamRef.softNumList.size() > 0">
field(a.softNum,
<foreach collection="conditionParamRef.softNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('patentNumList') and conditionParamRef.patentNumList.size() > 0">
field(a.patentNum,
<foreach collection="conditionParamRef.patentNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('sortList') and conditionParamRef.sortList.size() > 0">
field(a.sort,
<foreach collection="conditionParamRef.sortList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
field(a.createUserId,
<foreach collection="conditionParamRef.createUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
field(a.updateUserId,
<foreach collection="conditionParamRef.updateUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
a.${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
field(a.id,
<foreach collection="conditionParamRef.idList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('totalEmployeesList') and conditionParamRef.totalEmployeesList.size() > 0">
field(a.totalEmployees,
<foreach collection="conditionParamRef.totalEmployeesList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('softNumList') and conditionParamRef.softNumList.size() > 0">
field(a.softNum,
<foreach collection="conditionParamRef.softNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('patentNumList') and conditionParamRef.patentNumList.size() > 0">
field(a.patentNum,
<foreach collection="conditionParamRef.patentNumList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('sortList') and conditionParamRef.sortList.size() > 0">
field(a.sort,
<foreach collection="conditionParamRef.sortList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
field(a.createUserId,
<foreach collection="conditionParamRef.createUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<if test="conditionParamRef.containsKey('updateUserIdList') and conditionParamRef.updateUserIdList.size() > 0">
field(a.updateUserId,
<foreach collection="conditionParamRef.updateUserIdList" open="" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
,
</if>
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
......@@ -1746,8 +1863,15 @@
<if test='orderCol.updateTime != null and "DESC".equalsIgnoreCase(orderCol.updateTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('background')">
a.background
<if test='orderCol.background != null and "DESC".equalsIgnoreCase(orderCol.background)'>DESC</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
......
......@@ -14,10 +14,11 @@ client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###公司列表
POST {{baseUrl}}/company/list
POST {{baseUrl}}/company/interlist
Content-Type: application/json
{
"id": 5,
"page":1,
"size":10
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment